我将省略整个代码,但到目前为止这些测试可能会非常令人不安:
这被ANSI C,C ++和C ++ 11接受
#include <stdio.h>
#include <stdlib.h>
int main()
{
int p, q, r, s, t, u;
char* str = malloc(1000);
while(gets(str) != NULL) {
sscanf(str, "%d %d %d %d %d %d", &p, &q, &r, &s, &t, &u);
printf("%d %d %d %d %d %d\n", p, q, r, s, t, u);
}
}
现在出现令人不安的事实,此代码在ANSI C中获得运行时错误,但在C ++和C ++ 11中被接受:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int p, q, r, s, t, u;
//== 6 instead of != EOF also gives me a runtime error
while(scanf("%d %d %d %d %d %d", &p, &q, &r, &s, &t, &u) != EOF) {
printf("%d %d %d %d %d %d\n", p, q, r, s, t, u);
}
}
答案 0 :(得分:1)
您忘了return 0;
- 在C中,这意味着main()
会向shell返回垃圾状态。在C ++中,允许省略return 0;
,并且将返回默认状态0(== EXIT_SUCCESS
)。但是在C中,两个程序都将返回未定义的状态。在第一种情况下,你碰巧幸运,返回0。在第二种情况下,返回0以外的东西(可能是-1)。尝试并养成始终从main返回有效状态的习惯,无论您是否使用C或C ++。
有关详细信息,请参阅this excellent question and answer。
另请注意,启用警告(例如gcc -Wall ...
)进行编译会立即提醒您出现此错误,并为您节省了一些时间。