中的掃描集的意外輸出。應該接受一個數字,直到它遇到一個4,但它會給一些垃圾值。爲什麼?正如預期的那樣,C
int main(void)
{
int a;
printf("Enter a number: ");
scanf("%[^4]d", &a);
printf("You entered: %d\n", a);
return 0;
}
中的掃描集的意外輸出。應該接受一個數字,直到它遇到一個4,但它會給一些垃圾值。爲什麼?正如預期的那樣,C
int main(void)
{
int a;
printf("Enter a number: ");
scanf("%[^4]d", &a);
printf("You entered: %d\n", a);
return 0;
}
據我知道scansets意指與串被使用(這使得d
不充當佔位符整數規範)。把它寫的一個方法是閱讀輸入一個字符串,然後解析它:
int main(void)
{
int a;
char b[255];
printf("Enter a number: ");
scanf("%254[^4]", &b);
a = atoi(b);
printf("You entered: %d\n", a);
return 0;
}
我讓修改後的代碼到最低限度,你肯定會需要輸入理智一些額外的檢查。
澄清:254
前綴限制了要捕獲的數據量,以便不超過緩衝區的大小(字符串以一個額外的空字符終止,因此讀取長度必須小於實際值大小)1。
scanset只能使用字符。
這是我的示例代碼。 (但是,我不知道你真正想要的東西。)
#include <stdio.h>
int main(void) {
char buffer[128];
printf("Enter a number: ");
scanf("%[^4]s", buffer);
printf("You entered: %s\n", buffer);
return 0;
}
結果是,
Enter a number: 12345678
You entered: 123
此外,如果你想整數值,使用atoi()
。
請注意,'s'是文字's',不屬於掃描集轉換規範的一部分。請參閱我對問題的評論,指的是問題中的「d」。但你說得對,掃描集是用於字符串,而不是整數,但掃描集不包含's'。 –
請注意,格式將永遠不會讀取所請求的'd',因爲如果數據中有'd',它將作爲與掃描集匹配的字符串的一部分被讀取(因爲'd'是不是數字'4')。您還需要認識到掃描集適用於字符串,而不適用於整數 - 這就是爲什麼'd'只是格式字符串中的文字字符,而不是轉換規範的一部分。 –