我想將整數數組作爲輸入。即使有人進入空間或alpahabet,我想忽略它。忽略除整數以外的所有內容scanf
int i=0;
while(L--){
scanf("%d",&arr[i++]);
}
但如果我輸入:4跆拳道的arr[0]
被初始化爲4和循環結束。有沒有辦法讓我可以在scanf
的空間之後忽略所有內容,只需要整數。 輸入可以是以下格式:4 abc 3 def 7 ghi。
我想將整數數組作爲輸入。即使有人進入空間或alpahabet,我想忽略它。忽略除整數以外的所有內容scanf
int i=0;
while(L--){
scanf("%d",&arr[i++]);
}
但如果我輸入:4跆拳道的arr[0]
被初始化爲4和循環結束。有沒有辦法讓我可以在scanf
的空間之後忽略所有內容,只需要整數。 輸入可以是以下格式:4 abc 3 def 7 ghi。
我想這樣嗎?
int a;
scanf("%d %*s", &a);
printf("%d\n",a);
而且
input: 11 wwwww
output: 11
的*
用於跳過的輸入而不把它在任何變量。
您可以使用fgets
從stdin
獲取輸入字符串,然後使用sscanf
從輸入字符串中過濾掉整數。
char input[50];
int num;
fgets(input, 50, stdin);
sscanf(input, "%d %*s", &num);
%*s
在遇到整數後拒絕字符串。
試試這個
while(L--){
scanf("%d",&arr[i++]);
while(getchar() != '\n'); // Consumes all characters after space.
}
我認爲你實際想要達到的目標是從隨機輸入中提取所有數字。我建議使用fgets
讀取輸入到緩衝區,然後接下來,使用isdigit
和strtol
,提取號碼:
#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
使用'與fgets() '和'strtol()'。 – pmg
你想要單個數字還是想要整數? – Tahlil
@Tahlil整數。 –