2014-07-24 4 views
0

Оператор fgets не собирает ничего из потока файлов calendarLog в массив events[][]. Мой calendarLog.txt имеет пять строк в нем:fgets() не будет читать содержимое из файла в 2d-массив

1/1/1 fds 
2/2/2 dsa 
3/3/3 sal 
4/4/4 444 
5/5/5 555 

printf заявление проинструктированы выход один !, а также events[counter], однако, мой оператор вывода только вопросительные знаки, !!!!!, пять из них (если я добавлю больше строк в calendarLog, он печатает больше восклицательных знаков). Почему

while(fgets(events[counter++], EVENT_DESCR_SIZE, calendarLog) != NULL) 

остаются верными и еще printf("!%s", events[counter]) не напечатать events[counter]? Вся благодарность!

FILE *calendarLog; 
char events[MAX_EVENTS][EVENT_DESCR_SIZE], 
     *newLinePos; 
int counter = 0, 
    index1, 
    index2;  

for (index1 = 0; index1 < MAX_EVENTS; index1++) 
    for (index2 = 0; index2 < EVENT_DESCR_SIZE; index2++) 
     events[index1][index2] = 0; 
    if ((calendarLog = fopen("calendarLog.txt", "r")) == NULL) 
    { 
     calendarLog = (fopen("calendarLog.txt", "w")); 
     fprintf(calendarLog, "s\n", eventObject); 
    } 
    else  
    { 
     while (fgets(events[counter++], EVENT_DESCR_SIZE, calendarLog) != NULL) 
     { 
      if ((newLinePos = strchr(events[counter], '\n')) != NULL) //takes the '\n' out 
       *newLinePos = '\0'; //of the events[counter] 
      printf("!%s", events[counter]); 
     } 
+2

'counter' является индекс следующего за последним. – BLUEPIXY

+0

ohh Мне нужно переместить '++', спасибо – user134723

+0

'fprintf (calendarLog," s \ n ", eventObject);' похоже, что он должен иметь ''% s \ n "' в качестве строки формата ... – mafso

ответ

0

Это должно сказать вам все, что нужно знать о том, как решить эту проблему:

FILE *calendarLog; 
char events[MAX_EVENTS][EVENT_DESCR_SIZE]; 
char *newLinePos; 
int counter = 0; 
int index1; 
int index2;  

// initialize the array: events[][] 
for (index1 = 0; index1 < MAX_EVENTS; index1++) 
    for (index2 = 0; index2 < EVENT_DESCR_SIZE; index2++) 
     events[index1][index2] = 0; 




if ((calendarLog = fopen("calendarLog.txt", "r")) == NULL) 
{ // fopen failed 
    calendarLog = (fopen("calendarLog.txt", "w")); 
    fprintf(calendarLog, "%s\n", eventObject); // 's' should be '%s 
} 

else  
{ // fopen successful 

    while (fgets(events[counter++], EVENT_DESCR_SIZE, calendarLog) != NULL) 
    { 
     // following 'if' is looking at 'next' events because counter is already updated 
     // replace '\n' with null to terminate string for following printf 
     if ((newLinePos = strchr(events[counter], '\n')) != NULL) 
      *newLinePos = '\0'; 

     // print the value 
     printf("!%s", events[counter]); 
    } 
} 
Смежные вопросы