Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [C] richiamo funzioni

  1. #1

    [C] richiamo funzioni

    salve, ho questo problema..
    se io ho una funzione del genere molto semplice:
    codice:
    void read_vector(Vettore v, int* n, Stringa nome_file){ 
    register int i; FILE*f; 
            printf("Inserire il nome del file in cui sono contenuti i dati del campo magnetico\n(specificare anche il suo indirizzo se il file non e' collocato nella stessa \ncartella dell'exe): "); 
          else printf("Inserire il nome del file in cui sono contenuti i dati del campo gravitazionale\n(specificare anche il suo indirizzo se il file non e' collocato nella stessa \ncartella dell'exe): "); 
    scanf("%s", nome_file); 
    
    f=fopen(nome_file,"r"); 
         if (f==NULL){ 
    printf ("\nSi e' verificato un errore . . .\nFile inesistente, il programma verrà terminato. . .\n"); system("PAUSE"); exit(0); 
    } 
    
      fscanf(f,"%d",n); 
          for (i=0;i<*n;i++) 
           fscanf(f,"%f",&v[i]); 
    }
    la richiamo nel main prima in questo modo:
    codice:
    read_vector(v,&n,nome_file);
    poi così:
    codice:
    read_vector(w,&m,nome_file);
    ((naturalmente dopo aver fatto il preambolo, prototipi dichiarato variabili, typedef, etc..))

    tutta funziona bene.. però se volessi fare in modo che quando utilizzo il vettore w il printf mi stampi a video un'altra cosa??
    mi spiego meglio..
    io voglio che la prima volta che richiamo la funzione, questa mi stampi a video quello che c'è scritto sopra nel printf...
    poi la seconda volta invece di stamparmi campo magnetico, mi deve stampare campo gravitazionale...
    come dovrei fare??? però è importante che la funzione sia una e con quei parametri di entrata/uscita...

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Diciamo che potresti scrivere

    codice:
    void read_vector ...
    {
    ...
    	static int flag = 0;
    
    	if(flag++ == 0)
    		printf("Inserire il nome del file in cui sono contenuti i dati del campo magnetico\n(specificare anche il suo indirizzo se il file non e' collocato nella stessa \ncartella dell'exe): "); 
    	else 
    		printf("Inserire il nome del file in cui sono contenuti i dati del campo gravitazionale\n(specificare anche il suo indirizzo se il file non e' collocato nella stessa \ncartella dell'exe): "); 
    ...
    }
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    non mi è chiara solo una cosa...
    perchè metti ++, dopo flag?? e non semplicemente
    codice:
    flag==0

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ti faccio una domanda ... hai compreso come il programma decide se eseguire la prima o la seconda printf ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    mmm..
    certo, in base al valore della variabile flag, la quale la dichiariamo all'interno del sottoprogramma uguale 0..
    aspetta, penso di aver capito... hai scritto flag++==0, perchè in base alla priorità degli operatori, viene eseguito prima il confronto e poi l'incremento di flag??

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da seby.91
    mmm..
    certo, in base al valore della variabile flag, la quale la dichiariamo all'interno del sottoprogramma uguale 0..
    aspetta, penso di aver capito... hai scritto flag++==0, perchè in base alla priorità degli operatori, viene eseguito prima il confronto e poi l'incremento di flag??
    Sì .. e poi perché

    static

    ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    vabè, static semplicemente perchè la variabile mantiene il suo valore anche al termine della procedura..

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.