为什么这个小小的改变会停止我的C ++程序?

时间:2015-06-25 02:26:13

标签: c++ ubuntu ubuntu-14.04

我是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。

谁能告诉我为什么会这样?

2 个答案:

答案 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;之后阅读一个虚拟角色(一个无用的变量)。在第二个程序中。