【问题标题】:scanf requiring input on multiple linesscanf 需要多行输入
【发布时间】:2014-06-13 02:30:10
【问题描述】:

我编写了这个小程序来计算条形码的校验位。基本上它的意思是取第一个数字,然后是两组 5 个数字,并对它们进行一些基本的算术运算。在输入第一组 5 位数字时,我尝试将它们全部输入一行,如下所示:

>Enter the first group of 5 digits: 12345

但它只计算 1 并丢弃其余数字。意思是让程序给出正确的输出我必须输入这样的数据:

>Enter the first group of 5 digits: 1
>2
>3
>4
>5

然后它才会提示我输入第二组 5 位数字。我尝试了许多不同的方法,例如在 scanf() 函数中的说明符之间放置空格,但没有奏效。

有没有人有任何解决方案,以便我能够在同一行输入中输入所有 5 位数字?

代码:

#include <stdio.h>

int main(void)
{
    int d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, first_sum, second_sum, chk_dig;

    printf("Enter the first (single) digit: ");
    scanf("%d", &d1);

    printf("\nEnter the first group of 5 digits: ");
    scanf("%d%d%d%d%d", &d2, &d3, &d4, &d5, &d6);

    printf("\nEnter the second group of 5 digits: ");
    scanf("%d%d%d%d%d", &d7, &d8, &d9, &d10, &d11);

    first_sum = d1 + d3 + d5 + d7 + d9 + d11;
    second_sum = d2 + d4 + d6 + d8 + d10;

    chk_dig = 3 * first_sum + second_sum;

    printf("\nCheck digit: %d", 9 - ((chk_dig - 1) % 10));

    return 0;
}

谢谢!

【问题讨论】:

    标签: c scanf


    【解决方案1】:

    如果您想扫描 5 个彼此相邻的单独的 1 位数字,请告诉 scanf() 您想要 1 位数字:

    if (scanf("%1d%1d%1d%1d%1d", &d2, &d3, &d4, &d5, &d6) != 5)
        …some sort of format error, or EOF perhaps…
    

    这在两个输入上都可以正常工作:

    1 2 3 4 5
    12345
    

    【讨论】:

    • 这正是我想要的。我现在因为没有考虑可以在这些函数中使用的修饰符而自责。原谅我,我很新:)
    【解决方案2】:

    您可以使用空格而不是换行来分隔数字。

    1 2 3 4 5

    如果你把你的数字塞在一起,12345,你的程序怎么知道你不是指实际的数字12,345

    您应该阅读documentation,了解scanf() 的工作原理。

    【讨论】:

    • 我的印象是,因为我有 scanf 读取 5 个单独的值:%d%d%d%d%d,所以它会将它们视为不同的数字,无论它们是否被分隔空格。这是错的吗?
    • 因此,通过将 5 %d 放在一起,我实际上是在使第一个之后的其他 4 %d 变得毫无意义,因为它们没有被读取?感谢您的帮助和链接。
    • 您接下来的四个%ds 仍需要数据。在您输入12345 后,该值将被读入第一个变量d2,但您的程序仍将暂停,直到您再输入四个整数。
    • 啊,有道理。感谢您的帮助!
    • 乔纳森的回答给出了你最初想要的。
    猜你喜欢
    • 1970-01-01
    • 2014-02-19
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 2021-11-10
    • 1970-01-01
    • 2017-07-16
    • 1970-01-01
    相关资源
    最近更新 更多