2014-04-10 50 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 
相關問題