Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    92

    [C] dov'è l'errore??

    Ciao a tutti, dopo un lungo periodo di inattività, ho ripreso finalmente a scrivere qualcosina in C, e subito arrivano i primi problemi... Vi posto subito il codice x nn perderci in chiacchere:

    codice:
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    
    int main(void)
    {
    
    char    code[50];
    
    printf("Indovina la password \n");
    
    while (1)
     {
       fgets(code, 50, stdin);
    
        if (! strcmp(code, "Vado a casa"))
           {
              printf("ok\n");
           break;
           }
           
        else if (! strcmp(code, "Bobby"))
                {
                printf("bobby\n");
                }
                
        else if (! strcmp(code, "Boby"))
                {
                printf("boby\n");
                }
                
        else
            {
            printf("riprova\n");
            }
     }
    system("pause");
    return 0;
    }
    Il problema è ke mi da errore, cioè nn parte proprio il prog.
    come mai??
    eppure nn credo sia il mio compilatore..
    Grazie in anticipo...
    Bye
    Peppe

    Ps. nn fate caso alle password sono prese a caso...

  2. #2
    codice:
    char code[50];
    
        
    printf("Indovina la password: ");
    
    while (1)
    {
        fgets(code, 50, stdin);
    
        if (! strcmp(code, "ciao ciao\n"))
        {
            printf("ok\n");
            break;
        }
        else if (! strcmp(code, "uno\n"))
            printf("uno\n");
        else if (! strcmp(code, "due\n"))
            printf("due\n");
        else
            printf("Errata: riprova\n");
    }
    la funzione fgets() agginge un newline in coda alla stringa...
    o lo togli (prima...) o lo aggiungi alla validazione.
    ...Terrible warlords, good warlords, and an english song

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    92
    Grazie Johnny, funziona aggiungendo semplicemente, come hai detto tu, un new line alla validazione....
    Cmq. volevo sapere cosa intendevi dire con:

    la funzione fgets() agginge un newline in coda alla stringa, o lo togli (prima...)...
    Lo togli prima cioè...
    Mi fai un esempio?? pls..
    Bye e grazie...

  4. #4
    ...togli il newline dalla stringa "code[]" prima di fare il confronto:
    codice:
        char code[50];
        char i = 0;
            
        printf("Indovina la password: ");
    
        while (1)
        {
            fgets(code, 50, stdin);
            
            while( 1 ) // itero per l'intera stringa
            {
                if( code[i] == '\n' ) // se trovo il newline
                {
                    code[i] = '\0';  // lo sostituisco con un terminatore di stringa "NULL"
                    i = 0; // (...)
                    break; // ...e esco    
                }
                i++; // altrimenti continuo ad iterare (passando al carattere successivo)    
            }
                
            
            if (! strcmp(code, "ciao ciao")) // ora non servono più i newline!
            {
                printf("ok\n");
                break;
            }
            else if (! strcmp(code, "uno"))
                printf("uno\n");
            else if (! strcmp(code, "due"))
                printf("due\n");
            else
                printf("Errata: riprova\n");
        }
    p.s. se inserisci: "ciao ciao" utilizzando la fgets()
    viene aggiunto un carattere di newline in coda alla stringa
    quindi vai a confrontare "ciao ciao\n\0" con "ciao ciao\0"
    e le due stringhe sono diverse.
    ...Terrible warlords, good warlords, and an english song

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    92
    Grazie mille, mi 6 stato di grande aiuto...

    Ciao...

  6. #6
    p.s. visto che hai scomodato l'header <string.h>
    ti conviene sfruttarlo. Utilizza la funzione "strlen()" al posto del ciclo while()
    codice:
        printf("Indovina la password: ");
    
        while (1)
        {
            fgets(code, 50, stdin);
    
    /*        
            while( 1 )
            {
                if( code[i] == '\n' )
                {
                    code[i] = '\0';
                    i = 0;
                    break;    
                }
                i++;    
            }
    */            
      
            i = strlen(code) - 1;
            code[i] = '\0';
    ...Terrible warlords, good warlords, and an english song

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.