2014-09-10 2 views
0
#include <stdio.h> 
#define MAX 1000 

int line_counter (FILE *file, char buf[]); 

int main(int argc, char *argv[]) { 
    FILE *ptr_file; 
    char buf[MAX]; 
    ptr_file = fopen("alice-eg.txt", "r"); 

    if (!ptr_file) { 
     return 1; 
    } 

    int count = 0; 

    while (fscanf(ptr_file, "%s", buf) == 1) { 
     printf("%s", buf); 
     if (buf == '\n') { 
      return count; 
     } 
     else { 
      count += 1; 
     } 
    } 
    printf("The number of words in this line is: %d", count); 
    return 0;  
} 

Я хочу сделать что-то вдоль линий этого, но я понятия не имею, как сделать его работу как ЬеЕ это просто указатель на массив букв (правильно если я ошибаюсь, я только начал с C, и мое понимание указателей по-прежнему очень плохое).Как позволить fscanf прекратить чтение после новой линии

ответ

0

fscanf напишите строку из файла (разделенную ENTER) в буферный массив, и, если он будет читать пустую строку buff[0] = '\n', так что это должно быть ваше условие.

Во-вторых:

while (fscanf(ptr_file, "%s", buf) == 1) 

неверно, так как fscanf возвращает число чтения символа и поэтому для линии «ABCD» сформировать файл, он будет возвращать 4 и ваш цикл остановится сразу, вместо того, чтобы читать цельные файл и поэтому ваше состояние должно быть:

while (fscanf(ptr_file, "%s", buf) != EOF) 

так fscanf возвратит EOF, когда он дойдет до конца файла

+0

почему бы fscanf читать символы? Я думал, что это слова читателя в каждом предложении? – YellowPillow

+0

Потому что вы дали ему «% s» означает одну строку, которую вы даете ей «% s% s», она разделит строку в первом пространстве и вернет 2 строки, но для этого вам нужно написать fscanf (ptr_file, «% s% s ", str1, str2), пожалуйста, прочитайте документы fscanf. –

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