Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente bannato
    Registrato dal
    Apr 2004
    Messaggi
    1,392

    [Primi esercizi in C] confronto tra stringhe

    Ciao Raga,
    Ho un piccolo problema:
    Per esercitarmi, volevo realizzare uno scriptino che confrontasse una stringa predefinita da me, e quella immessa tramite console.
    codice:
    #include <stdio.h>
    #include <string.h>
    
    char input;
    char output[] = "Hello World!";
    int *pointer;
    
    int main()
    {
        *pointer = scanf("%s\n", input);
        if(strcmp(input, output) == 0) printf("\n\nPaTeR was Speaking");
    }
    Però il mio compilatore (Dev C++) Mi dà un'errore:
    convert `char (*)[13]' to `const char*' for argument `2' to `int
    strcmp(const char*, const char*)'
    Sbaglio nel tipo di dati da passare a strcmp. Come posso risolvere?

  2. #2
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352

    Re: [Primi esercizi in C] confronto tra stringhe

    codice:
    #include <stdio.h>
    #include <string.h>
    
    char input;
    char output[] = "Hello World!";
    char pointer[256];
    
    int main()
    {
        scanf("%s\n", pointer);
        if(strcmp(input, output) == 0) printf("\n\nPaTeR was Speaking");
    }

    l'utente non deve inserire piu di 255 caratteri, altrimenti si va a scrivere oltre l'array; oppure usa:

    fgets (pointer, 256, stdin);

    al posto della scanf per essere sicuro di non leggere più di 255 caratteri

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  3. #3
    Utente bannato
    Registrato dal
    Apr 2004
    Messaggi
    1,392

    Re: Re: [Primi esercizi in C] confronto tra stringhe

    Originariamente inviato da anx721
    codice:
    #include <stdio.h>
    #include <string.h>
    
    char input;
    char output[] = "Hello World!";
    char pointer[256];
    
    int main()
    {
        scanf("%s\n", pointer);
        if(strcmp(input, output) == 0) printf("\n\nPaTeR was Speaking");
    }

    l'utente non deve inserire piu di 255 caratteri, altrimenti si va a scrivere oltre l'array; oppure usa:

    fgets (pointer, 256, stdin);

    al posto della scanf per essere sicuro di non leggere più di 255 caratteri
    Grazie anx, ma ho risolto così:
    codice:
    #include <stdio.h>
    #include <string.h>
    
    char input[255];
    char output[] = "Hello World!";
    char *pointer;
    
    int main()
    {
        scanf("%s\n", *pointer);
        if(strcmp(input, output) == 0) printf("\n\nPaTeR was Speaking");
    }
    Appena lo apro, però, mi dà errore... :master:

  4. #4

    Re: Re: Re: [Primi esercizi in C] confronto tra stringhe

    Originariamente inviato da PaTeR
    Grazie anx, ma ho risolto così:
    codice:
    #include <stdio.h>
    #include <string.h>
    
    char input[255];
    char output[] = "Hello World!";
    char *pointer;
    
    int main()
    {
        scanf("%s\n", *pointer);
        if(strcmp(input, output) == 0) printf("\n\nPaTeR was Speaking");
    }
    Appena lo apro, però, mi dà errore... :master:
    prova questo

    codice:
    #include <stdio.h>
    #include <string.h>
    
    char input[255];
    char output[] = "Hello World!";
    
    int main()
    {
        scanf("%254s", input);
        if (strcmp(input, output) == 0) printf("\n\nPaTeR was Speaking");
    
        return 0;
    }

  5. #5
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    la scanf memoriala stringa letta in memoria a partire dall'indirizzo passato come arogmento, cioè pointer. Quindi innanzitutto non devi passare

    *pointer

    ma pointer

    perche la scanf vuole un puntatore a char.

    pero prima di invocare la scanf devi allocare la memori a a cui punta pointer:

    pointer = (char *)malloc(256 * sizeof(char));

    in questo modo allochi un blocco di memoria in grado di contenere 256 caratteri, e pointer punterà alla prima locazione di tale blocco.

    se utilizzi char poiter[] come avevo fatto io, la stessa dichiarazione dell'array provoca anche l'allocazione dei memoria.

    Infne, nella strcmp non devi apassare input ma pointer, cioè l'array che hai passato alla scanf e in cui è stata inserita la stringa scsritta dall'utente

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  6. #6
    Utente bannato
    Registrato dal
    Apr 2004
    Messaggi
    1,392

    Re: Re: Re: Re: [Primi esercizi in C] confronto tra stringhe

    Originariamente inviato da internet
    prova questo

    codice:
    #include <stdio.h>
    #include <string.h>
    
    char input[255];
    char output[] = "Hello World!";
    
    int main()
    {
        scanf("%254s", input);
        if (strcmp(input, output) == 0) printf("\n\nPaTeR was Speaking");
    
        return 0;
    }
    #include <stdio.h>
    #include <string.h>

    char input[255];
    char output[] = "Hello World!";

    int main()
    {
    while(scanf("%s", input))
    {
    if (strcmp(input, output) == 0)
    {
    printf("\nOK. Sentence TRUE\n\n");
    }
    if (strcmp(input, output) == -1 || strcmp(input, output) == +1)
    {
    printf("\nNO. Sentence FALSE\n\n");
    }
    }
    }



    Però, quando inserisco la frase giusta, mi stampa due volte a video No. Sentence FALSE...



  7. #7
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Il problema sta nel fatto che la scanf legge stringhe finche non incontra spazi, quindi se introduci

    Hello World!

    la scanf legge prima Hello e il confronto da esito negativo stampando NO, poi legge World! e dà sempre esito negativo.

    Se vuoi leggere stringhe con spazi usa gets come ti avevo detto nel primo post.

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  8. #8
    Utente bannato
    Registrato dal
    Apr 2004
    Messaggi
    1,392
    Originariamente inviato da anx721
    Il problema sta nel fatto che la scanf legge stringhe finche non incontra spazi, quindi se introduci

    Hello World!

    la scanf legge prima Hello e il confronto da esito negativo stampando NO, poi legge World! e dà sempre esito negativo.

    Se vuoi leggere stringhe con spazi usa gets come ti avevo detto nel primo post.
    Come si usa? Me lo puoi implementare nel mio umile codice?

  9. #9
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Sostituisci la riga con la scanf con:

    while(fgets (input, 256, stdin))

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  10. #10
    Utente bannato
    Registrato dal
    Apr 2004
    Messaggi
    1,392
    Originariamente inviato da anx721
    Sostituisci la riga con la scanf con:

    while(fgets (input, 256, stdin))
    Grazie, ma continuo a rompere...

    codice:
    for(int c_madre = 0; c_madre < limit; c_madre++)
    Mi dà errore:
    C:/Documents and Settings/utente/Documenti/Progetti C/Generatore.c:13: error: `for' loop initial declaration used outside C99 mode
    Non vedo errori... :master:

    PS: la variabile c_madre l'ho inizializzata col tipo int...

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.