我正在编写一个程序,它应该读取两个可以包含换行符和各种其他字符的字符串。因此,我使用 EOF(Ctrl-Z 或 Ctrl-D)来结束字符串。
这适用于第一个变量,但是对于第二个变量,这似乎是有问题的,因为显然某些东西卡在输入缓冲区中并且用户无法输入任何内容。
我试图用while (getchar() != '\n');
几个类似的变化来清理缓冲区,但似乎没有任何帮助。所有的清理尝试都导致了一个无限循环,如果不清理,添加第二个变量是不可能的。
这两个变量的字符都是在这样的循环中读取的:while((c = getchar()) != EOF)
,这表明它是我卡在缓冲区中的 EOF。或者它是否以其他方式影响程序的行为?我使用的逻辑有问题吗?
在为此苦苦挣扎了几个小时后,我开始变得有些绝望。
代码:
#include <stdio.h>
#include <string.h>
int main(void)
{
int x = 0;
int c;
char a[100];
char b[100];
printf("Enter a: ");
while((c = getchar()) != EOF)
{
a[x] = c;
x++;
}
a[x] = '\0';
x = 0;
/*while (getchar() != '\n'); - the non-working loop*/
printf("\nEnter b: ");
while((c = getchar()) != EOF)
{
b[x] = c;
x++;
}
b[x] = '\0';
printf("\n\nResults:\na: %s\n", a);
printf("b: %s\n", b);
return(0);
}