重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
1楼答案完全错误,有没有用过goto?
创新互联专注为客户提供全方位的互联网综合服务,包含不限于网站设计制作、成都网站设计、龙里网络推广、微信平台小程序开发、龙里网络营销、龙里企业策划、龙里品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联为所有大学生创业者提供龙里建站搭建服务,24小时服务热线:13518219792,官方网址:www.cdcxhl.com
建议楼主不要用goto语句,程序员最忌讳看goto程序,程序一复杂就很烦,这个程序还简单
先说错误原因:
else if (go==' '); //这里多了个分号";"所以一定执行goto end;
改进:去掉分号就可以了,像二楼那样改达不到程序目的
程序中很多错误,分析下:
#include stdio.h
#include conio.h
int zhong(int a, int b){return (a+b);}
int guo(int a, int b){return (a-b);}
int wo(int a, int b){return (a*b);}
int ni(int a, int b){return (a/b);}
int x,y,z,go; //go最好用char类型
main()
{
int zhong(int a, int b);
int guo(int a, int b);
int wo(int a, int b);
int ni(int a, int b);
get:
printf("please input one number!\n");
scanf("%c",go); //输入时必定包含'字符'和'\r'(回车),这里只读取字符,'\r'留在流中,下次运行时会读取'\r',建议:用getchar().
if(go=='+')
{
int zhong(int a, int b);
scanf("%d%d",x,y);
z=zhong(x,y);
if ((x||y)!=' ') //错误,必定成立,因为(x||y)的值为1或0,永远不等于' '(空格字符)
{
printf ("%d+%d=%d\n",x,y,z);
}
else if ((x||y)==' ') //与上同理
{
printf("end\n");
}
}
else if (go=='-')
{
int guo(int a, int b);
scanf("%d%d",x,y);
z=guo(x,y);
if((x||y)!=' ') //error
{
printf ("%d-%d=%d\n",x,y,z);
}
else if ((x||y)==' ') //error
{
printf("end\n");
}
}
else if (go=='*')
{
int wo(int a, int b);
scanf("%d%d",x,y);
z=wo(x,y);
if((x||y)!=' ') //error
{
printf ("%d*%d=%d\n",x,y,z);
}
else if ((x||y)==' ') //error
{
printf("end\n");}
}
else if (go=='/')
{
int ni(int a, int b);
scanf("%d%d",x,y);
z=ni(x,y);
if ((x||y)!=' ') //error
{
printf ("%d/%d=%d\n",x,y,z);
}
else if ((x||y)==' ') //error
{
printf("end\n");
}
}
else if (go==' '); //错误在这里,去掉";"就可以了
{
goto end;
}
goto get;
end:
printf("ByeBye!\n");
getch();
}
还有,除法会遇到圆整问题,要x,y,z使用double类型
goto语句也称为无条件转移语句,其一般格式如下: goto 语句标号; 其中语句标号是按标识符规定书写的符号, 放在某一语句行的前面,标号后加冒号(:)。语句标号起标识语句的作用,与goto 语句配合使用。
如: label: i++;loop: while(x7);goto loop.
C语言不限制程序中使用标号的次数,但各标号不得重名。goto语句的语义是改变程序流向, 转去执行语句标号所标识的语句。
goto语句通常与条件语句配合使用。可用来实现条件转移, 构成循环,跳出循环体等功能。
go to语句使用原则:
1、使用goto语句只能goto到同一函数内,而不能从一个函数里goto到另外一个函数里。
2、使用goto语句在同一函数内进行goto时,goto的起点应是函数内一段小功能的结束处,goto的目的label处应是函数内另外一段小功能的开始处。
3、不能从一段复杂的执行状态中的位置goto到另外一个位置,比如,从多重嵌套的循环判断中跳出去就是不允许的。
4、应该避免向两个方向跳转。这样最容易导致"面条代码"。
以上内容参考:百度百科—goto语句
goto语句称为无条件转移语句,通常与条件语句配合使用。可用来实现条件转移, 构成循环,跳出循环体等功能。但是,在结构化程序设计中一般不主张使用goto语句, 以免造成程序流程的混乱,使理解和调试程序都产生困难。而且,goto语句一般可以用其他语句来代替。
当然,goto语句也有其优势,例如可以用goto语句一次性跳出多重循环,而不需要使用多个break语句一步一步地跳出,从而使代码更为简洁。
在C语言中使用goto语句的注意事项如下:
使用goto语句只能转移到到同一函数内,而不能从一个函数里转移到另外一个函数里。
使用goto语句在同一函数内进行转移时,转移的起点应是函数内一段小功能的结束处,goto的目的label处应是函数内另外一段小功能的开始处。
不能从一段复杂的执行状态中的位置goto到另外一个位置,比如,从多重嵌套的循环判断中跳出去就是不允许的。
应该避免向两个方向跳转。这样最容易导致“面条代码”。
所以说,goto语句要小心使用。