std::cin 从控制台获取两种不同的变量类型,'storing'以后使用第二种类型?
std::cin is taking two different variable types from console and 'storing' the second type for later?
我正在编写一个计算器程序。它首先要求一个数字(存储为双精度),然后请求一个运算符符号(例如"/"或"+")存储为字符),然后请求第二个数字(存储为双精度)以将操作应用于第一个数字。
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 >> number2
。cin >> 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 >>
语句查找的字符更多的字符。这就是这里正在发生的事情。
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 在C++中,如何通过几种类型从元组中选择多个元素
- avrogencpp能为模式中的每种类型生成单独的头文件吗
- 有没有办法提示用户使用哪种数据类型作为模板 c++
- 在运行时检查继承是否只有一种类型和 void*
- 如何使映射键具有两种不同的数据类型?
- 如何构造可以调用和返回两种不同类型的模板
- 多维数组存储三种不同的数据类型?
- 文本冒险游戏 - 如何区分一种项目类型与另一种项目类型以及如何构建项目类/子类
- std::cin 从控制台获取两种不同的变量类型,'storing'以后使用第二种类型?
- 当 c++ 需要一种数据类型并获取另一种数据类型时会发生什么?
- C++ 一个函数,可以根据接受的值返回两种类型之一
- C++指针中的这两种类型的值分配有什么区别?
- 在硬件SIMD矢量指针和相应类型之间进行"interpret_cast"是一种未定义的行为吗
- 将 lower_bound/upper_bound 与 2 种不同的类型一起使用
- 有没有办法让C++函数采用具有相同成员的两种不同类型?
- C++两种类型相互依赖
- 另一种类型的智能ptr,比如具有弱refs的unique_ptr
- 输出一个数字,该数字可能是三种类型之一
- 我应该对通用二叉搜索树中的根使用哪种类型的指针