For che stampa due volte

di il
11 risposte

For che stampa due volte

Ciao a tutti,non riesco a capire che problema ha questo pezzo di codice che stampa la richiesta due volte,ho provato altre soluzioni ma senza successo..avete idee? grazie in anticipo!
 for(;scelta2!='n';){
    printf("Aprire un file? S-SI\n");
    scanf("%c",&scelta2);
    if(scelta2=='s'){
    aprifile();
  }

11 Risposte

  • Re: For che stampa due volte

    Devi essere più preciso.

    Cosa deve fare questo for? Deve prendere una richiesta ok...ma devi essere più preciso. Così è difficile aiutarti immaginando la soluzione.

    Come primo suggerimento visto com'è impostato il for sicuramente puoi scrivere ciò che ti serve sostituendolo con il while o il do-while.
  • Re: For che stampa due volte

    Scusa l'imprecisione,il programma dovrebbe analizzare la scelta ponderata dall'utente, se la richiesta è positiva,porta ad un controllo che determina quale file aprire,tutto questo avviene tramite funzione,quindi nel main chiede se aprire un altro file,oltre quello aperto di default,se si,effettua quest'operazione per quante volte si desidera. ecco qua,spero sia abbastanza chiaro.
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #define max 80
    
    
    void aprifile();
    
    int main(){
        
      
        char scelta2;
        
        printf("Lista di file disponibili: \n1-Doc.txt\n2-Testo.txt\n3-Foglio.txt\n\n\n");
        
        for(;scelta2!='n';){
                           
        printf("Aprire un file? s-SI \n");
        scanf("%c",&scelta2);
        if(scelta2=='s'){
        aprifile();
      }
    
    }
      
    
        system("pause");
                       return 0;
                       }
                       
                       
        void aprifile(){
             
        FILE *fp;
        char *p;
        char file[max];
        int scelta;
     
        printf("Che file si desidera aprire?\n");
        scanf("%d",&scelta);
        
       
        
        if(scelta==1){
                      
                      fp=fopen("Doc.txt","r");
                      p=fgets(file,sizeof(file),fp);
                      if(fp==NULL){
                                   printf("File inesistente\n");
                                   }
                      puts(p);
                     
                      fclose(fp);
                       
                       
                      
                      }
        else if(scelta==2){
                           
                           fp=fopen("Testo.txt","r");
                           p=fgets(file,sizeof(file),fp);
                           if(fp==NULL){
                           printf("File inesistente\n");
                                        }
                           puts(p);
                          
                           fclose(fp);
                           
                           
                           }
        else if(scelta==3){
                           
                           fp=fopen("Foglio.txt","r");
                           p=fgets(file,sizeof(file),fp);
                           if(fp==NULL){
                                        printf("File inesistente\n");
                                        }
                           puts(p);
                           
                           fclose(fp);
                            
                           
                           }
                           
         else{
                       printf("File non presenti nella lista dei file disponibili. \n\n");
         }
        
    }
    
         
                
                       
                       
                       
                       
    
  • Re: For che stampa due volte

    A me sinceramente sembri che funzioni correttamente.

    Premo 1 mi fa aprire un file...reinserisco 1 e posso aprirne un altro fino a quando non premo poi 0 e mi chiude il programma...
  • Re: For che stampa due volte

    Fin quando la variabile di scelta è un intero va bene,la cosa mi dava problemi quando anziche premere 1 per si e 0 per no, dovevo inserire s per si e n per no,quindi la variabile char,e nel for questo dava problemi,stampa due volte "Aprire un altro file?"...
  • Re: For che stampa due volte

    E allora metti il codice che ti da problemi...perchè hai messo questo...
  • Re: For che stampa due volte

    Ho aggiornato il codice.controlla ora,avevo messo il codice girava difatti..
  • Re: For che stampa due volte

    Ti serve ripulire il buffer con fflush(stdin).
    
        for(;scelta2!='n';){
    
        printf("Aprire un file? s-SI \n");
        scanf("%c",&scelta2);
        if(scelta2=='s'){
        aprifile();
        fflush(stdin);
      }
    
  • Re: For che stampa due volte

    Ecco,grazie mille! avevo immaginato che fosse il buffer,infatti ho provato ma usandolo sullo stdoutput,e non fungeva,ovviamente. Ma il dubbio maggiore è perchè lo stampava proprio due volte?
  • Re: For che stampa due volte

    Perchè la scanf ti memorizza l'invio.
  • Re: For che stampa due volte

    Chiaro. grazie ancora
  • Re: For che stampa due volte

    Se programmi solo per Windows puoi usare getch() che è unbuffered e quindi non hai problemi con \n,se non ho detto una baggianata.Programmo di rado per quel so.
Devi accedere o registrarti per scrivere nel forum
11 risposte