C++ cin.get()的运行时错误
但是如果我在不同的文件中运行C++ cin.get()的运行时错误,c++,C++,但是如果我在不同的文件中运行cstyle\u string(),那么我不会得到任何错误,因为代码工作得很好 我想知道为什么会发生这种情况?有两个问题 冗余\n cin的状态 cpp\u字符串中的最后一个cin是cin>>age 它将保留未提取的\n 在cstyle\u字符串的第一个中,字符串是cin.get(fNm,20.get() 如果找到定界字符,则不会从输入序列中提取该字符,而是作为要从流中提取的下一个字符保留在该序列中 cin.get(FNm,20)将解析\n之前的空输入,并且实际上流中
cstyle\u string()
,那么我不会得到任何错误,因为代码工作得很好
我想知道为什么会发生这种情况?有两个问题
\n
cin的状态
cpp\u字符串中的最后一个cin
是cin>>age
它将保留未提取的\n
在cstyle\u字符串的第一个中,字符串是cin.get(fNm,20.get()代码>
如果找到定界字符,则不会从输入序列中提取该字符,而是作为要从流中提取的下一个字符保留在该序列中
cin.get(FNm,20)
将解析\n
之前的空输入,并且实际上流中没有可用字符。在这种情况下,将设置failbit标志,接下来所有cin>
操作员将失败
您只能调用cstyle\u string
并直接按enter键,同样的情况也会发生。您正在调用cpp\u string()
和cstyle\u string()
。一次只能打一个电话。因为它们使用输入。它们都在不同的时间运行……我的意思是第一个cpp_string()将运行,然后在它返回后,cstyle_string()将运行。当我没有在cpp_string()中使用cin.get()时,它工作得很好。在此之前,我使用cin>>fname进行输入,效果很好,但它只需要一个单词,所以我使用get()来获取一行字符。现在代码不起作用了。谢谢,新行必须被忽略。因此使用了这一行cin.ignore(numeric_limits::max(),'\n');在首次使用cstyle_string()之前,现在它工作正常。
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
void cpp_string();
void cstyle_string();
int main()
{
cpp_string();
cstyle_string();
system("pause");
return 0;
}
void cpp_string()
{
string fName, lName;
char grade;
int age;
cout << "What is your first name?";
getline(cin, fName);
cout << "What is your last name?";
getline(cin, lName);
cout << "What letter grade do you deserve?";
cin >> grade;
cout << "What is your age?";
cin >> age;
cout << "Name: " << fName << ", " << lName << endl;
cout << "Grade: " << grade << endl;
cout << "Age: " << age << endl;
return;
}
void cstyle_string()
{
char fNm[20], lNm[20];
char grade;
int age;
cout << "What is your first name?";
cin.get(fNm, 20).get();
cin.clear();
cout << "What is your last name?";
cin.get(lNm, 20).get();
cout << "What letter grade do you deserve?";
cin >> grade;
cout << "What is your age?";
cin >> age;
cout << "Name: " << fNm << ", " << lNm << endl;
cout << "Grade: " << grade << endl;
cout << "Age: " << age << endl;
return;
}