我在循环时执行以下操作,并且行号不会增加(它始终为0)。那是为什么?
int main(int argc, const char* argv[])
{
int line_number = 0;
int f = 0;
while (f == 0) {
printf("LINE NUMBER IS %f\n", line_number);
line_number++;
}
return EXIT_SUCCESS;
}
(我意识到这是一个无限循环,但我感兴趣的是为什么line_number没有增加。)
答案 0 :(得分:2)
使用printf
,在%
符号表示变量替换之后放置的字母很重要。如果您查看the list of format specifiers,您会看到%f
用于浮点数。这意味着它认为line_number
是一个浮点数;它没有做正确的转换,因为它没有意识到它需要,而只是读取与浮点相同的位。
浮点格式的工作方式是complicated,但是你会在很长一段时间内保持非常接近零。根据您的计算机的速度和患者的耐心程度,如果您让计算机保持运行更长时间,您可能会或可能不会看到它发生变化。
(从技术上讲,它甚至比这更糟糕,因为这是undefined behavior;但是,这是最有可能的结果。)
如果您使用错误的格式说明符,大多数编译器都会有一些选项来警告您;您应该打开默认的编译器警告集,以便它可以告诉您有关此问题和其他问题。