C:如何让我的程序拒绝超过';y';或';n';?
因此,下面的代码只是一个较大程序的一小部分,其本身运行良好:C:如何让我的程序拒绝超过';y';或';n';?,c,char,buffer,scanf,C,Char,Buffer,Scanf,因此,下面的代码只是一个较大程序的一小部分,其本身运行良好: int main(){ char ansr; scanf("%c", &ansr); while (ansr != 'y' && ansr != 'n'){ printf("\n\tInvalid answer, Please try again."); while(getchar() != '\n'); scanf("%c", &ansr); } if ( ansr == '
int main(){
char ansr;
scanf("%c", &ansr);
while (ansr != 'y' && ansr != 'n'){
printf("\n\tInvalid answer, Please try again.");
while(getchar() != '\n');
scanf("%c", &ansr);
}
if ( ansr == 'y') {
sleep(1);
printf("\n\tYou've been warned.......\n\n");
sleep(3);
}
else if ( ansr == 'n') {
printf("\n\tGoodbye then.\n\n");
}
return 0;
}
如您所见,用户输入的任何单词如果不是以y或n开头,都将被拒绝,直到有正确答案为止。由于任何以y或n开头的字符都会给出“是”或“否”的结果,因此我如何能包含比字符“y”和“n”长的单词?使用而不是getchar来检索多个字符。使用而不是getchar来检索多个字符。对于此类用例,不要使用
scanf
读取输入。使用fgets
逐行阅读文本,并使用任何有意义的逻辑处理每一行
int main()
{
char answer[LINE_LENGTH]; // #define LINE_LENGTH to a sensible value.
while ( fgets(answer, LINE_LENGTH, stdin) != NULL )
{
// Trim the line of the newline character.
int len = strlen(answer);
if ( answer[len-1] == '\n' )
{
answer[len-1] = '\0';
}
if ( strcmp(answer, "y") == 0 ||
strcmp(answer, "n") == 0 )
{
break;
}
printf("\n\tInvalid answer, Please try again.");
}
if ( strcmp(answer, "y") == 0)
{
sleep(1);
printf("\n\tYou've been warned.......\n\n");
sleep(3);
}
else if ( strcmp(answer, "n") == 0 )
{
printf("\n\tGoodbye then.\n\n");
}
return 0;
}
对于此类用例,不要使用
scanf
读取输入。使用fgets
逐行阅读文本,并使用任何有意义的逻辑处理每一行
int main()
{
char answer[LINE_LENGTH]; // #define LINE_LENGTH to a sensible value.
while ( fgets(answer, LINE_LENGTH, stdin) != NULL )
{
// Trim the line of the newline character.
int len = strlen(answer);
if ( answer[len-1] == '\n' )
{
answer[len-1] = '\0';
}
if ( strcmp(answer, "y") == 0 ||
strcmp(answer, "n") == 0 )
{
break;
}
printf("\n\tInvalid answer, Please try again.");
}
if ( strcmp(answer, "y") == 0)
{
sleep(1);
printf("\n\tYou've been warned.......\n\n");
sleep(3);
}
else if ( strcmp(answer, "n") == 0 )
{
printf("\n\tGoodbye then.\n\n");
}
return 0;
}
您应该检查
scanf()
找到了一个字符,并且getchar()
没有返回EOF。您应该检查scanf()
找到了一个字符,并且getchar()
没有返回EOF。很好!此外,由于响应是一个字母,因此3字节字符数组就足够了(2个字符+空终止符)。然后用fgetc(stdin)
在stdin上“吃掉”字符,直到换行符或EOF。很好!此外,由于响应是一个字母,因此3字节字符数组就足够了(2个字符+空终止符)。然后使用fgetc(stdin)
在stdin上“吃掉”字符,直到换行符或EOF。