Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Nuova Dacia Spring, del modello precedente resta solo il nome: più grande, più efficiente e ora prodotta in Europa
Nuova Dacia Spring, del modello precedente resta solo il nome: più grande, più efficiente e ora prodotta in Europa
La seconda generazione della citycar elettrica di Dacia passa alla piattaforma RGEV small di Renault Group, cresce di 15 cm in lunghezza e 18 cm in larghezza, adotta un motore da 80 CV e una batteria LFP da 27,5 kWh per 250 km WLTP. Prezzi da 17.900 euro, produzione a Novo Mesto in Slovenia.
BOOX Picco: l'ebook reader minuscolo è una genialata, e si può attaccare allo smartphone
BOOX Picco: l'ebook reader minuscolo è una genialata, e si può attaccare allo smartphone
BOOX ha portato sul mercato Picco, un e-reader da 3,97 pollici che pesa 58 grammi e si aggancia al retro dello smartphone con un anello magnetico. Lo abbiamo usato con Pixel 11 Pro XL e iPhone 18 Pro per capire se un formato così ridotto regga la prova della lettura quotidiana
AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria
AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria
A Las Vegas AMD ha svelato i dettagli architetturali delle CPU EPYC di sesta generazione, note con il nome in codice Venice. Nuovi core Zen 6 e Zen 6c costruiti a 2 nanometri, fino a 256 core per socket, 16 canali di memoria, interfaccia PCI Express 6.0 e un'intera famiglia di proposte che va da Venice SP7 a Verano. Senza dimenticare la memoria, oggi la voce di costo più pesante in un server: AMD risponde con CXL 3.1 e con la tecnologia software MEXT, che porta la memoria flash dentro la gerarchia della DRAM.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 01-10-2009, 21:28   #1
sbera
Senior Member
 
L'Avatar di sbera
 
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();
}
solo che cosi viene stampato a video solo la prima riga di cancelletti e poi va a capo 4 volte (ed ho anche capito il perchè, presumo che prima faccia il ciclo interno con la base e, una volta finito, faccia quello più esterno)

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
sbera è offline   Rispondi citando il messaggio o parte di esso
Old 01-10-2009, 21:57   #2
Mesh89
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();
}
Così è un attimo più leggibile (IMO).

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?
Mesh89 è offline   Rispondi citando il messaggio o parte di esso
Old 01-10-2009, 21:58   #3
vizzz
Senior Member
 
L'Avatar di vizzz
 
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.
vizzz è offline   Rispondi citando il messaggio o parte di esso
Old 01-10-2009, 22:05   #4
sbera
Senior Member
 
L'Avatar di sbera
 
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
sbera è offline   Rispondi citando il messaggio o parte di esso
Old 01-10-2009, 22:15   #5
Mesh89
Member
 
Iscritto dal: Dec 2006
Messaggi: 198
Quote:
Originariamente inviato da sbera Guarda i messaggi
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
Figurati, ci siamo passati tutti

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
Mesh89 è offline   Rispondi citando il messaggio o parte di esso
Old 01-10-2009, 22:38   #6
sbera
Senior Member
 
L'Avatar di sbera
 
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();
}
cosi funziona perfettamente
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();
}
il programma non tiene conto del getchar e finisce. ho provato a mettere vari system("pause") per vedere se il programma funziona correttamente e in effetti mettendo il pause dopo altezza-- noto che i cicli li fa correttamente ma quando termina l'ultimo esce direttamente senza tener conto del getchar. come mai?
__________________
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
sbera è offline   Rispondi citando il messaggio o parte di esso
Old 02-10-2009, 00:19   #7
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2795
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à
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 02-10-2009, 09:25   #8
sbera
Senior Member
 
L'Avatar di sbera
 
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
sbera è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Nuova Dacia Spring, del modello precedente resta solo il nome: più grande, più efficiente e ora prodotta in Europa Nuova Dacia Spring, del modello precedente resta...
BOOX Picco: l'ebook reader minuscolo è una genialata, e si può attaccare allo smartphone BOOX Picco: l'ebook reader minuscolo è un...
AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria AMD EPYC Venice: dentro Zen 6, i SoC a 256 core ...
HONOR Pad X9 Max recensione, schermo ultra large a meno di 400 euro HONOR Pad X9 Max recensione, schermo ultra large...
Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno Lenovo ThinkPad X1 Carbon Gen 14: il business ul...
Star Wars, Morrowind e TimeSplitters: la...
God of War: Sons of Sparta debutta su PS...
Dalle schede madri agli ospedali: ASUS p...
Perché Windows non permette di ch...
Il meglio in 7 articoli del Black Friday...
Black Friday Dyson: sconti fino al 43% s...
Cerebras cresce del 70% nel trimestre e ...
Black Friday Amazon, robot aspirapolvere...
22 milioni di persone coinvolte: il giga...
CPU desktop, Intel rialza la testa e AMD...
NVIDIA, una petizione chiede il ritorno ...
SpaceX Starship: Ship 42 è stata ...
Meta multata per 805 milioni di euro dal...
Jensen Huang avrebbe nascosto ai vertici...
Le prime cuffie over-ear di Vivo arrivan...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 18:40.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v