Как исправить ошибку структуры в коммутаторе - PullRequest
0 голосов
/ 03 июня 2019

Я пытаюсь использовать структуру с переключателем, но он говорит мне, что «Contactos» не объявлен.¿Где здесь проблема?

enter code here

#include <stdio.h>
#include <string.h>

struct Contacto {
char nombreContacto[30];
int Tf;
};

int main(){
FILE *AGENDA;
AGENDA = fopen("AGENDA.txt", "a"); 

/*Code with options*/

switch(opcion)
{
case 2:

struct Contacto Contactos;
   printf("ingresa el nombre del contacto:\n");
   fgets(Contactos.nombreContacto,30,stdin);
   printf("Cuantos numeros de telefono tiene el contacto:  \n");
   scanf("%d",&i);
   i--;
   while (i>=0){
   printf("ingresa el telefono %i del contacto:\n",i);
   scanf("%d",&Contactos.Tf);
   printf("\n");
  i--;}
     if(AGENDA){
fwrite(&Contactos,sizeof(struct Contacto),1,AGENDA);
fclose(AGENDA);
break;}}

В коммутаторе есть проблемы: ожидаемое выражение (из структуры) и необъявленный идентификатор Contactos

1 Ответ

4 голосов
/ 03 июня 2019

Помеченные операторы не могут быть объявлениями.

case 2: это ярлык. Метка может применяться только к оператору в грамматике Си. Объявление в грамматике C не является оператором . Один из способов исправить это - поставить нулевой оператор, такой как ; после метки:

case 2:
    ;
    struct Contacto Contactos;

Другой способ заключается в том, чтобы заключить код дела в составное утверждение:

case 2:
{
    struct Contacto Contactos;
    …
}

Последнее также имеет то преимущество, что ограничивает область объявления, что предотвращает случайное использование кода в других случаях в этом случае.

В грамматике C оператор является одним из:

  • A составной оператор , {}.
  • оператор-выражение , такой как оператор присваивания, вызов функции и другие выражения.
  • A оператор выбора , if или switch.
  • оператор итерации , while, do или for.
  • A оператор перехода , goto, continue, break или return.

Объявление вообще не является оператором и может появляться только в области видимости файла, внутри составного оператора или в некоторых частях объявлений функций .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...