Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17

Discussione: [c] strcmp

  1. #1
    Utente di HTML.it L'avatar di spode
    Registrato dal
    Jul 2010
    Messaggi
    85

    [c] strcmp e strcpy

    salve. dall'evidente fallimento del codice, non mi sono chiari strcmp e while. aiutami a capire, facendomi capire l'errore (orrore)

    codice:
    //verificare se gli elementi di A[n] sono tutti uguali
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        char risposta,elemento[100][100];
        int n=0,i=0,Uguale=0;
    
        do{system("cls");
        printf("Ciao. Inserisci un numero: ");
        scanf("%d",&n);
        for(i=0;i<n;i++)
        {
            printf("\nInserisci l'elemento %d di %d: ",i,n-1);
            scanf("%s",&elemento);
        }
    
        while(Uguale>1||i<n)
        {
            if(strcmp(elemento[i],elemento[i+1]==NULL))
            {
                Uguale=2;
            }
            else
            {
                Uguale=1;
            }
        }
    
        switch(Uguale)
        {
            case 2:puts("\nGli elementi sono tutti uguali!");
            default: puts("\nGli elementi sono disgiunti!");
        }
    
        printf("Vuoi riprovare? (s/n) ");
        risposta=getche();
        }while(risposta=='s');
        return 0;
    }
    SO: Windows 7

  2. #2
    Utente di HTML.it L'avatar di @DI3GO@
    Registrato dal
    Nov 2008
    Messaggi
    537

    Re: [c] strcmp

    codice:
        while(Uguale>1||i<n)
        {
            if(strcmp(elemento[i],elemento[i+1]==NULL))
            {
                Uguale=2;
            }
            else
            {
                Uguale=1;
            }
        }
    L'errore è lì.
    Guarda le parentesi...
    Praticamente in controllo che fai tu, come scritto è solo sull'elemento[i+1] e non sulla funzione strcmp

    Chiaro?
    Nipote: persona incompetente, con le soli doti di "copia/incolla" e la creazione automatica di siti internet ed interfaccie grafiche.Compie lavori apparentemente qualificati e richiesta una modifica sparisce in quatemala con i pochi soldi ottenuti.[...] Fonte la Diegonzelli

  3. #3
    Utente di HTML.it L'avatar di spode
    Registrato dal
    Jul 2010
    Messaggi
    85
    cosa dovrei scrivere?
    scrivi solo quello, poi cerco di capire on my own. grazie
    SO: Windows 7

  4. #4
    Utente di HTML.it L'avatar di @DI3GO@
    Registrato dal
    Nov 2008
    Messaggi
    537

    Re: Re: [c] strcmp

    codice:
        while(Uguale>1||i<n)
        {
            if(strcmp(elemento[i],elemento[i+1])==NULL)
            {
                Uguale=2;
            }
            else
            {
                Uguale=1;
            }
        }
    Allora come vedi è stata semplicemente spostata una parentesi prima del ==
    Questo perché devi prima "chiudere" la parentesi della funzione, dentro la quale dichiari gli operandi, e successivamente fare il controllo se questa da risultato nullo.

    Ora non ricordo, se come per Java il risultato sia -1 qualora le due stringhe non siano uguali, oppure come definito da te da NULL.

    Al più puoi stampare a video il risultato della funzione o cercare della documentazione in merito.

    Spero di esser stato esaustivo.
    Nipote: persona incompetente, con le soli doti di "copia/incolla" e la creazione automatica di siti internet ed interfaccie grafiche.Compie lavori apparentemente qualificati e richiesta una modifica sparisce in quatemala con i pochi soldi ottenuti.[...] Fonte la Diegonzelli

  5. #5
    Utente di HTML.it L'avatar di spode
    Registrato dal
    Jul 2010
    Messaggi
    85
    sei stato davvero esaustivo. non mi ero proprio accorto delle parentesi.
    grazie 8 al contrario!
    SO: Windows 7

  6. #6
    strcmp restituisce 0 (non NULL!) se le due stringhe sono uguali, un valore negativo se la prima è minore della seconda, un valore positivo in caso contrario.

    Dico "non NULL" non perché NULL possa essere diverso da 0, ma perché strcmp restituisce un intero, non un puntatore, e semanticamente ha senso un confronto con NULL solo se si parla di puntatori.
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it L'avatar di spode
    Registrato dal
    Jul 2010
    Messaggi
    85
    non è che sai anche perchè non va
    codice:
        for(i=0;i<n;i++)
        {
         if(a[i]==b[i])
         {
            strcpy(c[i],a[i]);//ERROR: avevo scritto "c[i]=a[i];" che va bene solo x numer
         }
         else
         {
             strcpy(c[i],'disgiunto'); //il programma va bene, ma restituisce non 0, E0
         }
         printf("%s\n",c[i]);
        }
    edit: if(strcmp(elemento[i],elemento[i+1])==0) non funziona
    SO: Windows 7

  8. #8
    codice:
            strcpy(c[i],a[i]);//ERROR: avevo scritto "c[i]=a[i];" che va bene solo x numer
    Cosa sono c e a?
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Utente di HTML.it L'avatar di spode
    Registrato dal
    Jul 2010
    Messaggi
    85
    vettori-stringa
    SO: Windows 7

  10. #10
    Utente di HTML.it L'avatar di @DI3GO@
    Registrato dal
    Nov 2008
    Messaggi
    537
    ma che errore ti da?

    n è inizializzato correttamente e non sfora nella dimensione del vettore Stringa??
    Nipote: persona incompetente, con le soli doti di "copia/incolla" e la creazione automatica di siti internet ed interfaccie grafiche.Compie lavori apparentemente qualificati e richiesta una modifica sparisce in quatemala con i pochi soldi ottenuti.[...] Fonte la Diegonzelli

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.