我想知道如何以C scanf的格式解释空间。

例如,当我写:

scanf("%d ",&c);


从键盘读取的值未直接分配给变量c

如果我写:

while(c != 0){
    scanf("%d  ",&c);
    printf("c = %d\n", c);
}


我必须输入两次0才能退出while循环。

有人可以解释这种行为吗?

谢谢。

最佳答案

我假设c声明为:

int c;


当您有scanf行时

scanf("%d  ",&c);


程序将把表示c的第一个非空白字符读入int。它将跳过所有第一个非空白字符之前的空白。这解决了格式字符串的%d部分。然后,它处理格式字符串的空白部分。它将等待从流中读取所有空白字符,这些空白字符紧随处理为读入c的最后一个字符之后。仅当遇到后续的非空白字符时,它才会停止读取。第一个非空白字符可以是任何字符。不必是数字/数字。

如果输入10k作为输入,它将在读取10后立即停止。 k仍将留在输入流中。

07-24 12:54
查看更多