首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

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

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

要求输入一串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;
}
这个是正确的程序,你自己跟你的核对一下,呵呵!

热点排行