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

问题描述 投票:1回答:3

我正在尝试:

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

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

c scanf
3个回答
1
投票

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

" "中的["%d %d %d "指示scanf()读取但不保存包括'\n'的任意数量的空白。

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

["%d %d %d "强制scanf()直到返回一些非空白后才返回<3之后的数字。


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

string

@DevSolar


1
投票
这里是采用多个变量输入用户输入的方法:

1
投票
尝试分别读取值。我认为scanf不打算以这种方式使用。另外,您期望在scanf的字符串末尾添加空格吗?试试这个:
© www.soinside.com 2019 - 2024. All rights reserved.