Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2001
    Messaggi
    35

    aiutatemi problemi con una stringa in C

    Ciao a tutti vorrei sopporvi questo quesito:
    ho un file di testo chiamato rubrica.txt all'interno del quale ci sono queste tre stringhe:

    giulio cesare 22222
    caino abele 111111
    pippo pluto 444444

    io vorrei fare un programmino(linguaggio C) in cui io chiedo al programma di visualizzarmi tra le tre stringhe presenti in rubrica.txt solo quella che inzia con la parola caino.

    potete aiutarmi...almeno ad indirizzarmi sulla strada giusta!!!
    grazie a tutti

    io ho elaborato il programma cosi , però non mi funziona provate voi a farlo funzionare e ditemi cosa accade grazie a tutti


    code:--------------------------------------------------------------------------------
    #include<stdio.h>
    #include<string.h>

    int main()
    {
    FILE *fp;
    char stringa[80];
    char miastringa[6];
    int x = 1;

    if ((fp = fopen("rubrica.txt","r")) == NULL)
    {
    fprintf(stderr, "Problemi nell'apertura del file\n");
    return -1;
    }

    do{
    fgets(stringa,80,fp);
    strncpy(miastringa,stringa,5);
    x = strcmp(miastringa,"caino");

    }while(x != 0);


    fprintf(stdout,"Miastringa = %s\n",miastringa);

    return 0;

    }
    --------------------------------------------------------------------------------

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    9
    Non ho possibilità di compilare il tuo programma, ma credo dal codice, che il tuo problema sia che non scorri la stringa, cioè miastringa vale sempre "giulio".
    Fossi in te leggerei una riga alla volta, esiste una funzione fgetline e dopo, sfoglia un manuale, usa una funzione che cerca un pattern in una stringa, a memoria prova a cercare sscanf o qualcosa di simile: (è da ANNI che non scrivo una riga di codice in C)

    do{
    miastringa(fgetline(stringa));
    int i=sscanf(miastringa, "caino");
    if i == (size(miastringa)-1) x=0
    else x=1
    }

    Questo pezzo di codice NON funziona, è solo una traccia!
    ... prova a stanpare a video il contenuto di "miastringa" così ti rendi conto in cosa sbagli!
    Elisabetta

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2001
    Messaggi
    35

    grazie mille!!!

    Ciao Elisabetta (complimenti è un bellissimo nome, una mia bis-nonna si chiamava cosi).
    proverò a fare come dici...cmq il codice sorgente che io avevo pubblicato funziona apportando una piccola modifica..
    ho avuto il seguente problema:

    - l'inizializzazione e la dichiarazione delle variabili come puoi vedere dal codice sorgente che ti ho inviato e fatto fuori dal main. Se la faccio all'interno del main il tuo script non mi funziona e non so perchè.

    Ascolta adesso io vorrei modificare il tuo script in questo modo:
    supponiamo che all'interno del file rubrica.txt io abbia questi dati:
    caino abele 111111
    giulio cesare 22222
    pippo pluto 444444

    io vorrei fare in modo che il programa chiedesse quale nome l'utente vorrebbe ricercare all'interno del file rubrica, ( esempio: printf("Inserisci il nome da ricercare:");
    gets(parola); )
    ok in questo modo il nome che cerca l'utente viene inserito nella variabile parola che io ho inizializzato e dichiarato cosi : char parola[20];
    ok detto questo ti invio il codice sorgente con le relative modifiche e i relativi commenti per spiegarti dove non mi funziona

    ---------------------------------------------------------
    #include <stdio.h>
    #include <string.h>

    FILE *fp;
    char stringa[80];
    char miastringa[10];
    char parola[20];
    int x = 1;

    int main()
    {
    /*qui chiedo all'utente quale nome vuole ricercare nel file rubrica*/
    printf("\nInserisci la parola da ricercare nella Rubrica: ");
    gets(parola);


    if ((fp = fopen("rubrica.txt","r")) == NULL)
    {
    fprintf(stderr, "Problemi nell'apertura del file\n");
    return -1;
    }
    do{
    fgets(stringa,80,fp);
    strncpy(miastringa,stringa,5);/*penso che il problema sia*/
    /* qui , cosa posso mattere*/
    /* al posto del numero di */
    /* caratteri?*/
    x = strcmp(miastringa, parola);
    /*la variabile parola non viene confrontata con ...*/
    /*... miastringa a causa della strncpy errata*/
    }while(x != 0);


    fprintf(stdout,"Miastringa = %s\n",stringa);






    system("PAUSE");
    return 0;
    }
    ------------------------------------------------------------------------
    Spero che tu mi possa aiutare grazie mille e ciao attendo una tua risposta.

  4. #4

    usando sizeof() ...

    Non posso verificare se funziona, però credo di aver capito dove sia il probema:

    Il tuo codice era questo:


    #include <stdio.h>
    #include <string.h>

    FILE *fp;
    char stringa[80];
    char miastringa[10];
    char parola[20];
    int x = 1;

    int main()
    {
    /*qui chiedo all'utente quale nome vuole ricercare nel file rubrica*/
    printf("\nInserisci la parola da ricercare nella Rubrica: ");
    gets(parola);


    if ((fp = fopen("rubrica.txt","r")) == NULL)
    {
    fprintf(stderr, "Problemi nell'apertura del file\n");
    return -1;
    }
    do{
    fgets(stringa,80,fp);
    strncpy(miastringa,stringa,5);/*penso che il problema sia*/
    /* qui , cosa posso mattere*/
    /* al posto del numero di */
    /* caratteri?*/
    x = strcmp(miastringa, parola);
    /*la variabile parola non viene confrontata con ...*/
    /*... miastringa a causa della strncpy errata*/
    }while(x != 0);


    fprintf(stdout,"Miastringa = %s\n",stringa);






    system("PAUSE");
    return 0;
    }

    Se tu volessi confrontare i dati di un utente che mette le prime lettere con quelli del file(se per caso uno si dimentica qualche lettera):

    strncpy(miastringa,stringa,sizeof(parola));

    L'operatore sizeof restituisce, in byte, la dimensione di una variabile.
    Ora, i char occupano un byte, che normalmente sono 8 bit, ma su certe macchine no, ma sizeof aggira il problema restituendo una dimensione in byte.
    Otterresti anche un codice facilmente trasportabile su altre piattaforme(dopo ricompilazione, naturalmente).
    Confronteresto parola con una stringa uguale come dimensioni a parola, cioè miastringa.

    Buona fortuna per il programma
    Alessandro

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2001
    Messaggi
    35
    ok grazie mille proverò e poi nei prossimi giorni ti farò sapere ciaooooe grazie

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    9
    Ciao,
    sono d'accordo con alessandro e inoltre nel tuo codice leggi sempre i primi sizeof(parola) caratteri!
    1)leggi il file per righe con fgetline() , il puntatore al file avanza automaticamente alla riga successiva
    2)non utilizzare vettori di caratteri per le tue stringhe, ma variabili "string"
    3)devi ragionare sui caratteri finali: infatti il C usa il carattere "\0" come fine stringa, mi pare, e se leggi linee inserisce il carattere "\n" , e la stringa "giulio\0" è diversa da "giulio\n"
    4) consulta il manuale per la funzione "lenght()" che restituisce la lunghezza di una stringa e gestisce da sola i caratteri finali, mentre sizeof no, li vede come byte e basta.

    ... e continua a stampare i valori di tutte le variabili, la stringa e la sua dimensione, ad ogni iterazione
    Elisabetta

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2001
    Messaggi
    35

    forse ci sono riuscito

    Ciao senti puoi eseguire questo programma perchè penso che la funzione strlen(parola) all'interno della funzione strncpy(miastringa,stringa,strlen(parola));
    penso che non funzioni bene non so perchè!! avrei bisogno di testare il mio sorgente su un altro pc puoi farlo? ecco il mio problema :
    funziona tutto solo che il ciclo non viene reiterato sempre cioè funziona circa ogni 5/6 volte dopo si blocca tutto non va... provate ad eseguirlo oppure se dal codice sorgente riuscite a capire dove sbaglio....


    #include <stdio.h>
    #include <string.h>

    FILE *fp;
    char stringa[80];
    char miastringa[80];
    char parola[20];
    int x = 1;
    char risposta='s';

    int main()
    {
    while( risposta =='s')
    {
    fflush(stdin);
    printf("inserisci un nome da cercare nella rubrica: ");
    gets(parola);
    fflush(stdin);

    if ((fp = fopen("rubrica.txt","r")) == NULL)
    {
    fprintf(stderr, "Problemi nell'apertura del file\n");
    return -1;
    }

    do{
    fgets(stringa,sizeof(stringa),fp);
    strncpy(miastringa,stringa,strlen(parola));
    x = strcmp(miastringa,parola);

    }while(x != 0);
    fclose(fp);


    fprintf(stdout,"Miastringa = %s\n",stringa);

    fflush(stdin);
    printf("Vuoi ricercare un nuovo nome nella rubrica? s/n:");
    getchar(risposta);
    }


    system("PAUSE");
    return 0;
    }

    -----------------------------
    ciao e grazie

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    9
    Ciao,
    ho provato il tuo codice e funziona alla perfezione!! L'unico problema è che non gestisci il caso in cui il nome non esista nella rubrica...
    Elisabetta

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2001
    Messaggi
    35
    Ciao Elisabetta ..grazie mille per avermi aiutato...cmq non riesco a capire perchè sul mio pc lo script funziona circa ogni 5/6 volte e poi no...cmq vedremo...
    grazie ancora... adesso cercherò di risolvere il problema quando si inserisce un nome non presente in rubrica.
    ciaoooooooooooooooo

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.