我的代码中出现多个错误,我听不懂

时间:2019-12-14 23:14:03

标签: c

当前正在尝试创建一个功能,以计算美国宪法中任何给定单词的数量。在最初的构建中,直到我尝试运行它时,它才让我知道任何警告或错误,然后出现了许多没有道理的错误。我不太擅长编码,并且有些沮丧。

代码是

#include <stdio.h>
#include <stdlib.h>
#define MAX_WORD_LENGTH 32
#define MIN_WORD_LENGTH 5

int main() {
    FILE *file = fopen("F:\\The_US_Constitution.txt", "r");
    char word[32];
    const char *line;
    const char *start = NULL;
    int count = 0;

    while(strlen(word) < MIN_WORD_LENGTH || strlen(word) > MAX_WORD_LENGTH);
    printf("Enter a word: ");
    scanf("&s",word);

    if(strlen(word) >= MIN_WORD_LENGTH && strlen(word) <= MAX_WORD_LENGTH)
        while((word = fgetc(file)) != EOF){
                if (word == '\n')
                    count++;
            }
        return count;

        fclose("F:\\The_US_Constitution.txt");
        if(count > 0)
            printf("The word ''",word,"''was found %d times in the US Constitution", count);
        else
            printf("The word ''", word, "''was not found in the US Constitution");

    return EXIT_SUCCESS;
}
  1. FILE * file = ...它说这是一个未使用的变量?我认为不需要定义文件,当我尝试在其他地方定义文件时,它说它仍然是未使用的变量。
  2. 代码说,“ line”和“ start”都是我试图在其上定义它们的同一行中的未使用变量。
  3. while(strlen(word)
  4. scanf(“%s”,word); -它说对此有太多争论。我以为我在这一行上只有一个论点?
  5. if(strlen(word))...函数strlen的声明不兼容。再说一次,我不知道我在做什么错。
  6. if(word == \ n);从不兼容的指针类型传递fclose参数-为什么在这里显示出来?
  7. 有两个关于“格式参数过多”的警告,其中有两个......

然后是很多语法错误。

我觉得自己不称职...我不知道为什么会出现这些错误或如何解决这些错误。

2 个答案:

答案 0 :(得分:1)

  1. 编译器会警告您有未使用的变量,因为编译器不会在其他任何地方看到您使用变量file
  2. linestart变量的唯一出现是声明。您不会在其他任何地方使用它们。因此,警告。
  3. 要使用strlen()函数,您需要#include <string.h>包括相关的头文件进行前向声明。有关更多信息,请参见cppreference strlen
  4. 您的代码包含scanf("&s",word);,而不是scanf("%s",word);。由于&s不需要参数,因此编译器会警告您。
  5. 您忘记了包含第3点中的相关标题。
  6. fclose()函数应该传递一个指向FILE的指针,而不是包含文件路径的字符串。就是您最有可能是想说fclose(file)-关闭FILE调用返回的fopen()指针。
  7. 您对printf的使用无效。要打印单词,请在格式字符串中使用%s printf格式说明符。有关更多信息,您可以查看cppreference printf

您的代码也:

  • 在第一个strlen(word)循环中的第一个while出现时访问未初始化的内存。
  • 循环while(strlen(word) < MIN_WORD_LENGTH || strlen(word) > MAX_WORD_LENGTH);没有任何意义-它不是一个无限循环。
  • word = fgetc(file)分配给数组类型,这是不可能的(并且没有意义)。 fgetc()函数的返回值为int-您应将其保存在int变量中。
  • word == '\n'正在将数组的地址与字符进行比较。
  • 您的代码将在main之后从return count;返回,并且不执行下面的代码。
  • 没有错误处理。

我相信您的代码有太多错误,无法帮助我。对于初学者来说,Stackoverflow并不是一个好地方-我认为这是一个提出特定编程问题的论坛,而不是解释该语言基本用法的复杂性。为了简化和加快使用C编程语言的步伐,建议您从更简单的任务和示例入手,这可以帮助您学习使用C语言的经验并为您提供指导。从小处开始,从大处结束。

答案 1 :(得分:0)

我收到的错误与您所描述的有所不同。要解决隐式声明错误,您需要更多的头文件:

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

FILE * file = ...它说这是一个未使用的变量?我认为不需要定义文件,当我尝试在其他地方定义文件时,它说它仍然是未使用的变量。

我收到一个完全不同的错误,说未声明FILE。已通过以上#include条解决。

  

代码说,“ line”和“ start”都是我试图在上面定义它们的同一行中的未使用变量。

此错误基本上表示它的意思。您可能忘记了在算法中使用这些变量。如果您真的不需要它们,请将它们注释掉。

  

scanf(“%s”,word); -它说对此有太多争论。我以为我在这一行上只有一个论点?

您的实际代码中有一个&,应该有一个%

  

if(word == \ n);从不兼容的指针类型传递fclose参数-为什么在这里显示出来?

对我来说,此错误是“指针与整数之间的比较”。您将word声明为数组,但似乎将其视为字符和字符。

  

有两个关于“格式参数过多”的警告,其中有两个......

printf并不只是打印其参数。它的第一个参数必须是包含%代码的格式字符串。每个其他自变量对应于这些%代码之一。示例:

printf("The word ''%s''was found %d times in the US Constitution", word, count);