Как я могу сравнить пользовательский ввод со строкой, хранящейся в файле? - PullRequest
0 голосов
/ 28 октября 2019

Мне нужно написать код для передачи файла, который будет сравнивать полученную от пользователя строку со строкой char, хранящейся в файле на C. Я пробовал со вчерашнего дня. Я понятия не имею, как это сделать. Я пробовал много вещей, но, похоже, ничего не работает.

//
//  2.c
//  IFTM Exercises
//
//  Created by Lelre Ferreira on 10/27/19.
//  Copyright © 2019 Lelre Ferreira. All rights reserved.
//

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (int argc, const char * argv[]){

    FILE *file = fopen("file.txt", "w");
    char text[] = "hi hi hi hi hi hi"; //string to be allocated into the file
    char c, userInput[] = "hi"; // simulates the user input
    int i = 0, count = 0;



    if (file == NULL) {
        printf("Failure to create file.\n");
        exit(1);
    } else {
        for (i = 0; i < strlen(text); i++) {
            printf("Inserting: [%c]\n", text[i]);
            fputc(text[i], file);
        }
        printf("All done.\n");
    }
    fclose(file);


    fopen("file.txt", "r");
    while ((c = fgetc(file) != EOF)){
        fscanf(file,   "%s",   text);
        if (strcmp(userInput, text) == 0) {
            count++;
        }
    }
    fclose(file);



    printf("Many times present: %d\n", count);
    return 0;
}

Моя проблема в том, что ... пробел между каждым словом строки в файле, потому что я должен проверить, есть ли другое слово, начинающееся, дляэкземпляр ... (Привет, привет) ... Я думал об использовании чего-то подобного в моем коде, но я не работал так же.

while ((c = fgetc(file) != EOF)){ // While the end of the file does not happen keep running.
    if ((c = fgetc(file) != ' ')) { //If an blank space is found... I does not make any sense actually. I'm desesperated.
        strcmp(userInput, text){
            count++
        }
    }
}

1 Ответ

0 голосов
/ 28 октября 2019
while ((c = fgetc(file) != EOF)){ 
    if ((c = fgetc(file) != ' ')) { 
        strcmp(userInput, text){
            count++
        }
    }
}

Здесь есть три основные проблемы.

Во-первых, c = fgetc(file) != EOF - это то же самое, что и c = (fgetc(file) != EOF), что явно не то, что вы хотите. Это должно быть (c = fgetc(file)) != EOF

Во-вторых, вышеприведенный оператор (при условии, что вы не получили EOF) действительно прочитал символ. Таким образом, оператор if должен быть if(c != ' ')

В-третьих, c должен быть объявлен как int

...