C中的多行输入-故障排除
我正在尝试读取c中的多行输入。我输入的第一个输入完全可以打印出来,但其余输入缺少第一个字符 因此,我试图打印输入的名称(字符串)是否是有效的标识符名称,并且我希望在一个无休止的循环中获取输入。我知道这里已经贴出了很多类似的问题,但没有一个适合我。我不确定我在这里做错了什么( 我把我所有的代码都放在这里以防万一C中的多行输入-故障排除,c,string,C,String,我正在尝试读取c中的多行输入。我输入的第一个输入完全可以打印出来,但其余输入缺少第一个字符 因此,我试图打印输入的名称(字符串)是否是有效的标识符名称,并且我希望在一个无休止的循环中获取输入。我知道这里已经贴出了很多类似的问题,但没有一个适合我。我不确定我在这里做错了什么( 我把我所有的代码都放在这里以防万一 #include <stdio.h> #include <string.h> #include <ctype.h> int main() {
#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);
}
}
#包括
#包括
#包括
int main(){
char-str[1000];
int i,转储,检查;
对于(;;){
检查=0;
scanf(“%[^\n]d%*c%*s”,str);
//fgets(str,1000,stdin);
printf(“str[0]:%c\n”,str[0]);
如果((str[0]='|')|(isalpha(str[0])){
对于(i=1;i
输入:
asdasffa
输出:
str[0]:a
字符串:asdasffa
有效的
输入:
&阿斯达夫
输出:
str[0]:a(当str[0]是“&”,而不是“a”)
字符串:asdaf
有效的
输入:
%asdf
输出:
str[0]:a(当str[0]是“%”而不是“a”)
字符串:asdf
有效的
我猜是我刷新缓冲区的方式导致了这个问题
谢谢!行while((dump=getchar())='\n'&&dump!=EOF);
消耗一个字符。尝试在此之后添加对ungect
的调用,以便扫描函数可以看到它。并删除冗余的dump!=EOF
。如果dump=\n
,则它将不会是EOF。行而((dump=getchar())='\n'&&dump!=EOF);
消耗一个字符。请尝试在此之后添加对
ungetc
的调用,以便scanf可以看到它。并删除冗余的dump!=EOF
。如果dump=\n
,则它将不会是EOF。谢谢您的回答。很抱歉,我对C语言不熟悉。您能详细说明一下如何添加对ungetc的调用吗?好的,真的,您应该这样做只需使用fgets而不是scanf,并完全删除这个while循环。如果您想保留它,只需添加ungetc(dump,stdin)
就在循环之后。这会将一个字符推回到流中,供scanf读取。谢谢你的回答。对不起,我是C语言新手。请你详细说明一下如何添加对ungetc的调用?好的,实际上你应该使用fgets而不是scanf,并完全删除这个while循环。如果你想保留它,只需添加ungect(dump,stdin)
就在循环之后。这会将一个字符推回到流上,供scanf读取。
#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);
}
}