【问题标题】:Multiple scanf from a single input来自单个输入的多个 scanf
【发布时间】:2017-03-04 08:28:24
【问题描述】:

我试图提示用户输入一个数字,然后提取他们输入的数字并将他们输入的数字的数字相加。他们只能输入一次号码。我的代码如下:

    printf("\nPART 2: EXPRESSIONS SUM\n\n");
    printf("Enter 5-digit integer: ");
    scanf("\n%1d%1d%1d%1d%1d", &dig_one, &dig_two, &dig_three, &dig_four, &dig_five);
    scanf("\n%d", &five_dig_int)

但是,在第一个 scanf 完成后,程序会挂在第二个 scanf 上,等待更多输入。有没有办法“重新扫描”,可以说是初始输入,这样用户就不必再次输入数字?谢谢! ;

【问题讨论】:

  • 有趣,我会试试看。所以看起来没有办法只使用 scanf 正确吗?因为一旦使用它,输入就被“吃光”了。
  • 或者,我可以保留获取数字的 scanf,然后将它们连接成一个字符串并将其转换为完整的 5 位整数吗?如果我想走那条路,我该怎么做?
  • scanf(" %c%c%c%c%c", &str[0], &str[1], &str[2], &str[3], &str[4])
  • @Froobyflake 是的,输入一旦被扫描,就会被“吃掉”,这使得 scanffscanf 非常非常难以用于任何复杂、灵活、或容错解析。这就是为什么我总是建议将整行读入缓冲区(使用fscanf 或等效项),然后尽一切可能解析行。这样你就可以对缓冲区做任何你想做的事情:你可以备份并尝试用几种不同的方式解析它,等等。

标签: c


【解决方案1】:

使用字符串 & atoi()

例子:

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    char str[6];
    printf("\nPART 2: EXPRESSIONS SUM\n\n");
    printf("Enter 5-digit integer: ");
    scanf("\n%s, &str);
    int fivedigit = atoi(str);
    int sum = 0;
    for(int i = 0; i < 5; i++)
    {
        int tempadd = (int) str[i];
        sum += tempadd;
    }
    //Do stuff with both values



}

【讨论】:

    【解决方案2】:

    用一点算术将任何整数的基数为 10 位相加并不难:

    #include <stdio.h>
    
    int main(void) {
      int val;
      printf("Enter a number: ");
      if (scanf("%d", &val) != 1) return 1;
      int sum = 0;
      for (int x = val; x; x /= 10) sum += x % 10;
      printf("Value = %d. Digit sum = %d\n", val, sum);
      return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 2015-12-12
      • 2023-03-31
      • 2017-07-16
      • 1970-01-01
      • 1970-01-01
      • 2015-12-15
      • 2019-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多