【问题标题】:white space in format string of scanf() [duplicate]scanf() 格式字符串中的空格 [重复]
【发布时间】:2018-06-02 20:46:15
【问题描述】:
#include<stdio.h>
int main() {
    int a,b;
    printf("Enter values of a and b\n");
    scanf(" %d%d ",&a,&b);
    printf("a=%d b=%d", a, b);
    return 0 ;
}

在这里,如果我使用 scanf(),就像在我的代码中那样,编译器希望用户输入三个值,我无法理解这一点,当我使用 scanf() 时没有任何空格,那么它只要求两个输入正如预期的那样,所以我很困惑这两者之间有什么区别,请解释...

【问题讨论】:

  • 你是指第二个%d之后的空格还是第一个之前的空格?您要忽略第一个值还是第三个值?
  • 我要求两者,在第一个 %d 之前和第二个 %d 之后,我只想知道为什么编译器在我的代码中使用 scanf 中的空格时要求三个输入
  • 忽略输入的可读版本是使用%*d
  • scanf("%d%d", &amp;a, &amp;b); 将读取 2 个整数,仅此而已。
  • 请注意,格式字符串中的前导空格是不需要的,因为%d 指令自动会忽略初始空格字符,格式字符串中的尾随空格是错误的这会导致交互式输入出现问题。

标签: c input output scanf whitespace


【解决方案1】:

如果您在数字后面加一个空格,scanf 必须确定要匹配的空格的结尾:

scanf("%d ", &a);

这里的空格表示读取并丢弃所有空格scanf 必须出现一个非空白字符(或 EOF),以明确 all 是什么,以便正确读取和丢弃它们。

考虑这个输入流(点是字符指示符):

   1   2
........

如果你调用scanf("%d"),那么调用之后,剩余的流是

   2
....

...下次读取时将丢弃空格。请注意,读取数字时会自动丢弃前导空格。

如果你改为调用scanf("%d "),剩余的流是

2
.

您会看到空格立即消失。

【讨论】:

    【解决方案2】:

    看看this

    您可以在%d 之间使用空格。 这将要求用户输入如下内容:12 32(带有空格)。

    如果你不想这样,你应该在 scanf 中使用循环。

    祝你好运。

    【讨论】:

    • 我不是在询问两个 %d 之间的空间,我是在询问 scanf 语句中我的第一个和第二个 %d 之前和之后的空白,他们如何修改我的程序?跨度>
    • %ds 之间的空格不会改变任何内容。空格表示“忽略所有空格”,但%d 也忽略所有空格。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 2014-05-29
    相关资源
    最近更新 更多