【问题标题】:Accepting empty inputs with scanf() in C在 C 中使用 scanf() 接受空输入
【发布时间】:2018-02-25 10:04:27
【问题描述】:

我想读取用户输入的两位数。但问题是用户也可以只输入 1 个数字。所以输入列表可能是这样的:

1  2
2
4  2
15

这是一个简单的问题,但我找不到确切的问题。大多数问题都要求输入空字符串,但现在是整数的情况。

谢谢

【问题讨论】:

  • 读取一个字符串,然后解析它,看看用户输入了多少个值
  • @UnholySheep 我明白了,很好的解决方案。但是 scanf() 的结构不允许直接的方式吗?谢谢
  • scanf 用于 精确 格式的输入,它不用于处理任意用户输入 - 所以不,没有直接安全的方法可以使用 @ 987654323@ 格式说明符
  • 那么您的用户是输入了三个数字还是输入了一个数字六次?或者也许是二、一、二、一?我们应该怎么知道?
  • @n.m.每个输入最多 2 个数字

标签: c input scanf


【解决方案1】:

scanf 用于格式化输入输出。这不符合你的要求。正如提到的那样,使用fgets 读取整行,然后使用strtol 等解析输入的数字。

#define MAXLEN 60
....
char pp[MAXLEN+1];
if(fgets(pp,MAXLEN+1,stdin) == NULL ){
    fprintf(stderr,"Error in input");
    exit(EXIT_FAILURE);
}

char *ptr = pp;
char *end;
errno = 0;
long i = strtol(ptr, &end, 10);
while( ptr != end )
{
    ptr = end;
    if (errno == ERANGE){
        printf("range error, got ");
        errno = 0;
    }
    printf("Got - %ld\n", i);
    /* work with i */
    i = strtol(ptr, &end, 10);
}

代码here的演示。

【讨论】:

    猜你喜欢
    • 2011-01-09
    • 1970-01-01
    • 2014-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    相关资源
    最近更新 更多