输入一个字母以'int'

Input a letter to 'int'

本文关键字:int 一个 输入      更新时间:2023-10-16

代码:

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

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

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

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

为什么?有什么不同?

std::cin是一个对象,一个std::istream的实例。 std::istream 使>>过载以支持各种类型。其中一种类型是 &int .当 >> 左侧有一个std::istream,右侧有一个整数引用时,将调用方法 istream& operator>> (int& val)。该方法的概念实现如下所示。

  1. 将 0 存储在累加器中
  2. 读取输入的字符
  3. 如果字符为 0-9,则将其十进制值添加到累加器
  4. 如果不是,则返回累加器的值
  5. 返回到步骤 2

当你提供'b'作为istream& operator>> (int& val)的输入时,它会立即将"累加"的0存储在你的int变量中。例:

#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,然后将其打印为整数。

您尝试执行的输入操作失败。 由于a是一个int cin期望一个int。 因为它得到了一个char它失败了。 您可以通过将代码更改为:

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

输入:

a

输出:

input failed

查看此实时示例

当你使用"b"来输入一个整数值时,你的程序认为你输入了一个无效的数字,所以它不会通过int('b')赋值。 仍然使用 a 的初始值

不确定这是否是你找到的:

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

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

如果你想输出ASCII,你可以像这样制作cout:

cout << (int) a << endl;

然后,当您输入b时,您将获得98

如果提取失败(例如,如果在数字预期),值保持不变,并设置故障位。(至C++11)

如果提取失败,则将零写入值并设置故障位。如果提取导致值太大或太小而无法容纳值、标准::numeric_limits::马克斯() 或标准::numeric_limits::分钟()已写入并设置故障位标志。(自C++11起)

与 https://en.cppreference.com/w/cpp/io/basic_istream/operator_gtgt 相比

相关文章: