输入一个字母'int'

时间:2015-06-18 02:01:31

标签: c++ type-conversion

代码:

int a;
cin>>a;
cout<<a<<endl;

然后我使用g++ test.cpp并运行它。然后我在变量a输入一个字母'b'。输出为0.

但是,当我测试其他代码时:

cout<<int('b')<<endl;   // output: 98

为什么呢?有什么不同?

5 个答案:

答案 0 :(得分:4)

std::cin是一个对象,是std::istream的一个实例。 std::istream已将>>重载为支持a variety of types。其中一种类型是&int。如果std::istream左侧有>>,右侧有整数引用,则调用方法istream& operator>> (int& val)。该方法的概念实现如下。

  1. 将0存储在累加器中
  2. 读取输入字符
  3. 如果字符为0-9,则将其十进制值添加到累加器
  4. 如果不是,则返回累加器的值
  5. 返回第2步
  6. 当您提供“b”作为istream& operator>> (int& val)的输入时,它会立即在您的int变量中存储“累计”0。例如:

    #include <iostream>
    
    int main (const int argc, const char * const argv[]) {
        int b = 100;
    
        std::cout << b << std::endl;
        std::cin >> b;
        std::cout << b << std::endl;
    
        return 0;
    }
    

    执行:

    100
    b
    0
    

    对于强制类型转换,当您将值'b'强制转换为整数时,内存中的字节值为98,然后将其作为整数打印。当您使用>>时,内存中的结果值为0,然后您将其作为整数打印。

答案 1 :(得分:2)

您尝试执行的输入操作失败。由于aint cin,因此需要int。因为它得到char它失败了。您可以通过将代码更改为:

来测试
int a;
cin>>a;
if(!cin)
    cout << "input failed";
else
    cout<<a<<endl;

输入:

a

输出:

input failed

请参阅此live example

答案 2 :(得分:0)

当您使用&#39; b&#39;要查看整数值,您的程序会认为您输入的数字无效,因此它不会按int(&#39; b&#39;)分配值。仍然使用

的初始值

答案 3 :(得分:0)

不确定你是否发现了这个:

char a;

cin >> a;
cout << a << endl;

尝试将int更改为char, 当您输入3时,它会输出3; 当您输入b时,它会输出b;

如果你想输出ascii,你可以像cout那样制作cout:

cout << (int) a << endl;

然后当您输入98

时,您将获得b

答案 4 :(得分:0)

如果提取失败(例如,如果输入的字母是数字, 预期),值将保持不变,并设置故障位。 (直到C ++ 11)

如果提取失败,则将零写入值并设置故障位。如果 提取导致该值太大或太小而无法容纳 值,std :: numeric_limits :: max()或std :: numeric_limits :: min() 写入并设置了故障位标志。 (自C ++ 11起)

来自https://en.cppreference.com/w/cpp/io/basic_istream/operator_gtgt