| 
 | |||||||
| 
 | 
|  | 
|  | 
|  | Strumenti | 
|  21-11-2013, 18:09 | #1 | 
| Member Iscritto dal: Oct 2007 Città: Monopoli(BA) 
					Messaggi: 218
				 | 
				
				[C] problema con funzioni
			 
		Ragazzi ho un problema con queste funzioni Codice: void inserire_matricola(int posizione_corrente){
     int pass=1;
     char *matricola_acquisita;                                                       /* da chiedere al prof*/
     matricola_acquisita = acquisire_matricola(pass);
     strcpy(lista_studenti[posizione_corrente].matricola, matricola_acquisita);
     
     return;
     }
     
char* acquisire_matricola(int variabile){
     
     char *matricola_provvisoria;
     
     do{
        printf("inserisci la matricola");
        scanf("%s",&matricola_provvisoria);
        if(controllo_formattazione_matricola(&matricola_provvisoria)==0){
           printf("La matricola puo' contenere solo numeri");
           }
        if(controllo_matricola(&matricola_provvisoria)==variabile){
           if(variabile==0){
              printf("La matricola non è presente");
              }
           else{
              printf("La matricola e' presente");
              }
        }
        
        }while(controllo_matricola(&matricola_provvisoria) == 1 || controllo_formattazione_matricola(&matricola_provvisoria)==0);
        
        return &matricola_provvisoria;
     
     }
int controllo_matricola(char matricola_cercata[6]){
    
    int risultato=0;
    int i =0;
 
    while(i<studenti_presenti){
          if(strcmp(matricola_cercata , lista_studenti[i].matricola)){
             risultato=1;
             i=studenti_presenti;
             }
          else{
               i++;
               }
    }
    return risultato;
   
}
int controllo_formattazione_matricola (char *stringa_numerica){
    int risultato;
    int i;
    
    risultato=1;
    i=0;
    
    while (*stringa_numerica+i != '\0' && risultato==1) {
          if (*stringa_numerica+i < '0' || *stringa_numerica+i > '9'){
                                  risultato=0;
                                  }
          i=i+1;
          }
          
    return risultato;
}Codice: void inserire_matricola(int posizione_corrente); char* acquisire_matricola(int variabile); int controllo_matricola(char *matricola_cercata); int controllo_formattazione_matricola(char *stringa_numerica); Questo è il log Codice: Compilatore: TDM-GCC 4.7.1 64-bit Release Building Makefile "G:\4_codice_libreria_studenti\Makefile.win" Esecuzione di make... mingw32-make.exe -f "G:\4_codice_libreria_studenti\Makefile.win" all gcc.exe -c funzioni.c -o funzioni.o -I"C:/Program Files (x86)/Dev-Cpp/MinGW64/include" -I"C:/Program Files (x86)/Dev-Cpp/MinGW64/x86_64-w64-mingw32/include" funzioni.c: In function 'acquisire_matricola': funzioni.c:32:9: warning: passing argument 1 of 'controllo_formattazione_matricola' from incompatible pointer type [enabled by default] In file included from funzioni.c:1:0: variabili_globali.h:33:5: note: expected 'char *' but argument is of type 'char **' funzioni.c:35:9: warning: passing argument 1 of 'controllo_matricola' from incompatible pointer type [enabled by default] In file included from funzioni.c:1:0: variabili_globali.h:32:5: note: expected 'char *' but argument is of type 'char **' funzioni.c:44:9: warning: passing argument 1 of 'controllo_matricola' from incompatible pointer type [enabled by default] In file included from funzioni.c:1:0: variabili_globali.h:32:5: note: expected 'char *' but argument is of type 'char **' funzioni.c:44:9: warning: passing argument 1 of 'controllo_formattazione_matricola' from incompatible pointer type [enabled by default] In file included from funzioni.c:1:0: variabili_globali.h:33:5: note: expected 'char *' but argument is of type 'char **'       Se avete bisogno di qualche commento sul codice chiedete pure 
				__________________ NOSTRAVIS PRO CLASSEM - GrupAer - | 
|   |   | 
|  21-11-2013, 23:22 | #2 | 
| Senior Member Iscritto dal: Sep 2005 Città: Torino 
					Messaggi: 606
				 | 
		una funzione non può restituire l'indirizzo o il valore di una stringa (char *) se questa viene allocata staticamente all'interno di suddetta funzione.  le soluzioni sono 2: 1) nel chiamante crei un array di char abbastanza grande da contenere la matricola e lo passi come parametro alla funzione che lo riempirà. 2) usi l'allocazione dinamica della memoria (malloc) 
				__________________ "Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes] "Pirating software? Choose Microsoft!" | 
|   |   | 
|  22-11-2013, 14:22 | #3 | 
| Senior Member Iscritto dal: Nov 2013 Città: Nel cuore dell'8 Mile di Detroit 
					Messaggi: 3816
				 | 
		per guardare la compilazione mancano dei pezzi , il .h delle globali si puo' solo intuire cmq non puoi fare: Codice: return &matricola_provvisoria; Codice: return matricola_provvisoria | 
|   |   | 
|   | 
| Strumenti | |
| 
 | 
 | 
Tutti gli orari sono GMT +1. Ora sono le: 11:57.









 
		 
		 
		 
		








 
  
 



 
                        
                        










