Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [c] problema lettura stringa

    Sto sviluppando un applicazione client/server ed ho un problema quando devo leggere un nick.. più che un problema è un dettaglio che però mi infastidisce.. mi spiego meglio.. il codice nel client è questo:

    Codice PHP:
    printf("Inserisci il nickname con cui vuoi giocare:\n");         
    LetturaStringa Nick20 ); 
    questo funziona, ma standoci lo \n al termine del printf praticamente il nickname viene scritto nella riga successiva.. io invece vorrei che fosse inserito sulla stessa riga.. quindi ho pensato di modificare così:

    Codice PHP:
    printf("Inserisci il nickname con cui vuoi giocare: ");         
    LetturaStringa Nick20 ); 
    ma facendo in questo modo non funziona.. cioè non esce scritto niente, e dopo che ho scritto il nick e dato l'invio, esce scritto "Inserisci il nickname con cui vuoi giocare: " quando invece dovrebbe uscire prima.. il codice della funzione LetturaStringa è il seguente:

    Codice PHP:
    void LetturaStringa char Stringa[], int MaxLen ) {     
        
    char Carattere;     
        
    int Indice 0;      
        
    // Leggo un carattere alla volta dalla shell finchè non viene premuto il tasto INVIO     
        // oppure accade qualche errore. I primi 20 caratteri vengono inseriti nell'array del Nick. 
        
    while ( read STDIN_FILENO, &Carattere1) > 0  &&  Carattere != '\n' )     
        {         
            if ( 
    Indice MaxLen 1)             
                
    Stringa[Indice++] = Carattere;     
        }      
        
    Stringa[Indice] = '0';    
        
    // prima dello zero c'è backslash.. non l'ho inserito perchè qui sul forum backslash0 faceva vedere una cosa strana come questa \0

    qualcuno sa spiegarmi il perchè di questo comportamento anomalo? e come posso ovviare a tale inconveniente? grazie

  2. #2
    sostituendo la funzione LetturaStringa di cui su, con questa:

    Codice PHP:
    void LetturaStringa char Stringa[], int MaxLen)
    {
        
    int i;

        
    fgets (Stringa,MaxLen,stdin);
        
    strlen(Stringa) -1;
        if (
    Stringa[i]<32Stringa[i]=0;

        
    // fflush(stdin);


    funziona.. ma qualcuno sa spiegarmi il perchè prima non funzionava? E in questa il fflush alla fine ci vuole o non ci vuole?


  3. #3
    Ma mi sorge un dubbio..

    Non avresti potuto semplicemente scrivere:

    codice:
    printf("Inserisci il nickname con cui vuoi giocare:\n");          
    scanf("%s",nick);

  4. #4
    mi aspettavo questa risposta.. ed ho sbagliato a non chiarirlo prima..
    non ho usato semplicemente scanf perchè se venivano inseriti più di 20 caratteri, restavano dei caratteri nel buffer ed in questo modo c'era la possibilità di alterare le successive letture di stringhe..

  5. #5
    codice:
    void getline(char *pStr, size_t maxBytes){
    
       if(pStr == NULL)
          return;
    
       while((*pStr++ = getchar()) != '\n' && maxBytes-- >= 0)
          ;
    
        /*Oppure usa fflush(stdin)*/
        if(maxBytes <= 0){
    
          while(!getchar());
    
        }
    
       *pStr = '\0';
    
    }

  6. #6
    non ho capito la linea /*Oppure usa fflush(stdin)*/

    e comunque.. il problema l'ho risolto.. ora funziona.. quello che chiedo è perchè la prima funzione postata non funziona.. e come si può modificarla (se si può) per farla funzionare (modificarla, non scriverne un'altra)..

  7. #7
    la funzione funzionava, devi sapere che printf lavora su un file bufferizzato e quindi fa flush quando piu le garba... se fai un flush di stdout dopo avere fatto printf funziona anche la tua vecchia funzione

  8. #8
    ora provo.. grazie per la spiegazione!!

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.