首页 > 解决方案 > 用 C 语言在文本文档中搜索单词的函数

问题描述

我编写了这个函数来搜索一个文本文件(目前只是说“立方体”)中的一个单词,然后调用相应的函数。但是,我收到“错误:未找到功能”。信息。

谁能帮我找出我的问题?

void read(){
    const char cube[4] = "cube";
    const char cone[4] = "cone";
    const char sphere[6] = "sphere";
    const char cylinder[8] = "cylinder";

    char line[1024] ;
    FILE* fp = fopen("instructions.txt", "r") ;
    while (fgets(line , sizeof(line) , fp )!= NULL)
    {
        if (strstr(line , cube)!= NULL){
            void cube();
        }
        else if (strstr(line , cone)!= NULL){
            void cone();
        }
        else if (strstr(line , sphere)!= NULL){
            void sphere();
        }
        else if (strstr(line , cylinder)!= NULL){
            void cylinder();
        }
        else {
            printf("Error: No Function Found./n");
        }
    }
    fclose(fp);
    free(line);
    return;
}

标签: cif-statementfopenstrstr

解决方案


基本上,它归结为:在编写 C 代码时,您不能冒险了解某事的作用或某事的工作原理。您实际上必须知道您编写的每一行代码的作用。没有尝试和错误的学习方式,因为有些事情可能看起来有效,而实际上它们是等待使您的程序崩溃的休眠错误。

我在您的代码中发现以下问题:

  • 没有#include图书馆。我假设你只是故意遗漏了这个。
  • void read()空括号在 C 中是过时的风格(但在 C++ 中非常好)。在编写 C 代码时,您应该始终使用void read (void).
  • cube[4] = "cube"C 中的字符串以空值结尾。你没有分配足够的空间。研究一下:字符数组应该如何用作字符串?
  • void cube();等等我不知道你认为这是做什么的,调用一个函数?这不是你调用函数的方式。此外,由于您有一个名为的局部范围变量,因此cube您会遇到命名冲突。因此该函数必须使用不同的名称。
  • free(line);不允许free在未分配的内存上使用malloc. 只需删除此行。
  • return;在返回的函数中不是必需的void

推荐阅读