Visualizzazione dei risultati da 1 a 8 su 8

Hybrid View

  1. #1
    paolino_delta_t Mi scuso per il ritardo nel risponderti. Comunque grazie al tuo aiuto ho risolto, grazie mille! Qui di seguito ti lascio nuovamente il codice così (forse un pò per curiosità ), potrai vedere le mie modifiche e magari darmi altri suggerimenti.
    codice:
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <windows.h>
    #define MAX_LEN 128
    
    
    void red(){
        HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
        int k;
        SetConsoleTextAttribute(hConsole, k=12);
    } 
    
    void white(){
        HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
        int l;
        SetConsoleTextAttribute(hConsole, l=15);
    }    
    
    void green(){
        HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
        int a;
        SetConsoleTextAttribute(hConsole, a=10);
    } 
    
    void submenu2(void);
    void print_image(FILE *fptr);
    void menu();
    void main_menu();
    
    int image(){
    
        char *filename = "drago.txt";
        FILE *fptr = NULL;
          
        if((fptr = fopen(filename,"r")) == NULL)
        {
            fprintf(stderr,"error opening %s\n",filename);
            return 1;
        }
        
        print_image(fptr);
    }
    
    void main_menu(){
        image();
        red();
        printf("\n\t\t\tSoftware version 1.0 Beta");
        green();
        printf("\t\t\t                     All rights reserved 2018\n\n");
        
        white();
        printf("[1] Play\n");
        printf("[2] Credits\n");
        printf("[3] Exit\n>>");
    }
    
    void submenu2(void){
        for(;;){
                char choice1;
                system("cls");
                printf("Written by Francesco\nIDE: Bloodshed Dev-C++\nProgrammed in C\nFebruary 2018\n");
                printf("Press b key to come back to menu...\n>>");
                scanf("%c",&choice1);
                
                if(choice1 == 'b'){
                system("cls");
                main_menu();
                break;} // torna al mainmenu
                else 
                    printf("wrong input. try again.");
        }
    }
    
    
    void menu(){
        int choice,i=1;
        image();
        main_menu();
        
        while(i){
        scanf("%d",&choice);
        
        switch(choice){
            case 1:
                break;
            
            case 2:
                submenu2();
                break;
            
            case 3:
                system("cls");
                green(); printf("\n\t\t\t\t\t      ***************************************\n       ");
                red();printf("\n\t\t\t\t                ***********Thanks for playing**********\n");
                white();printf("\n\t\t\t\t\t          ***************************************\n       ");
                i = 0; /* loop exit */
                break;
            
                default:
                printf("\nInvalid choice!\n>>");
                break;
            
         }
      }
    }
    
    int main(void)
    {    
       menu();
       return 0;
    }
    
     
    void print_image(FILE *fptr)
    {
        char read_string[MAX_LEN];
     
        while(fgets(read_string,sizeof(read_string),fptr) != NULL)
            printf("%s\t\t\t\t",read_string);
    }
    Comunque ho cercato un pò sul web su come effettuare un controllo dell'input di un carattere al posto di un numero, però non sono riuscito a giungere a capo. Suggerimenti?

  2. #2
    Perchè cos'ha scanf che non va?

  3. #3
    Funziona come previsto, ma il problema è che se inserisco un carattere al posto di un numero, questo entra in un loop infinito. Quindi vorrei anche correggere l'errato inserimento di un carattere al posto di un numero.

  4. #4
    Quote Originariamente inviata da plaztinum Visualizza il messaggio
    Funziona come previsto, ma il problema è che se inserisco un carattere al posto di un numero, questo entra in un loop infinito. Quindi vorrei anche correggere l'errato inserimento di un carattere al posto di un numero.
    In questo caso devi leggere anche i numeri usando il %c, cioè leggerli come caratteri. Ovviamente lo switch case va modificato opportunamente, cioè tipo case '1': ecc....

  5. #5
    Ok ora va già meglio. Avevo riscontrato un piccolo problema nel ritornare al menù principale dopo essere uscito dal case '2' (mi stampava in automatico qualcosa e mi usciva 'Invalid choice'), ma ho ovviato svuotando il buffer di tastiera. Non so come ringraziarti, credo che ti menzionerò nei crediti (a patto che tu sia d'accordo )

  6. #6
    Quote Originariamente inviata da plaztinum Visualizza il messaggio
    Ok ora va già meglio. Avevo riscontrato un piccolo problema nel ritornare al menù principale dopo essere uscito dal case '2' (mi stampava in automatico qualcosa e mi usciva 'Invalid choice'), ma ho ovviato svuotando il buffer di tastiera. Non so come ringraziarti, credo che ti menzionerò nei crediti (a patto che tu sia d'accordo )
    Perfetto. Un consiglio generale che posso darti. Impara a simulare il codice man mano che lo scrivi, nella tua testa. Lo so richiede uno sforzo iniziale notevole, ma riuscirai a scrivere pezzi ( piccoli, per quelli grandi ci sono tecniche di ingegneria del software ) di codice che al 99% saranno corretti. Accoppiato a tecniche e linguaggi di programmazione funzionale, riuscirai a scrivere software robusto ed efficiente con naturalezza.

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.