C编程。文件I / O,链接列表和结构

时间:2016-04-22 20:46:38

标签: c parsing struct io

我有一项作业要求我编辑提供给我的C程序,以便它可以从文本文档中读取每行的内容:

int%char%char%Double%int%int%int

在文件末尾有任意数量的行和空行。

此文本文件将传递给此程序:

#include <stdlib.h> 
#include <stdio.h> 
struct node{  
  int element; 
  struct node * next;
}; 
// node structure 
struct node * head = NULL; // head node
void add_node(int num) {
  if (head == NULL){
    head = (struct node *) malloc(sizeof(struct node));
    head->element = num;
  }
  else{
    struct node * p = head;
    while(p->next != NULL)
    p = p->next;
    p->next = (struct node *) malloc(sizeof(struct node));
    p->next->element = num;
  }
 }
void print_list() {
  struct node * p = head;
  while(p != NULL){
    printf("%d ", p->element);
    p = p->next;
  }
 } 
void free_list() {
  struct node * p = head;
  while(head != NULL){
    p = head->next;
    free(head);
    head = p;
  }
 }
int main(int argc, char const *argv[]) {
  int n, i;
  for (i = 0; i < 10; i++) {
    scanf("%d", &n);
    add_node(n);
  }
  print_list();
  free_list();
  return 0;
 }

我需要编辑此程序,以在结构节点中包含文件中的7个字段(ID,类别,详细信息,金额,年,月,日)。然后从文本文件中读取(现在是File_name.txt)在struct节点中添加没有%分隔符的字段,然后按顺序打印出来(RecordID:(ID)类别:(类别)金额:$(金额)日期:(月) - (日) - (年)详细信息:(详细))并在程序终止前释放所有指针。我不希望你们都为我做任务,只是因为我不知道C编程是如何工作的,我需要这样做,所以如果有人能帮助指出我正确的方向如何去做这个非常感谢。

2 个答案:

答案 0 :(得分:0)

从我看到的。

  • 您必须使用文件中的指定变量创建自己的结构。

  • 阅读每一行并智能地解析它们......函数 strtok 应该可以在C中执行此操作。

  • 使用一个不应该写得太难的函数提取变量以存储在创建的结构

  • 其余的你可以或应该能够照顾

这可能没有你希望的那么有用,你可以试着让我理解,这样我可以帮助做得更好

答案 1 :(得分:0)

这应该让你开始走正确的道路:

int main(int argc, char const *argv[]) {
  char filename[100];

  printf("Enter the name of the file: ");

  /*stdin is a FILE pointer to standard input */
  fgets(filename, 100, stdin);

  /*Now you open the file for reading "r" means read mode*/
  FILE *fp = fopen(filename, "r");

  /*Basic error checking*/
  if (!fp) {
    perror("File opening failed");
    return EXIT_FAILURE; /*This is macro defined in stdlib.h*/
  }

  int id, year, month, day;
  char category, detail;
  double amt;

  /* Here the fun begins. Use fscanf*/
  while(fscanf(fp, "ID(%d)%%Category(%c)%%Detail(%c)%%Amount(%lf)%%Year(%d)%%Month(%d)%%Day(%d)",
    &id, &category, &detail, &amt, &year, &month, &day) == 7) {

    /* Do what ever you want with those values - create a node or something*/
  }

  /* Finally close the file */
  fclose(fp);
  return 0;
}

请记住,每次循环时,变量都会发生变化。