std::cin 从控制台获取两种不同的变量类型,'storing'以后使用第二种类型?



我正在编写一个计算器程序。它首先要求一个数字(存储为双精度),然后请求一个运算符符号(例如"/"或"+")存储为字符),然后请求第二个数字(存储为双精度)以将操作应用于第一个数字。


double number1 = 0;
cout << "What operation would you like to perform?" << endl;
char operation = a;
cin >> operation;

然后我使用开关。如果它读到"+",它将继续

double adding(double& number1)
{
cout << "What number would you like to add to " << number1 << "?" << endl;
double number2 = 0;
cin >> number2;
number1 = number1 + number2;
return number1;
}

如果您输入 +20 进行字符操作,它仍然有效。它不会导致错误,并且将成功将 20 添加到您的初始数字中,即使 + 是字符,20 是 int。它将跳过代码的cin >> number2;部分,并从cin >> operation中获取您已经键入的 20 个。为什么会这样?

它不会跳过cin >> number2cin >> operation读取一个字符(+)。下一个使用cin进行的操作是cin >> number2,它将从中断的地方继续,即20仍然有待读取。

无论如何,您真的不想问用户 3 个问题来输入类似50+20的东西。您可以简单地写cin >> number1 >> operation >> number2;然后打开操作,并且您已经拥有了两个数字。使用>>的串联量没有限制 (afaik)

std::cin是一个表示stdin或标准输入流的流对象。>>运算符(我称之为"提取运算符")从流中提取字符并写入变量。使用std::cin,它将尝试从流中已有的内容中提取所需的内容,但如果用完这些内容,它将等待来自控制台的用户输入。

事实上,如果你从 bash shell 运行这个程序,你可以告诉程序从文件中读取stdin

./a.out < input_file.txt

正如您所说,您的所有std::cin >> ...语句都将被"跳过"。实际发生的是它从流中读取下一个值(在本例中是 input_file.txt 的内容),而无需等待用户输入。

由于当std::cin等待用户输入时,它会继续读取您的输入,直到您按 Enter 为止,因此您可以输入比即时std::cin >>语句查找的字符更多的字符。这就是这里正在发生的事情。

相关内容

最新更新