使用C中的scanf()接受空输入

时间:2018-02-25 10:04:28

标签: c input scanf

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

1  2
2
4  2
15

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

由于

1 个答案:

答案 0 :(得分:2)

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