2014-04-10 51 views
2

我想将整数数组作为输入。即使有人进入空间或alpahabet,我想忽略它。忽略除整数以外的所有内容scanf

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

但如果我输入:4跆拳道arr[0]被初始化为4和循环结束。有没有办法让我可以在scanf的空间之后忽略所有内容,只需要整数。 输入可以是以下格式:4 abc 3 def 7 ghi

+1

使用'与fgets() '和'strtol()'。 – pmg

+0

你想要单个数字还是想要整数? – Tahlil

+0

@Tahlil整数。 –

回答

1

我想这样吗?

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

而且

input: 11 wwwww 

output: 11 

*用于跳过的输入而不把它在任何变量。

1

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

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

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

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

1

试试这个

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

...和快速测试:

[[email protected] temp]# ./a.out 
1abc23 **4 
1 
23 
4 
相关问题