Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio
POCO F9 Pro arriva sul mercato con l'obiettivo di portare prestazioni da smartphone top di gamma in una fascia di prezzo "più aggressiva", senza rinunciare a un comparto fotografico finalmente all'altezza. Dopo averlo testato sul campo, emerge uno smartphone molto più completo rispetto alla generazione precedente, ma anche con alcuni piccoli compromessi che diventano difficili da ignorare quando il prezzo di listino sfiora i 1.000 euro.
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI
Snapdragon Soung Gen 2 è la piattaforma Qualcomm per i dispositivi audio sempre più integrati nel mondo dell'intelligenza artificiale: al prorpio interno tanta potenza elaborativa per gestire al meglio le necessità d'uso dell'agentic AI
Qualcomm annuncia la nuova generazione di SoC Snapdragon 8 Elite Gen 6
Qualcomm annuncia la nuova generazione di SoC Snapdragon 8 Elite Gen 6
In occasione del proprio Snapdragon Summit Qualcomm annuncia i due nuovi chip per dispositivi mobile di fascia alta che entreranno nel mercato nel corso del 2027: tanta potenza a disposizione per elaborazioni di intelligenza artificiale sempre più complesse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 01-10-2009, 20: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, 20: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, 20: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, 21: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, 21: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, 21: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 01-10-2009, 23:19   #7
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2794
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, 08: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


Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio Recensione POCO F9 pro: potenza da vero top di g...
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI Tra audio e AI: la ricetta di Qualcomm per l'age...
Qualcomm annuncia la nuova generazione di SoC Snapdragon 8 Elite Gen 6 Qualcomm annuncia la nuova generazione di SoC Sn...
realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole! realme 16 Pro Harry Potter Edition: il nuovo mid...
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce Recensione REDMI Note 17 Pro: il midrange con ba...
Google Maps si aggiorna su Android Auto,...
Nuova auto che sembra una Twingo? S&igra...
Schneider Electric verso l'acquisizione ...
WhatsApp prepara i promemoria per i comp...
Garmin Forerunner 265S oggi costa solo 3...
Gemini 4 è quasi pronto: il lanci...
GTA 6, Rockstar lancia il box da collezi...
Microsoft è il caso 'Microslop': cosa si...
Dreame H15 Pro Heat crolla da 599€ a 419...
BYD prepara una berlina elettrica ultra-...
Claude si ottimizza da solo, e adesso è ...
Internet a casa: quanta velocità ...
Titan Quest 2 ha una data di uscita uffi...
Sony ULT FIELD 1, cassa bluetooth in off...
Noctua e Forced Physics insieme per rivo...
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: 08:57.


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