我想知道如何以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
仍将留在输入流中。