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/