Поиск числа раз, когда слово появляется в текстовом файле в C - PullRequest
0 голосов
/ 27 марта 2020

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

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
bool stringsEqual(char* str1, char * str2){
    if(strlen(str1)!= strlen(str2)){
        return false;
    }
    int i = 0;
    for(i = 0; i < strlen(str1); i ++){
        if(str1[i] != str2[i]){
            return false;
        }
    }
    return true;
}

void main(){
    char * readFileName = "read5.txt";
    FILE *reader = fopen(readFileName,"r");
    char * word;
    word = (char*) calloc(50,sizeof(char)); //word can be max 20 letters.
    printf("Please enter the word you are looking for: ");
    scanf("%s",word);
    char *line = "";
    line = (char*) calloc(150,sizeof(char));
    int count = 0;
    char c ;
    if(word){
        if(reader){
            while(!feof(reader)){
                fscanf(reader,"%s",line);
                printf("%s ----> %s\n",line,word);
                if(stringsEqual(line,word)){
                    count++;
                }  
                // strcpy(line,""); //Reset the value assigned to line
            }
            printf("Number of matches: %d\n",count);
        }

        else{
            printf("File cannot be located or does not exist\n");
        }
    }
    else{
        printf("Your word cannot be processed\n");
    }
}

Текстовый файл выглядит следующим образом ...

apple banana orange raspberry 

и вывод на консоль выглядит следующим образом

Please enter the word you are looking for: raspberry
apple ----> raspberry
banana ----> raspberry
orange ----> raspberry
raspberry ----> raspberry
raspberry ----> raspberry
Number of matches: 2

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ: - Окончания строк как для текстового файла, так и для текстового редактора, в котором написана программа C, оба имеют LF. - Я пытался использовать fgets и fget c, но fscanf - лучший способ посмотреть текстовый файл и прочитать его слово за словом.

1 Ответ

0 голосов
/ 27 марта 2020

fscanf возвращает в случае успеха количество элементов списка аргументов, успешно заполненных.

Итак, вы можете проверить возвращаемое значение fscanf, которое должно быть 1 в вашем случае.

Если это не 1, сломайте while-l oop.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...