C错误(初学者)

C错误(初学者),c,C,如何修复此错误 尝试将文件大写 文件应在第4行开始时大写 第4行末尾缺少分号,导致第5行出现解析问题 编辑了两次,因为我的编辑错误。oops.文件和NULL写错了(C区分大小写)。 fopen行缺少分号 下面的代码编译并运行 main.c: In function 'main': main.c:4: error: 'file' undeclared (first use in this function) main.c:4: error: (Each undeclared identifier

如何修复此错误

尝试将
文件大写

  • 文件应在第4行开始时大写
  • 第4行末尾缺少分号,导致第5行出现解析问题

编辑了两次,因为我的编辑错误。oops.

文件和NULL写错了(C区分大小写)。 fopen行缺少分号

下面的代码编译并运行

main.c: In function 'main':
main.c:4: error: 'file' undeclared (first use in this function)
main.c:4: error: (Each undeclared identifier is reported only once
main.c:4: error: for each function it appears in.)
main.c:5: error: parse error before "if"
main.c:7: error: 'line' undeclared (first use in this function)
main.c:7: error: 'null' undeclared (first use in this function)
main.c: At top level:
main.c:13: error: parse error before '}' token
main.c:13:2 warning: no newline at end of file
#包括
主(空){
FILE*FILE=fopen(“words.txt”、“r”);
如果(文件!=NULL){
字符行[128];
while(fgets(行、行大小、文件)!=NULL)
{
FPUT(线路、标准输出);
}
fclose(文件);
}
}

文件类型在stdio.h中定义,必须为所有caps(文件)。简单的错误

除了已经指出的其他事项外,您的
main()
函数应该被指定为返回
int
,并且应该在末尾显式地这样做。还有,我不太明白你的缩进和括号的风格

#include <stdio.h>

main(void) {
FILE *file = fopen("words.txt","r"); 
if(file != NULL) {
    char line[128];
    while(fgets( line, sizeof line, file) != NULL) 
    {
    fputs ( line, stdout );
    }
    fclose ( file );
    }
}

下面的代码很好用,并且在函数调用、定义和循环/ifs中使用了一致的大括号和空格。如果这是您在标记中的意图,它也可以在C中工作,如果文件无法打开,它将打印一个错误并返回1

#include <stdio.h>

int main(void)
{
  FILE *file = fopen("words.txt","r"); 
  if(file != NULL)
  {
    char line[128];
    while(fgets( line, sizeof line, file) != NULL) 
    {
      fputs ( line, stdout );
    }
    fclose ( file );
    return 0;
  }
  else
  {
    return 1;
  }
}
#包括
#包括
内部主(空){
字符行[128];
FILE*FILE=fopen(“words.txt”、“r”);
如果(文件!=NULL){
while(fgets(行、行大小、文件)!=NULL){
FPUT(线路、标准输出);
}
fclose(文件);
}否则{
fprintf(stderr,“无法打开'words.txt',错误=%d\n”,错误号);
返回1;
}
返回0;
}

sizeof是一个运算符,不是一个函数。是的,我只是仔细检查了一下;我的bad.sizeof在这里不需要括号,因为'line'是一个变量。对变量或表达式来说,括号是不需要的,只有类型名,好吧。是的,再一次,我的内存完全失败。“拥抱的埃尔斯”(即“}else{”在一行上)对一些人来说是不好的风格,但我也喜欢它们。我喜欢在屏幕上同时看到尽可能多的代码,所以在同一行上打开大括号,就像/while和“拥抱ELSE”(这对我来说是一个新术语)更可取。sizeof应该有parens:sizeof(line)。这样可读性更高。在C99中,应该定义main(),返回int。abelenky:sizeof line更可取,因为sizeof是一个运算符,而不是一个函数。只有在类型周围需要括号,如“sizeof(int*)请注意sizeof后面的空格,这也是为了强调sizeof是一个运算符。它实际上符合个人编码标准,但它被广泛使用
#include <stdio.h>

int main(void)
{
  FILE *file = fopen("words.txt","r"); 
  if(file != NULL)
  {
    char line[128];
    while(fgets( line, sizeof line, file) != NULL) 
    {
      fputs ( line, stdout );
    }
    fclose ( file );
  }
  return 0;
}
#include <stdio.h>

int main(void)
{
  FILE *file = fopen("words.txt","r"); 
  if(file != NULL)
  {
    char line[128];
    while(fgets( line, sizeof line, file) != NULL) 
    {
      fputs ( line, stdout );
    }
    fclose ( file );
    return 0;
  }
  else
  {
    return 1;
  }
}
#include <stdio.h>
#include <errno.h>

int main (void) {
    char line[128];
    FILE *file = fopen ("words.txt", "r");
    if (file != NULL) {
        while (fgets (line, sizeof line, file) != NULL) {
            fputs (line, stdout);
        }
        fclose (file);
    } else {
        fprintf (stderr, "Cannot open 'words.txt', error = %d\n", errno);
        return 1;
    }
    return 0;
}