Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 当输入是整数变量中的字符串时,为什么输出为4196208? #包括 使用名称空间std; int main() { int x,y; cin>>x>>y; intz=x+y; cout_C++_String - Fatal编程技术网

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
}