我正在尝试:
NULLs
这是主函数内部。我需要程序读取三个整数,但是运行该程序时,它只会读取三个整数,但不会超出scanf,即“完成?”。没有执行,就好像它还在等待更多输入。如果我在最后一个%d之后删除了空格,则可以正常工作。但是为什么会这样呢?
答案 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()
将其标记化。
或者简单地按如下所示分别读取值。
嗯,我的看法是这样。如果我错了,请有人澄清一下。