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