Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    112

    [C] chiusura finestra in win anche se metto un getchar() a fine programma

    ciao, ho voluto provare a programmare in c con vsc in windows10 e ci sono riuscito ma quando lancio il file exe creato non faccio a tempo a vedere il risultato del mio programmino che la finestra si chiude.
    Ho provato a mettere un getchar() o un ciclo infinito a fine programma ma la finestra si chiude lo stesso.
    Come posso fare? grazie!
    Vi posto il programmino:

    codice:
    #include<stdio.h>
    float calcolo(float, int);
    
    int main() {
    #defineSCONTO20
        float prezzo;
    
        puts("PREZZO SCONTATO");
        printf("\nQual'e' il prezzo da scontare? ");
        scanf("%f", &prezzo);
        float pz_scontanto = calcolo(prezzo, SCONTO);
        printf("%s%.2f", "Il prezzo scontanto e' ", pz_scontanto);
    
        getchar();
        return 0;
    }
    
    float calcolo(float p, int s){
        float pz;
        pz = p - (p * 0.2);
        return pz;
    }
    
    

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    112
    Al posto di getchar() ho provato a mettere system("PAUSE"); ma la finestra si chiude lo stesso.
    Ho notato anche una cosa interessante: questa pausa non la fa neanche nel terminale di vsc!!

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,306
    Il motivo è "semplice".
    Quando tu leggi un valore decimale usando la scanf(), quello che accade dietro le quinte è questo:
    Il programma attende che tu immetta l'input.
    E tu scrivi, ad esempio:

    100<INVIO>

    La scanf() analizza la stringa ricevuta (è nel buffer), estrae il valore 100 che viene memorizzato nella variabile float, rimuove questo valore dal buffer e poi il programma prosegue.
    Nel buffer, quindi rimane l'INVIO.

    Questo INVIO viene letto dalla succesiva getchar().

    Quindi il programma termina.

    Se vuoi, puoi provare a rimuovere la riga del getchar() e ad aggiungere questo alla fine (prima dell'istruzione return) e vedrai che il programma prima ti stampa il carattere letto dal buffer e poi si ferma

    codice:
    int ch = getchar();
    printf("\n\n"Carattere: %d\n", ch);
    while(getchar() != 'q');
    Ora per terminare il programma devi premere "q" (minuscola) e invio.
    "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

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    112
    Grazie, la tua soluzione funziona, ma ho scoperto anche che è possibile aggiungere la riga fflush(stdin) dopo scanf, funziona uguale. Dovrebbe svuotare il buffer in entrata quindi non c'è più quell'invio di cui parlavi tu.

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.