while (1) {
    palindrome = my_string_init_default();
    while (1) {
        ch = getc(stdin);

        if (ch == '\n') {

            break;
        }
        else {

            continue;
        }

        palindrome->push_back(palindrome, ch);


    }

    if (is_palindrome(palindrome)) {

        printf("Yes \n");

    }
    else {
        printf("No \n");
    }


    palindrome->destroy(&palindrome);



}

return 0;
}


我试图从根本上检查文本是否是回文。该部分代码未在此处显示,并且可以很好地工作。我要做的是读输入,直到行尾。然后将该行视为我检查回文的字符串。但是除了结束程序之外,我必须转到下一行并继续进行迭代,直到到达EOF。如何在不弄乱缓冲区位置的情况下执行此操作。我可以在这里使用fseek吗?

最佳答案

您永远不会达到palindrome->push_back(palindrome, ch);(因为中断或跳至下一个迭代)。

用这个:

while (1) {
    ch = getc(stdin);
    if (ch == '\n') {
        break;
    }
    // otherwise:
    palindrome->push_back(palindrome, ch);
}


更新。据我了解,您可以执行此操作(假设每行,甚至最后一行,都以\n结尾,因为它应该在UNIX中):

while (1) {
    palindrome = my_string_init_default();
    while (1) {
        ch = getc(stdin);

        if (ch == '\n' || ch == EOF) {
            break;
        }
        palindrome->push_back(palindrome, ch);
    }

    if (ch != EOF) {
        if (is_palindrome(palindrome)) {
            printf("Yes \n");
        }
        else {
            printf("No \n");
        }
    }

    palindrome->destroy(&palindrome);

    if (ch == EOF) {
        break;
    }
}

return 0;
}

关于c - 使用嵌套循环而不会弄乱标准输入中的缓冲区位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41001132/

10-11 22:00