Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    [C - linux] scanf - come limitare i caratteri?

    Salve, sono nuovo di questo forum e dato che si parla di programmazione volevo chiedervi una cosa.

    Ho un problema con una scanf e vi illustro qual'è:

    Sto implementando un gioco "Battaglia Navale" in linux ed è tutto risolto, ma ho un problemino stupido

    Quando inserisco le coordinate, inserisco una stringa del tipo A3, J9.

    La matrice del campo di bataglia è 10X10 quindi non ho proiblemi le coordinate sono sempre di due elementi.

    Il problema sta qui:

    se io immetto: A2Ciao, genero un errore dato che da I/O prelevo i 3 caratteri iniziali della stringa e quindi il terzo non è valido.

    Se io immetto invece B2 Ciao, l'errore non viene generato!

    Ovvero non considera lo spazio nella cattura dell'errore.

    La cosa positiva è che ogni volta cancello il Buffer di IO e quindi nella seconda immissione non ci sono problemi.

    Per arginare il problema ho pensato che se scanf fosse limitata a due caratteri ovvero
    A5 senza possibilità di inserire altro
    tutto si risolverebbe.

    Avete qualche altra possibile soluzione?

  2. #2
    Utente di HTML.it L'avatar di DydBoy
    Registrato dal
    Jul 2005
    Messaggi
    165
    codice:
    scanf("%2s",str);
    Se utilizzi il modificatore [width] nella scanf puoi settare il numero di caratteri da leggere.

    Per maggiori info :
    http://www.cplusplus.com/ref/cstdio/scanf.html

  3. #3
    Originariamente inviato da DydBoy
    codice:
    scanf("%2s",str);
    Se utilizzi il modificatore [width] nella scanf puoi settare il numero di caratteri da leggere.

    Per maggiori info :
    http://www.cplusplus.com/ref/cstdio/scanf.html
    non và..

    bisogna disattivare l'input buffering..


    http://forum.html.it/forum/showthrea...hreadid=655927


  4. #4
    Utente di HTML.it L'avatar di DydBoy
    Registrato dal
    Jul 2005
    Messaggi
    165
    Guarda che a me gira...

    Data una stringa in input mi memorizza in un buffer sole i primi N caratteri.

  5. #5
    scusate l' OT. per caso stai facendo la tesina di SO di inge info (unirm1)???? se si siamo colleghi

  6. #6
    Originariamente inviato da DydBoy
    Guarda che a me gira...

    Data una stringa in input mi memorizza in un buffer sole i primi N caratteri.
    tu la stai usando sotto Linux?

  7. #7
    Utente di HTML.it L'avatar di DydBoy
    Registrato dal
    Jul 2005
    Messaggi
    165
    Originariamente inviato da kentaromiura
    tu la stai usando sotto Linux?
    No, puo' essere questo ?

  8. #8
    Originariamente inviato da DydBoy
    No, puo' essere questo ?
    io mi ero rifatto al titolo:
    [C - linux] scanf - come limitare i caratteri?
    quindi ho dato una spiegazione del perche' sotto Linux non và..


  9. #9
    while(getchar()!='\n')

    Questo mi svuota il buffer.

    ma un problema che adesso sorge è questo: facendo

    scanf("%2s",stringa);

    risolvo molti dei miei problemi si è vero, tant'è che eliminando il contenuto del buffer il programma funziona alla perfezione.

    Solamente che de da prompt si inserisce

    &>A2 Ciao

    o anche

    &>C4Ciao

    Il programma legge le prime due lettere corrette e continua la sua esecuzione.

    Io vorrei evitare questa cosa e fare in modo che quando inserisco

    &>A2

    Il terminale sia bloccato e NON mi consenta di inserire un terzo carattere.

    Alternativamente una gestione errore sul terzo carattere che mi dia un errore se questo è differente da '\0' o '\n'

    Ho profato tuttavia a fare un controllo ma, al terzo carattere sia che abbia uno "spazio" o non inserisca nulla, mi genera sempre un errore perché il carattere è null.

    Quindi anche quando il controllo dovrebbe essere OK lui stampa l'errore.

    Compe posso trovare una delle due soluzioni in termine di codice?

  10. #10
    Originariamente inviato da Dr_House
    while(getchar()!='\n')

    Questo mi svuota il buffer.

    ma un problema che adesso sorge è questo: facendo

    scanf("%2s",stringa);

    risolvo molti dei miei problemi si è vero, tant'è che eliminando il contenuto del buffer il programma funziona alla perfezione.

    Solamente che de da prompt si inserisce

    &>A2 Ciao

    o anche

    &>C4Ciao

    Il programma legge le prime due lettere corrette e continua la sua esecuzione.

    Io vorrei evitare questa cosa e fare in modo che quando inserisco

    &>A2

    Il terminale sia bloccato e NON mi consenta di inserire un terzo carattere.

    Alternativamente una gestione errore sul terzo carattere che mi dia un errore se questo è differente da '\0' o '\n'

    Ho profato tuttavia a fare un controllo ma, al terzo carattere sia che abbia uno "spazio" o non inserisca nulla, mi genera sempre un errore perché il carattere è null.

    Quindi anche quando il controllo dovrebbe essere OK lui stampa l'errore.

    Compe posso trovare una delle due soluzioni in termine di codice?
    http://forum.html.it/forum/showthrea...hreadid=655927
    codice:
    #include "term2_0.h"
    
    
    Gets(stringa,2);

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 © 2026 vBulletin Solutions, Inc. All rights reserved.