C - getchar()产生错误的输出

时间:2014-09-01 09:06:16

标签: c getchar

我正在为我的计算机课程编写一个能够打网球的程序。该计划为团队提供输入,作为' A'和' B'对于团队而言,' S'打印出分数。它工作正常,直到达到deuce功能。

我遇到的问题是一次多个输入会破坏程序。因此,一旦平局开始,输入:' A,Enter,B,Enter,B,Enter',工作正常,但是A,B,B,Enter'打破它。不幸的是,uni的自动标记只是在它上面插入长串的字符。这也使得测试变得困难,因为我无法看到每个输入阶段发生的事情。

我有一段时间循环试图消耗我得到的一些额外角色,但它仍然不太正确。在输入“A' A'之前我遇到了问题。我会输出' AA'我认为它类似。

我只是在学习,所以我确信我只是误解了如何使用getchar()函数。另外我知道我的代码中有一部分可能更简单,但它很快就会到期而且我还没有,并且可能没有时间来正确地优化它。

感谢您的帮助!!!

编辑:对不起,回过头来看我的问题我可以看到我措辞得很厉害。它永远不会突破#39;和-Wall没有错误或警告,它只是输出错误。例如,输入' ABB'应该这样:

答:该计划认为A有优势。

B:程序认为B已经均衡,所以deuce重新启动。

B:B现在应该具有优势。

(如果我在每次输入后点击'输入'上面的输出正是发生的事情。) 但如果' ABB'输入所有内容,然后输入'被压下它完全退出了deuce功能,认为' B'赢得了平分,并继续正常的网球比赛。所以我认为正在发生的事情是额外的' B'正在通过while循环传递。

void deuce ( int data_array[], int set_tally[], int team_select ){

int A_deuce_points = 0;
int B_deuce_points = 0;
int server = data_array[data_array[8]];
int ch = 0;
int winner = 0;

while ( A_deuce_points < 2 && B_deuce_points < 2){ // needs to be &&

    ch = getchar();
    printf("ch = %d\n", ch);
    while ( ch == 10 || ch == -1 || ch == '\n' ){
        ch = getchar();

    }

    if ( ch == 'A' ){

        A_deuce_points++;
    }
    else if (ch == 'B'){

        B_deuce_points++;
    }
    else if (ch == 'S' ){

        printf("Team %c to serve:\n", server);

        if ( server == 'A' ){

            // Print sets
            winner = server;
            print_completed_sets( set_tally, winner );

            // Print games
            printf("%d-%d\n", data_array[4], data_array[5]);

            if(A_deuce_points == B_deuce_points ){
                printf("Deuce\n");
                A_deuce_points = 0;
                B_deuce_points = 0;
            }
            if(A_deuce_points - B_deuce_points == 1 ){
                printf("Advantage Server\n");
            }
            if(B_deuce_points - A_deuce_points == 1 ){
            printf("Advantage Receiver\n");
            }
        }
        else if ( server == 'B' ){

            // Print sets
            winner = server;
            print_completed_sets( set_tally, winner );

            // Print games
            printf("%d-%d\n", data_array[5], data_array[4]);

            if(A_deuce_points == B_deuce_points ){
                printf("Deuce\n");
                A_deuce_points = 0;
                B_deuce_points = 0;
            }
            if(B_deuce_points - A_deuce_points == 1 ){
                printf("Advantage Server\n");
            }
            if(A_deuce_points - B_deuce_points == 1 ){
            printf("Advantage Receiver\n");
            }
        }
    }

}// end while loop

if ( A_deuce_points == 2 ){

    data_array[4]++;


}
else if ( B_deuce_points == 2 ){

    data_array[5]++;

}

data_array[2] = 0;
data_array[3] = 0;
A_deuce_points = 0;
B_deuce_points = 0;
change_serve( data_array);
}

0 个答案:

没有答案