Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1
    Utente di HTML.it L'avatar di Dark867
    Registrato dal
    Mar 2010
    Messaggi
    435

    Solito problema scanf char da tastiera

    Ciao, ho il solito problema dello scanf del char, ovvero del buffer di input ma non riesco a risolverlo nel modo usuale... ecco le poche linee di codice che non vanno:
    codice:
    char buffer[100];   
    char c;   
    printf("Scrivi una stringa>");   
    scanf("%s",buffer);                
    printf("Adesso scrivi un carattere, a scelta tra [s\\n]");      
    fflush(stdin);      
    scanf("%c",&c);  //questo viene saltato
    printf("Stringa: %s e carattere %c ",buffer,c);
    Come vedete ho messo il fflush dello standard input, eppure ho lo stesso errore...come mai??

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Il codice lavora correttamente, su Windows e Visual Studio.

    Su quale sistema e con quale compilatore lavori?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di Dark867
    Registrato dal
    Mar 2010
    Messaggi
    435
    ...l'ho sempre pensato che il visualc++ è il miglior compilatore...infatti su windows funziona!
    Il problema è che non va su linux, usando l'ultima versione di gcc.
    C'è anche il problema che il codice non è per me, ma x una xsona che usa il dev cpp come IDE (e non vuole cambiarlo=_=), usando quindi cygwin con una versione ancora + vekkia del gcc.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da Dark867
    ...l'ho sempre pensato che il visualc++ è il miglior compilatore...infatti su windows funziona!
    No, il fatto è che la fflush di stdin non è standard e quindi dipende dal compilatore.

    Il VC la implementa in quel modo ma non significa che sia migliore per questo.

    Il problema è che non va su linux, usando l'ultima versione di gcc.
    Ed è corretto dato che non è standard.

    Non utilizzare la fflush ma un metodo più generale, come


    while(getchar()!='\n') ;
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it L'avatar di Dark867
    Registrato dal
    Mar 2010
    Messaggi
    435
    Propone anche funzioni per la gestione di stringhe ottimizzate rispetto a quelle classiche, segnala warnings che normalmente gcc non segnala...insomma,dopo anke quest'ultima cosa, x me lo batte in toto.
    Grazie del suggerimento ma alla fine ho deciso di sprecare un altro buffer e prendermi l'input come stringa invece che come char.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da Dark867
    Propone anche funzioni per la gestione di stringhe ottimizzate rispetto a quelle classiche, segnala warnings che normalmente gcc non segnala...insomma,dopo anke quest'ultima cosa, x me lo batte in toto.
    Punti di vista ... per qualcosa posso essere d'accordo, per altro no ...

    Grazie del suggerimento ma alla fine ho deciso di sprecare un altro buffer e prendermi l'input come stringa invece che come char.
    Non usare la scanf ... utilizza funzioni "sicure" ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Originariamente inviato da Dark867
    Propone anche funzioni per la gestione di stringhe ottimizzate rispetto a quelle classiche, segnala warnings che normalmente gcc non segnala...insomma,dopo anke quest'ultima cosa, x me lo batte in toto.
    Grazie del suggerimento ma alla fine ho deciso di sprecare un altro buffer e prendermi l'input come stringa invece che come char.
    fidati, in ambiente professionale nessuno preferisce vc++ a gcc, nemmeno lontanamente.
    proprio per il fatto che vc++ si prende "libertà" che non dovrebbe avere, spesso ignorando lo standard.
    all that you need:
    http://www.cplusplus.com/reference/clibrary/

  8. #8
    Utente di HTML.it L'avatar di Dark867
    Registrato dal
    Mar 2010
    Messaggi
    435
    Vabbè io parlo x me...se si piglia libertà su cui condivido ben venga!
    Non ho capito bene...cos'ha la mia soluzione ke nn va?A quanto vedo scanf con %s funziona bene, ignorando gli \n e i vari caratteri di separazione...

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da Dark867
    Non ho capito bene...cos'ha la mia soluzione ke nn va?A quanto vedo scanf con %s funziona bene, ignorando gli \n e i vari caratteri di separazione...
    E' una questione di sicurezza, non di funzionalità ... probabilmente adesso non ti interessa, ma in ambito professionale, la cosa diventa importante.

    La scanf (e altre funzioni) è soggetta a "buffer overflow" ...

    P.S. ke nn ... per favore, non usare abbreviazioni da sms ... questo non è un sms e la lettura diventa fastidiosa ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it L'avatar di Dark867
    Registrato dal
    Mar 2010
    Messaggi
    435
    Vero, non avevo pensato al buffer overflow! In effetti col c++ non ho di questi problemi visto che utilizzo la cin.getLine ... vabbè alla fine qui stiamo parlando solo di un esercizietto isolato, preferisco avere un codice pulito piuttosto che sporcarlo con dei while in più.

    ps. è per abbreviare...siamo su internet, non sto scrivendo una lettera al presidente della pubblica istruzione...

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