#include <iostream>
#include <string>
using namespace std;
int main()
{
int num;
cin >> num;
string s;
getline(cin, s);
cout << s << " " << num << endl;
return 0;
}
在此代码中,如果我输入3并按Enter键,则s采用空字符串。
1)如果将第一个字符作为换行符,那么在将整数作为输入后是否有可能将行作为输入?
2)如果我的输入是4567artyu那么它是如何判断7是否必须进入s或num?
答案 0 :(得分:3)
我建议您始终阅读用户的完整输入行。它会造成最小的混乱。
std::getline
读取一行输入。std::stoi
或(更一般)boost::lexical_cast
将输入安全地转换为您想要的目标类型。这是您收集不良投入并向用户抱怨的地方。我不认为许多用户,如果提示输入数字,则会认为输入42bananas
将被接受为42,bananas
部分将被“记住”以供日后使用。这很可能是一个错字,用户会很高兴被要求纠正它。
答案 1 :(得分:0)
在以整数作为输入后将行作为输入时,您可以考虑删除杂散&#39; \ n&#39;流中的角色。
#include <iostream>
#include <string>
using namespace std;
int main()
{
int num;
cin >> num;
getchar();
string s;
getline(cin, s);
cout << s << " " << num << endl;
return 0;
}
这样就可以了。
对于第二个问题,它将4567
读为整数,它将继续将其读取为整数,直到达到int的限制,如果达到限制,则在此之后不会考虑任何内容。然后它将int的最大值放在变量num
和null
中的字符串s
中。如果未达到限制,则字符串将保持原样在输入流中,并将由变量s
获取。
答案 2 :(得分:-2)
在接受字符串
之前尝试使用cin.clear