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

    piccolo problema con un programma...

    ciao a tutti...il programma in se funziona, però non riesco a capire perchè mi ripete 2 volte questorintf("\n-Premi :\n.) c per il cubo,\n.) q per il parallelepipedo,\n.) p per la piramide: ");
    ....so che il programma non ha senso,cioè la terra ecc, era per esercitarmi.....e volevo sapere come risolvere il mio problema...per capire meglio eseguite il programma....io credo che c faccia un ciclo a vuoto ogni volta e così mi chiede 2 volte di inserire printf("\n-Premi :\n.) c per il cubo,\n.) q per il parallelepipedo,\n.) p per la piramide: ");.....ma perché??? grazie|!!


    #include<stdio.h>
    #include<stdlib.h>
    main()
    {
    char f;
    float terra,lato,area,lator,lator1,h1,latot,h2,h3,area1, avanzo;
    int cont1,cont2,cont3;
    printf("TU HAI DEI METRI DI TERRA CHE VUOI METTERE DENTRO DELLE SCATOLE..\nMA NON SAI QUANTE TE NE SERVONO....\n\n");
    printf("Quanti metri di terra hai?? ");
    scanf("%f",&terra);
    printf("Hai a disposizione 3 scatole di varie dimensioni: \n");
    area=0;
    area1=0;
    cont1=0;
    cont2=0;
    cont3=0;
    do
    {
    printf("\n-Premi :\n.) c per il cubo,\n.) q per il parallelepipedo,\n.) p per la piramide: ");
    scanf("%c",&f);

    switch (f)
    {
    case 'c':
    {
    printf("Dammi il lato del cubo: ");
    scanf("%f",&lato);
    area1=lato*lato*lato;
    cont1++;
    break;
    }
    case 'q':
    {
    printf("Dammi il lato del rettangolo: ");
    scanf("%f",&lator);
    printf("Dammi l'altro lato del rettangolo: ");
    scanf("%f",&lator1);
    printf("Dammi l'altezza del parallelepipedo: ");
    scanf("%f",&h1);
    area1=(lator*lator1)*h1;
    cont2++;
    break;
    }
    case 'p':
    {
    printf("Dammi il lato del triangolo: ");
    scanf("%f",&latot);
    printf("Dammi l'altezza del triangolo: ");
    scanf("%f",&h2);
    printf("Dammi l'altezza della piramide: ");
    scanf("%f",&h3);
    area1=((latot*h2)/2)*(h3/2);
    cont3++;
    break;
    }
    default:
    printf("Non hai questa scatola!\n");

    }
    area=area+area1;
    area1=0;
    }
    while(area<terra);
    printf("\nIn totale ti servono %d cubo/i, %d parallelepipedo/i e %d piramide/i!\n",cont1,cont2,cont3);
    avanzo=area-terra;
    printf("\nnell'ultima scatola hai ancora a disposizione %.2f metri di spazio!\n\n",avanzo);
    system("pause");
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    E' il solito problema del buffer della scanf ...

    Potrai trovarlo ripetutamente citato in tanti thread di questo forum (e anche nelle "pillole")...

    In ogni caso, dopo la scanf del menu, aggiungi

    while (getchar()!='\n') ;

    per svuotare il buffer.


    P.S. Dato che sei nuovo, dai un'occhiata al Regolamento prima di aprire altri thread ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    non ho capito dove inserirlo....ho provato a metterlo come primo while, ma così facendo il programma smette di funzionare perchè non mi richiede più di inserire la lettera e continua a mandarmi in default....

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da elialongoni04
    non ho capito dove inserirlo....
    Nella risposta precedente ti ho scritto ... "dopo la scanf del menu"
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    sai molto probabilmente sarò un pirla io e non riesco a capire...ma come ho detto non funziona, perchè se anche metto while (getchar()!='\n') ; dopo la scanf continua a mandarmi in default qualsiasi cosa scriva e il programma si blocca e non sa più che fare....

  6. #6
    prova ad aggiungere semplicemente un

    case '\n':
    break;
    all that you need:
    http://www.cplusplus.com/reference/clibrary/

  7. #7
    no niente....

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da elialongoni04
    sai molto probabilmente sarò un pirla io e non riesco a capire...ma come ho detto non funziona, perchè se anche metto while (getchar()!='\n') ; dopo la scanf continua a mandarmi in default qualsiasi cosa scriva e il programma si blocca e non sa più che fare....
    Usa la

    while (getchar()!='\n') ;

    anche dopo la prima scanf
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    #include<stdio.h>
    #include<stdlib.h>
    main()
    {
    char f;
    float terra,lato,area,lator,lator1,h1,latot,h2,h3,area1, avanzo;
    int cont1,cont2,cont3;
    printf("TU HAI DEI METRI DI TERRA CHE VUOI METTERE DENTRO DELLE SCATOLE..\nMA NON SAI QUANTE TE NE SERVONO....\n\n");
    printf("Quanti metri di terra hai?? ");
    scanf("%f",&terra);
    printf("Hai a disposizione 3 scatole di varie dimensioni: \n");
    area=0;
    area1=0;
    cont1=0;
    cont2=0;
    cont3=0;
    do
    {
    printf("\n-Premi :\n.) c per il cubo,\n.) q per il parallelepipedo,\n.) p per la piramide: ");
    scanf("%c",&f);
    while (getchar()!='\n') ;
    switch (f)
    {
    case 'c':
    {
    printf("\nDammi il lato del cubo: ");
    scanf("%f",&lato);
    area1=lato*lato*lato;
    cont1++;
    break;
    }
    case 'q':
    {
    printf("\nDammi il lato del rettangolo: ");
    scanf("%f",&lator);
    printf("\nDammi l'altro lato del rettangolo: ");
    scanf("%f",&lator1);
    printf("\nDammi l'altezza del parallelepipedo: ");
    scanf("%f",&h1);
    area1=(lator*lator1)*h1;
    cont2++;
    break;
    }
    case 'p':
    {
    printf("\nDammi il lato del triangolo: ");
    scanf("%f",&latot);
    printf("\nDammi l'altezza del triangolo: ");
    scanf("%f",&h2);
    printf("\nDammi l'altezza della piramide: ");
    scanf("%f",&h3);
    area1=((latot*h2)/2)*(h3/2);
    cont3++;
    break;
    }
    default:
    printf("\n\nNon hai questa scatola!\n");
    //case '\n': //credo che questo vada messo qui..
    // break;
    }
    area=area+area1;
    area1=0;
    }
    while(area<terra);
    printf("\nIn totale ti servono %d cubo/i, %d parallelepipedo/i e %d piramide/i!\n",cont1,cont2,cont3);
    avanzo=area-terra;
    printf("\nnell'ultima scatola hai ancora a disposizione %.2f metri di spazio!\n\n",avanzo);
    system("pause");
    }

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Usa la

    while (getchar()!='\n') ;

    anche dopo la prima scanf
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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