4 c string newline eof getchar
我正在编写一个程序,它应该读取两个可以包含换行符和其他各种字符的字符串.因此,我使用EOF(Ctrl-Z或Ctrl-D)结束字符串.
这适用于第一个变量,但是使用第二个变量,然而,这似乎是有问题的,因为显然某些东西卡在输入缓冲区中并且用户无法输入任何内容.
我尝试用while (getchar() != '\n');几种类似的变化来清理缓冲区,但似乎没有任何帮助.所有清洁尝试都导致无限循环,如果不进行清洁,则无法添加第二个变量.
两个变量的字符都在这样的循环中读取:while((c = getchar()) != EOF)这表明它是我在缓冲区中停留的EOF.或者以其他方式影响程序的行为?我正在使用的逻辑有什么问题吗?
经过几个小时的挣扎,我开始有点绝望了.
[编辑:下面添加代码]
[编辑2:clearerr()似乎使这个EOF解决方案毕竟有效.
它似乎以我在Linux下的原始形式运行,我昨天在Windows上试用它.
码:
#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);
}
Run Code Online (Sandbox Code Playgroud)
[编辑3:]
动态内存问题:
我的程序也应该处理超过100个字符的字符串.最初我打算通过动态内存分配来解决这个问题,但是当我遇到上述无限循环和内存相关崩溃的问题时,我把它留下来并切换到char [100].
我想我尝试过的通常是这样的:
#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);
}
Run Code Online (Sandbox Code Playgroud)
这是一种可行的(或明智的)方法吗?我正在尝试为那里处理的每个角色分配更多内存.独立.使用这样的代码(这个例子可能包含语法错误)我经历过崩溃,所以在我看来malloc可能不是正确的功能,或者我试错了.假设它甚至可能.
Mar*_*wis 11
从终端收到EOF后,您将不会收到任何其他数据.没有办法取消输入 - 文件的结尾就是结束.
因此,您应该定义每个变量在单独的行上输入,并让用户按Enter键而不是EOF.你还需要检查是否已收到EOF,因为这意味着用户实际EOF类型的,你不会看到任何东西 - 在这种情况下,你需要跳出循环和打印错误消息.
| 归档时间: |
|
| 查看次数: |
22808 次 |
| 最近记录: |