为什么scanf在正式输入的末尾不能使用空格?

时间:2019-11-10 12:25:51

标签: c scanf

我正在尝试:

NULLs

这是主函数内部。我需要程序读取三个整数,但是运行该程序时,它只会读取三个整数,但不会超出scanf,即“完成?”。没有执行,就好像它还在等待更多输入。如果我在最后一个%d之后删除了空格,则可以正常工作。但是为什么会这样呢?

3 个答案:

答案 0 :(得分:4)

  

如果我在最后一个%d之后删除了空格,则可以正常工作。但是为什么会这样呢?

" "中的

"%d %d %d "指示scanf()读取而不保存任何数量的空格,包括'\n'

scanf()一直消耗空白,直到遇到一些非空白为止。 @user3121023

"%d %d %d "要求scanf()不能返回,直到在三个数字后 读取了一些非空格。


提示:避免使用scanf()。使用fgets(),然后解析 string @DevSolar

答案 1 :(得分:0)

以下是将用户输入包含在多个变量中的方法:

int M,N,K;
printf("Enter (m,k,n) : ");
scanf("%d", &M);
scanf("%d", &N);
scanf("%d", &K);
printf("\nDone?");

答案 2 :(得分:0)

尝试分别读取值。我认为scanf不打算以这种方式使用。 另外,您期望在scanf的字符串末尾添加空格吗? 试试这个:

scanf("%d", &M);
scanf("%d", &K);
scanf("%d", &N);

编辑:我已经签出了,是的,您可以这样做。 但是,为什么要这样做呢?如果用户输入不正确(例如,空格或非预期字符),将很难验证。 如果您希望所有内容都在单个文本行中,则可以使用fgets()将其作为完整字符串读取,并使用strtok()将其标记化。 或者简单地按如下所示分别读取值。

嗯,我的看法是这样。如果我错了,请有人澄清一下。