【发布时间】:2018-06-06 22:24:42
【问题描述】:
这是我程序中的一段代码。我正在使用int8_t 数据类型,我在输入/输出方面遇到了一些问题。显然,在程序中使用int8_t 需要为g++ 编译器设置-std=c++11 标志。我这样做了,但是存在运行时错误。这是我的代码:
#include <iostream>
#include <cstdint>
using std::cout;
using std::cin;
using std::endl;
int main() {
int8_t number;
cout << "Enter a number [1-100]: ";
cin >> number;
cout << "You entered: " << number << endl;
cout << number << " / 10 = " << (number / 10) << endl;
return 0;
}
这是程序的输出:
$ ./a.out
Enter a number [1-100]: 95
You entered: 9
9 / 10 = 5
$ 是 shell 提示符。无论如何,似乎只有第一个数字是从输入流中读取的。尽管如此,整数除法9 / 10 应该返回0,而不是5。该程序旨在执行95 / 10 并返回9 的结果。理论上,这个程序应该可以工作,但显然,即使是除法运算符也是有问题的。我应该注意使用int 而不是int8_t 会导致程序按预期工作。我怀疑在这种情况下,有人会告诉我使用 int 数据类型并处理它。但我们是软件工程师!我想知道int8_t 数据类型是否存在固有缺陷。为什么它不能接受正确的用户输入,而且还破坏了除法运算符?!任何值得使用的编程语言都必须没有这样的缺陷。而且我认为 C++ 足够流行,以至于最终有人意识到int8_t 在某种意义上是有缺陷的。这是我需要知道的复杂性。
【问题讨论】:
标签: c++11 input printf iostream cstdint