输入一个字母以'int'
Input a letter to 'int'
代码:
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)
。该方法的概念实现如下所示。
- 将 0 存储在累加器中
- 读取输入的字符
- 如果字符为 0-9,则将其十进制值添加到累加器
- 如果不是,则返回累加器的值
- 返回到步骤 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 相比
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 包装一个对象并假装它是一个 int
- cin >> int 给定一个字符串将 int 赋值为 0
- 如何创建一个类,以便向量工作 std::vector<MyClass<int>> v{ 1,2,3 };
- 我从int x[3]得到的一个非常奇怪的输出;
- 在 C++11 中利用 int*_t、int_fast*_t 和 int_least*_t 之间的差异的一个很好的例子是
- 为表示一个或多个操作的C++函数的int参数寻找类型安全的替换
- c++:如何打印出一个强制转换的 int 值?
- 通过将其中一个模板更改为 muliset 后,我可以在 PBDS 排序集上使用计数功能<int>less_equal<int>
- 查找不在标准中的第一个值::设置<int>最小-最大值
- 从 int 中剥离位时,编译器会警告一个转换,但不警告其他转换.有解决方法吗?
- 超过CPU时间限制:当MPI_Sent一个非常大的int*时
- 使用无符号int作为二进制来在c++中实现一个集
- 如何声明一个必须在C++中同时存储int和char值的2D数组
- 在int main()[c++]中实现一个递归函数
- 错误:"int pow(double,int)"与上一个声明int pov(double a,int
- CStringArray::GetAt(int index) 返回一个 const. 为什么?
- 打印一个带有静态 int 的函数,有一个 std::cout 和多个 std::cout 有什么区别?
- 将 int 转换为字符串,然后连接另一个变量以创建完整扩展名,然后将其转换为 const_char*