标题:~程序结尾时`~出现错误~
只看楼主
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
结帖率:66.67%
 问题点数:0 回复次数:11 
~程序结尾时`~出现错误~

~~ 我编的这个程序主要是是最后错了错误`~`
`我希望程序要做的事情完成后` ~~出现一个选择``提示我们是不是~再运行一次程序`~再用一次程序``


我把提示程序提取出来了`~:


#include<stdio.h>

void yc(void);
void ifw(void); /*当输入错误时`提示重新输入*/
void welcome(void); /*退出程序时的一段输出*/
char gorq(void); /*提示用户是否还想继续运行程序*/


int main()
{
char b;

begain:b=gorq(); /*调用提示*/
/*如果想再运行就输入Y(y),想退出就输入N(n)*/
end:if ( (b=='y') || (b=='Y') )
goto begain;
else if ( (b=='n') || (b=='N') )
welcome();
else {
ifw();
scanf("%c",&b);
goto end;
}
printf ("\n\n\n\n"); /*这个是用反复来调试程序时~不会看晕用的.可以不看.*/
return 0;

}

/*表示欢迎使用*/

void welcome()
{
printf ("~.~ Welcome to use ~.~\n");
printf ("~.~ Welcome to use ~.~\n");
printf ("~.~ Welcome to use ~.~\n");
printf ("~.~ Welcome to use ~.~\n");
}

/*提示用户进行选择*/

char gorq(void)
{
char b;
printf ("Do you want to go on change?\n\n");
printf ("Chose Y to go on.\n");
printf ("Chose N to get out.\n");
scanf ("%c",&b);
return b;
}

/*输入错误时的提示*/

void ifw(void)
{
printf ("\n\nWrong chosing!!!\n");
printf ("Please chose again.\n");
yc();
}


void yc(void)
{
printf ("Your chosing is:");
}



程序出错在与`~除了输入N或n没错以外`~

输入其他非N(n)或非Y(y)~~时~~回出现 2 次输入错误提示`~

而输入Y或y时~~程序回从头再来一次`~但是回多出一个 输入错误提示(当程序第一次执行完后``走到这里也会自然的回

出 输入错误提示
)



很麻烦的是我用了GOTO`~~
因为想不到用别的什么方法了``

请各位朋友指出错误`~给点提示``多谢多谢`
能给经验的~~多多传授~`THANKS~~`

如果需要原来的整段代码``
就在下面`` 这个程序用来转换华氏与摄氏温度`~
先选华转为摄`~还是摄转为华```
然后选单个的温度转换``还是连续的多个温度转换``


#include<stdio.h>

void caidan(void); /*一级菜单``选华转摄或摄转华*/
void cftc(void); /*二级菜单``华转摄``选单个温度转换或是多个连续温度转换*/
void cctf(void); /*二级菜单``摄转华``选单个温度转换或是多个连续温度转换*/
void foto(void); /*华转摄```单个温度转换*/
void fsts(void); /*华转摄```多个温度转换*/
void coto(void); /*摄转华```单个温度转换*/
void csts(void); /*摄转华```多个温度转换*/
void yc(void); /*下面的函数上面已经说过了*/
void bar(void);
void ifw(void);
void welcome(void);
char gorq(void);


int main()
{

int c;
char b;
/*调用菜单选1 华转摄 选2 摄转华 不是1也不是2 提示是如错误 重新输入*/
begain:caidan();
yc();
scanf("%d",&c);
printf("\n");

mid:if ( c == 1 )
cftc();
else if ( c == 2 )
cctf();
else
{
ifw();
scanf("%d",&c);
goto mid;
}
/*转换完后``提示用户还是否再次转换*/

b=gorq();
end:if ( (b=='y') || (b=='Y') )
goto begain;
else if ( (b=='n') || (b=='N') )
welcome();
else
{
ifw();
scanf("%c",&b);
goto;
}
return 0;

}

void welcome()
{
printf("~.~ Welcome to use ~.~\n");
printf("~.~ Welcome to use ~.~\n");
printf("~.~ Welcome to use ~.~\n");
printf("~.~ Welcome to use ~.~\n");
}

char gorq(void)
{
char b;
printf ("Do you want to go on change?\n\n");
printf ("Chose Y to go on.\n");
printf ("Chose N to get out.\n");
scanf ("%c",&b);
return b;
}

/*一级菜单*/

void caidan(void)
{
bar();
printf (" This is a programing of changing fahr and celsisu. \n");
printf (" Please chose your thinking. \n");
printf (" 1.Fahr chagened into celsisu. \n");
printf (" 2.Celsisu changened into Fahr. \n");
bar();
printf("\n");
}


void ifw(void)
{
printf ("Wrong chosing!!!\n");
printf ("Please chose again.\n");
yc();
}


void yc(void)
{
printf ("Your chosing is:");
}

void bar(void)
{
printf ("**************************************************************\n");
}

/*二级菜单*/

void cftc(void)
{

int c;

bar();
printf ("Which way do you want to chose to change?\n");
printf (" 1.Put one f,get one c. \n");
printf (" 2.Put from f1 to f2,get from c1 to c2. \n");
bar();
printf ("\n");
yc();
scanf ("%d",&c);
printf("\n");

here:if ( c == 1 )
foto();
else if ( c == 2 )
fsts();
else

{
ifw();
scanf("%d",&c);
goto here;
}

}


/*同上*/
void cctf(void)
{

int c;

bar();
printf ("Which way do you want to chose to change?\n");
printf (" 1.Put one c,get one f. \n");
printf (" 2.Put form c1 to c2,get from f1 to f2. \n");
bar();
printf ("\n");
yc();
scanf ("%d",&c);
printf("\b");

there:if ( c == 1 )
coto();
else if ( c == 2)
csts();
else

{
ifw();
scanf("%d",&c);
goto there;
}

}

/*单温度转换*/


void foto(void)
{

float fahr;

printf ("Please put the fahr you want to change:");
scanf ("%f",&fahr);
printf ("\nThe fahr you want to change is:%.2f.\n" , fahr);
printf ("Thr celsisu changed out is:%.2f\n\n" , 5.0 * (fahr - 32.0) / 9.0 );

}


/*同上*/
void coto(void)
{

float celsisu;

printf ("Please put the celsisu you want to change:");
scanf ("%f",&celsisu);
printf ("\nThe celsisu you want ti change is:%.2f.\n" , celsisu);
printf ("The fahr change out is:%.2f.\n\n" , ((9.0*celsisu)+(32.0*5.0)) / 5.0);

}

/*多温度转换*/

void fsts(void)
{

float fahr1,fahr2,step,t;

printf ("Please put the frist fahr:");
scanf ("%f",&fahr1);
printf ("Please put the secend fahr:");
scanf ("%f",&fahr2);
printf ("Please put the step:"); /*输入连续的温度之间的间隔(比如1-100度~只看整十的度数`~间隔就是十)*/
scanf ("%f",&step);

if (fahr1 > fahr2) /*将输入的温度按由小到大排列*/

{
t = fahr1;
fahr1 = fahr2;
fahr2 = t;
}

printf ("\nFAHR1 CELSISU1\n\n");

for ( ; fahr1<=fahr2 ; fahr1 += step )
printf ( "%.2f %.2f\n" , fahr1, 5.0 * (fahr1-32.0) / 9.0);

printf ("\nFAHR2 CELSISU2\n");

}

/*同上*/


void csts(void)
{

float celsisu1,celsisu2,step,t;

printf ("Please put the frist celsisu:");
scanf ("%f",&celsisu1);
printf ("Please put the secend celsisu:");
scanf ("%f",&celsisu2);
printf ("Please put the step:");
scanf ("%f",&step);

if ( celsisu1>celsisu2 )

{
t=celsisu1;
celsisu1=celsisu2;
celsisu2=t;
}

printf ("\nCELSISU1 FAHR1\n\n");

for ( ; celsisu1 <= celsisu2 ; celsisu1 += step )
printf ( "%.2f %.2f\n" , celsisu1,((9.0 * celsisu1)+(32.0*5.0)) / 5.0);

printf ("\nCELSISU2 FAHR2\n");

}

搜索更多相关主题的帖子: void 结尾 提示 char 
2006-12-28 20:31
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
得分:0 
if ( (b=='y') || (b=='Y') )
goto begain;

改为
if ( (b=='y') || (b=='Y') ) {scanf("%c",b); goto begain; }

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2006-12-28 21:25
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
得分:0 
scanf("%c",b);
清空键盘缓冲

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2006-12-28 21:25
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
得分:0 

诸葛亮``
能告诉我`
错误的地方和原因吗`~?

我不明白什么是"清空键盘缓冲"``以及为什么要那样改


女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2006-12-28 21:34
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
得分:0 
哈哈哈哈哈哈 ~~~~~
我终于把所有问题全部摆平了````~~~~~~但是```

虽然到现在我还不明白我是怎么把问题解决的``但是有点点感觉``却说不出来```

事实证明``不是我用GOTO 用错了``而是错在输入上!!!


看了孔明的提示后`~
我在每个``ifw()后多加了一个scanf("%c",b)或是scanf("%c",b)~~~进行`我不明白的"清空键盘缓冲"`~`

结果``程序完全成功真确的运行``完全符合我的意思`~


可是我还是不明白~我是怎么做到的`~


孔明``解铃还需系铃人``~`
你要解释清楚啊`~


其他知道的朋友也说说`~~
让知道然`~也知其所以然``

女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2006-12-28 22:27
senyee
Rank: 1
等 级:新手上路
帖 子:422
专家分:0
注 册:2006-11-28
得分:0 

吸收回车字符~~


菜鸟~~请多指教~~
2006-12-29 13:41
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
得分:0 
以下是引用senyee在2006-12-29 13:41:03的发言:

吸收回车字符~~

senyee说的正确,楼主如果还不明白请接着问


My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2006-12-29 16:24
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
得分:0 
我想知道3点`:

一: 加上去的scanf是不是用来吸收我们输入字符后 再敲的 回车键 ?
我以前遍程序时用scanf都不回出现这样的`~

二: 为什么回出现这种有缓冲的情况?我以前遍程序用scanf时~却没遇见过这样的情况。

三: 那么什么情况下应该要加scanf吸收缓冲`~什么情况下不吸收缓冲啊?


女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2006-12-30 16:17
zhanghuan_10
Rank: 1
等 级:新手上路
威 望:2
帖 子:751
专家分:0
注 册:2006-10-25
得分:0 
我想是在处理字符的时候吧,回车也是字符,也可用getchar()来读取那个回车符,读完之后不做处理。

该学习了。。。
2006-12-30 17:24
djp
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2006-12-28
得分:0 

好像输入字符时才会出现这种情况,(回车也是字符)
建议在输入字符前加,但是不知道C里面有没有清空键盘缓存的函数,有的话调用一下就行了。
C++里有cin.ignore();
C里面不清楚。


2006-12-30 17:26



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-112824-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.041091 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved