2015-07-12 3 views
1

Вот файл .c следуют функции в моем файле .hFinding количество символов, слов и строк в текстовом файле

#include <stdio.h> 
#include "functions.h" 
#define INPUT_FILE "C:/Users/user/Desktop/test.txt" 






int main(){ 
    FILE *text_file; 
    int num_characters, num_words, num_lines; 


    text_file = fopen(INPUT_FILE,"r"); 

    if(text_file == NULL){ 
     printf("!!-------ERROR OPENING FILE------!!\nclosing program...."); 
     return 0; 
    } 

    num_characters = read_characters(text_file); 
    num_words = read_words(text_file); 
    num_lines = read_lines(text_file); 

    printf("Number of Characters: %d\nNumber of Words: %d\nNumber of Lines: %d\n",num_characters,num_words,num_lines); 


    return 0; 
} 


#include <stdio.h> 
#include "functions.h" 
#define INPUT_FILE "C:/Users/Lott-kerby/Desktop/test.txt" 





#ifndef FUNCTIONS_H_ 
#define FUNCTIONS_H_ 
#include <stdio.h> 


int read_characters(FILE *text_file){ 
    int i; 
    int char_count = 0; 
    while((i = fgetc(text_file)) !=EOF) 
     char_count++; 


    return char_count; 
} 


int read_words(FILE *text_file){ 
    char j; 
    int word_count = 0; 
    while((j = fgetc(text_file)) != EOF){ 
     if(j == ' ') 
      word_count++; 
    } 
    return word_count; 
} 

int read_lines(FILE *text_file){ 
    char k; 
    int line_count = 0; 
    while((k = fgetc(text_file)) != EOF){ 
     if(k == '\n') 
      line_count++; 
    } 
    return line_count; 
} 

Цель состоит в том, чтобы найти количество символов слов и строк в текстовый файл. Я получаю правильное количество символов, когда я запускаю, но получаю неправильное количество слов и строк. Текстовый файл я использую следующим образом:

word 
word 
word 

с этим .txt мою программу из пут: Количество characers: 1 Количество слов: 0 Количество линий: 0

любой Помощь будет принята с благодарностью. «Слова» находятся в отдельной строке в моем текстовом файле.

+1

Как правило, вы должны только имеют декларации функций в функциях.h, а не сами функции. Они должны быть в functions.c. –

+0

Поскольку i, j и k выполняют одно и то же задание и находятся в разных функциях, вы можете использовать одно и то же имя во всех трех функциях. Есть ли конкретная причина, почему вы не делаете 3 счета в одной функции? –

+0

@MikkelChristiansen Я делаю это так, потому что я могу получить дополнительные баллы для инкапсуляции – Flower

ответ

1

Ну, вы считаете nunmber слов, подсчитывая количество пробелов, потому что вы предполагаете, что между каждым словом есть пробел. но в вашем примере входного файла нет пробелов.

Поэтому вы можете добавить чек на пробел ИЛИ новую строку.

Кроме того, вы можете вернуть word_count + 1 и line_count + 1, так как одна строка без символа новой строки должны возвращаться 1. То же самое верно и для одного слова без пробелов

EDIT: oouuhh и Теперь я вижу, что вы прочитать файл несколько раз без сброса указателя файла так fgetc всегда будет немедленно возвращать EOF в read_words() и read_lines() ... сбросить его с помощью

rewind (text_file); 
+1

мое редактирование важно, поэтому убедитесь, что вы его заметили :-) не стесняйтесь спрашивать, не работает ли он еще – h3n

+0

, если я позвоню после каждого вызова функции? В моем .c файле? – Flower

+1

Я бы сказал в функциях перед циклами while. Btw. Я просматриваю ваши вопросы до сих пор. Вы должны действительно рассмотреть возможность принятия/поддержки тех вопросов, которые помогли вам ... – h3n

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