while循环中的增量不起作用?

时间:2017-09-11 21:50:41

标签: c loops while-loop

我在循环时执行以下操作,并且行号不会增加(它始终为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没有增加。)

1 个答案:

答案 0 :(得分:2)

使用printf,在%符号表示变量替换之后放置的字母很重要。如果您查看the list of format specifiers,您会看到%f用于浮点数。这意味着它认为line_number是一个浮点数;它没有做正确的转换,因为它没有意识到它需要,而只是读取与浮点相同的位。

浮点格式的工作方式是complicated,但是你会在很长一段时间内保持非常接近零。根据您的计算机的速度和患者的耐心程度,如果您让计算机保持运行更长时间,您可能会或可能不会看到它发生变化。

(从技术上讲,它甚至比这更糟糕,因为这是undefined behavior;但是,这是最有可能的结果。)

如果您使用错误的格式说明符,大多数编译器都会有一些选项来警告您;您应该打开默认的编译器警告集,以便它可以告诉您有关此问题和其他问题。