错误:“char”之前需要表达式

yhived7q  于 2023-03-28  发布在  其他
关注(0)|答案(1)|浏览(226)

不好意思,我在编译代码的时候遇到了一个问题,我不知道怎么解决,因为我不知道它的要求是什么。
这似乎我在终端:

”usr/lib/gcc/x86_64-linux-gnu/4.9/../../../x86_64-linux-gnu/crt1.o:在没有定义collect 2的函数_start': /build/buildd/glibc-2.21/csu/../sysdeps/x86_64/start.S:114: reference to main'中:错误:ld返回1退出状态“

我留下我的代码:

#include<stdio.h>
#include<string.h>
void calcular_vocal(char cadena[]){
   int l;
   char vocales[5]="a,e,i,o,u";
   int i, vector contadores[5];
   l=strlen(cadena);
   for(i=0;i<l;i++){
     if(cadena[i] =='a')
        cadena a++;
        vector contadores[0]++;
     if(cadena[i] =='e')
        cadena e++;
        vector contadores[1]++;;
     if(cadena[i] == 'i')
        cadena i++;
        vector contadores[2]++;
     if(cadena[i] =='o')
        cadena o++;
        vector contadores[3]++;
     if(cadena[i] =='u')
        cadena u++;
        vector contadores[4]++;
    for(i=0;i<5;i++){
      int max,pos;
      if(vector contadores[i]>max){
         max = vector contadores [i];
         pos = i;
      }
    }
     printf("The most repeated vocal is %c %d",vocales[pos],max);
   }
}
int main (void){
   char calcular_vocal(char[]);
}
sulc1iza

sulc1iza1#

更新

看起来你编译错了文件。查看下面的控制台命令和输出(它是德语,但我认为消息与你的非常相似):

$ rm test1.c 
$ touch test1.c
$ gcc test1.c 
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crt1.o: In Funktion `_start':
(.text+0x20): Nicht definierter Verweis auf `main'
collect2: error: ld returned 1 exit status
$

长话短说:你编译了错误的文件(可能是一个空文件),因此你得到了这个错误消息,它与你的任何代码都完全无关。

原始答案

我将对你的代码做一些假设,以便为你提供一个可编译代码的答案--运行程序的结果是否意味着什么取决于你(老实说,我故意建议的更改不会给予你最可能想要的程序,因为你需要一些东西来学习)。
我从你的主要功能开始

int main (void){
   char calcular_vocal(char[]);
}

你在main函数中所做的,是写一个calcular_vocal函数的声明,但是使用了与你实际实现不同的函数签名。为了使这部分可编译,把它改为void calcular_vocal(char[]);
下面是calcular_vocal函数内部的代码:
不允许使用行char vocales[5]="a,e,i,o,u";,因为字符串大小对于您的数组太大。请将数组大小增加到9或10,以便有足够的可用空间:char vocales[9] = "a,e,i,o,u";
移动到int i, vector contadores[5];行,假设你想有一个名为“vector contadores”的变量。你不能在变量名中有空格,所以为了使这部分工作,所有情况下都将其重命名为“vector_contadores”。
接下来是所有的if语句,它们都是一样的所以我只写了关于第一个的东西。代码cadena a++;是无效的。你有多个选择来解决这个问题。(1)从该代码中删除acadena++;).(2)为a定义整数变量,并从代码(a++;)中删除cadena.(3)重写为cadena['a']++;.还有更多的选项可以使这部分可编译。
变量int max,pos;在for循环内部定义,但在外部使用。将它们的定义移动到函数的顶部,在那里定义其他变量。另外,使用值-1初始化max
这应该是编译这段代码所需要的全部内容(除非我忘记了什么)

相关问题