当 space 放入我的 scanf() 时,C double printf()
C double printf() when a space is put in my scanf()
我一直在努力使这段代码正常工作:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char const **argv) {
char buf[100];
int var = 0;
do {
printf("Write a number :\n");
scanf("%s", buf);
} while ((int)strtol(buf, NULL, 10) == 0);
return 0;
}
在控制台中它是这样的:
chaouchi@chaouchi:~/workspace/Demineur$ ./a.out
Write a number :
f 10
Write a number :
chaouchi@chaouchi:~/workspace/Demineur$
我不明白为什么程序在 while
循环的第二次迭代期间停止并忽略我的 scanf()
。
步骤如下:
- 第一次迭代打印
Write a number :
和一个换行符,
scanf("%s", buf)
没有可从标准输入读取的内容,因此需要输入,
- 您键入
f 10
和回车键
scanf("%s", buf)
读取 f
并停在 space,
strtol(buf, NULL, 10)
returns0
,所以循环继续
- 第二次迭代打印
Write a number :
和一个换行符,
scanf("%s", buf)
读取 10
并在换行处停止,
strtol(buf, NULL, 10)
returns10
,所以循环退出
- 程序以
0
状态(成功)结束。
这是您观察到的情况:如果您提供了多个单词,则在从终端请求更多输入之前,多个 scanf()
调用会读取它们。
我一直在努力使这段代码正常工作:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char const **argv) {
char buf[100];
int var = 0;
do {
printf("Write a number :\n");
scanf("%s", buf);
} while ((int)strtol(buf, NULL, 10) == 0);
return 0;
}
在控制台中它是这样的:
chaouchi@chaouchi:~/workspace/Demineur$ ./a.out
Write a number :
f 10
Write a number :
chaouchi@chaouchi:~/workspace/Demineur$
我不明白为什么程序在 while
循环的第二次迭代期间停止并忽略我的 scanf()
。
步骤如下:
- 第一次迭代打印
Write a number :
和一个换行符, scanf("%s", buf)
没有可从标准输入读取的内容,因此需要输入,- 您键入
f 10
和回车键 scanf("%s", buf)
读取f
并停在 space,
- 您键入
strtol(buf, NULL, 10)
returns0
,所以循环继续- 第二次迭代打印
Write a number :
和一个换行符, scanf("%s", buf)
读取10
并在换行处停止,strtol(buf, NULL, 10)
returns10
,所以循环退出- 程序以
0
状态(成功)结束。
这是您观察到的情况:如果您提供了多个单词,则在从终端请求更多输入之前,多个 scanf()
调用会读取它们。