vc这种情况如何避免使用goto语句?
我编程时经常遇到这种情况,就是程序询问要做什么,如果输入1就执行函数fun1(),,如果输入2就执行函数fun2(),如果输入其他的东西就用printf显示输入错误,请重...
我编程时经常遇到这种情况,就是程序询问要做什么,如果输入1就执行函数fun1(),,如果输入2就执行函数fun2(),如果输入其他的东西就用printf显示输入错误,请重新输入,然后就用goto语句返回到前面。但是有人说goto语句应该少用,因为不符合结构化编程的思想,但是如果不用的话我又解决不了这个问题,请大家支支招。
举例如下:
#include<stdio.h>
#include<conio.h>
void main()
{
retry:function();
printf("是否继续?输入y继续,输入n结束程序:");
char a;
reput:scanf("%c",&a);
if(a=='y')goto retry;
else if(a=='n')getch();
else{printf("输入错误,请重新输入:");goto reput;}
其中function()是某一段省略了的程序,比如输入一个数,验证是不是素数。就是说,程序开始要输入一个数,验证是不是素数,验证完了之后就问要不要继续验证其他的数,输入y就用goto回到程序开头继续验证,输入n就结束程序,输入其他的乱七八糟的东西就说输错了,用goto回到前面再输入。这样,就要用两个goto,太麻烦。怎么样不用goto来解决这个问题? 展开
举例如下:
#include<stdio.h>
#include<conio.h>
void main()
{
retry:function();
printf("是否继续?输入y继续,输入n结束程序:");
char a;
reput:scanf("%c",&a);
if(a=='y')goto retry;
else if(a=='n')getch();
else{printf("输入错误,请重新输入:");goto reput;}
其中function()是某一段省略了的程序,比如输入一个数,验证是不是素数。就是说,程序开始要输入一个数,验证是不是素数,验证完了之后就问要不要继续验证其他的数,输入y就用goto回到程序开头继续验证,输入n就结束程序,输入其他的乱七八糟的东西就说输错了,用goto回到前面再输入。这样,就要用两个goto,太麻烦。怎么样不用goto来解决这个问题? 展开
展开全部
#include<stdio.h>
#include<conio.h>
void function()
{
printf("是否继续?输入y继续,输入n结束程序:\n");
}
void main()
{
char a;
function();
while(a=getch())
{
if(a=='y') function();
else if(a=='n') break;
else printf("输入错误,请重新输入:\n");
}
getch();
}
就是把printf出来那个提示语放在函数的最后,可以去掉一个goto;
再用一个getch来判断,不过注意的是getch并不显示你输入的值。
#include<conio.h>
void function()
{
printf("是否继续?输入y继续,输入n结束程序:\n");
}
void main()
{
char a;
function();
while(a=getch())
{
if(a=='y') function();
else if(a=='n') break;
else printf("输入错误,请重新输入:\n");
}
getch();
}
就是把printf出来那个提示语放在函数的最后,可以去掉一个goto;
再用一个getch来判断,不过注意的是getch并不显示你输入的值。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你C语言才学到分支语句,还没有学循环语句吧!你用goto语句设计出循环,已经很了不起了!
这种情况最好用循环:
main(){
char ch;
printf("choose fun:\n");
while(ch=getchar()){
switch(ch){
case '0':exit;
case '1':fun1();break;
case '2':fun2();break;
default:printf("input 1-2 please:\n");
}
printf("choose fun:\n");
}
}
如果有多重循环嵌套,当满足条件需要跳出循环,用goto是最简单有效方法
while(1){
while(2){
while(3){
if(条件)goto end;
}
}
}
end: printf("i am out!");
这种情况最好用循环:
main(){
char ch;
printf("choose fun:\n");
while(ch=getchar()){
switch(ch){
case '0':exit;
case '1':fun1();break;
case '2':fun2();break;
default:printf("input 1-2 please:\n");
}
printf("choose fun:\n");
}
}
如果有多重循环嵌套,当满足条件需要跳出循环,用goto是最简单有效方法
while(1){
while(2){
while(3){
if(条件)goto end;
}
}
}
end: printf("i am out!");
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以了,无所谓用不用goto,当年是当年现在是现在,何况goto有时还是不得不用的。
比如,像这种情况不用goto还不行:
size_t a,b,c; //无符号整形,在stddef.h中
for(a=0;a!=100;++a)
for(b=0;b!=100;++b)
for(c=0;c!=100;++c)
if(a+b+c==100)
goto end;
end:
fprintf(stderr,"%u\n",a+b+c);
你这程序实际上有严重问题.
void main()是错误的
比如,像这种情况不用goto还不行:
size_t a,b,c; //无符号整形,在stddef.h中
for(a=0;a!=100;++a)
for(b=0;b!=100;++b)
for(c=0;c!=100;++c)
if(a+b+c==100)
goto end;
end:
fprintf(stderr,"%u\n",a+b+c);
你这程序实际上有严重问题.
void main()是错误的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
do
{
function();
printf("是否继续?输入y继续,输入n结束程序:");
while(scanf("%c%*c",&a)&&a!='y'&&a!='n')
printf("输入错误,请重新输入:");
}
while(a=='y');
scanf的返回值请参考 百度百科scanf
scanf中的那个%*c是用来读掉你输完数据按的那个回车,类似的如果输的是字符串的话可以用%s%*c
{
function();
printf("是否继续?输入y继续,输入n结束程序:");
while(scanf("%c%*c",&a)&&a!='y'&&a!='n')
printf("输入错误,请重新输入:");
}
while(a=='y');
scanf的返回值请参考 百度百科scanf
scanf中的那个%*c是用来读掉你输完数据按的那个回车,类似的如果输的是字符串的话可以用%s%*c
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
该用的时候就用,标准不推介使用不是说不能用,只要goto的范围不要太大,结构不要太复杂就行
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询