Newsgroup: it.comp.lang.c
Titolo: Problema con scanf()

Dove sbaglio?
------------------
#include <stdio.h>
void quadrato(int side, char fillChar);
main()
{
	int lato;
	char c;
	printf(\nLato: ");
	scanf("%d", &lato);
	printf("Carattere: ");
	scanf("%c", %c);
	quadrato(lato, c);
	return 0;
}
void quadrato(int side, char fillChar)
{
	int i, j;
	for (i = side; i > 0; i--) {
		for (j = side; j > 0; j--)
			printf(" %c", fillChar);
		printf("\n");
	}
}
------------------------
Il compilatore non mi da nè errori nè warnings, per quando lo avvio riesco
a inserire solo il lato. Dopo aver inserito il lato però dà di testa e 
mette una 20ina di newline e termina, senza darmi il tempo di inserire il
carattere. 

> 	scanf("%c", %c);
oops, scusate qui c'era scanf("%c", &c);
un errore di copia&incolla.


Semplicemente la scanf sul char si legge l'invio... un trucco può essere 
quello di fare ripetere una seconda volta la scanf sul carattere.

 quello di fare ripetere una seconda volta la scanf sul carattere.
Fantastico, adesso funziona! Quale potrebbe essere un altra soluzione?

behemoth wrote:

scanf(" %c", &c);
Nota lo spazio prima del carattere di formattazione.
Ciao

scanf(" %c", &c);
Scusa potrebbe usare getchar?
Questa scanf mi sembra un po' sprecata
per certe cose. O mi sbaglio?

 Nota lo spazio prima del carattere di formattazione.
Come mai lo spazio? Perchè funziona? Cioè, voglio dire, come viene
interpretato?

> Scusa potrebbe usare getchar?
Però l'esercizio mi dice che devo usare la scanf... :(

 
   .~.      xin\@IRCNet (mostly xin\aWAy 24/7 ghgh)
   /V\      Email: NOSPAM!
  // \\     Anemir,Alarik,Marty,Araon,Balimir@ClessidraMUD - CdL -
 /(   )\    ICQ UIN: 63088554
  ^`~'^     "Somewhere inside my childhood witnessed my heart die" -
2Pac
-- 
/"\   
\ /    ASCII Ribbon Campaign
 \     Against HTML Mail and News
/ \  
--
"A coward dies a thousand deaths a soldier dies but once..." - 2Pac

 invio subito dopo le scanf
Se non erro, fflush() applicata allo stdin ha un comportamento
indefinito.
EMG
--
EMAG Software Homepage:     
http://www.emagsoftware.it
The EMG's ZX-Spectrum Page: 
http://www.emagsoftware.it/spectrum
The Best of Spectrum Games: 
http://www.emagsoftware.it/tbosg

On 26 mag 2003, you wrote in it.comp.lang.c:
naa :) almeno x quanto ne so io si limita a svuotare il buffer della 
robaccia passata dallo stdin e quindi no dovrebbe dare prob (o almeno a me 
non ne ha mai dati ne ho sentito di problemi riguardo questa funzione)
Luca

   .~.      xin\@IRCNet (mostly xin\aWAy 24/7 ghgh)


 non ne ha mai dati ne ho sentito di problemi riguardo questa funzione)
Sbagliato. Ti riporto il pezzo delle FAQ che ne parla.
12.26:  How can I flush pending input so that a user's typeahead isn't
        read at the next prompt?  Will fflush(stdin) work?
A:      fflush() is defined only for output streams.  Since its
        definition of "flush" is to complete the writing of buffered
        characters (not to discard them), discarding unread input would
        not be an analogous meaning for fflush on input streams.
        There is no standard way to discard unread characters from a
        stdio input stream, nor would such a way necessarily be
        sufficient, since unread characters can also accumulate in
        other, OS-level input buffers.  You may be able to read and
        discard characters until \n, or use the curses flushinp()
        function, or use some system-specific technique.  See also
        questions 19.1 and 19.2.
        References: ISO Sec. 7.9.5.2; H&S Sec. 15.2.
-- 
Mox
"Trust the programmer."
"Don't prevent the programmer from doing what needs to be done."
"Keep the language small and simple."
"Provide only one way to do an operation."

 
   .~.      xin\@IRCNet (mostly xin\aWAy 24/7 ghgh)
