读取字符后无法输入整数


#include <iostream>
using namespace std;
int Variable() {
char Letter= ' ';
cout << "Your Name: ";
cin >> Letter;
cout << "Your first Letter is : " << Letter;
return 0;
}
int userInput(int number)
{
int input = 0;
cout << "Give me your " << number << ". number: ";
cin >> input;
cout << "n";
return input;
}

int main() {
Variable();
int input1 = 0;
int input2 = 0;

input1 = userInput(1);
input2 = userInput(2);
cout << "Result: " << (input1 * input2) << "nn";

return 0;
}

输出:

Your Name: Kevin
Your first Letter is : K
Give me your 1:
Give me your 2:
Result: 0

我在控制台中写了一个名字,之后我得到了第一个字母,但之后我不能输入两个数字,因为程序结束了。我不明白为什么程序会跳过userInput函数。

基本上问题是您提示用户提供名称,而您只读取一个字符K

结果是,当您尝试读取数字时,仍有一些字母等待读取evin。因此,尝试读取整数会导致错误,并且input的值保持不变。

一旦std::cin进入错误状态,所有其他读取将失败,直到清除错误标志并丢弃读取导致错误的字符。

猜测,您假设cin >>逐行读取输入,丢弃未赋值给右操作数的任何数据。

然而,尽管在交互式运行程序时必须以整行为单位提供输入,但通常情况下,不会以这种方式使用。粗略地说,对于右操作数类型的值,每个>>操作将消耗cin中的尽可能多的数据,将剩余的数据留给后面的操作使用。.

因此,有了…

char Letter= ' ';
cout << "Your Name: ";
cin >> Letter;

…因为Letterchar,所以只从Letter的输入读入一个字符。在您的示例中,该字符是'K',而evinn则等待读取。

当你试图用…读入int

int input = 0;
cout << "Give me your " << number << ". number: ";
cin >> input;

>>操作失败(不消耗任何输入),因为下一个等待读取的数据不能被解释为int

char Letter= ' ';
cin >> Letter;
int input = 0;
cin >> input;

你需要研究一下cin是如何工作的。Letter是char类型,input是int类型。从cin请求一个char,然后请求一个int。您需要了解/学习cin/cout与>>不同类型变量(int和char)的操作符。

相关内容

  • 没有找到相关文章

最新更新