Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    122

    [C] Problema ciclo con printf

    Buongiorno a tutti...ho un problemino cn un ciclo. Visto che nn so spiegarlo benissimo a parole posto il pezzo di codice.

    do
    {
    printf("Mossa: ");
    scanf("%c",&m);
    if (m=='u' || m=='d' || m=='l' || m=='r') flag=1;
    }while(flag==0);

    Questo è il frammento di codice. Il problema che ogni volta invece di stamparti una volta sola Mossa: mi stampa Mossa: Mossa: quindi 2 volte invece che uno.Qualcuno può aiutarmi? V ringrazio molto...ciao a tutti

  2. #2
    Utente di HTML.it L'avatar di byaur
    Registrato dal
    Aug 2004
    Messaggi
    1,061
    si è tipico del costrutto do...while() poichè la condizione è guardata alla fine del ciclo, quindi esiste un "ciclo a vuoto" (il primo)

    do
    {
    printf("Mossa: ");
    scanf("%c",&m);
    if (m=='u' || m=='d' || m=='l' || m=='r') flag=1;
    }while(flag==0);

    io farei:

    codice:
    int flag = 0;
    
    while(flag != 1){ 
       printf("Mossa: "); 
       scanf("%c",&m); 
       if (m=='u' || m=='d' || m=='l' || m=='r') 
                   flag=1; 
    }
    cosi hai il controllo all'inizio. la prima volta lo stampa e se tu inserisci m correttamente non te lo stampa +...
    Chi di noi non vorrebbe
    sollevare il velo sotto cui sta nascosto il
    futuro...
    David Hilbert

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    122
    grazie mille...adesso provo subito!!!

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2005
    Messaggi
    117
    non è quello il problema. il problema è che rimane da leggere il carattere '\n' (newline)

    per evitare questo errore o fai:
    codice:
    do 
    { 
    printf("Mossa: "); 
    scanf("%c%*c",&m); 
    if (m=='u' || m=='d' || m=='l' || m=='r') flag=1; 
    }while(flag==0);
    con %*c legge un carattere e non lo mette in nessuna variabile (così elimini il '\n')

    oppure fai:

    codice:
    char invio;
    do 
    { 
    printf("Mossa: "); 
    scanf("%c%c",&m,&invio); 
    if (m=='u' || m=='d' || m=='l' || m=='r') flag=1; 
    }while(flag==0);
    dichiari invio come char e la usi come variabile per leggere il '\n'

  5. #5
    non ho capito... mi spiegate?!?
    - Sean von Drake

    http://www.videoarts.eu/ realizzazione siti web bologna

    "Sono un servitore del fuoco segreto, e reggo la Fiamma di Anor."

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2005
    Messaggi
    117
    Originariamente inviato da sean_von_drake
    non ho capito... mi spiegate?!?
    Allora...
    quando fai

    scanf("%c",&carattere);

    tu digiti il carattere e poi batti invio.
    Invio è un carattere come tutti gli altri, precisamente il \n (newline), che serve ad andare a capo. Questo carattere deve ancora essere letto, e il c lo legge con la scanf successiva, quindi fa il ciclo...

    Quindi si deve mettere scanf("%c%*c",&carattere) in modo che legge due caratteri: il carattere che vuoi inserire e il \n. Poi l'asterisco tra il percentuale e la c (%*c) permette di non salvare il carattere letto in nessuna variabile...

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 © 2024 vBulletin Solutions, Inc. All rights reserved.