关于cin.get()与cin,以及换行符有关问题
关于cin.get()与cin,以及换行符问题
程序
#include <iostream>
using namespace std;
struct user
{
char name[20];
char volume[20];
double price;
};
int main()
{
user* ps = new user;
cout<<"Input Your Name:";
cin.get(ps->name,20);
cout<<"Enter volume in cubic feet:";
//cin.get(); 如果加上这一句, 程序就没有问题
cin.get((*ps).volume,20);
cout<<"Enter price:";
cin>>(*ps).price;
cout<<"Hello,"<<ps->name<<",Your Volume is "<<ps->volume<<" with "<<ps->price<<" Dollars."<<endl;
}
按理说第一次使用完cin.get()后换行符没有被抛弃,那么换行符被第二次的cin.get()给接受了,第三次的 cin>>(*ps).price;应该可以正常使用才对。
但实际上只有第一次 cin.get(ps->name,20);起到了作用,
剩下的cin.get((*ps).volume,20);和cin>>(*ps).price;
都被跳过了,怎么回事?
------解决方案--------------------
很久没复习过基础知识,有点忘记了。
cin.get(*ps).volume,20) 在读取的时候,读到了上次遗留的换行,所以实际上读取了一个空行,导致cin失效。
需要cin.clear(),清除失效标志后,才能继续cin
所以你第三次无法完成输入。
cin.get()只读取一个字符,所以读到了换行符,不会失效。
当你把cin.get()放在第二次输入前,整个程序没问题。
cin.get()和cin.get(字符串名,长度)对于读取到一个换行,有不同结果。
程序
#include <iostream>
using namespace std;
struct user
{
char name[20];
char volume[20];
double price;
};
int main()
{
user* ps = new user;
cout<<"Input Your Name:";
cin.get(ps->name,20);
cout<<"Enter volume in cubic feet:";
//cin.get(); 如果加上这一句, 程序就没有问题
cin.get((*ps).volume,20);
cout<<"Enter price:";
cin>>(*ps).price;
cout<<"Hello,"<<ps->name<<",Your Volume is "<<ps->volume<<" with "<<ps->price<<" Dollars."<<endl;
}
按理说第一次使用完cin.get()后换行符没有被抛弃,那么换行符被第二次的cin.get()给接受了,第三次的 cin>>(*ps).price;应该可以正常使用才对。
但实际上只有第一次 cin.get(ps->name,20);起到了作用,
剩下的cin.get((*ps).volume,20);和cin>>(*ps).price;
都被跳过了,怎么回事?
------解决方案--------------------
很久没复习过基础知识,有点忘记了。
cin.get(*ps).volume,20) 在读取的时候,读到了上次遗留的换行,所以实际上读取了一个空行,导致cin失效。
需要cin.clear(),清除失效标志后,才能继续cin
所以你第三次无法完成输入。
cin.get()只读取一个字符,所以读到了换行符,不会失效。
当你把cin.get()放在第二次输入前,整个程序没问题。
cin.get()和cin.get(字符串名,长度)对于读取到一个换行,有不同结果。