读书人

一个基本程序里的少量异常,紧急求教修

发布时间: 2012-02-28 13:06:34 作者: rapoo

一个基本程序里的少量错误,紧急求教修改!!
这个程序是个网球的记分牌,以前问过一次了,最后还有一点错误希望指正.

要求输入一串A,B和S.(例如AAABBBBAASAABBS)

A代表A队得到一分,B如此类推,S代表把当前的分数print一次.

具体是从A队开始轮流发球,哪队发球就一开始显示Team X to serve:
第二行显示当前是局数的比分,
第三行显示当前每局里的比分,
还有些细节在代码里有说明.

现在的问题是当我只输入S,也就是大家都没开始比赛的时候print的结果是正确的,但是如果我有输入A或者B的话分数不单没加而且不显示任何东西程序就终止了,问题出在哪?

求教!!!!


#include <stdio.h>

int main(void)
{
int pa=0;
int pb=0;
int game=1;
int seta=0;
int setb=0;
int gameAw=0;
int gameBw=0;
char ch;

printf( "Enter A,B and S: ");
scanf( "%c ",&ch);

while(scanf(%c,&ch)!=EOF)
{


if (ch== 'A ')

pa=pa+15;
game=game+1;

if (ch== 'B ')

pb=pb+15;
game=game+1;

if((pa==55)&&(pa-pb> =25))

gameAw=gameAw+1;
pa=0;
pb=0;

if((pb==55)&&(pb-pa> =25))

gameBw=gameBw+1;
pa=0;
pb=0;

if ((pa> =45)&&(pb> =45)&&(pa-pb==30))

gameAw=gameAw+1;
pa=0;
pb=0;

if ((pa> =45)&&(pb> =45)&&(pb-pa==30))

gameBw=gameBw+1;
pa=0;
pb=0;

if (gameAw==6)
seta=seta+1;

if (gameBw==6)
setb=setb+1;

}


if ((game==1)&&(ch== 'S '))
{
printf( "Team A to serve:\n " "0 - 0\n " "Love - All\n ");
}
if((pa!=0)&&(pb!=0)&&(game%2==0)&&(ch== 'S '))
{
printf( "Team A to sever:\n ");
printf( "%d-%d\n ",gameAw,gameBw);
if((pa <45)&&(pb <45)&&(pa!=pb)) printf( "%i-%i\n ",pa,pb);
else if((pa==0)&&(pb> 0)&&(pb <45)) printf( "Love-%i\n ",pb);
else if((pb==0)&&(pa> 0)&&(pa <45)) printf( "%i-Love\n ",pa);
else if((pa> 0)&&(pa <45)&&(pb> 0)&&(pb <45)&&(pa=pb)) printf( "%i-All\n ",pa);
else if((pa> =45)&&(pb> =45)&&(pa-pb==0)) printf( "Duece\n ");
else if((pa> =45)&&(pb> =45)&&(pa-pb==15)) printf( "A-40\n ");
else if((pa> =45)&&(pb> =45)&&(pb-pa==15)) printf( "40-A\n ");
}
else if((pa!=0)&&(pb!=0)&&(game%2!=0)&&(ch== 'S '))
{
printf( "Team B to sever:\n ");
printf( "%d-%d\n ",gameBw,gameAw);
if((pa <45)&&(pb <45)) printf( "%i-%i\n ",pb,pa);
else if((pa==0)&&(pb> 0)&&(pb <45)) printf( "%i-Love\n ",pb);
else if((pb==0)&&(pa> 0)&&(pa <45)) printf( "Love-%i\n ",pa);
else if((pa> 0)&&(pa <45)&&(pb> 0)&&(pb <45)&&(pa=pb)) printf( "%i-All\n ",pa);
else if((pa> =45)&&(pb> =45)&&(pb-pa==0)) printf( "Duece\n ");
else if((pa> =45)&&(pb> =45)&&(pb-pa==15)) printf( "A-40\n ");
else if((pa> =45)&&(pb> =45)&&(pa-pb==15)) printf( "40-A\n ");
}

return 0;
}

[解决办法]
if (ch== 'A ')

pa=pa+15;
game=game+1;

应该改为
if (ch== 'A ')
{
pa=pa+15;
game=game+1;

}

下面的一样的改法

————————————————
....

if (gameBw==6)
setb=setb+1;

} //这个 }放在后面
这一句的前面

return 0;
}
[解决办法]
while(scanf(%c,&ch)!=EOF) 改 while(scanf( "%c ",&ch)!=EOF)
[解决办法]
#include <stdio.h>

int main(void)
{
int pa=0;
int pb=0;
int game=1;
int seta=0;
int setb=0;
int gameAw=0;
int gameBw=0;
char ch;

printf( "Enter A,B and S: ");
//scanf( "%c ",&ch); 这句多余的

//while(scanf(%c,&ch)!=EOF)


while (scanf( "%c ", &ch) != EOF)
{
getchar ();// 吃掉回车符
if (ch== 'A ')// if语句包含以下两条语句,所以要将它们包含进来
{
pa=pa+15;
game=game+1;
}

if (ch== 'B ')// 同上
{
pb=pb+15;
game=game+1;
}

if((pa> =55)&&(pa-pb> =25))//是否应该把pa == 55这个条件改一下?同上
{
gameAw=gameAw+1;
pa=0;
pb=0;
}

if((pb> =55)&&(pb-pa> =25))// 同上
{
gameBw=gameBw+1;
pa=0;
pb=0;
}

if ((pa> =45)&&(pb> =45)&&(pa-pb==30))// 同上
{
gameAw=gameAw+1;
pa=0;
pb=0;
}

if ((pa> =45)&&(pb> =45)&&(pb-pa==30))// 同上
{
gameBw=gameBw+1;
pa=0;
pb=0;
}

if (gameAw==6)
seta=seta+1;

if (gameBw==6)
setb=setb+1;

if ((game==1)&&(ch== 'S '))
{
printf( "Team A to serve:\n " "0 - 0\n " "Love - All\n ");
}
if((pa!=0)&&(pb!=0)&&(game%2==0)&&(ch== 'S '))
{
printf( "Team A to sever:\n ");
printf( "%d-%d\n ",gameAw,gameBw);
if((pa <45)&&(pb <45)&&(pa!=pb)) printf( "%i-%i\n ",pa,pb);
else if((pa==0)&&(pb> 0)&&(pb <45)) printf( "Love-%i\n ",pb);
else if((pb==0)&&(pa> 0)&&(pa <45)) printf( "%i-Love\n ",pa);
else if((pa> 0)&&(pa <45)&&(pb> 0)&&(pb <45)&&(pa=pb)) printf( "%i-All\n ",pa);
else if((pa> =45)&&(pb> =45)&&(pa-pb==0)) printf( "Duece\n ");
else if((pa> =45)&&(pb> =45)&&(pa-pb==15)) printf( "A-40\n ");
else if((pa> =45)&&(pb> =45)&&(pb-pa==15)) printf( "40-A\n ");
}
else if((pa!=0)&&(pb!=0)&&(game%2!=0)&&(ch== 'S '))
{
printf( "Team B to sever:\n ");
printf( "%d-%d\n ",gameBw,gameAw);
if((pa <45)&&(pb <45)) printf( "%i-%i\n ",pb,pa);
else if((pa==0)&&(pb> 0)&&(pb <45)) printf( "%i-Love\n ",pb);
else if((pb==0)&&(pa> 0)&&(pa <45)) printf( "Love-%i\n ",pa);
else if((pa> 0)&&(pa <45)&&(pb> 0)&&(pb <45)&&(pa=pb)) printf( "%i-All\n ",pa);
else if((pa> =45)&&(pb> =45)&&(pb-pa==0)) printf( "Duece\n ");
else if((pa> =45)&&(pb> =45)&&(pb-pa==15)) printf( "A-40\n ");
else if((pa> =45)&&(pb> =45)&&(pa-pb==15)) printf( "40-A\n ");
}
}

return 0;
}
[解决办法]
#include <stdio.h>

int main(void){
int pa=0;
int pb=0;
int game=1;
int seta=0;
int setb=0;
int gameAw=0;
int gameBw=0;
char ch;

printf( "Enter A,B and S: ");
while((ch=getchar())!= '\n ')
{
if (ch== 'A '){

pa=pa+15;
game=game+1;
}
if (ch== 'B '){

pb=pb+15;
game=game+1;
}
if((pa==60)&&(pb <=30)){

gameAw=gameAw+1;
pa=0;
pb=0;
}
if((pb==60)&&(pa <=30)){

gameBw=gameBw+1;
pa=0;
pb=0;
}
if ((pa> =45)&&(pb> =45)&&(pa-pb==30)){



gameAw=gameAw+1;
pa=0;
pb=0;
}
if ((pa> =45)&&(pb> =45)&&(pb-pa==30)){

gameBw=gameBw+1;
pa=0;
pb=0;
}
if (gameAw==6){

seta=seta+1;
}
if (gameBw==6){

setb=setb+1;
}

if ((game==1)&&(ch== 'S ')){
printf( "Team A to serve:\n " "0 - 0\n " "Love - All\n ");
}

if((game%2==0)&&(ch== 'S ')){

printf( "Team A to sever:\n ");
printf( "%d-%d\n ",gameAw,gameBw);

if((pa <45)&&(pb <45)&&(pa!=pb)) printf( "%d-%d\n ",pa,pb);
else if((pa==0)&&(pb> 0)&&(pb <45))printf( "Love-%d\n ",pb);
else if((pb==0)&&(pa> 0)&&(pa <45))printf( "%d-Love\n ",pa);
else if((pa> 0)&&(pa <45)&&(pb> 0)&&(pb <45)&&(pa=pb))printf( "%d-All\n ",pa);
else if((pa> =45)&&(pb> =45)&&(pa-pb==0))printf( "Duece\n ");
else if((pa> =45)&&(pb> =45)&&(pa-pb==15))printf( "A-40\n ");
else if((pa> =45)&&(pb> =45)&&(pb-pa==15))printf( "40-A\n ");
}
else if((game> 1)&&(game%2!=0)&&(ch== 'S ')){

printf( "Team B to sever:\n ");
printf( "%d-%d\n ",gameBw,gameAw);

if((pa <45)&&(pb <45)&&(pa!=pb))printf( "%d-%d\n ",pb,pa);
else if((pa==0)&&(pb> 0)&&(pb <45))printf( "%d-Love\n ",pb);
else if((pb==0)&&(pa> 0)&&(pa <45))printf( "Love-%d\n ",pa);
else if((pa> 0)&&(pa <45)&&(pb> 0)&&(pb <45)&&(pa=pb))printf( "%d-All\n ",pa);
else if((pa> =45)&&(pb> =45)&&(pb-pa==0))printf( "Duece\n ");
else if((pa> =45)&&(pb> =45)&&(pb-pa==15))printf( "A-40\n ");
else if((pa> =45)&&(pb> =45)&&(pa-pb==15))printf( "40-A\n ");
}
}

return 0;
}
这个是正确的程序,你自己跟你的核对一下,呵呵!

读书人网 >C语言

热点推荐