Regole del forum
1) Rispettare le idee altrui.
2) Evitare le offese dirette.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
/* Chiede il lato del quadrato e il carattere da visualizzare e stampa come nell'esempio.
Es: lato=4, carattere=r rrrr
rrrr
rrrr
rrrr */
#include <stdio.h>
/* variabili globali */
int size; /* dimensione lato quadrato */
char character; /* carattere da visualizzare */
void design ( int size, char character ); /* prototipo funzione */
main()
{
printf("Enter size of the square: ");
scanf("%d", &size);
printf("Enter character: ");
scanf("%c", &character);
design(size, character); /* chiamo la funzione */
return 0;
}
/* definizione funzione */
void design ( int size_f, char character_f )
{
int i, j;
for ( j = 1; j <= size_f; j++ )
{
for ( i = 1; i <= size_f; i++ )
printf("%c", character_f);
printf("\n");
}
return;
}
Cos'ha che non va? Deve essere qualcosa a che fare col tipo carattere, la compilazione non rileva problemi, ma il programma si ferma solo alla richiesta della dimensione del lato e poi non stampa niente.
#include <stdio.h>
/* variabili globali */
int size; /* dimensione lato quadrato */
char character; /* carattere da visualizzare */
void design ( int size, char character ); /* prototipo funzione */
int main()
{
printf("Enter size of the square: ");
scanf("%d", &size);
printf("Enter character: ");
scanf("%*c");
scanf("%c", &character);
design(size, character); /* chiamo la funzione */
return 0;
}
/* definizione funzione */
void design ( int size_f, char character_f )
{
int i, j;
for ( j = 1; j <= size_f; j++ )
{
for ( i = 1; i <= size_f; i++ )
printf("%c", character_f);
printf("\n");
}
return;
}
così funziona, con scanf("%*c") leggi a vuoto il primo carattere e con scanf("%c", &character) leggi il secondo. Nel buffer infatti in certi casi, tra cui questo, rimane un carattere. Per esempio quì prima della lettura del carattere hai letto un'intero, nel buffer è quindi rimasto un carattere relativo al tasto enter, infatti il tasto enter è codificato con due caratteri (\n\r), ma il lettura viene liberato solo lo \n.
Lo so mi sono spiegato da schifo ma comunque l'importante è che funzi ora
Un'osservazione che non c'entra col problema: è inutile passare gli argomenti alla funzione design, poichè sono memorizzati in variabili globali e quindi accessibili direttamente da tutto lo scope del file (a meno che non si voglia riutilizzare la funzione design in altri programmi). Scusate la pignoleria
funziona anche se sotistuisco " scanf("%*c") " con " scanf(%c)", cioè togliendo il simbolo *. Ho provato. Solo che non capisco una cosa: non è la prima volta che faccio seguire a una printf-scanf un'altra printf-scanf per accquisire dati, e non mi era mai successa una simile cosa. Forse succede per il fatto che avevo acquisito solo interi o float, e col tipo char cambia la questione?
funziona anche se sotistuisco " scanf("%*c") " con " scanf(%c)", cioè togliendo il simbolo *. Ho provato.
è la stessa cosa, perchè tu con entrambi i metodi leggi un carattere a vuoto
Solo che non capisco una cosa: non è la prima volta che faccio seguire a una printf-scanf un'altra printf-scanf per accquisire dati, e non mi era mai successa una simile cosa. Forse succede per il fatto che avevo acquisito solo interi o float, e col tipo char cambia la questione?
sì, cambia perchè leggendo caratteri bisogna condiderare anche i newline!
non lo sapevo, ma tu dici che anzicché scrivere
design(size, character);
posso scrivere solo
design;
no, ma visto che le 2 variabili sono globali non c'è bisogno di scrivere una funzione che le prenda come parametri;
Per essere precisi precisi, lo standard ANSI non consigliava per l'acquisizione di caratteri una qualche altra funzione (che ora non ricordo ) invece di scanf(%c)? Forse era qualcosa del tipo getc() ma non ricordo con precisione scusate.
In quel modo non c'erano i vari problemi con il return...
Al momento non ho il Kerningham & Ritchie e sto leggendo il Deitel & Deitel e un'altro di autori italiani di cui non ricordo il nome ora. Appena ritorno mi procuro anche quello.