错误:在‘之前应为表达式;char’;

错误:在‘之前应为表达式;char’;,c,function,if-statement,for-loop,ansi,C,Function,If Statement,For Loop,Ansi,对不起,我在编译代码时遇到了一个问题,我不知道如何解决它,因为我不知道它要求什么 这将在终端中显示给我: “usr/lib/gcc/x86_64-linux-gnu/4.9/./../../../x86_64-linux-gnu/crt1.o:在函数\u start'中: /build/buildd/glibc-2.21/csu/。/sysdeps/x86_64/start.S:114:引用未定义的main collect2:错误:ld返回了1个退出状态 “ 我留下我的密码: #include&

对不起,我在编译代码时遇到了一个问题,我不知道如何解决它,因为我不知道它要求什么

这将在终端中显示给我:

“usr/lib/gcc/x86_64-linux-gnu/4.9/./../../../x86_64-linux-gnu/crt1.o:在函数
\u start'中:
/build/buildd/glibc-2.21/csu/。/sysdeps/x86_64/start.S:114:引用未定义的
main collect2:错误: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[]);
}
#包括
#包括
声带结石空洞(char cadena[]{
int l;
字符人声[5]=“a,e,i,o,u”;
int i,向量contadors[5];
l=斯特伦(卡德纳);

对于(i=0;i更新

您似乎编译了错误的文件。请参阅以下控制台命令和输出(德语,但我认为消息与您的非常相似):

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


原始答案

我将对您的代码做一些假设,以便为您提供一个可以生成可编译代码的答案—运行程序的结果是否意味着什么取决于您(老实说,我有意建议进行一些更改,这些更改不会为您提供您最想要的程序,因为您需要一些学习的东西)

我从你的主要功能开始

int main (void){
   char calcular_vocal(char[]);
}
在main函数中,您要做的是编写
calcular\u vocal
函数的声明,但函数签名与实际实现不同。将其更改为
void calcular\u vocal(char[]);
,以使此部分可编译

现在转到
calcular\u vocal
函数中的代码:

不允许使用行
char vocales[5]=“a,e,i,o,u”
,因为字符串大小对于数组来说太大了。请将数组大小增加到9或10以获得足够的可用空间:
char vocales[9]=“a,e,i,o,u”

继续到第i行,vector contadores[5];
,假设您想要一个名为“vector contadores”的变量。变量名中不能有空格,所以将所有发生的事件重命名为“vector_contadores”,以使这一部分工作

继续讨论所有的if语句。它们都是相同的,所以我只写了关于第一个语句的内容。代码
cadena a++;
无效。您有多个选项来解决这个问题。(1)从该代码中删除
a
cadena++;
)。(2)为
a
定义整数变量,并从代码中删除
cadena
a++;
)。(3)重写为
cadena['a']++;
。有更多选项可使此部分可编译

变量
int max,pos;
在for循环内部定义,但在外部使用。将它们的定义移动到函数顶部,在那里定义其他变量。另外,使用值
-1
初始化
max


这就是编译这段代码所需的全部内容(除非我忘了什么)

不,这是问题所在,但这实际上是您在编译器中运行的代码?因为似乎您遇到了链接器错误,而编译器不应该真正编译您的代码:int I,vector contadores[5];是非法的。向量是什么?你也不会在任何地方初始化你的int,所以你肯定会在那里得到垃圾值。a、e、o和u似乎也没有被声明。你已经声明了i,但是它是用来作为循环的计数器的。你的代码中的
向量是什么?我能想象的唯一有效方法是有一些预处理器符号,不涉及任何东西或奇怪的东西…变量名不能包含空格。只有使用最奇怪的宏编写此代码才能进行编译,目的是让其他开发人员感到惊讶。您甚至不了解语言基础,例如如何使用数组、字符串或如何调用函数。通过阅读Kernighan&Ritchie或类似的书开始学习C。对于
“a,e,i,o,u”
…将数组大小增加到9或10。它是什么,9或10?你使用它的方式(
vocales[9]=“a,e,i,o,u”
)是错误的,因为没有空字符的空间。一个安全的选择是建议:
char vocales[]=“a,e,i,o,u”;
。这确保了正确的初始化。(将是10个字节)。@Ryker好的,我可以将其改为只提到大小9,因为这是所需的最小值。我还提到了10,因为这是实际字符串大小,包括终止零。我没有提到,任何大于9的大小都是有效的(不仅仅是10).我不喜欢将大小分开的想法,因为对我来说这意味着对大小敏感的用法,但事实并非如此(我知道这不是很合理)。编辑之前我会考虑一下;)…大小9,因为这是所需的最小值…不,字符串;
“a,e,I,o,u”
至少需要10个字节才能成为字符串。C字符串需要空终止符。这不是一个选项。在内存中,此字符串看起来像:
|a |、|e |、|i |、|o |、|u |\0 |
。并且需要10个字符。@Ryker您是这里唯一谈论字符串的人……用例是数组初始值设定项,编译器在这里优雅地使用y允许使用字符串(应该是字符数组)它允许初始化字符数组成员,使其与字符串内容相对应,而不带尾随零。因此,您的建议是关于样式,而不是关于可编译性。我的答案肯定不是关于样式。我不是唯一一个谈论字符串的人。您提出来的。根据您自己的答案:行字符vocales[5]=“a,e,I,o,u”;是不允许的,因为字符串大小为…如果不想使用该信息,请忽略它。
int main (void){
   char calcular_vocal(char[]);
}