Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente bannato
    Registrato dal
    Jun 2004
    Messaggi
    274

    [C] Ciclo for , stranezza

    #include <stdio.h>
    /* Confronto fra due stringhe */
    char prima[160] = "Buongiorno";
    main()
    {
    char seconda[80];
    int i;
    printf("Inserisci una parola: ");
    gets (seconda);

    for(i=0; (prima[i] == seconda[i]) &&
    (prima[i] != '\0') && (seconda[i] != '\0'); i++)
    ;
    if(prima[i]==seconda[i])
    printf("Sono uguali\n");
    else
    if(prima[i]>seconda[i])
    printf("La prima e' maggiore della seconda\n");
    else
    printf("La seconda e' maggiore della prima\n");
    return 0;
    }



    for(i=0; (prima[i] == seconda[i]) &&
    (prima[i] != '\0') && (seconda[i] != '\0'); i++)
    ;

    Ma quel ; non significa che il for è vuoto ?

    e allora perchè gli i dell'if si incrementano ?


    thanks !

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    1,965
    Perchè, si incrementano?

    Avranno il valore di i incrementato nel for. Che il corpo sia vuoto è vero, ma i è stato incrementato ugualmente.

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

    Re: [C] Ciclo for , stranezza

    Originariamente inviato da ^NeXsUs^
    Ma quel ; non significa che il for è vuoto ?

    e allora perchè gli i dell'if si incrementano ?
    Ma la

    i++

    non ti dice niente?

  4. #4
    Utente di HTML.it L'avatar di Lak3d
    Registrato dal
    Aug 2006
    Messaggi
    1,035
    codice:
    #include <stdio.h>
    /* Confronto fra due stringhe */
    char prima[160] = "Buongiorno";
    
    main(){
    char seconda[80];
    int i;
    printf("Inserisci una parola: ");
    gets (seconda);
    
    for(i=0; (prima[i] == seconda[i]) &&(prima[i] != '\0') && (seconda[i] != '\0'); i++);
    
    if(prima[i]==seconda[i])
       printf("Sono uguali\n");
    elseif(prima[i]>seconda[i])
       printf("La prima e' maggiore della seconda\n");
    else
       printf("La seconda e' maggiore della prima\n");
    
    return 0;
    }
    
    for(i=0; (prima[i] == seconda[i]) &&(prima[i] != '\0') && (seconda[i] != '\0'); i++);
    perchè ti preoccupa la i? Quello che stai facendo funziona come dovrebbe.
    Una vola uscito dal for verifichi con tre condizioni il motivo per cui è uscito: se sono uguali significa che è uscito perchè è arrivato alla fine delle stringhe e quindi sono identiche; se è uscito perchè una delle due è terminata avrai la risposta se è maggiore la prima o la seconda...

  5. #5
    Utente bannato
    Registrato dal
    Jun 2004
    Messaggi
    274
    m sono accorto di aver postato 1 minchiata subito ,ma dopo continuando a studiacchiare m sono dimenticato di postare , scusate

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    138
    scusate l'intromissione ma, al posto di tutto questo casino, non andrebbe meglio questo:
    #include <stdio.h>
    #include <string.h>

    int main(void)
    {
    char stringa[180] = "Giuseppe";
    char stringa2[80];
    printf("Inserire Stringa: ");
    gets(stringa2);

    printf("\n\n");

    if (strlen(stringa) > strlen(stringa2))
    printf("Stringa 1 Maggiore");
    else if (strlen(stringa) < strlen(stringa2))
    printf("Stringa 2 Maggiore");
    else
    printf("Uguali");

    getchar();
    return 0;
    }

  7. #7
    No, perché tu stai confrontando solo la lunghezza delle stringhe, e non i singoli caratteri come invece fa il codice postato in precedenza. Se proprio vogliamo snellire il codice, allora basta usare la strcmp:
    codice:
    #include <stdio.h>
    #include <string.h>
    
    int main(void)
    {
    char stringa[180] = "Giuseppe";
    char stringa2[80];
    printf("Inserire Stringa: ");
    gets(stringa2);
    
    printf("\n\n");
    
    switch strcmp(stringa,stringa2)
    {
        case -1:
            printf("Stringa 2 Maggiore");
            break;
        case 0:
            printf("Uguali");
            break;
        case 1:
            printf("Stringa 1 Maggiore");
            break;
    }
    getchar();
    return 0;
    }
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    La soluzione di MItaly ha qualche piccolo errore.

    Una parentesi che racchiude strcmp:
    codice:
    switch (strcmp(stringa,stringa2))
    Comunque è una piccola svista.

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    138
    potra' anche confrontarle ma, alla fine, lo scopo del programma e' sempre quello di dire quale delle due stringhe e' la piu' lunga.

  10. #10
    Non è ben chiaro quale sia lo scopo del confronto....se solo sulla lunghezza oppure sui caratteri (che quindi ci sarebbe la distinzione fra maiuscole e minuscole).

    Se deve solo vedere la lunghezza, la soluzione di kaiser è ottima, ma se deve controllare anche le lettere per vedere se corrispondono esattamente, si deve utilizzare la soluzione di MItaly.

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.