C++ 当输入是整数变量中的字符串时,为什么输出为4196208? #包括 使用名称空间std; int main() { int x,y; cin>>x>>y; intz=x+y; cout
它之所以给你这些值,是因为你把C++ 当输入是整数变量中的字符串时,为什么输出为4196208? #包括 使用名称空间std; int main() { int x,y; cin>>x>>y; intz=x+y; cout,c++,string,C++,String,它之所以给你这些值,是因为你把x和y定义为一个整数,但当它要求输入时,你给了它们字符。 这不是一个有效的操作。 它只会以一些随机数的形式给出一个错误。由于x和y没有初始化,并且std::cin>>x>>y;由于需要int并得到char而失败,行为是未定义的。这在很大程度上取决于编译器。其他编译器上的代码可能会将0作为输出由于编译器已为您初始化了x和y,因此放置。在其他编译器上,除了4196208 试试这个代码 #include <iostream> using namespace s
x
和y
定义为一个整数,但当它要求输入时,你给了它们字符。
这不是一个有效的操作。
它只会以一些随机数的形式给出一个错误。由于
x
和y
没有初始化,并且std::cin>>x>>y;
由于需要int并得到char而失败,行为是未定义的。这在很大程度上取决于编译器。其他编译器上的代码可能会将0
作为输出由于编译器已为您初始化了x
和y
,因此放置。在其他编译器上,除了4196208
试试这个代码
#include <iostream>
using namespace std;
int main()
{
int x, y;
cin >> x >> y;
int z = x + y;
cout << x << " " << y << " " << z;
}
x
和y
未初始化,因为cin>>x>>y
失败。因此,会打印垃圾值。您的编译器早于C++11(或以C++11之前的模式运行)。在C++11之前,如果输入字母时需要整数值,则变量保持不变-在您的情况下,两个变量都未初始化,因此打印其中一个(或两个)会产生未定义的行为。由于C++11,读取失败将导致值设置为零。检查输入是否失败,if(!(cin>>x>>y)抛出std::runtime_error(“oopsies”)
@peter•我想这就是为什么x
被设置为0的原因。但是由于流在读取y
时处于失败状态,我怀疑y
没有被初始化为0。(我用一个快速玩具程序进行了尝试,这似乎是C++17的行为。)我有意为整数变量提供字符串输入。我想知道打印4196208的原因。这只是一种未定义的行为。当您将变量定义为整数时,您不能提供字符串作为输入。谢谢您的回答!
#include <iostream>
using namespace std;
int main()
{
int x=2,y=2;
cin>>x>>y;
int z=x+y;
cout<<x<<" "<<y<<" "<<z;
return 0;
}
if(!(std::cin>>x>>y)) {
//do something
}