链接列表文件输入,不能使用EOF停止

时间:2012-03-24 05:03:57

标签: c

我想从带有./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);
      }
    }
}

2 个答案:

答案 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