Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Sto impazzendo su errore banalissimo, anzi nemmeno vedo errori
Forum - C/C++ - Sto impazzendo su errore banalissimo, anzi nemmeno vedo errori

Avatar
Cristian Sannino (Ex-Member)
Rookie


Messaggi: 26
Iscritto: 12/02/2011

Segnala al moderatore
Postato alle 19:28
Mercoledì, 23/02/2011
Ragazzi questo è il codice :
Codice sorgente - presumibilmente C++

  1. int max(int a, int b)
  2. {
  3. int mass;
  4.  
  5. if(a>b){ mass=a; } else { mass=b; }
  6. return mass;
  7. }



l'errore che mi dà è questo:
error: expected identifier or '(' before 'int'| cioè sarebbe prima di int max(int a, int b)
e questo : error: expected ')' before '>' token|

premesso che vedo tutto corretto vi posto anche i sorgenti completi dei file, uno è il main e l'altro è un file header
main.c
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <windows.h>
  4. #include "function_e_struct.h"
  5.  
  6. // Prototipi delle funzioni precedentemente create
  7. void inserisci_alunni();
  8. void stampa();
  9. void seleziona_alunno();
  10. void presenza(int);
  11. void assenza (int);
  12. void massimo();
  13. int max(int,int);
  14. int massimo_r(struct alunno* vettore, int n);
  15.  
  16. int main()
  17. {
  18.     SetConsoleTitle("Gestione Alunni 1.0");
  19.     int scelta=0;
  20.     int inizio=0;
  21.  
  22.     do
  23.     {
  24.         if(inizio==0)
  25.         {
  26.         printf("\n Andiamo a creare un elenco 10 studenti !\n");
  27.         system("PAUSE");
  28.         printf("\n\n");
  29.         inserisci_alunno();
  30.         inizio=1;
  31.         system("cls");
  32.         }
  33.         system("cls");
  34.         printf("\n");
  35.         printf("  ############################\n");
  36.         printf("  # Cosa vuoi fare ?         #\n");
  37.         printf("  # Stampa alunni = 1        #\n");
  38.         printf("  # Appello = 2              #\n");
  39.         printf("  # Cerca alunno = 3         #\n");
  40.         printf("  # Per uscire premi 0       #\n");
  41.         printf("  ############################\n");
  42.         printf("  Scelta : ");
  43.         scanf("%d",&scelta);
  44.  
  45.         switch(scelta)
  46.         {
  47.         case 1 : stampa(); break;
  48.         case 2 : appello(); break;
  49.         case 3 : seleziona_alunno(); break;
  50.         case 4 : massimo_r(classe,MAX_STUDENTI); system("pause"); break;
  51.         case 0 : break;
  52.         default: printf("Attenzione scelta errata !");
  53.         }
  54.  
  55.     } while(scelta != 0);
  56.  
  57. return 0;
  58. }



file function_e_struct.h
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. #define MAX_STUDENTI 2
  5. //Questa è la struct "alunno" in cui dichiarerò le variabili che compongono la struct
  6. typedef struct alunno
  7. {
  8. char nome[100];
  9. char cognome[100];
  10. int matricola;
  11. char dataNascita[15];
  12. char luogoNascita[50];
  13. int presenze;
  14. int assenze;
  15. struct indirizzo {
  16.                     char via[100];
  17.                     int cap;
  18.                     int civico;
  19.                  } indirizzo;
  20. } alunno;
  21. //dichiaro un tipo di dato alunno ma sottoforma di array chiamato classe della dimensione di MAX_STUDENTI
  22. struct alunno classe[MAX_STUDENTI];
  23.  
  24. //La funzione inserisci_alunno() ci sarà utile per inserire inizialmente i dati degli alunni che poi andremo a manipolare.
  25. //L'inserimento verrà fatto per "MAX_STUDENTI" volte
  26. void inserisci_alunno()
  27. {
  28. int i;
  29. for(i=0;i<=MAX_STUDENTI;i++)
  30.     {
  31.      system("cls");
  32.      fflush(stdin);
  33.      printf("\n");
  34.      printf(" Alunno numero %d\n\n",i+1);
  35.  
  36.      printf(" Nome : ");                                                         gets(classe[i].nome);                          fflush(stdin);
  37.      printf(" Cognome : ");                                                      gets(classe[i].cognome);                       fflush(stdin);
  38.      printf(" Matricola (Inserisci solo numeri) : ");                            scanf("%d",&classe[i].matricola);              fflush(stdin);
  39.      printf(" Data di Nascita : ");                                              gets(classe[i].dataNascita);                   fflush(stdin);
  40.      printf(" Luogo di Nascita : ");                                             gets(classe[i].luogoNascita);                  fflush(stdin);
  41.      printf(" Via/Corso/Piazza (Inserisci solo l'indirizzo senza civico) : ");   gets(classe[i].indirizzo.via);                 fflush(stdin);
  42.      printf(" Numero civico (Inserisci solo numeri) : ");                        scanf("%d",&classe[i].indirizzo.civico);       fflush(stdin);
  43.      printf(" CAP (Inserisci solo numeri) : ");                                  scanf("%d",&classe[i].indirizzo.cap);          fflush(stdin);
  44.     }
  45. }
  46.  
  47. //La funzione stampa() stamperà a video tutto l'elenco completo degli alunni del corso
  48. void stampa()
  49. {
  50. system("cls");
  51. int i;
  52. printf("  ##########################################################\n");
  53. for(i=0;i<=MAX_STUDENTI;i++)
  54.     {
  55.         printf("  # Alunno numero %d\n",i+1);
  56.         printf("  # Nome : %s\n",classe[i].nome);
  57.         printf("  # Cognome : %s\n",classe[i].cognome);
  58.         printf("  # Matricola : %d\n",classe[i].matricola);
  59.         printf("  # Data di Nascita : %s\n",classe[i].dataNascita);
  60.         printf("  # Luogo di Nascita : %s\n",classe[i].luogoNascita);
  61.         printf("  # Indirizzo : %s,%d - CAP : %d\n",classe[i].indirizzo.via,classe[i].indirizzo.civico,classe[i].indirizzo.cap);
  62.         printf("  # Presenze : %d\n",classe[i].presenze);
  63.         printf("  # Assenze : %d\n",classe[i].assenze);
  64.         printf("  ##########################################################\n");
  65.     }
  66. system("PAUSE");
  67. }
  68.  
  69.  
  70. void presenza(int studente) { classe[studente].presenze+=1; }
  71.  
  72. //La funzione assenze ci permetterà di inserire le assenze degli alunni
  73. void assenza (int studente) { classe[studente].assenze+=1; }
  74.  
  75. void appello()
  76. {
  77. int count;
  78. int i;
  79.  
  80. printf(" Se l'alunno è assente=1, se presente=0\n");
  81.  
  82. for(i=0;i<=MAX_STUDENTI;i++)
  83.     {
  84.         printf(" %s %s : ",classe[i].cognome,classe[i].nome);
  85.         fflush(stdin);
  86.         scanf("%d",&count);
  87.  
  88.         switch(count)
  89.         {
  90.         case 0: presenza(i); break;
  91.         case 1: assenza(i); break;
  92.         }
  93.  
  94.     }
  95. }
  96.  
  97.  
  98. void seleziona_alunno()
  99. {
  100. system("cls");
  101. int i;
  102. char nome[100];
  103. char cognome[100];
  104. fflush(stdin);
  105. printf("Inserisci il nome dell'alunno che cerchi : ");
  106. gets(nome);
  107. fflush(stdin);
  108. printf("Inserisci il cognome dell'alunno che cerchi : ");
  109. gets(cognome);
  110. fflush(stdin);
  111.  
  112. for(i=0;i<=MAX_STUDENTI;i++)
  113.     {
  114.        if( !strcmp(classe[i].nome,nome) && !strcmp(classe[i].cognome,cognome) )
  115.         {
  116.         printf("  # Nome : %s\n",classe[i].nome);
  117.         printf("  # Cognome : %s\n",classe[i].cognome);
  118.         printf("  # Matricola : %d\n",classe[i].matricola);
  119.         printf("  # Data di Nascita : %s\n",classe[i].dataNascita);
  120.         printf("  # Luogo di Nascita : %s\n",classe[i].luogoNascita);
  121.         printf("  # Indirizzo : %s,%d - CAP : %d\n",classe[i].indirizzo.via,classe[i].indirizzo.civico,classe[i].indirizzo.cap);
  122.         printf("  # Presenze : %d\n",classe[i].presenze);
  123.         printf("  # Assenze : %d\n",classe[i].assenze);
  124.         system("PAUSE");
  125.         break;
  126.         }
  127.     }
  128. }
  129.  
  130. /*int max (int first, int second) {
  131.         if (first > second)
  132.                 return first;
  133.         else
  134.                 return second;
  135. }*/
  136.  
  137. void massimo()
  138. {
  139. int max,i;
  140. char *nome;
  141. char *cognome;
  142.  
  143. for(i=0;i<=MAX_STUDENTI-1;i++)
  144.     {
  145.         if(classe[i].assenze > classe[i+1].assenze)
  146.         {
  147.         max=classe[i].assenze;
  148.         }
  149.         else
  150.         {
  151.         max=classe[i+1].assenze;
  152.         }
  153.     }
  154.     printf("L'alunno con più assenze e' %s %s con %d assenze !",nome,cognome,max);
  155. }
  156.  
  157. int max(int a, int b)
  158. {
  159. int mass;
  160.  
  161. if(a>b){ mass=a; } else { mass=b; }
  162. return mass;
  163. }
  164.  
  165. int massimo_r(struct alunno* vettore, int n)
  166. {
  167.     if (n == 1)
  168.        return vettore[0].assenze;
  169.     else
  170.        return max(vettore->assenze, massimo_r(vettore+1, n-1));
  171. }


gli errori li da su queste righe appena sopra al testo che sto scrivendo, ma vedo tutto corretto...:hail:

PM Quote
Avatar
Alex (Ex-Member)
Expert


Messaggi: 441
Iscritto: 15/08/2005

Segnala al moderatore
Postato alle 21:09
Mercoledì, 23/02/2011
se la scrivi così ti da errore?

Codice sorgente - presumibilmente C++

  1. int max (int a,b){
  2.    if(a>b)
  3.        return a;
  4.    else
  5.        return b;
  6. }


PM Quote
Avatar
Cristian Sannino (Ex-Member)
Rookie


Messaggi: 26
Iscritto: 12/02/2011

Segnala al moderatore
Postato alle 21:34
Mercoledì, 23/02/2011
Si, sempre lo stesso...

PM Quote
Avatar
a_butta (Member)
Expert


Messaggi: 578
Iscritto: 16/03/2010

Segnala al moderatore
Postato alle 22:00
Mercoledì, 23/02/2011
Allora... ho provato a compilare con Borland C++ Builder, e oltre quello mi ha riscontrato altri errori minori (ad esempio nelle varie funzioni, vuole tutte le dichiarazioni all'inizio, prima ad esempio di system("cls").
Per il problema che dici tu io ho ipotizzato che in realtà crei dei problemi con il nome stesso della funzione, magari forse perchè nella procedura massimo() tu utilizzi una variabile max che potrebbe contrastare con la procedura... Tutte queste sono congetture personali, perchè di C/C++ me ne intendo davvero poco.
Fattostà che comunque modificando il nome da
Codice sorgente - presumibilmente C/C++

  1. int max(int a, int b) {
  2.    //blablabla
  3. }



a
Codice sorgente - presumibilmente C/C++

  1. int maxi(int a, int b) {
  2.   //blablabla
  3. }



il programma parte...... fammi sapere :)

Ultima modifica effettuata da a_butta il 23/02/2011 alle 22:01
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 22:03
Mercoledì, 23/02/2011
Se rinonimi "max" in "calcola_massimo" che succede?

Edit: non avevo visto la risposta di a_butta... comunque il problema non e' che una variabile ha lo stesso nome della procedura, il problema e' che max e' probabilmente gia' dichiarato in qualche libreria standard che stai importando.


Ultima modifica effettuata da pierotofy il 23/02/2011 alle 22:05


Il mio blog: https://piero.dev
PM Quote
Avatar
a_butta (Member)
Expert


Messaggi: 578
Iscritto: 16/03/2010

Segnala al moderatore
Postato alle 22:06
Mercoledì, 23/02/2011
Testo quotato

Postato originariamente da pierotofy:

Se rinonimi "max" in "calcola_massimo" che succede?



ahahaha in breve quello per cui ho sproloquiato io :asd::D

PM Quote
Avatar
Cristian Sannino (Ex-Member)
Rookie


Messaggi: 26
Iscritto: 12/02/2011

Segnala al moderatore
Postato alle 22:17
Mercoledì, 23/02/2011
Grazie mille ragazzi, funziona ! :asd:
Pensate solo che questo era l'ultima funzione che non avevo finito del progetto all'università, quindi adesso ho finito e consegno i progetti che mi sono stati assegnati :k:
Grazie grazie grazie mille !

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 20:35
Giovedì, 24/02/2011
Per il futuro... non reinventare la ruota.

Funzioni per calcolare il massimo sono gia' implementate.

http://www.cplusplus.com/reference/algorithm/max/


Il mio blog: https://piero.dev
PM Quote
Avatar
Cristian Sannino (Ex-Member)
Rookie


Messaggi: 26
Iscritto: 12/02/2011

Segnala al moderatore
Postato alle 20:59
Giovedì, 24/02/2011
Diciamo che qui il problema del calcolo del massimo è che non è fatto su semplici variabili, ma su array di struct e quindi dato che non sono esperto in C ho voluto chiedere per capire, ma in ogni caso grazie !

PM Quote