我正在编写一个程序,该程序应该读取两个可以包含换行符和各种其他字符的字符串。因此,我使用 EOF(Ctrl-Z 或 Ctrl-D)来结束字符串。
这对于第一个变量来说效果很好,但是对于第二个变量来说,这似乎是有问题的,因为显然有东西卡在输入缓冲区中并且用户无法输入任何内容。
我尝试用以下命令清理缓冲区while (getchar() != '\n');
和几个类似的变化,但似乎没有任何帮助。所有清理尝试都会导致无限循环,并且如果不进行清理,则不可能添加第二个变量。
两个变量的字符都在循环中读取,如下所示:while((c = getchar()) != EOF)
,这表明我在缓冲区中停留的是 EOF。或者它是否以其他方式影响程序的行为?我使用的逻辑有问题吗?
在与这个问题斗争了几个小时后,我开始变得有点绝望。
code:
#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);
}
当您从终端收到 EOF 后,您不会收到任何额外的数据。输入中没有办法取消 OEUF - 文件的结尾就是结尾。
因此,您应该定义每个变量在单独的行上输入,并让用户按 Enter 键而不是 EOF。您仍然需要检查是否收到了 eof,因为这意味着用户实际上输入了 EOF,并且您不会看到其他任何内容 - 在这种情况下,您需要跳出循环并打印错误消息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)