#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;
…因为Letter
是char
,所以只从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)的操作符。