错误:'char'之前的预期表达式

时间:2016-01-23 18:42:12

标签: c function if-statement for-loop ansi

对不起,我编译代码时遇到问题,我不知道如何解决它,因为我不知道它的要求。

这在终端显示我:

“usr / lib / gcc / x86_64-linux-gnu / 4.9 /../../../ x86_64-linux-gnu / crt1.o:在functión_start': /build/buildd/glibc-2.21/csu/../sysdeps/x86_64/start.S:114: reference to 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[]);
}

1 个答案:

答案 0 :(得分:0)

<强>更新

好像你正在编译错误的文件。请参阅以下控制台命令和输出(它的德语,但我认为该消息与您的信息非常相似):

$ 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];,假设您想要一个名为&#34; vector contadores&#34;的变量。您的变量名称中不能包含空格,因此请将其重命名为&#34; vector_contadores&#34;为了使这件作品能够发挥作用。

转到所有if语句。它们都是一样的,所以我只写一些关于第一个的东西。代码cadena a++;无效。您有多种方法可以解决这个问题。 (1)从该代码(a)中删除cadena++;。 (2)为a定义整数变量,并从代码(cadena)中删除a++;。 (3)重写为cadena['a']++;。还有更多选项可以使这部分可编译。

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

这应该是编译这段代码所需的全部内容(除非我忘记了)