2011-01-30 5 views
-2
#include<stdio.h> 
#include<conio.h> 
#include <stdlib.h> 
#include<string> 

struct link_list { 
    char mail[50]; 
    int counter; 
    struct link_list *next; 
       }; 

    typedef struct link_list node; 

    void main() 
    { 
     FILE *fp ; 
     char string1[80]; 
     node *head=NULL; 
     int count_length=0; 
     char *fname = "email.txt"; 
     fp = fopen (fname, "r") ; 
     char line [ 128 ]; /* or other suitable maximum line size */ 
      int count=0; 

     while (fgets (line, sizeof line, fp) != NULL) /* read a line */ 
     { 
      count++; 
      if(head==NULL) 
      { 
       head=(node *)malloc(sizeof(node)); 
       fscanf(fp,"%s",string1); 
       strcpy(head->mail,string1); 
       head->counter=count; 
       head->next=NULL; 
      } 
      else 
      { 
       node *tmp = (node *)malloc(sizeof (node)); 
       fscanf(fp,"%s",string1); 
       strcpy(tmp->mail,string1); 
       tmp->next = head; 
       tmp->counter=count; 
       head = tmp; 
      } 
     } 

     fclose(fp); fp = fopen (fname, "r") ; 
     fclose(fp); 
     //printf("%d",count_length); 
     getch(); 
    } 

Программа дает ошибку утверждения при ее запуске. Может ли кто-нибудь помочь мне отладить его?Связанный список с файлом IO

+3

Возможный дубликат [связанного использования списка для получения данных из файла] (http://stackoverflow.com/questions/4842166/linked-list-usage-to-obtain-data-from-file) – sarnold

+2

Как это отличается от вашего последнего вопроса? –

+0

это .. я думал, что предыдущий вопрос контекста был другим, поэтому создал новый вопрос –

ответ

0

Эта линия читает из файла в буфер называется линия

gets (line, sizeof line, fp) != NULL 

Внутренний бит петли должен, вероятно, что-то делать с этой линией? Вместо использования fscanf для чтения из указателя файла, как насчет использования «sscanf» для чтения из строки, которую вы только что прочитали?

Без дополнительного контекста трудно понять, что вы пытаетесь сделать. Если вы пропускаете пустые строки, я думаю, что код может иметь смысл.

+0

Могу ли я использовать feof (fp! = 0) ????? –

+0

он дает ошибку, хотя agn .. –

+0

Ошибка утверждения появилась, поскольку я предоставляю ее текстовым файлом ........ извините, ребята ... –

0

node* head не инициализирован. Поэтому if (head==NULL) всегда будет оценивать ложь (это неопределенное поведение, так как он не инициализирован)

На вершине, что сказал Джефф Фостер, вы вызываете fgets вместе с fscanf, который читает строку файла, а затем читаете другое значение строки , Поэтому, если fgets читает последнюю строку файла, ваш вызов fscanf завершится с ошибкой. Это может иметь какое-то отношение к вашему отказу утверждения.

Смежные вопросы