c - scanf 需要多行输入

标签 c scanf

我编写了这个小程序来计算条形码的校验位。基本上,它的意思是取第一个数字,然后是 2 组 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;
}

谢谢!

最佳答案

如果您想扫描 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

关于c - scanf 需要多行输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23325922/

相关文章:

c - printf () 的奇怪行为

c++ - 实现编译时机制检查字符串的唯一性

c - 如何用C读取这些混合数据

Char* 在不应该的时候显示 null

C编程: Reading a file and storing in array of struct

C程序接受两个字符

C 程序在执行 shellcode 时挂起/挂起

c++ - 如何将 8 个字节写入 void * 地址?

c - C 中返回 int 值而不是字符串的函数

c - 如何从文本文件中读取格式化行并将信息保存在链表中? IN C