我正在尝试在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]:a 字符串:asdasffa 有效
输入: &安培; asdaf 的输出: str [0]:
(when str[0] is "&", not "a")
字符串:asdaf 有效输入: %ASDF 的输出: str [0]:
(when str[0] is "%", not "a")
字符串:asdf 有效
我猜我冲洗缓冲区的方式导致了这个问题?
谢谢!
答案 0 :(得分:2)
第while ( (dump = getchar()) == '\n' && dump != EOF);
行
消耗一个角色。尝试在此之后添加对ungetc
的调用,以便scanf可以看到它。并删除多余的dump != EOF
。如果dump == \n
,那么它将不是EOF。