c语言GOTO问题

#include<stdio.h>voidmain(){intnum=0;intchoose=0;inty,n;start:printf("\nEnteranumberb... #include<stdio.h>
void main()

{
int num=0;
int choose=0;
int y,n;
start:
printf ("\nEnter a number between 1 to 31:");
scanf("%d",&num);

if((3<num)&&(num<21)||(num>23)&&(num<32))
{
printf("\n%dth",num);
}
else if((num==1) || (num==21))
{
printf("\n%dst",num);
}
else if((num==2) || (num==22))
{
printf("\n%dnd",num);
}
else if((num==3) || (num==23))
{
printf("\n%drd",num);
}
else
printf("\nyou are an idiot");
printf("\nDid you want to enter a number again:");
scanf("%c",&choose);

if(choose=='y')
goto start;
else
goto end;
end:
getch();

}

循环,按照语句所指示的那样循环。
展开
 我来答
百度网友fb85a79
2008-08-19 · TA获得超过2600个赞
知道小有建树答主
回答量:684
采纳率:0%
帮助的人:310万
展开全部
我终于找到正确的解决方案了,还是在我的参考书上找到的,现在告诉你吧:
scanf会在输入缓冲区留下残留的回车等字符,解决方法是这样的,使用格式修饰符*来解决,该修饰符的含义是忽略由*指定的格式部分(就是不放到任何变量里的意思),所以上面清除残留回车的标准解是这样的:
scanf("%d%*c",&num);
你以后一定要记得在scanf数值时一定要加上%*c呀!

最后你的确不应该使用goto的,程序改成这样试试:
#include<stdio.h>
void main()
{
int num=0;

do

printf ("\nEnter a number between 1 to 31:");
scanf("%d%*c",&num);

if((3<num)&&(num<21)||(num>23)&&(num<32))
{
printf("\n%dth",num);
}
else if((num==1) || (num==21))
{
printf("\n%dst",num);
}
else if((num==2) || (num==22))
{
printf("\n%dnd",num);
}
else if((num==3) || (num==23))
{
printf("\n%drd",num);
}
else
printf("\nyou are an idiot");
printf("\nDid you want to enter a number again:");

while(getch()='y');
/*getch(); */
}
科博尔
2024-10-31 广告
QT400-18是一种球墨铸铁材料,QT代表“球铁”,400表示其抗拉强度为400MPa,18则表示延伸率为18%。该材料属于铁素体型球墨铸铁,具有良好的韧性和塑性,能够承受高冲击振动及扭转等动、静载荷,特别在低温工作条件下具有较好的冲击性... 点击进入详情页
本回答由科博尔提供
domo5231
2008-08-17 · TA获得超过904个赞
知道小有建树答主
回答量:216
采纳率:0%
帮助的人:131万
展开全部
好像goto语句不能这样用吧
goto end;
end: 是可以的
但使用goto向上跳应该会出现数据的溢出
因为原来的那些数据,函数在程序结束前,如果不再被调用,
会自动的销毁,析构。
但是你可以用goto语句跳到数据声明以前。这是可以的。
goto语句还是少用的为好,这会时你的程序结构混乱,不易读懂,而且会产生不可控的问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xtay3
2008-08-17
知道答主
回答量:22
采纳率:0%
帮助的人:13.9万
展开全部
问题出在chosse读入的不是‘y‘而是留在屏幕缓存区的'\n'
有个比较简单的解决方法,把scanf("%c",&choose); 换成
do{scanf("%c",&choose); }while(choose=='\n');
就可以了!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式