忽略整数scanf以外的所有内容

时间:2014-04-10 08:40:48

标签: c

我想将一个整数数组作为输入。即使有人进入一个空间或一个alpahabet,我也想忽略它。

int i=0;
while(L--){
    scanf("%d",&arr[i++]);
}

但是如果我输入: 4 wtf arr[0]会被初始化为4并且循环结束。有没有办法可以忽略scanf中的空格之后的所有内容,只取整数。 输入可以是以下形式: 4 abc 3 def 7 ghi

4 个答案:

答案 0 :(得分:1)

您可以使用fgetsstdin获取输入字符串,然后使用sscanf从输入字符串中过滤掉整数。

char input[50];
int num;
fgets(input, 50, stdin);

sscanf(input, "%d %*s", &num);

%*s在遇到整数后拒绝字符串。

答案 1 :(得分:1)

试试这个

while(L--){
    scanf("%d",&arr[i++]);
    while(getchar() != '\n'); // Consumes all characters after space.
}

答案 2 :(得分:1)

我觉得这样吗?

int a;
scanf("%d %*s", &a);
printf("%d\n",a);

input: 11 wwwww

output: 11

*用于跳过输入而不将其放在任何变量中。

答案 3 :(得分:1)

我认为你真正希望在这里实现的是从随机输入中提取所有数字。我建议使用fgets将输入读入缓冲区,然后使用isdigitstrtol提取数字:

#include <stdio.h>

int main(void)
{
    char buff[255] = {0};
    fgets(buff, sizeof(buff), stdin); // read data from stdin
    char *ptr = buff;

    do {
        if(!isdigit(*ptr)) // check if current character is a digit 
            continue; // if not...
        long val = strtol(ptr, &ptr, 10); // read a number
        printf("%ld\n", val); // print it   
    } while(*ptr++); // ...move to next character
}

...和快速测试:

[root@dmudms01 temp]# ./a.out 
1abc23 **4
1
23
4