|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Apr 2005
Città: San Vito
Messaggi: 3396
|
[C] Cicli annidati
ciao a tutti.
devo fare un programma in C dove, inseriti base e altezza, venga stampato a video un rettangolo di caratteri con base e altezza scelti dall'utente ora, io mi sono orientato su una strada di cicli while annidati ma non riesco ad arrivare ad una conclusione definitiva vi posto il codice Codice:
#include <stdio.h>
int main()
{
int base=3, altezza=4;
while (altezza>0){
while (base>0){
printf("#") ;
base--;
}
printf("\n");
altezza--;}
getchar();
}
ora però come faccio a fare in modo di ripetere il ciclo interno n volte?
__________________
Corsair VX550W || [email protected] || Asus P5k || 2x1GB OCZ Platinum XTC DDR2 800 || Gigabyte GTX660Ti OC 2GB || 500 GB Seagate Barracuda ------ Vendo componenti pc socket 478 |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Dec 2006
Messaggi: 198
|
Scusa, ma l'indentazione è qualcosa di veramente osceno
Codice:
#include <stdio.h>
int main() {
int base = 3, altezza = 4;
while (altezza > 0) {
while (base > 0) {
printf("#");
base--;
}
printf("\n");
altezza--;
}
getchar();
}
Allora, il tuo problema è che ottieni il risultato corretto solo per la prima riga, e questo perchè non reimposti il valore di base. Stampi # fino a che base non raggiunge lo 0, ed è corretto. Ma la seconda volta che arrivi al ciclo, a che valore ti trovi base? E' quello che ti aspetti? |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Mar 2006
Città: Bergamo
Messaggi: 2499
|
uscito dal ciclo della base devi ricaricare la variabile base!
__________________
ho concluso con: kvegeta, doctordb, Leland Gaunt.
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2005
Città: San Vito
Messaggi: 3396
|
scusate l'indentazione, sono le prime volte e devo ancora farci la mano
cmq si, il problema era proprio quello, alla fine dovevo ricaricare base del suo valore iniziale grazie a tutti
__________________
Corsair VX550W || [email protected] || Asus P5k || 2x1GB OCZ Platinum XTC DDR2 800 || Gigabyte GTX660Ti OC 2GB || 500 GB Seagate Barracuda ------ Vendo componenti pc socket 478 |
|
|
|
|
|
#5 | |
|
Member
Iscritto dal: Dec 2006
Messaggi: 198
|
Quote:
E per l'indentazione, non preoccuparti, lo stile si acquisisce col tempo e con la pratica. Io ne ho cambiati parecchi, e quando vado a rileggere certi miei vecchi codici, inorridisco |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2005
Città: San Vito
Messaggi: 3396
|
ne approfitto per fare un altra domandina veloce
ora che il ciclo funziona lo stavo migliorando con varie printf e scanf però ho un problema. se metto una scanf per leggere il valore di una variabile (base o altezza) e non cambiando altro nella struttura, il programma si esegue troppo velocemente non tenendo conto del getchar praticamente Codice:
#include <stdio.h>
int main() {
int base = 3, altezza = 4;
x=base;
while (altezza > 0) {
while (base > 0) {
printf("#");
base--;
}
base=x
printf("\n");
altezza--;
}
getchar();
}
mentre cosi Codice:
#include <stdio.h>
int main() {
int base, altezza = 4;
scanf("%d", &base);
x=base;
while (altezza > 0) {
while (base > 0) {
printf("#");
base--;
}
base=x
printf("\n");
altezza--;
system("pause");
}
getchar();
}
__________________
Corsair VX550W || [email protected] || Asus P5k || 2x1GB OCZ Platinum XTC DDR2 800 || Gigabyte GTX660Ti OC 2GB || 500 GB Seagate Barracuda ------ Vendo componenti pc socket 478 |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2787
|
Perché nel buffer di input è rimasto il carattere di ritorno a capo dopo la lettura della base, metti due getchar invece di uno e funzionerà
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Apr 2005
Città: San Vito
Messaggi: 3396
|
risolto mettendo un fflush prima del getchar per pulire il buffer
grazie
__________________
Corsair VX550W || [email protected] || Asus P5k || 2x1GB OCZ Platinum XTC DDR2 800 || Gigabyte GTX660Ti OC 2GB || 500 GB Seagate Barracuda ------ Vendo componenti pc socket 478 |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:18.











ho concluso con: kvegeta, doctordb, Leland Gaunt.









