Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    problemino da principiante in C

    allora io voglio un semplice programmino dove se batto la lettera y mi richiede di ribattere una lettera, e questo ciclo continui solo se continuo a battere la lettera y

    ho scritto questo programmino

    codice:
    #include <stdio.h>
    
    int main()
    {
        char c;
        do{
             printf("se inserisci y bene sennò muore tutto xD \n");
             scanf("%c",&c);
             }
        while (c=='y');
        
        system("pause");
        return 0;
    }
    ma quando lo vo a eseguire mi chiede di farlo una volta dopodichè mi ristampa un altra volta la scritta del printf e il programma termina...

    dove sbaglio??
    grazie in anticipo per le risposte

  2. #2
    se il printf è dentro il ciclo è ovvio che lo stampa ogni volta.... =)

    devi mettere il printf fuori dal ciclo e lasciare dentro lo scanf.....

  3. #3
    ma a me va bene che mi richieda di inserire l'input... però il problema è che l'input me lo chiede comunque una volta sola. anche se la prima volta gli batto "y".

    l'output è

    se inserisci y bene sennò muore tutto xD
    y
    se inserisci y bene sennò muore tutto xD
    Premere un tasto per continuare

  4. #4
    probabilmente è un problema di come formatto la condizione di uguaglianza tra le lettere... perchè se faccio la stessa cosa con i numeri funziona

  5. #5
    trovato l'errore!
    lo scanf ce l'avevo in unsigned char... invece dovevo mettere "%s"

  6. #6
    io avevo provato a mettere il cin al posto dello scanf e funziona anche col cin.... xrò adesso non capisco perchè con %s funzioni... visto che c è un char....

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Originariamente inviato da Infernal
    io avevo provato a mettere il cin al posto dello scanf e funziona anche col cin.... xrò adesso non capisco perchè con %s funzioni... visto che c è un char....
    cin è un oggetto di C++: niente a che vedere con il linguaggio C.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8
    bho infatti non capisco perchè con "%c" non ha funzionato...

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Probabilmente è un problema di bufferizzazione: scanf() non termina finchè non viene riconosciuto il terminatore di linea.

    Quindi, tu devi digitare Y e INVIO.

    Il primo Y viene letto correttamente dalla scanf(), ma al successivo ciclo c'è l'INVIO ancora nel buffer di lettura, che essendo diverso da Y fa terminare il programma.

    Prova così:
    codice:
    #include <stdio.h>
    
    int main()
    {
        char c;
        char invio;
        do{
             printf("se inserisci y bene sennò muore tutto xD \n");
             scanf("%c",&c);
             scanf("%c", &invio);
             }
        while (c=='y');
        
        system("pause");
        return 0;
    }
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  10. #10
    Più semplicemente:
    codice:
    #include <stdio.h>
    
    int main()
    {
        char c;
        do
        {
             printf("se inserisci y bene sennò muore tutto xD \n");
        } while (getch()=='y');
        puts("Premere un tasto per uscire...");
        getch(); /* evita la system() come la peste */
        return 0;
    }
    .
    Amaro C++, il gusto pieno dell'undefined behavior.

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.