C++ 在输入字母之前,我们如何进行数字输入? cout>number; 而(!(cin.fail()){ 数字。推回(数字); cin>>数量; } 对于(int i=0;iinsertKey(number.at(i)); } 整数搜索; cout>搜索;

C++ 在输入字母之前,我们如何进行数字输入? cout>number; 而(!(cin.fail()){ 数字。推回(数字); cin>>数量; } 对于(int i=0;iinsertKey(number.at(i)); } 整数搜索; cout>搜索;,c++,input,C++,Input,我想从用户输入中提取数字,直到用户输入一个字母 此后,我想获取另一个用户输入。我的输出很好。所以当我输入一个字母时,它就停止了。但它不要求第二次输入。如何修复此问题?当cin失败时,您需要修复这些问题 另外,您需要清除stdin缓冲区,该缓冲区将包含上一个cin中未解析的任何字符 cout << "Enter the numbers to be stored (end with a letter): "; cin >> number; while(!

我想从用户输入中提取数字,直到用户输入一个字母


此后,我想获取另一个用户输入。我的输出很好。所以当我输入一个字母时,它就停止了。但它不要求第二次输入。如何修复此问题?

cin
失败时,您需要修复这些问题

另外,您需要清除
stdin
缓冲区,该缓冲区将包含上一个
cin
中未解析的任何字符

cout << "Enter the numbers to be stored (end with a letter): "; 
cin >> number;
while(!(cin.fail())){
    numbers.push_back(number);
    cin >> number;
}
for(int i = 0; i < numbers.size(); i++){
    node->insertKey(numbers.at(i));
}
int search;
cout << "Which number do you want to look up? ";
cin >> search;
/。。。
std::cin.clear()//旗帜清晰
cin.ignore(std::numeric_limits::max(),'\n')//清除缓冲区
//...
整数搜索;
cout>搜索;
//...

cin
失败时,您需要重新启动

另外,您需要清除
stdin
缓冲区,该缓冲区将包含上一个
cin
中未解析的任何字符

cout << "Enter the numbers to be stored (end with a letter): "; 
cin >> number;
while(!(cin.fail())){
    numbers.push_back(number);
    cin >> number;
}
for(int i = 0; i < numbers.size(); i++){
    node->insertKey(numbers.at(i));
}
int search;
cout << "Which number do you want to look up? ";
cin >> search;
/。。。
std::cin.clear()//旗帜清晰
cin.ignore(std::numeric_limits::max(),'\n')//清除缓冲区
//...
整数搜索;
cout>搜索;
//...

最好先这样做:

//...
std::cin.clear(); //clear flags
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); //clear buffer
//...
int search;
cout << "Which number do you want to look up? ";
cin >> search;
//...
如果在任何有效数字之前键入字符,则上面会留下一个空的
向量
,而原始代码会将一个无意义的数字推送到
向量

然后,如果他们键入了一个字母,则
cin
流将处于错误状态,并且仍然有该字符输入,您将希望消除该字符输入:

while (cin >> number)
    numbers.push_back(number);
//清除流错误
cin.clear();
//实际上,去掉上面有字符的线条。。。
cin.ignore(std::numeric_limits::max(),'\n');

然后,您可以继续执行for循环并流式搜索

最好先这样做:

//...
std::cin.clear(); //clear flags
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); //clear buffer
//...
int search;
cout << "Which number do you want to look up? ";
cin >> search;
//...
如果在任何有效数字之前键入字符,则上面会留下一个空的
向量
,而原始代码会将一个无意义的数字推送到
向量

然后,如果他们键入了一个字母,则
cin
流将处于错误状态,并且仍然有该字符输入,您将希望消除该字符输入:

while (cin >> number)
    numbers.push_back(number);
//清除流错误
cin.clear();
//实际上,去掉上面有字符的线条。。。
cin.ignore(std::numeric_limits::max(),'\n');
然后,您可以继续执行for循环,并流到
搜索

我认为这会有所帮助

// clear stream errors
cin.clear();
// actually get rid of the line with the character on it...
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
cout>number;
而(cin>>编号){
如果(((字符)编号>='a'&&(字符)编号='a'&&(字符)编号>编号;
}
对于(int i=0;iinsertKey(number.at(i));
}
整数搜索;
cout>搜索;
我认为这会有所帮助

// clear stream errors
cin.clear();
// actually get rid of the line with the character on it...
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
cout>number;
而(cin>>编号){
如果(((字符)编号>='a'&&(字符)编号='a'&&(字符)编号>编号;
}
对于(int i=0;iinsertKey(number.at(i));
}
整数搜索;
cout>搜索;

解决此问题的最简单方法是重写所有内容,以使用
std::getline
读取每一行输入,然后进行相应的分析。解决此问题的最简单方法是重写所有内容,以使用
std::getline
读取每一行输入,然后进行相应的分析。清除/忽略需要在尝试删除之前进行eam至
search
@TonyDelroy,是的,我的坏,复制/粘贴不正确。感谢提醒。在尝试流至
search
@TonyDelroy,是的,我的坏,复制/粘贴不正确之前,需要清除/忽略。谢谢提醒。