C-为什么这个循环要运行两次



这个函数假设在connect 4游戏中返回1步,但它返回了两次。。。我用调试器完成了这个函数,它似乎跳过了getc((调用,我不知道为什么。非常感谢您的帮助!

char UndoBoard(char x[ROWS][COLS], char * player){
    struct Node* temp = head;
    int i,j;
    temp = temp->next;
    char input = 'q';
    while((input != 'q' || input != 'Q') && temp != NULL){
        for (i=0;i<ROWS;i++){
            for (j=0;j<COLS;j++){
            x[i][j] = temp->data[i][j];
            }
        }
        printBoard(x);
        if(*player == 'O')*player = 'X';
        else *player = 'O';
        printf("b - undo one step more, f - go forward, q - resume game from heren");
        input = getc(stdin);
        if(input == 'q' || input == 'Q')break;
        temp = temp -> next;
    }
}

中使用的逻辑

while((input != 'q' || input != 'Q') && temp != NULL){

存在故障。您需要使用:

while((input != 'q' && input != 'Q') && temp != NULL){

while条件中input的条件是错误的。无论input的值如何,这两项中的一项都将为true,因此循环仅在temp != NULL的情况下终止。

但实际上,您在稍后的循环中使用正确的表达式对用户输入break,因此实际上不需要在循环条件下进行测试。相反,此处仅使用temp

while ( temp != NULL ) {

现在您还可以更改

char input = 'q';

char input;

因为现在不是在循环中读取用户输入之前。

请注意,getc返回一个int,而不是char来提供EOF,您也应该测试。(感谢@chux向我指出这一点(。

当你只是在循环中使用它时,你可以将它移动到(包括所有更改(:

while ( temp != NULL ) {
    int input;
    ...
    if ( input == EOF || input == 'q' || input == 'Q' )
        break;
    temp = temp->next;
}

相关内容

  • 没有找到相关文章

最新更新