gpt4 book ai didi

c - 程序不接受 EOF 以停止读取标准输入

转载 作者:太空宇宙 更新时间:2023-11-04 06:00:02 26 4
gpt4 key购买 nike

编程新手,通过 K&R 工作。使用标准输入输入后,我按 ^D 写入 EOF(我使用的是 linux),然后……没有任何反应。我仍然能够写入控制台,并且能够 ^Z 暂停,但不能使用 ^D。我希望我的代码能够读取输入并打印比要求更长的所有行,并且由于我无法生成任何输出,所以我不确定从哪里开始诊断我的问题。

/*
Exercise 1-17 in K&R: page 31 in book
Write a program to print all input lines that are longer than 80 characters
*/

# include <stdio.h>
# define MIN_LINE 5 /*change to 80 for final*/
# define MAX_LINE 20 /*change for final*/

int getline(char line[], int max);
void copy(char to[], char from[], int position);

int main()
{
char line[MAX_LINE];
int len = 0;
char print_register[MAX_LINE];
int reg_index = 0;

/*read length of line*/
while ((len = getline(line, MAX_LINE)) != EOF)
{
/*if len > 80; append to print-array*/
if (len > MIN_LINE)
{
copy(print_register, line, reg_index);
}
}

/*print the print-array*/
printf("%s", print_register);

return 0;
}

int getline( char line[], int max)
{
int i;
int c;

for (i = 0; (c = getchar()) != EOF && c != '\n' && i <= max; i++)
{
line[i] = c;
}
/* handle '\n' and EOF */
if (c == '\n')
{
line[i] = c;
i++;
}

line[i] = '\0';

return i;
}

void copy(char to[], char from[], int position)
{
int i;
while ((to[position] = from[i]) != '\0')
{
i++;
position++;
}
}

最佳答案

您的 getline() 函数返回长度而不是 EOF。因此,应替换以下语句:

while ((len = getline(line, MAX_LINE)) != EOF)

EOF 应替换为 0:

while ((len = getline(line, MAX_LINE)) != 0)

关于c - 程序不接受 EOF 以停止读取标准输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20793974/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com