我正在嘗試讀取c中的多行輸入。我輸入的第一個輸入得到的打印完全正常,但其餘的都缺少第一個字符。C中的多行輸入 - 故障排除
所以,我試圖打印如果輸入的名稱(字符串)是一個有效的標識符名稱或不,並且我想要無限循環中的輸入。我知道這裏已經發布了許多類似的問題,但是他們都沒有爲我工作。我不確定我在這裏做錯了什麼。 :(
int main() {
char str[1000];
for(;;){
//Below, I have tried every possibility that I can think of
scanf("%[^\n]d%*c%*s", str);
//fgets(str, 1000, stdin);
printf("str[0]: %c\n", str[0]);
//Flushing the Buffer
while ((dump = getchar()) == '\n' && dump != EOF);
//fflush(stdout);
}
}
我把我的整個代碼,只需在情況下,
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main() {
char str[1000];
int i, dump, check;
for(;;){
check = 0;
scanf("%[^\n]d%*c%*s", str);
//fgets(str, 1000, stdin);
printf("str[0]: %c\n", str[0]);
if ((str[0] == '_') || (isalpha(str[0]))){
for (i = 1; i < strlen(str); i++) {
if (isalpha(str[i]) || isdigit(str[i])) {
continue;
} else{
printf("2Invalid\n");
check = 1;
}
}
if (check != 1){
printf("String: %s\n", str);
printf("Valid\n");
}
} else{
printf("Invalid\n");
break;
}
//Flushing the Buffer
while ((dump = getchar()) == '\n' && dump != EOF);
//fflush(stdout);
}
}
輸入: asdasffa 輸出: STR [0]:一個 字符串:asdasffa Valid
輸入: & asdaf 輸出: STR [0]:一個
(when str[0] is "&", not "a")
字符串:asdaf 有效輸入: %ASDF 輸出: STR [0]: a
(when str[0] is "%", not "a")
字符串:asdf 有效
我在猜測我刷新緩衝區的方式導致這個問題?
謝謝!
感謝您的回答。對不起,我是C語言的新手。請你詳細說明一下如何添加一個調用ungetc? –
那麼,你真的應該只使用fgets而不是scanf,並完全刪除while循環。如果你想保留它,只需在循環之後添加'ungetc(dump,stdin)'即可。這將一個字符推回到要由scanf讀取的流上。 –
太棒了!它爲我工作!非常感謝! –