我想从带有./sample < input.txt
命令的文件中读取,但它不会因EOF而停止
我需要按ctrl + c确定它是EOF
那么如何阅读多行呢?
我需要将它放入主循环中,可以在没有ctrl + c的情况下确定EOF。
按照我的计划,必须有2个循环:
主循环:从文件中获取其他行,插入新节点填充条件应为“EOF”。
子循环:用字符填充字符数组,条件应为“\ n”。
#include <stdio.h>
#include <stdlib.h>
#define SIZE 80
struct node {
char str[SIZE];
struct node* next;
};
void read_line(struct node* line_list);
int main(void)
{
struct node* line_list = NULL; // linked list - headp
read_line(line_list);
return 0;
}
void read_line(struct node* line_list)
{
int ch, i = 0;
struct node* temp = malloc(sizeof(struct node));
if(temp!=NULL) {
while((ch = getchar()) != EOF){
if (ch != '\n')
{
temp->str[i] = '\0';
//insert(&line_list,temp.str);
break;
}
if (i < SIZE)
temp->str[i++] = ch;
printf("New str: %s\n",temp->str);
}
}
}
答案 0 :(得分:2)
while ((ch = getchar()) != EOF) { // now you have your valid ch
if (ch == '\n') break; // end-of-line is a quitter
}
EDITH说:抽象与具体。
好的,我回去一步,用伪代码编写你的代码
while ((ch = getchar()) != EOF) {
// this is a foreverloop until you hit end of file
// now comes the state machine
if (ch != NEWLINE) {
// collect the string
string.add(ch); // pseudocode
} else {
// do some accountings with the collected string
list.add(string); // pseudocode
string.print();
}
}
答案 1 :(得分:1)
修改强>
忽略我原来的帖子,我没想到星期五晚上。正如彼得所指出的,你的while
循环测试有一个不同的问题。但是,您仍需要在temp != NULL
之后检查malloc
。