Visualizzazione dei risultati da 1 a 8 su 8

Discussione: [C] Stringhe e gets

  1. #1

    [C] stringhe e gets

    Ciao ragazzi,
    molto brevemente:

    printf("Inserisci il numero di caratteri da confrontare");
    scanf("%d",&x);

    gats(s1);
    gets(s2);

    printf("la stringa s1 %s s2\n",strncmp(s1,s2,x)>0 ? "e piu lunga di" : "non e piu lunga di");

    qualcuno mi sa dare una ragione plausibile per cui, anke debuggando, la prima gets(s1) debba essere completamente ignorata, proprio saltata a pie pari?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Svuota il buffer prima della prima gets

    while(getchar() != '\n') ;



    P.S. Penso che gats sia un errore di trascrizione ... giusto?

  3. #3

    Non rispondete mia svista colossale

    Lasciate stare, se vi dico qual era il problema mi picchiate in testa...

  4. #4

    Re: [C] stringhe e gets

    Originariamente inviato da UltraBeginner
    gats(s1);
    Hai scritto gats anche nel sorgente?
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Originariamente inviato da oregon
    Svuota il buffer prima della prima gets

    while(getchar() != '\n') ;



    P.S. Penso che gats sia un errore di trascrizione ... giusto?
    giusto, e pensavo proprio fosse quello il mio errore, infatti ho messo il post quassu...poi, dopo aver corretto l errore ortografico ho visto che il bug persisteva, ora provo con il tuo codice, che sono sicuro funzionera...sl una cosa:

    ma il buffer in pratica sarebbe il "pozzetto" in cui le cose che si scrivono da tastiera permangono per poi essere "succhiate" dalle funzioni tipo gets e getchar?

  6. #6

    Re: Re: [C] stringhe e gets

    Originariamente inviato da MItaly
    Hai scritto gats anche nel sorgente?
    beccato

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [C] stringhe e gets

    Originariamente inviato da UltraBeginner
    Ciao ragazzi,
    molto brevemente:

    printf("Inserisci il numero di caratteri da confrontare");
    scanf("%d",&x);

    gats(s1);
    gets(s2);

    printf("la stringa s1 %s s2\n",strncmp(s1,s2,x)>0 ? "e piu lunga di" : "non e piu lunga di");

    qualcuno mi sa dare una ragione plausibile per cui, anke debuggando, la prima gets(s1) debba essere completamente ignorata, proprio saltata a pie pari?
    Allora, giusto per iniziare, la scanf è una ciofeca spaventosa!!! Lasciala perdere.

    Per come è gestita la scanf, essa si ferma al primo carattere non riconosciuto ma lo lascia nel buffer di input!!! Avendo messo %d, tu richiedi l'input di un valore numerico. Quando premi l'INVIO, la scanf lo riconosce come carattere non richiesto e si ferma lì ma il carattere \n rimane nel buffer!

    gets() invece è una funzione insicura in quanto non gli puoi specificare una lunghezza massima da accettare in input!

    Soluzione: utilizzare fgets (specificando come stream stdin) per effettuare l'input ed utilizzare sscanf per effettuare il parsing dei valori.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8

    Thanks!

    Esarienti ed esaustivi come al solito

    sl una cosa: cosa si intende per "parsing dei valori"?

    Thanks!
    Saluti

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.