w陌上尘 发表于 2023-11-4 03:50:54

大佬们求解啊!

我在课后作业>带你学C带你飞(第一季)>S1E2:第一个程序|课后测试题及答案中抄了那段Linux用于计算C语言代码行数的代码(因为我用的就是Linux的系统,Ubuntu22.04LTS),但是无论如何修改我都无法编译成功,各位大佬能帮我看看到底是什么问题吗?编译时给我指出的错误是第十三行的那个'{',错误代码是:expected identifier or '(' before '{' token

isdkz 发表于 2023-11-4 03:51:18

根据你提供的信息,你在尝试编译一个用于计算C语言代码行数的代码时遇到了问题。错误提示是在第13行的"{"之前缺少标识符或"("。

首先,让我们看一下这段代码的第13行。这可能是一个函数定义或语句块的开始。错误提示表明在这个位置上缺少了标识符或者"("。

这个错误通常是由于语法错误引起的。可能的原因是你在函数定义中缺少了函数名或者参数列表。另外,也有可能是在代码中的其他位置存在语法错误,导致编译器在第13行报错。

为了更好地帮助你解决问题,我需要看到你所使用的代码。请提供你所使用的代码,以便我可以更详细地分析并给出解决方案。

Mike_python小 发表于 2023-11-4 03:51:35

请提供您在编译时使用的具体命令和完整的代码,以便更好地分析问题所在。

不过从错误信息来看,该错误通常是由于语法错误或缺少某些声明而引起的。请确保您的代码语法正确,并检查是否遗漏了任何必要的头文件或变量声明。另外,也可以尝试将代码段用 {} 包围起来,以确保它们组成一个完整的代码块。

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}

w陌上尘 发表于 2023-11-4 04:01:05

isdkz 发表于 2023-11-4 03:51
根据你提供的信息,你在尝试编译一个用于计算C语言代码行数的代码时遇到了问题。错误提示是在第13行的"{"之 ...

#include <stdio.h>
#include <unistd.h>
#include <dirent.h>
#include <string.h>
#include <stdlib.h>
#include <sys/stat.h>

#define MAX 256

long total;

int countLines(const char *filename);
int isCode(const char *filename);
void findAllDirs(const char *path);

int countLines(const char *filename)
{
      FILE *fp;
      int count = 0;
      int temp;

      if ((fp = fopen(filename, "r")) == NULL)
      {
                fprintf(stderr, "Can not open the file: %s\n", filename);
                return 0;
      }

      while ((temp = fgetc(fp)) != EOF)
      {
                if (temp == '\n')
                {
                        count++;
                }
      }

      fclose(fp);

      return count;
}

int isCode(const char *filename)
{
      int length;

      length = strlen(filename);
      
      if (!strcmp(filename + (length - 2), ".c"))
      {
                return 1;
      }
      else
      {
                return 0;
      }
}

void findAllDirs(const char *path)
{
      DIR *dp;
      struct dirent *entry;
      struct stat statbuf;

      if ((dp = opendir(path)) == NULL)
      {
                fprintf(stderr, "The path %s is wrong!\n", path);
                return;
      }

      chdir(path);
      while ((entry = readdir(dp)) != NULL)
      {
                lstat(entry->d_name, &statbuf);

                if (!strcmp(".", entry->d_name) || !strcmp("..", entry->d_name))
                        continue;

                if (S_ISDIR(statbuf.st_mode))
                {
                        findAllDirs(entry->d_name);
                }
                else
                {
                        if (isCode(entry->d_name))
                        {
                              total += countLines(entry->d_name);
                        }
                }
      }

      chdir("..");
      closedir(dp);
}

int main()
{
      char path = ".";

      printf("计算中...\n");

      findAllDirs(path);

      printf("目前你总共写了 %ld 行代码!\n\n", total);

      return 0;
}

w陌上尘 发表于 2023-11-4 04:02:42

Mike_python小 发表于 2023-11-4 03:51
请提供您在编译时使用的具体命令和完整的代码,以便更好地分析问题所在。

不过从错误信息来看,该错误通常 ...

#include <stdio.h>
#include <unistd.h>
#include <dirent.h>
#include <string.h>
#include <stdlib.h>
#include <sys/stat.h>

#define MAX 256

long total;

int countLines(const char *filename);
int isCode(const char *filename);
void findAllDirs(const char *path);

int countLines(const char *filename)
{
      FILE *fp;
      int count = 0;
      int temp;

      if ((fp = fopen(filename, "r")) == NULL)
      {
                fprintf(stderr, "Can not open the file: %s\n", filename);
                return 0;
      }

      while ((temp = fgetc(fp)) != EOF)
      {
                if (temp == '\n')
                {
                        count++;
                }
      }

      fclose(fp);

      return count;
}

int isCode(const char *filename)
{
      int length;

      length = strlen(filename);
      
      if (!strcmp(filename + (length - 2), ".c"))
      {
                return 1;
      }
      else
      {
                return 0;
      }
}

void findAllDirs(const char *path)
{
      DIR *dp;
      struct dirent *entry;
      struct stat statbuf;

      if ((dp = opendir(path)) == NULL)
      {
                fprintf(stderr, "The path %s is wrong!\n", path);
                return;
      }

      chdir(path);
      while ((entry = readdir(dp)) != NULL)
      {
                lstat(entry->d_name, &statbuf);

                if (!strcmp(".", entry->d_name) || !strcmp("..", entry->d_name))
                        continue;

                if (S_ISDIR(statbuf.st_mode))
                {
                        findAllDirs(entry->d_name);
                }
                else
                {
                        if (isCode(entry->d_name))
                        {
                              total += countLines(entry->d_name);
                        }
                }
      }

      chdir("..");
      closedir(dp);
}

int main()
{
      char path = ".";

      printf("计算中...\n");

      findAllDirs(path);

      printf("目前你总共写了 %ld 行代码!\n\n", total);

      return 0;
}

poly 发表于 2023-11-6 13:05:40

可以使用括号配对功能看看是不是少括号了
页: [1]
查看完整版本: 大佬们求解啊!