为什么如果输入是字符,然后在c++中存储为整数,那么cin会得到奇怪的值?
Why does cin get strange values if input is a character and then stored in an integer in C++?
我正在学习c++并使用以下示例编写一些代码:http://doeaccmantra.blogspot.it/2013/09/doeacc-mantra-learning-point-blog-for.html
我有这样的代码:
// http://doeaccmantra.blogspot.it/2013/09/doeacc-mantra-learning-point-blog-for.html
/*
* Prompt user for two integers and print their sum (Add2Integers.cpp)
*/
#include <iostream>
using namespace std;
int main() {
int integer1; // Declare a variable named integer1 of the type integer
int integer2; // Declare a variable named integer2 of the type integer
int sum; // Declare a variable named sum of the type integer
cout << "Enter first integer> "; // Display a prompting message
cin >> integer1; // Read input from keyboard (cin) into integer1
cout << "Enter second integer> "; // Display a prompting message
cin >> integer2; // Read input into integer2
sum = integer1 + integer2; // Compute the sum
// Print the result
cout << "The sum of " << integer1 << " and " << integer2
<< " is " << sum << endl;
return 0;
}
你能解释一下为什么如果给我一个字符作为输入,我有这个结果吗?
Enter first integer> s
Enter second integer> The sum of 0 and 4283950 is 4283950
我学习像PHP和JS这样的语言,类型不匹配是一个致命的错误。
这不是c++的情况吗?所以"s"被解释为一个数字?
而且,在这种情况下,代码似乎忽略了第二个cin…
我想这个问题应该结束了,但我只想澄清这个(有趣的)问题
当您输入一个字母时,流提取失败并且流处于错误状态。这也意味着integer1
和integer2
都未初始化,这解释了为什么在使用它们时看到垃圾值。
有检查流状态的成员函数(good()
, eof()
, fail()
, bad()
)。我认为最简单也是最正确的方法是:
if (cin >> integer1) {
// success
} else {
// failure
}
s
未被读取并赋值给int。您看到的值是在您尝试读取流之前var的值。对流的两个调用都失败,因为流仍然是错误的,你需要在再次读取它之前清除它。
试试这个:
int integer1 = 0; // init your var
int integer2 = 0; // init your var
while (!(cin >> integer1))
{
cout << "Please enter a valid integer value";
cin.clear();
}
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- C++中的cin.ignore()函数不适用于整个流
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- 如果我std::dynamic_pointer_cast并且底层dynamic_cast的结果为null,那么返回的sh
- Problems with std::cin.fail()
- 如果"new int"返回"int*",那么为什么"new int[n]"不返回"int**"?
- 如果我已经有一个头,那么模板(-t)文件属于哪里
- 由cin中的字符串中未捕获空白引起的分割错误
- 在C++中使用Cin,我如何在1行中输入
- 将 cin 限制为只有一个
- cin >> int 给定一个字符串将 int 赋值为 0
- istream std::cin如何修改自定义istream缓冲区
- 如果 KEY 是 std::list 或 std::vector 而不是值,那么 std::map 的默认行为是什么?
- C++ 将 CIN 值存储到任何类型的数组中
- 为什么无论你输入什么,这"while(cin.get(str,3))"只运行一次?
- cin 的十进制输入验证?
- Turbo C++ cin() 不能与 gets() 一起使用
- 使用 cin 时接受小数点后的 2 位数字
- cout和cin不是函数,那么它们是什么呢
- 为什么如果输入是字符,然后在c++中存储为整数,那么cin会得到奇怪的值?