std :: cin从控制台获取两种不同的变量类型,并将第二种类型“存储”以备后用?

问题描述 投票:0回答:2

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


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;
}

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

c++ cin
2个回答
0
投票

不会跳过cin >> number2cin >> operation读取一个字符(+)。使用cin进行的下一个操作是cin >> number2,它将从中断处继续执行。也就是20仍然可以读取。

您真的不想问用户3个问题,无论如何都输入类似50+20的内容。您只需写入cin >> number1 >> operation >> number2;,然后打开操作,您就已经拥有两个可用的数字。使用>>

的连接数量没有限制(afaik)

0
投票

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

实际上,如果您是从bash shell运行该程序,则可以告诉该程序从文件中读取stdin

./a.out < input_file.txt

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

由于std::cin等待用户输入时,它将一直读取您的输入,直到您按Enter键为止,您可以输入比直接std::cin >>语句要查找的字符更多的字符。这就是这里发生的事情。

© www.soinside.com 2019 - 2024. All rights reserved.