我正在为我的计算机课程编写一个能够打网球的程序。该计划为团队提供输入,作为' 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);
}