我是C ++的新手,试图绕过基本面。这个小的改动给我的程序行为带来了微妙的改变,阻止了它的完整运行。问题是每当我到达学校的提示时,我都无法输入任何文字。
软件信息:
操作系统: Ubuntu 14.04 LTS
G ++版本: 4.8.4
这是运行正常的代码:
#include <iostream>
using namespace std;
int main (int argc, char* argv[])
{
string fName, DOB, school;
int age;
cout << endl;
cout << "What is your name: ";
getline (cin, fName);
cout << "What school do you attend: ";
getline (cin, school);
cout << "How old are you: ";
cin >> age;
cout << school << endl;
return 0;
}
这是暂停的代码:
#include <iostream>
using namespace std;
int main (int argc, char* argv[])
{
string fName, DOB, school;
int age;
cout << endl;
cout << "What is your name: ";
getline (cin, fName);
cout << "How old are you: ";
cin >> age;
cout << "What school do you attend: "; // this is the only change.
getline (cin, school);
cout << school << endl;
return 0;
}
唯一的变化是:
cout << "What school do you attend: ";
getline (cin, school);
第13行&amp; 14至15行&amp; 16。
谁能告诉我为什么会这样?
答案 0 :(得分:1)
就像其他人所说的那样,输入缓冲区中可能还有一个字符,当你按Enter键时很可能是\n
字符。
您可以添加:
while((c = getchar()) != '\n' && c != EOF);
在你的cin
之后获取缓冲区中的所有剩余字符,但这主要是针对C的。
在C ++中你可以改为:
std::cin.ignore(256,'\n');
哪个会获取并丢弃它在缓冲区中找到的下一个256
字符,或者直到它找到char
等于作为第二个参数传递的字符,在这种情况下为\n
或换行符。请注意,对于第二个参数,当它被发现时,它也被丢弃。
答案 1 :(得分:0)
&#39;输入&#39;在第二个程序中,年龄被用作学校变量的字符。最简单的解决方案是在阅读&#39; age&#39;之后阅读一个虚拟角色(一个无用的变量)。在第二个程序中。