【发布时间】:2014-10-22 02:38:56
【问题描述】:
这是我的代码:
注意:在 scanf 中的 \n 是我防止尾随换行问题的方法。这不是最好的解决方案,但我使用它太多了,目前它已成为我的习惯。 :-)
...
int main()
{
unsigned long long int input[2], calc_square;
while(scanf("\n%I64u %I64u", input[0], input[1]) == 2)
{
printf("%I64u %I64u\n", input[0], input[1]);
...
我的预期输入和程序结果是:
输入:
89 89
对于输出,它不是打印回 89,而是显示以下输出:
I64u I64u
我正在使用 MSYS2 包中的 g++ (GCC) 4.9.1。注意到 g++,因为我的代码的某些部分当前使用 C++ STL。
已编辑:我使用标准 %llu 而不是 %I64u 更改了我的代码,这是我预期的输入和程序结果:
输入
89 89
对于输出,这是一个奇怪的结果:
25769968512 2337536
【问题讨论】:
-
从
printf的例子中可以看出g++ 不支持I64修饰符。 -
@RaymondChen,我已经看过了,但是我对 I64u 输出感到困惑,因此我创建了这个新问题。谢谢你帮我弄清楚这件事。 :-)
-
使用非标准说明符会导致未定义的行为;解决这个使用
%llu. -
@MattMcNabb,这是我使用
%llu的结果,输入都是89,输出是25769968512 2337536