【发布时间】:2020-09-10 14:11:51
【问题描述】:
我有一个非常奇怪的问题,源于我一直在编写的 C++11 程序的一个错误。
见以下代码:
long long a[1000];
int main(int argc, char * argv[]) {
for(long long i = 0; i < 300; ++i) {
scanf("%lli", &a[i]);
std::cout << a[i] << std::endl;
}
return 0;
}
尝试输入 1、2 等,我们会得到输出 1\n、2\n 等,如预期的那样。这也适用于像001 这样的输入,我们得到1\n,0004 我们得到4\n。
但是,当前导零后面的数字是 8 或 9 时,scanf() 先读取前导零,然后再读取后面的数字。
例如:
输入:0009,输出:000\n9\n。
输入:08,输出0\n8\n。
输入:00914,输出00\n914\n。
我已经进行了一些测试,对于这些情况,scanf() 似乎首先读取前导零,其余数字留在缓冲区中,这些数字在循环的第二次运行时被拾取。
有人可以暗示发生了什么吗?
我正在使用 XCode 11.3.7 并使用 Clang C++11 进行编译。 (我没有弄乱项目设置)
提前谢谢你!!!
【问题讨论】: