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

    [C] problemi uscita da ciclo di input

    Salve ragazzi, scusate l'assenza ma sono stato impegnato. Comunque ho risolto tutti i problemi con c::b.

    Adesso ho un problema riguardo un file sorgente che è questo:
    codice:
    #include<stdio.h>
    
    
    main()
    
    
    {
        int product;
        float price1=2.98, price2=4.50, price3=9.98, price5=6.67, price4=4.49;
        float tot1=0, tot2=0, tot3=0, tot4=0, tot5=0;
    
    
        printf("Enter the code of sale products\n");
        printf("Enter the EOF to end the input\n");
    
    
        while((product = getchar() ) != EOF)
        {
    
    
            switch(product)
            {
    
    
            case '1':
                tot1=tot1+price1;
                break;
    
    
            case '2':
                tot2=tot2+price2;
                break;
    
    
            case '3':
                tot3=tot3+price3;
                break;
    
    
            case '4':
                tot4=tot4+price4;
                break;
    
    
            case '5':
                tot5=tot5+price5;
                break;
    
    
            case '\n':
            case ' ':
                break;
    
    
            default:
                printf("Incorrect code number product entered\n");
                printf("Enter a new code number\n");
                break;
            }
        }
    
    
        printf("\n Total earning for each product sale:");
    
    
        printf("Total product1 %.2f\n", tot1);
        printf("Total product2 %.2f\n", tot2);
        printf("Total product3 %.2f\n", tot3);
        printf("Total product4 %.2f\n", tot4);
        printf("Total product5 %.2f\n", tot5);
    
    
        return 0;
    }
    il problema è che il terminale, quando inserisco -1 oppure <ctrl-z> (io uso windows 7), invece di terminare la funzione while e eseguire le istruzioni printf successive, dice per -1, di inserire un carattere nuovo valido (come ho scritto in default), mentre per <ctrl-z> dice di inserire un nuovo carattere valido per ogni code, però dovrebbe passare alle funzioni printf dopo il while!. Dove è il problema? Lo stesso problema me lo da anche con l'esercizio rappresentativo del Deitel
    Ultima modifica di MItaly; 12-01-2014 a 13:34 Motivo: Tag CODE, titolo, indentazione

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Magari nel titolo dovresti indicare qualcosa di più utile ... e i tag CODE per il codice perché non si capisce molto ...

    Per quanto riguarda il problema, perché inserisci -1 ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Perchè sul deitel c'è scritto che in genere a EOF corrisponde il valore -1 e quindi lo utilizzo come valore sentinella per terminare il programma, ma dice anche che che nel sistema operativo windows corrisponde <ctrl-z>

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Per cortesia, almeno usa i tag [ CODE ]

    -1 sono 2 caratteri ed in ogni caso non controlli da nessuna parte per un -1
    Per quanto riguarda l'EOF, su ubuntu+gcc funziona correttamente, non ho windows a portata di mano.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  5. #5
    Scusa , intendi che il file sorgente che ho postato funziona correttamente su linux con EOF? Io comunque usa c::b

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Non -1 ASCII ma -1 binario ... non va bene ...

    Utilizza Ctrl-Z e Return (oppure F6 e Return) per terminare
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Grazie 1000 funziona, ma non capisco perchè il deitel dice che che posso usare il -1, potete darmi una spiegazione dettagliata di perchè questo modo non funziona?

  8. #8
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Magari nel titolo dovresti indicare qualcosa di più utile ... e i tag CODE per il codice perché non si capisce molto ...
    Esatto. Per chiarezza: quando incolli il codice in un post sul forum inseriscilo tra tag CODE, ovvero:
    • scrivi [CODE]
    • incolla il codice
    • scrivi [/CODE]

    In questa maniera il codice mantiene l'indentazione e viene attivata l'evidenziazione della sintassi, che rende il codice molto più leggibile.
    Inoltre, posta codice indentato (altrimenti non ci si capisce una mazza), e specifica titoli significativi per le discussioni - un buon 50% delle discussioni qui riguarda qualche genere di problema con dei sorgenti C.

    Per l'ultima volta sistemo io, alla prossima chiudo direttamente la discussione.
    Ultima modifica di MItaly; 12-01-2014 a 13:45
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Quote Originariamente inviata da ARMANDO888 Visualizza il messaggio
    Grazie 1000 funziona, ma non capisco perchè il deitel dice che che posso usare il -1, potete darmi una spiegazione dettagliata di perchè questo modo non funziona?
    EOF (che in genere è -1) non è un carattere "vero", ma un valore "magico" restituito da getchar() per indicare che è finito lo stream di input. È sostanzialmente il modo che getchar() usa per indicare che ha provato a leggere un carattere, ma erano finiti.
    Ctrl-Z, a sua volta, è una combinazione di caratteri che si usa per dire alla finestra della console che l'input è finito.
    Ultima modifica di MItaly; 12-01-2014 a 13:45
    Amaro C++, il gusto pieno dell'undefined behavior.

  10. #10
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    - : 0010 1101
    1: 0011 0001

    -1: 0010 1101 0011 0001
    -1 binario: 1111 1111
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

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.