2015-03-13 3 views
0

Я программирую на C, и у меня есть некоторые ошибки, которые я действительно не ожидал, и я могу это понять. Идея состоит в том, чтобы создать меню с оператором switch для вызова функций по пользовательскому вводу. Я не получил никаких ошибок в функциях, но я получаю это:C Ошибка компиляции в операторе switch

«ожидаемое заявление перед„}“лексем }»

и это одна:

«случай метка„14“не в распределительном заявление », эта ошибка повторяется для каждой метки в инструкции switch. Я проверил скобки, и все они были заполнены открытыми и закрытыми скобками.

Я использую возвышенный-текст 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

Есть ли номер строки, который приходит с первой ошибкой? – Evert

+0

Посмотрите на эту строку (3-я строка в опции «case 1»: «printf («% s », strconcat (строка, строка2); break;». Существует закрывающая ')' отсутствует. – Evert

ответ

2

Po INT 1> В case 1:

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

Вы пропускаете ) для printf().

Пункт 2> В 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; 
    } 

или, еще лучше,

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

    break; 
+0

Здесь вам нужны фигурные скобки, иначе вы получите 'else' без соответствующего оператора' if'. –

+0

Спасибо, два первых ответа исправить. Кстати, я не должен писать такой код? У меня появилось чувство, что я собираю некоторые вредные привычки от учителя в колледже – Nhull

+0

@DmitryGrigoryev Упс! Плохой выбор слов. Ред. Надеюсь, теперь это ясно. –

0

Вот код обижая (отсутствующий фигурные скобки возле другой):

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

Вы должны поместить каждый, если-иначе multistatement блок внутри скобок, например:

   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; 

Upd:
Кроме того, некоторые другие случаи неправильно if блоки (случай 3, например), как:

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

Здесь в if и остальное блоки должны принимать в {}. Или переместите break после заявления if/else.

+0

Спасибо, боже ... это то, что я получаю за то, что собираю свои привычки учителя – Nhull

0

Вы забываете скобки в случае 4.

Ваш код:

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

Ваш код совершенно неправильно .. Вы пропустите некоторые скобки, и эта программа не будет работать, вы должны изменить некоторые вещи .. В ANYCASE, правильный код для компиляции это:

#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;}