Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [C] Condizione cicli for sbagliata

    Salve a tutti ho la seguente funzione in cui i cicli for non funzionano a dovere:

    codice:
    int controllo_nt_dupplicati(char nt1[50], char nt2[50])
    {
        int i,j;
        int ritorno = 1;
        for(i = 0;(i < 50) && (nt1[i] != '/0'); i++)
        {
           for(j = 0; (j< 50) && (nt2[j] != '/0'); j++)
           {
             //debug    
             printf("[%d][%d]",i,j);
             //debug
             if((nt1[i] == nt2[j]) && (nt1[i] != 'S'))
             {
               ritorno = 0;           
             }      
           }      
        }
        return ritorno;
        
    }
    nt1 ed nt2 sono due stringhe di caratteri che riempio in un'altra funzione ed a cui aggiungo a mano alla fine il carattere tappo, con una semplice assegnazione.

    Ora con quella printf di debug mi sono accorto che non si ferma al carattere tappo ma cicla in tutte e 50 le posizioni (dalla 0 alla 49). In cosa sbaglio ? però non sempre, ogni tanto si ferma, eppure il carattere tappo lo metto ad ogni stringa.

    praticamente il mio scopo è confrontare ogni elemento del vettore nt1, con gli elementi del vettore nt2 per cercare di capire se non ci sono caratteri dupplicati, magari anche in posizioni diverse. Ovviamente però le stringhe possono essere massimo 50 caratteri, ma potrebbero essere più corte e quindi dovrebbe fermarsi al carattere tappo.

    Vi ringrazio in anticipo per la disponibilità,
    Neptune.
    "Estremamente originale e fantasioso" By darkiko;
    "allora sfiga crepuscolare mi sa che e' meglio di atmosfera serale" By NyXo;
    "per favore, già è difficile con lui" By fcaldera;
    "se lo apri te e invece di "amore" ci metti "lavoro", l'effetto è lo stesso" By fred84

  2. #2

    Re: [C] Condizione cicli for sbagliata

    Originariamente inviato da Neptune
    Salve a tutti ho la seguente funzione in cui i cicli for non funzionano a dovere:

    codice:
    int controllo_nt_dupplicati(char nt1[50], char nt2[50])
    {
        int i,j;
        int ritorno = 1;
        for(i = 0;(i < 50) && (nt1[i] != '/0'); i++)
        {
           for(j = 0; (j< 50) && (nt2[j] != '/0'); j++)
           {
             //debug    
             printf("[%d][%d]",i,j);
             //debug
             if((nt1[i] == nt2[j]) && (nt1[i] != 'S'))
             {
               ritorno = 0;           
             }      
           }      
        }
        return ritorno;
        
    }
    nt1 ed nt2 sono due stringhe di caratteri che riempio in un'altra funzione ed a cui aggiungo a mano alla fine il carattere tappo, con una semplice assegnazione.

    Ora con quella printf di debug mi sono accorto che non si ferma al carattere tappo ma cicla in tutte e 50 le posizioni (dalla 0 alla 49). In cosa sbaglio ? però non sempre, ogni tanto si ferma, eppure il carattere tappo lo metto ad ogni stringa.

    praticamente il mio scopo è confrontare ogni elemento del vettore nt1, con gli elementi del vettore nt2 per cercare di capire se non ci sono caratteri dupplicati, magari anche in posizioni diverse. Ovviamente però le stringhe possono essere massimo 50 caratteri, ma potrebbero essere più corte e quindi dovrebbe fermarsi al carattere tappo.

    Vi ringrazio in anticipo per la disponibilità,
    Neptune.
    Se invece del carattere tappo '\0' ci concateno il carattere NULL allora funziona corettamente. Però sarebbe stato piu corretto utilizzare il carattere standard no?
    "Estremamente originale e fantasioso" By darkiko;
    "allora sfiga crepuscolare mi sa che e' meglio di atmosfera serale" By NyXo;
    "per favore, già è difficile con lui" By fcaldera;
    "se lo apri te e invece di "amore" ci metti "lavoro", l'effetto è lo stesso" By fred84

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    piccolo consiglio

    Ciao, un piccolo consiglio:

    per rendere il codice più leggibile scrivi

    codice:
        for(i = 0;(i < 50) && (nt1[i] != '/0'); i++)
        for(j = 0; (j< 50) && (nt2[j] != '/0'); j++)
            {
            //debug    
            printf("[%d][%d]",i,j);
            //debug
            if((nt1[i] == nt2[j]) && (nt1[i] != 'S'))
                {
                ritorno = 0;           
                }      
            }

  4. #4
    @Neptune:
    Occhio che è '\0', non '/0' (backslash, non slash); se invece è un errore presente solo qui sul post sul forum (in effetti qualunque compilatore te lo segnalerebbe), posta la funzione che costruisce le stringhe.

    @kirakira93:
    Francamente mi pare più leggibile l'originale... omettere le graffe che racchiudono grossi blocchi di codice di solito rende il codice meno leggibile, inoltre il secondo for (e di conseguenza tutto il resto) non è indentato correttamente.
    Per inciso, detesto quello stile di indentatura (con le graffe sullo stesso livello del codice che contengono).
    Amaro C++, il gusto pieno dell'undefined behavior.

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

    Re: piccolo consiglio

    Originariamente inviato da kirakira93
    Ciao, un piccolo consiglio:

    ...
    Veramente così è poco leggibile ... concordo con MItaly ...
    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.