C在switch语句中编译错误

时间:2015-03-13 13:45:31

标签: c linux scope switch-statement

我在C编程,我得到了一些我并不真正期待的错误,我可以理解它。我们的想法是创建一个带有switch语句的菜单,以通过用户输入调用函数。我没有在函数中出错,但我明白了:

"'}'令牌之前的预期声明 }"

和这一个:

"案例标签'14'不在switch语句"中,对switch语句中的每个标签都会重复此错误。我检查了括号,它们都是用开放式和封闭式括号完成的。

我使用sublime-text 2.0作为我的编辑器和构建器,使用Linux作为我的操作系统

int main(){
char string[TMAXSTR], string2[TMAXSTR];
int option, ch;

for(option=0, ch=0;option<15;){

    printf("Escolha uma opção:\n1 - Strconcat (concatenacao de strings)\n2 - Capicua\n3 - Strcmp (Comparacao de Strings)\n4 - Stricmp (transforma caratares em minusculas e compara)\n5 - Strdelc (apaga um determinado caracter)\n6 - Trimright (apaga espaços em branco a direita\n7 - Trimleft (apaga espaços a esquerda\n8 - Trimmiddle (apaga espaços no meio\n9 - Inverter (inverte uma string)\n10 - Findchar (devolve o numero de vezes que um determinado carater aparece na string\n11 - IndiceChar (devolve a posicao de um determinado carater\n12 - Maisculas (Converte a string em maiusculas\n13 - Minusculas (converte a string em minusculas)\n14 - Strstr\n15 - Sair");   

    switch(option){
            case 1:puts("Introduza a primeira string: "); gets(string);
                   puts("Introduza a segunda string: "); gets(string2);
                   printf("%s",strconcat(string, string2);break;

            case 2:puts("Introduza a string: "); gets(string);
                   if(capi(string))
                        puts("E capicua");break;
                    else
                        puts("Nao capicua");break;

            case 3:puts("Introduza a primeira string: "); gets(string);
                   puts("Introduza a segunda string: "); gets(string2);
                   if(strcmp(string, string2)==0)
                        puts("Sao iguais");break;
                   else
                        puts("Sao diferentes");break;

            case 4:puts("Introduza a primeira string: "); gets(string);
                   puts("Introduza a segunda string: "); gets(string2);

                   if(stricmp(string, string2)==0){
                        puts("Sao iguais");break;
                   else
                        puts("Sao diferentes");break;
                    }

            case 5:puts("Introduza a string: "); gets(string);
                   puts("Introduza o carater a verificar: "); scanf(" %c",&ch);
                   printf("A string sem o carater é: %s",strdelc(string,ch));break;

            case 6:puts("Introduza a string: "); gets(string);
                   printf("A nova string é: %s", trimright(string));break;

            case 7:puts("Introduza a string: "); gets(string);
                   printf("A nova string é: %s", trimleft(string));break;

            case 8: puts("Introduza a string: "); gets(string);
                    printf("A nova string é: %s", trimmiddle(string));break;

            case 9:puts("Introduza a string: "); gets(string);
                   printf("A string invertida é: %s", meuinverter(string));break;

            case 10:puts("Introduza a string: "); gets(string);
                    printf("O carater aparece: %dx", findchar(string, ch));break;

            case 11:puts("Introduza a string: "); gets(string);
                    puts("Introduza o carater: "); scanf(" %c",&ch);
                    printf("O indice do carater é: %d", indchr(string,ch));break;

            case 12:puts("Introduza a string: "); gets(string);
                    printf("A string em maisculas é: %s", mas(string));break;

            case 13:puts("Introduza a string: "); gets(string);
                    printf("A string em minusculas é: %s", min(string));break;

            case 14:puts("Introduza a string: "); gets(string);
                    puts("Introduza a segunda string: "); gets(string2);
                    printf("%s", mystrstr(string,string2));break;

            default: puts("Invalido");break;        
        }
    }
return 0;}

5 个答案:

答案 0 :(得分:2)

第1点&gt; case 1:

printf("%s",strconcat(string, string2);break;

您错过)的{​​{1}}。

第2点&gt; printf()

case 4:

if(stricmp(string, string2)==0){ puts("Sao iguais");break; else puts("Sao diferentes");break; } 中存在不匹配。你不需要这样。也许你想要的是

{ }

或者,甚至更好,

 if(stricmp(string, string2)==0)
 {
     puts("Sao iguais");
     break; 
  }
  else
  {
      puts("Sao diferentes");
      break;
   }

答案 1 :(得分:2)

这个if块有一些错位的花括号:

if(stricmp(string, string2)==0){
    puts("Sao iguais");break;
else
    puts("Sao diferentes");break;
}

您可能想将其更改为

if(stricmp(string, string2)==0){
    puts("Sao iguais");     
}
else {
    puts("Sao diferentes"); 
}
break;

更新:
其他一些案例也误用if块(例如案例3),例如:

if(strcmp(string, string2)==0)
    puts("Sao iguais");break;
else
    puts("Sao diferentes");break;

此处if和其他区块应该在{}中。或者在break声明之后移动if/else

答案 2 :(得分:0)

这是令人讨厌的代码(在其他地方缺少大括号):

               if(stricmp(string, string2)==0){
                    puts("Sao iguais");break;
               else
                    puts("Sao diferentes");break;
                }

您应该将每个if-else多语句块放在大括号内,如下所示:

               if(stricmp(string, string2)==0){
                    puts("Sao iguais");break;
               } else {
                    puts("Sao diferentes");break;
               }

答案 3 :(得分:0)

你忘了案例4中的大括号。

您的密码:

if(stricmp(string, string2)==0){
                    puts("Sao iguais");break;
               else
                    puts("Sao diferentes");break;
                }

答案 4 :(得分:0)

你的代码是完全错误的..你错过了一些括号,这个程序不起作用,你必须调整一些东西.. 无论如何,编译的正确代码是:

#include<stdio.h>
#include<stdlib.h>

#define TMAXSTR 500

int main(){

char string[TMAXSTR], string2[TMAXSTR];
int option, ch;

for(option=0;ch=0;option<15){

    printf("Escolha uma opção:\n1 - Strconcat (concatenacao de strings)\n2 - Capicua\n3 - Strcmp (Comparacao de Strings)\n4 - Stricmp (transforma caratares em minusculas e compara)\n5 - Strdelc (apaga um determinado caracter)\n6 - Trimright (apaga espaços em branco a direita\n7 - Trimleft (apaga espaços a esquerda\n8 - Trimmiddle (apaga espaços no meio\n9 - Inverter (inverte uma string)\n10 - Findchar (devolve o numero de vezes que um determinado carater aparece na string\n11 - IndiceChar (devolve a posicao de um determinado carater\n12 - Maisculas (Converte a string em maiusculas\n13 - Minusculas (converte a string em minusculas)\n14 - Strstr\n15 - Sair");   

    switch(option){
            case 1:
                   puts("Introduza a primeira string: "); gets(string);
                   puts("Introduza a segunda string: "); gets(string2);
                   printf("%s",strconcat(string, string2));
                   break;

            case 2:puts("Introduza a string: "); gets(string);
                   if(capi(string)){
                        puts("E capicua");
                        break;
                        }
                    else{
                        puts("Nao capicua");
                        break;
                        }

            case 3:puts("Introduza a primeira string: "); gets(string);
                   puts("Introduza a segunda string: "); gets(string2);
                   if(strcmp(string, string2)==0){
                        puts("Sao iguais");break;}
                   else{
                        puts("Sao diferentes");break;}

            case 4:puts("Introduza a primeira string: "); gets(string);
                   puts("Introduza a segunda string: "); gets(string2);

                   if(stricmp(string, string2)==0){
                        puts("Sao iguais");break;}
                   else{
                        puts("Sao diferentes");break;
                    }

            case 5:puts("Introduza a string: "); gets(string);
                   puts("Introduza o carater a verificar: "); scanf(" %c",&ch);
                   printf("A string sem o carater é: %s",strdelc(string,ch));break;

            case 6:puts("Introduza a string: "); gets(string);
                   printf("A nova string é: %s", trimright(string));break;

            case 7:puts("Introduza a string: "); gets(string);
                   printf("A nova string é: %s", trimleft(string));break;

            case 8: puts("Introduza a string: "); gets(string);
                    printf("A nova string é: %s", trimmiddle(string));break;

            case 9:puts("Introduza a string: "); gets(string);
                   printf("A string invertida é: %s", meuinverter(string));break;

            case 10:puts("Introduza a string: "); gets(string);
                    printf("O carater aparece: %dx", findchar(string, ch));break;

            case 11:puts("Introduza a string: "); gets(string);
                    puts("Introduza o carater: "); scanf(" %c",&ch);
                    printf("O indice do carater é: %d", indchr(string,ch));break;

            case 12:puts("Introduza a string: "); gets(string);
                    printf("A string em maisculas é: %s", mas(string));break;

            case 13:puts("Introduza a string: "); gets(string);
                    printf("A string em minusculas é: %s", min(string));break;

            case 14:puts("Introduza a string: "); gets(string);
                    puts("Introduza a segunda string: "); gets(string2);
                    printf("%s", mystrstr(string,string2));break;

            default: puts("Invalido");break;        
        }
    }
return 0;}