void answerme();
int main() {
char *answer = malloc (MAX_NAME_SZ);
....
printf ("\nWould you like to begin? [Y/N]");
fgets (answer, MAX_NAME_SZ, stdin);
answerme();
if(*answer == 'y' || *answer == 'Y'){
getinfo();
printf("\nprogram starting now...");
}
else if(*answer == 'n' || *answer == 'N'){
printf("\nThank you, program will close now....");
return 0;
}
...
} //end of main
void answerme(){
char *answer = malloc (MAX_NAME_SZ);
while(*answer !='n' && *answer != 'N' && *answer != 'y' && *answer != 'Y'){
printf("\nPlease enter [Y], or [N]");
fgets (answer, MAX_NAME_SZ, stdin);
}
};
while循环或整个函数的目的是检查用户是否用y/n而不是另一个随机键回答了问题。我希望这个while循环继续请求用户输入Y/N,直到用户输入为止。但是,由于某些原因,当这个程序运行时,第一步会询问您是否要开始这个程序,如果您确实回答Y,它会出于某种原因告诉您“请输入Y或N”,即使您输入了正确的答案,然后当您输入例如“N”或任何其他随机字母时,它仍然会让您通过。因此,它似乎注册了输入,但出于某种原因,它仍然要求运行while循环,而不是跳过if(answer==Y)或if(answer==N)。
有人知道这是什么原因吗?
同样,一旦用户说“Y”并开始程序,就会出现一条消息,要求用户输入某些信息,这些信息将存储到我创建的结构中(代码中没有显示),但是通过这个while循环,不知何故跳过了这个。如果我去掉这个while循环,整个程序运行良好,但用户当然可以跳过程序的各个步骤,而不必严格输入我对他的要求。
如果有更好的替代方法限制用户只输入我所要求的内容,请一定要启发我,因为这已经给我带来了过去3天的问题和头痛。谢谢您!
最佳答案
问题是在函数中设置了一个变量*answer
,而在主程序中又有一个变量。然而,看起来它们应该是相同的变量。
要解决这个问题,只声明一个并在两个函数之间共享它。通过在任何函数外部声明它,或者将它从main传递给子函数来实现。注意,它应该只malloc()
一次。
参数传递技术的示例如下:
void answerme (char *answer)
{
while (*answer !='n' && *answer != 'N' &&
*answer != 'y' && *answer != 'Y')
{
printf ("\nPlease enter [Y], or [N]");
fgets (answer, MAX_NAME_SZ, stdin);
}
}
int main()
{
char *answer = malloc (MAX_NAME_SZ);
....
printf ("\nWould you like to begin? [Y/N]");
fgets (answer, MAX_NAME_SZ, stdin);
answerme(answer);
if (*answer == 'y' || *answer == 'Y')
{
getinfo();
printf("program starting now...\n");
}
else
if (*answer == 'n' || *answer == 'N')
{
printf("Thank you, program will close now.\n");
return 0;
}
...
} //end of main
关于c - While循环导致程序出现许多问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41529625/