为什么在我的程序中,我要求用户输入,而我确实这样做了,这有什么原因:
int number;
string str;
int accountNumber;
cout << "Enter number:";
cin >> number;
cout << "Enter name:";
getline(cin, str);
cout << "Enter account number:";
cin >> accountNumber;
为什么在输入第一个数字之后,在我为getline(cin,str)行输入"str“之前,它会输出"Enter Name",紧接着是"Enter Account number”?谢谢!
发布于 2009-11-17 04:50:10
getline(cin, str);
读取前面读取的数字后面的换行符,并立即返回此“行”。为了避免这种情况,您可以在读取名称之前跳过std::ws
中的空格:
cout << "Enter number:";
cin >> number;
cout << "Enter name:";
ws(cin);
getline(cin, str);
...
请注意,这也会跳过换行符后面的前导空格,因此即使用户输入了空格,str
也不会以空格开头。但在这种情况下,这可能是一个功能,而不是一个错误...
发布于 2009-11-17 04:46:41
试一试
cout << "Enter name:";
cin.ignore();
getline(cin, str);
发布于 2009-11-17 05:01:41
看起来你想要基于行的阅读。为此,您可能希望始终如一地使用getline
,如果需要解析行中的数字,则先解析每一行,然后再读取行。它使输入读数更加一致。
这样,您就不必手动扫描每一行的末尾,以确保下一次读取操作从新行开始。
它还使得为重复输入请求添加错误处理变得更简单。
例如:
#include <string>
#include <iostream>
#include <istream>
#include <ostream>
#include <sstream>
int parse_integer(const std::string& input)
{
std::istringstream iss(input);
int result;
if (!(iss >> result))
{
// error - throw something?
}
return result;
}
int main()
{
int number;
std::string str;
int accountNumber;
std::string inputline;
std::cout << "Enter number: ";
if (!std::getline(std::cin, inputline))
{
// error - throw something?
}
number = parse_integer(inputline);
std::cout << "Enter name:";
if (!std::getline(std::cin, inputline))
{
// error - throw something?
}
str = inputline;
std::cout << "Enter account number:";
if (!std::getline(std::cin, inputline))
{
// error - throw something?
}
accountNumber = parse_integer(inputline);
return 0;
}
https://stackoverflow.com/questions/1744665
复制相似问题