For che stampa due volte

di Anonimizzato18590 il
11 risposte
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

  • 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.
  • 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");
         }
        
    }
    
         
                
                       
                       
                       
                       
    
  • 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...
  • 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?"...
  • E allora metti il codice che ti da problemi...perchè hai messo questo...
  • Ho aggiornato il codice.controlla ora,avevo messo il codice girava difatti..
  • 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);
      }
    
  • 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?
  • Perchè la scanf ti memorizza l'invio.
  • Chiaro. grazie ancora
  • 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