【问题标题】:How can I compare user input to string stored into file?如何将用户输入与存储在文件中的字符串进行比较?
【发布时间】:2020-02-24 01:48:39
【问题描述】:

我必须编写一个文件处理代码,它将从用户接收到的字符串与存储在 C 文件中的 char 字符串进行比较。我从昨天开始尝试。我不知道该怎么做。我尝试了很多东西,但似乎没有任何效果。

//
//  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++
        }
    }
}

【问题讨论】:

  • 不相关,c 应该是 int。只是说。与您的问题相关,我认为没有理由在您的阅读器循环中使用 fgetc 逻辑进行搜索。 while (fscanf(file, "%s", text) == 1) 似乎更合适,在循环本身中丢失了 fscanf 调用。

标签: c function file file-handling


【解决方案1】:
while ((c = fgetc(file) != EOF)){ 
    if ((c = fgetc(file) != ' ')) { 
        strcmp(userInput, text){
            count++
        }
    }
}

这里存在三个主要问题。

首先,c = fgetc(file) != EOFc = (fgetc(file) != EOF) 相同,这显然不是您想要的。应该是(c = fgetc(file)) != EOF

其次,上面的语句(假设你没有得到 EOF)实际上读取了一个字符。所以if语句应该是if(c != ' ')

第三,c需要声明为int

【讨论】:

  • 谢谢你们!回到家后我会尝试更正我的代码,但是... 为什么 C 应该声明为 int 而不是 char?它的目的是从文件中接收字符,我认为它应该被声明为字符......我不明白它是如何工作的......我会很感激对此的解释。提前致谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多