繁体   English   中英

为什么 scanf 不能在正式输入结束时使用空格?

[英]Why scanf doesn't work with spaces at the end of formal input?

我正在尝试这个:

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

这是主function内部。 我需要程序来读取三个整数,但是当我运行它时,它只读取三个但 go 没有通过 scanf,即“完成?” 没有被执行,就好像它还在等待更多的输入。 如果我在最后一个 %d 之后删除空间,它工作正常。 但为什么会这样呢?

如果我在最后一个 %d 之后删除空间,它工作正常。 但为什么会这样呢?

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

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

"%d %d %d "强制scanf()在 3 个数字之后读取一些非空白之前不返回。


提示:避免scanf() 使用fgets()然后解析字符串 @DevSolar

以下是在多个变量中获取用户输入的方法:

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

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

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

编辑:我检查了,是的,你可以这样做。 但是你为什么要这样做呢? 如果用户输入不正确,例如空格或非预期字符,将更难验证。 如果您希望所有内容都在单个文本行中,则可以使用fgets()将其读取为完整字符串并使用strtok()对其进行标记。 或者只是如图所示单独读取值。

好吧,只是我的意见,寿。 如果我错了,请有人澄清我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM