注册 登录
编程论坛 C++教室

如何读取多个单词

hffjhhh 发布于 2020-08-15 00:40, 2135 次点击
这段代码对于name结构成员只能读取一个单词,无法读取多个单词,例如只能读取hello,无法读取hello world。如何让它读取多个单词?如何修改?
程序代码:
#include<iostream>
#include<cstring>
struct candbar{
    char name[20];
    float heavy;
    int kaluli;
};
int main(){
    using namespace std;
    candbar snak;
    cin>>snak.name;
    cin>>snak.heavy;
    cin>>snak.kaluli;
    cout<<snak.name<<endl<<snak.heavy<<endl<<snak.kaluli;
    return 0;
}
5 回复
#2
rjsp2020-08-15 09:50
自己的逻辑要搞清,
假如输入 1 2 3 4 5,
那么 1 是名字,2 是重量,3 是卡路里,4 5 是多余数据?
还是 1 2 是名字,3 是重量,4 是卡路里,5 是多余数据?
还是 1 2 3 是名字,4 是重量,5 是卡路里?
还是 1 2 3 4 是名字,5 是重量?
……
#3
hffjhhh2020-08-15 17:06
回复 2楼 rjsp
第一次输入为名字,第二次输入为重量,第三次输入为卡路里。
#4
hffjhhh2020-08-15 17:16
回复 rjsp
修改如下:
程序代码:
#include<iostream>
#include<cstring>
struct candbar{
    char name[20];
    float heavy;
    int kaluli;
};
int main(){
    using namespace std;
    candbar snak;
    cout<<"输入名字:";
    cin.getline(snak.name,20);
    cout<<"输入重量(浮点数):";
    cin>>snak.heavy;
    cout<<"输入卡路里(整形):" ;
    cin>>snak.kaluli;
    cout<<"名字为:"<<snak.name<<endl<<"重量为:"<<snak.heavy<<endl<<"卡路里:"<<snak.kaluli;
    return 0;
}
#5
雪影辰风2020-08-16 09:00
回复 4楼 hffjhhh
cin是默认以空格作为数据之间的间隔符号,所以输入hello world是会读取hello
改成cin.getline以后,就变成读取一行,也就是一直读到你按回车为止
#6
happylatch2020-08-16 16:59
回复 楼主 hffjhhh

利用cin.get即可实现;代码如下:
candbar snak;
    cin.get(snak.name, 20);
    cin >> snak.heavy;
    cin >> snak.kaluli;
    cout << snak.name << endl << snak.heavy << endl << snak.kaluli;

总结:cin 对象有一个名为 get 的内置函数很有帮助。因为 get 函数是内置在 cin 对象中的,所以可称之为 cin 的一个成员函数。get 成员函数读取单个字符,包括任何白色空格字符。
希望对你有帮助。
1