Visualizzazione dei risultati da 1 a 8 su 8

Discussione: [C] Azzerare stringhe

  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2005
    Messaggi
    83

    azzerare stringhe in c

    ciao a tutti!!!
    c'è un'anima buona che può risolvermi questo problema (forse banale ma nn so come fare ).
    ho implementato, in c, il gioco dell'impiccato. tra tante variabili ho la stringa char parola[20] dichiarata come variabile globale che mi contiene la parola da indovinare. siccome il mio programma è ciclico (si gioca più di una volta, senza uscire) la stringa, dalla seconda iterazione in poi, mi contiene lettere delle vecchie parole.
    se, ad es, la prima parola è ASSEMBLARE e, alla seconda tornata, è GATTO, in parola mi rimangono le lettere BLARE e la parola è GATTOBLARE quindi, quando stampo la parola nascosta, nn ho ----- (che corrisponderebbe a gatto) ma ho ---------. :master:
    come posso cancellare la stringa parola? ho pensato di "azzerarla" riempiendola di tutti blank (' ') ma nn risolvo il problema.
    AIUTO!!!
    grazie

  2. #2
    Il carattere "tappo" per le stringhe è il '\0' se tu dopo gatto metti '\0' sei a posto...
    Purtroppo bisogna imparare che il computer non sbaglia...fa solo quello che gli dici di fare

    www.netpolaris.it

  3. #3
    ti posso consigliare di creare un vettore di stringhe
    char * parole[]={"parola1","parola2",.....}
    cosi ci metti una funzioncina random che tira fuori una parola a caso
    parola[1] sarà parola2
    parola[0] sarà parola1


    Ciao

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2005
    Messaggi
    83
    forse mi sono spiegata male... ora vi spiego il mio programma.
    ci sono due modalità di gioco:
    0) dichiaro la stringa parola globalmente come char parola[20]
    1) player1 vs player2 dove leggo la parola da tastiera attraverso lo
    scanf e la memorizzo nella stringa parola
    2) player1 vs pc dove la parola viene letta da file con il seguente
    codice:

    ---------------------------
    printf("\n\n----- GIOCATORE vs COMPUTER -----\n");
    printf("\nInserisci il nome del giocatore (max 20 char): ");
    scanf("%s", gioc1);
    printf("\nCOMPUTER: sto scegliendo la parola...");
    fd=open("...", O_RDONLY);
    if(fd==-1)
    {
    printf("\nIMPOSSIBILE accedere al file! Riprovare!\n");
    ...
    }
    t=rand()%NUM_PAROLE;
    if (!(t>0 && t<=NUM_PAROLE))
    {
    perror("\nErrore nella scelta random della parola.
    Riprovare.\n");
    ...
    }
    do
    {
    a=read(fd, lettera, 1);
    num=lettera[0]-'0';
    if(num==t && lettera[0]!=EOF)
    {
    for(;
    {
    a=read(fd, lettera, 1);
    if(lettera[0]=='#')
    {
    a=0;
    break;
    }
    else
    parola[i]=lettera[0];
    i++;
    }
    }
    } while(a>0);
    printf("\nLettura parola fatta!!\n");
    close(fd);
    -----------------------------------------------------

    il mio file è di questo tipo:
    1insalata#
    2ciao#
    3computer#
    4programmazione#
    5linux#
    ...
    e la parola viene scelta creando un numero random e leggendo la parola corrispondente.
    ipotizziamo che:
    a- il primo nr random creato è 4 -> viene scelta la parola programmazione e il gioco è ok.
    b- l'utente gioca di nuovo e il secondo nr random è 5 -> in PAROLA ho 'linuxammazione' perché, letto il carattere #, il ciclo sopra finisce e le ultime lettere rimangono lì.
    ed ecco il mio problema: la parola nn è linux quindi l'utente, anche l'avesse indovinata, gli da errore.
    avevo pensato di, una volta letto #, sostituire tutte le altre lettere con un blank ma la funzione strlen(parola) mi restituisce 14 invece di 5 e mi sfalsa tutti i cicli successivi.

    allora come faccio a, finita la prima partita, ad cancellare la stringa parola?? in java avrei semplicemente fatto parola=null; ma in c come si fa???
    grazie a quelli ke mi hanno risp e a quelli ke mi risponderanno


  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Personalmente avrei scritto il codice in maniera molto diversa, ma non voglio soffermarmi su questo perche', facendo esperienza, lo migliorerai sicuramente.

    Restando quindi nell'ambito del codice che hai scritto, mi sembra che basterebbe inserire la linea segnata con gli asterischi, come ti hanno detto altri

    codice:
    if(lettera[0]=='#') 
    { 
      parola[i]='\0';  /* **** */
      a=0; 
      break; 
    }
    per risolvere ...

    Facci sapere ...

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Se proprio vuoi pulire completamente la stringa è sufficiente questo:
    codice:
    int i;
    for(i=0; i<20; i++) parola[i] = '\0';
    Inserendo il carattere NULL solo nel primo carattere di parola (come suggerito) non pulisci tutta la stringa e ad una nuova lettura tutte le lettere che c'erano prima (a parte il primo carattere e tutti quelli sostituiti) le ritrovi anche nella seconda.

    Altra soluzione: quando vai a leggere la parola dall'utente, subito dopo che lui ha premuto invio ci vai a inserire il carattere '\0' nell'ultima posizione.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2005
    Messaggi
    83
    grazie a tutti... ora provo...
    si, lo so che la lettura è un pò rozza ma lo scopo del programma è usare le funzioni di libereria di c... quindi mi sono concentrata di più su quello...
    grazie ancora

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Originariamente inviato da acsp
    grazie a tutti... ora provo...
    si, lo so che la lettura è un pò rozza ma lo scopo del programma è usare le funzioni di libereria di c... quindi mi sono concentrata di più su quello...
    grazie ancora
    Esistono tante funzioni di libreria che puoi utilizzare per migliorare il codice ... ma le scoprirai ...

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.