C 成功完成第一个任务后,基本菜单驱动的程序重复两次
我用柏拉图3写C程序 我正在创建一个菜单驱动的程序,但想测试一下让它工作的基本概念C 成功完成第一个任务后,基本菜单驱动的程序重复两次,c,C,我用柏拉图3写C程序 我正在创建一个菜单驱动的程序,但想测试一下让它工作的基本概念 #include<stdio.h> #include<ctype.h> int function1(); main(){ char s; do{ puts("\n choose the following"); puts("(P)rint\n"); puts("(Q)uit\n"); scanf("%c",&s); s=toupper(s);
#include<stdio.h>
#include<ctype.h>
int function1();
main(){
char s;
do{
puts("\n choose the following");
puts("(P)rint\n");
puts("(Q)uit\n");
scanf("%c",&s);
s=toupper(s);
switch (s){
case 'P' : function1();
break;
case 'Q' : return -1;
break;
}
}while (function1()==0);
}
int function1(){
printf("Hello World");
return 0;
}
-知道为什么吗
请帮忙,谢谢 如果选择p,则在该case语句中调用function1。然后,由于您还没有从main返回-1,这是循环可以退出的唯一方法,因此您将再次从循环条件中调用function1 它在双HelloWorld和单HelloWorld之间交替使用的原因是空格字符与“p”不匹配。相反,他们只是被忽视了。要处理此问题,您可能希望放弃空白,因此我们将\n添加到。我还为不正确的输入添加了一个默认情况,该情况目前也会退出循环。所以你最终会得到这样的结果:
main(){
char s;
int status = 0;
do{
puts("\n choose the following");
puts("(P)rint\n");
puts("(Q)uit\n");
scanf("\n%c",&s);
s=toupper(s);
switch (s){
case 'P' : status = function1();
break;
case 'Q' : status = -1;
break;
default : status = -1;
}
} while (status == 0);
}
如果选择p,则在该case语句中调用function1。然后,由于您还没有从main返回-1,这是循环可以退出的唯一方法,因此您将再次从循环条件中调用function1 它在双HelloWorld和单HelloWorld之间交替使用的原因是空格字符与“p”不匹配。相反,他们只是被忽视了。要处理此问题,您可能希望放弃空白,因此我们将\n添加到。我还为不正确的输入添加了一个默认情况,该情况目前也会退出循环。所以你最终会得到这样的结果:
main(){
char s;
int status = 0;
do{
puts("\n choose the following");
puts("(P)rint\n");
puts("(Q)uit\n");
scanf("\n%c",&s);
s=toupper(s);
switch (s){
case 'P' : status = function1();
break;
case 'Q' : status = -1;
break;
default : status = -1;
}
} while (status == 0);
}
非常感谢马修!!!!这个int status=0非常聪明,谢谢!我没想到。哦,我想补充一点,使用\n%c还两次停止了Hello World的回音。。谢谢你能解释一下空白现象吗?非常感谢您的帮助,非常感谢!基本上,当您键入p并按enter键时,程序会将其读取为两个字符“p”和“\n”,我相信Windows上有三个字符“p”、“r”和“\n”。如果scanf格式字符串中没有空格,程序将尝试将空格作为单独的命令处理。非常感谢Matthew!!!!这个int status=0非常聪明,谢谢!我没想到。哦,我想补充一点,使用\n%c还两次停止了Hello World的回音。。谢谢你能解释一下空白现象吗?非常感谢您的帮助,非常感谢!基本上,当您键入p并按enter键时,程序会将其读取为两个字符“p”和“\n”,我相信Windows上有三个字符“p”、“r”和“\n”。如果scanf格式字符串中没有空格,程序将尝试将空格作为单独的命令处理。