Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    13

    [C] Lettura riga da tastiera

    Salve a tutti, mi sono imbattuto in una situazione abbastanza frustrante
    a me serve leggere una riga di testo in C, e con scanf se nella riga sono presenti degli spazi, viene troncata restituendo solo la prima parola.Usango fgets(str,100,stdin) non mi fa nemmeno leggere l'input che termina quando viene eseguita questa istruzione.Aiuti?come posso fare per leggere una stringa completa in C?grazie in anticipo!

  2. #2
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408
    Sbagli ad usare la funzione fgets mi sà..

  3. #3
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219

    Re: [C] Lettura riga da tastiera

    [...]Usango fgets(str,100,stdin) non mi fa nemmeno leggere l'input che termina quando viene eseguita questa istruzione.[...]
    Cosa vuoi dire con questo ?

    codice:
    char buffer[100];
    fgets(buffer,100,stdin);
    puts(buffer);

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    13
    Ho risolto, molto strano fgets nn mi funzionava e mi crashava il programma perche era all'interno di uno switch, portandolo fuori non da problemi, ma il puts a cosa serve?!io l'ho usato senza!

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Strano ... forse se mostri tutto il codice in cui non andava si capisce il perché ...

    puts è una funzione del C (se non l'hai studiato, fallo) che visualizza il contenuto di una stringa.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    13
    Questo è come è ora:

    codice:
    int main()
    {
    int i;
    char str[100];
    printf("Inserire una frase da codificare/decodificare:\n");
    fgets(str,100,stdin);
    printf("0 to Morse, 1 to IT\n");
    scanf("%d",&i);
    	if(i==0) {
    		for(i=0;str[i]!='\n';i++) printf("%s ",toMorse(toupper(str[i])));
    	} else if(i==1) {
    		printf("Inserire una frase Morse da tradurre in Italiano:\n");
        } else {
        	printf("Scelta non valida!\n");
        	return 0;
    	}
    printf("\n");
    }
    Questo è come era prima quando ho pubblicato il post:

    codice:
    #include <stdio.h>
    #include <string.h>
    int main()
    {
    int i;
    char str[100];
    printf("0 to Morse, 1 to IT\n");
    scanf("%d",&i);
    switch(i){
    		case 0:
    	    printf("Inserire una frase da codificare/decodificare:\n");
    	    fgets(str,100,stdin);
    		//for(i=0;str[i]!='\n';i++) printf("%s ",toMorse(toupper(str[i])));
            break;
            case 1:
            break;
            //ancora da scrivere
            }
    printf("\n");
    }

  7. #7
    È la solita storia del mischiare input formattato con input non formattato... la scanf lascia nel buffer di lettura il \n finale (perché non lo riconosce come numero); questo non è un problema per successive chiamate a scanf (che lo ignorano automaticamente), ma la fgets inizia a leggere, incontra subito il \n e quindi considera il lavoro finito.
    La cosa più semplice da fare è cambiare la scanf in:
    codice:
    scanf("%d\n", &i);
    in modo che si "mangi" anche il newline.
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Oppure potevi inserire la chiamata alla fflush per ripulire il buffer di input

    codice:
    #include <stdio.h>
    #include <string.h>
    int main()
    {
    int i;
    char str[100];
    printf("0 to Morse, 1 to IT\n");
    scanf("%d",&i);
    fflush(stdin);
    
    switch(i){
    		case 0:
    	    printf("Inserire una frase da codificare/decodificare:\n");
    	    fgets(str,100,stdin);
    		//for(i=0;str[i]!='\n';i++) printf("%s ",toMorse(toupper(str[i])));
            break;
            case 1:
            break;
            //ancora da scrivere
            }
    printf("\n");
    }
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    13
    grazie non lo avrei mai immaginato!

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    13
    con fflush(stdin) mi da sempre lo stesso errore, con \n aggiunto a scanf con questo codice mi si mangia il msg di printf, prima mi fa scrivere la frase e poi scrive frase/codifica.

    codice:
    int main()
    {
    int i;
    char str[100];
    printf("0 to Morse, 1 to IT\n");
    scanf("%d\n",&i);
    printf("Inserire una frase da codificare/decodificare:\n");
    fgets(str,100,stdin);
    	if(i==0) {
    		for(i=0;str[i]!='\n';i++) printf("%s ",toMorse(toupper(str[i])));
    	} else if(i==1) {
    		printf("Inserire una frase Morse da tradurre in Italiano:\n");
        } else {
        	printf("Scelta non valida!\n");
        	return 0;
    	}
    printf("\n");
    }

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.