¿Por qué el comstackdor muestra el error “expresión esperada antes de stud”?

Se espera que este progtwig haga algunas cosas: 1. Agregar nuevo estudiante usando ID 2. Buscar estudiante por ID 3. Buscar estudiante por nombre 4. Listar todos los estudiantes 5. Mostrar lista de estudiantes que lograron 80 puntos y más

Esto es lo que he hecho hasta ahora.

#include  #include  #include  #define MAX 200 int i; int id; /*Declaration of structures*/ typedef struct student{ char studID[20]; char name[50]; char address[80]; char tel_no[15]; float marks; } stud; int add_Name (); int menu_Display (); int get_Menu (); int get_Option (); int stud_id(); int stud_Name(); int main() { menu_Display (); get_Menu (); get_Option (); getchar(); return 0; } int menu_Display () { int choice=0; while (choice!=6) { get_Menu (); choice = get_Option(); } } int get_Menu (){ int i; for (i=0; i<1; i++) { printf ("\t1. Insert new student\n\n"); printf ("\t2. Search for a particular student by ID\n\n"); printf ("\t3. Search for a particular student by name\n\n"); printf ("\t4. Display a list of all students \n\n"); printf ("\t5. Display a list of students achieving 80.0 marks and above\n\n"); printf ("\t6. Exit\n\n"); } } int get_Option () { int option; printf ("Please enter your option..."); scanf ("%d", &option); } int menu_Option (int option) { int i; switch (option) { case 1 : add_ID(); break; case 2 : stud_id(); break; case 3 : stud_Name(); break; case 4 : list_students(); break; case 5 : students_marks(); break; case 6 : printf("Exit\n"); break; default : printf ("Wrong input"); i=getchar(); break; } } int add_ID () { int i; struct student stud[200]; for (i=0; i<1; i++){ strcpy(stud[i].studID,"ID00"); printf("Enter Name:\n"); scanf("%s", &(stud[i].name)) ; printf("Enter address:\n"); scanf("%s", &(stud[i].address)); printf("Enter telephone number:\n"); scanf("%s", &(stud[i].tel_no)); printf("Enter marks:\n"); scanf("%f", &(stud[i].marks)); } } int stud_Name() { int i; int result; char name[20]; printf("Please enter the name of the student\n"); gets(name); for (i = 0; i < MAX; i++) { if ((result = strcmp(stud[i].name, name)) == 0){ printf("%s \t %s \t %s \t %s \t %.2f \n", stud[i].studID, stud[i].name, stud[i].address, stud[i].tel_no, stud[i].marks); } if (i == MAX) { printf ("Match not found\n"); } i=getchar(); } } int stud_id() { int i; int result; char ID[20]; printf("Please enter the Student ID which you are searching for\n"); gets(ID); for (i = 0; i < MAX; i++) { if ((result = strcmp(stud[i].studID, ID)) == 0){ printf("%s \t %s \t %s \t %s \t %.2f \n", stud[i].studID, stud[i].name, stud[i].address, stud[i].tel_no, stud[i].marks); } if (i == MAX) { printf ("Match not found\n"); } i=getchar(); } } int list_Students(){ printf("Student ID \t Name \t Address \t Telephone number \t Marks \n"); for (i = 0; i < MAX; i++) { printf("%s \t %s \t %s \t %s \t %.2f \n", stud[i].studID, stud[i].name, stud[i].address, stud[i].tel_no, stud[i].marks); } } 

He encontrado algunos errores al intentar comstackr el progtwig. El error mostrado fue “Expresión esperada antes de ‘stud'” en las funciones stud_Name , stud_id y list_Students . He intentado modificar el código pero nada funciona. ¿Estoy usando strcmp la manera correcta? Gracias

Has usado typedef para nombrar tu estructura a stud . typedef no crea una variable, le permite crear una variable sin la struct palabras.

Por ejemplo:

 typedef struct NameOfStruct { } ShortName; struct NameOfStruct var1; // Creates variable named var1 ShortName var2; // Creates variable named var2 

Parece que quieres usar stud como una variable global. En tal caso, debe eliminar el struct student stud[200]; línea struct student stud[200]; desde add_ID() .

Puede crear un stud variable global como este (tenga en cuenta que esto no usa word typedef ):

 struct student{ char studID[20]; char name[50]; char address[80]; char tel_no[15]; float marks; } stud[200]; 

stud es un alias del tipo struct student , usar el operador [] no tiene sentido. Probablemente quieras una serie de estructuras de student , MAX de ellas. Que se puede hacer con

 student stud[MAX]; 

Nota al margen: usar gets se considera una mala práctica porque puede ser dañino fácilmente, considere fgets .