gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:41:43 26 4
gpt4 key购买 nike

我是 C++ 的新手,正在努力了解基础知识。这个小改动使我的程序行为发生了微妙的变化,阻止了它的完整运行。问题是每次到提示进入学校的时候,我都无法输入任何文字。

软件信息:

OS: Ubuntu 14.04 LTS

G++ version: 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 和 14 行到第 15 和 16 行。

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

最佳答案

就像其他人所说的那样,输入缓冲区中可能还有一个字符,很可能是 \n 当您按下 Enter 时的字符。

你可以添加:

while((c = getchar()) != '\n' && c != EOF);

cin 之后获取缓冲区中的所有剩余字符,但这主要用于 C。

在 C++ 中,您可以改为:

std::cin.ignore(256,'\n'); 

它将获取并丢弃它在缓冲区中找到的下一个 256 字符,或者直到它找到一个等于作为第二个参数传递的字符的 char,在这种情况下\n 或换行符。请注意,对于第二个参数,当它被发现时也会被丢弃。

关于c++ - 为什么这个小改动会停止我的 C++ 程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31040202/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com