为什么在循环之后会出现换行符

时间:2015-02-08 12:56:34

标签: c newline counter scanf

所以我试图让一个点球得分手。 我首先将它设置为5轮,当分数相关时,它将重复另外5轮。问题是它后面似乎出现了换行符。

#include <stdio.h>

int main()
{
    int penalty2=0,penalty1=0,i=0;
    char home[15]="HOME",away[15]="AWAY";

    printf("\nSTARTS PENALTY SHOOTOUT\n\n\t\t%s\t\t VS\t\t %s\n\n",home,away);
    do{
        char penal1=' ',penal2=' ',penal3=' ',penal4=' ',penal5=' ',penal6=' ',penal7=' ',penal8=' ',penal9=' ',penal10=' ';
        for(i=1;i<=10;++i)
        {
            printf("\nEnter X for MISS and O for GOAL\n\n:>>");
            if(i==1)
            {
                scanf("%c",&penal1);
                printf("\n\n%-15s\t\t %c %c %c %c %c \n-------------------------------------\n%-15s\t\t %c %c %c %c %c \n\n",home,penal1,penal2,penal3,penal4,penal5,away,penal6,penal7,penal8,penal9,penal10);
                if (penal1=='O'||penal1=='o')
                {
                    ++penalty1;
                }
            }
            else if(i==2)
            {
                scanf(" %c",&penal6);
                printf("\n\n%-15s\t\t %c %c %c %c %c \n-------------------------------------\n%-15s\t\t %c %c %c %c %c \n\n",home,penal1,penal2,penal3,penal4,penal5,away,penal6,penal7,penal8,penal9,penal10);
                if (penal6=='O'||penal6=='o')
                {
                    ++penalty2;
                }
            }
            else if(i==3)
            {
                scanf(" %c",&penal2);
                printf("\n\n%-15s\t\t %c %c %c %c %c \n-------------------------------------\n%-15s\t\t %c %c %c %c %c \n\n",home,penal1,penal2,penal3,penal4,penal5,away,penal6,penal7,penal8,penal9,penal10);
                if (penal2=='O'||penal2=='o')
                {
                    ++penalty1;
                }
            }
            else if(i==4)
            {
                scanf(" %c",&penal7);
                printf("\n\n%-15s\t\t %c %c %c %c %c \n-------------------------------------\n%-15s\t\t %c %c %c %c %c \n\n",home,penal1,penal2,penal3,penal4,penal5,away,penal6,penal7,penal8,penal9,penal10);
                if (penal7=='O'||penal7=='o')
                {
                    ++penalty2;
                }
            }
            else if(i==5)
            {
                scanf(" %c",&penal3);
                printf("\n\n%-15s\t\t %c %c %c %c %c \n-------------------------------------\n%-15s\t\t %c %c %c %c %c \n\n",home,penal1,penal2,penal3,penal4,penal5,away,penal6,penal7,penal8,penal9,penal10);
                if (penal3=='O'||penal3=='o')
                {
                    ++penalty1;
                }
            }
            else if(i==6)
            {
                scanf(" %c",&penal8);
                printf("\n\n%-15s\t\t %c %c %c %c %c \n-------------------------------------\n%-15s\t\t %c %c %c %c %c \n\n",home,penal1,penal2,penal3,penal4,penal5,away,penal6,penal7,penal8,penal9,penal10);
                if (penal8=='O'||penal8=='o')
                {
                    ++penalty2;
                }
            }
            else if(i==7)
            {
                scanf(" %c",&penal4);
                printf("\n\n%-15s\t\t %c %c %c %c %c \n-------------------------------------\n%-15s\t\t %c %c %c %c %c \n\n",home,penal1,penal2,penal3,penal4,penal5,away,penal6,penal7,penal8,penal9,penal10);
                if (penal4=='O'||penal4=='o')
                {
                    ++penalty1;
                }
            }
            else if(i==8)
            {
                scanf(" %c",&penal9);
                printf("\n\n%-15s\t\t %c %c %c %c %c \n-------------------------------------\n%-15s\t\t %c %c %c %c %c \n\n",home,penal1,penal2,penal3,penal4,penal5,away,penal6,penal7,penal8,penal9,penal10);
                if (penal9=='O'||penal9=='o')
                {
                    ++penalty2;
                }
            }
            else if(i==9)
            {
                scanf(" %c",&penal5);
                printf("\n\n%-15s\t\t %c %c %c %c %c \n-------------------------------------\n%-15s\t\t %c %c %c %c %c \n\n",home,penal1,penal2,penal3,penal4,penal5,away,penal6,penal7,penal8,penal9,penal10);
                if (penal5=='O'||penal5=='o')
                {
                    ++penalty1;
                }
            }
            else if(i==10)
            {
                scanf(" %c",&penal10);
                printf("\n\n%-15s\t\t %c %c %c %c %c \n-------------------------------------\n%-15s\t\t %c %c %c %c %c \n\n",home,penal1,penal2,penal3,penal4,penal5,away,penal6,penal7,penal8,penal9,penal10);
                if (penal10=='O'||penal10=='o')
                {
                    ++penalty2;
                }
            }
        }
    }
    while (penalty1 == penalty2);

    printf("END OF PENALTY KICK\n\n\t\t%s\t\t VS\t\t %s\n\n\t\t %d\t\t\t\t  %d",home,away,penalty1,penalty2);



    return 0;
}

示例截图:http://s18.postimg.org/eobqwmd6h/masalah_programming.png

(我不能直接在这里上传,仍然没有足够的声誉)

1 个答案:

答案 0 :(得分:2)

在第二次循环中,scanf("%c",&penal1);正在扫描前一个用户输入的'\n'。添加前面的空格,就像在其他地方使用的代码一样,以消耗所有前面的空格。

scanf(" %c",&penal1);  // added space.

代码不仅要检查'O''o',还应检查'X''x'以确定没有其他输入。