Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C]ciclo for imprevedibile

    Ciao a tutti;

    Vi allego il testo del mio programma (incompleto).
    alla riga 28 c'è l'istruzione for, che voglio utilizzi una variabile: j.
    Il problema è che la utilizza, ma anzichè utilizzare il suo valore la reinizializza a zero.

    (ho scritto anche un paio di printf per vedere come la variabile cambia da prima a dopo l'entrata nel ciclo),

    Come è possibile che faccia una cosa simile senza che io l'abbia richiesto?
    output:

    ...
    x------------x-j:13-j:0
    ...


    Sono un novellino alle prime armi.

    Grazie in anticipo.. Vincenzo.




    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
       int   i,j,k;
       int       w;
       int  N = 28;
    
    
       for(i = 0, w = N+1; i < N; i++){
    
    
        //cicla le righe
        if(i==0 || i == N - 1)
            for(j = 0; j < N; j++)
                printf("x");
        else{
        //Se non è ne prima ne ultima riga:
        printf("x");
        if(i > N/2){
           for(j = 1; j <= w -2; j++)
              printf("-");
           //Dopo il primo giro di spazi:
           printf("x");
           printf("-j:%d",j);
        //Secondo giro di spazi...........:
          for(j; j >= 1; j--);
           printf("-j:%d",j);
        }
    
    
    
        }
       //Fine riga, A CAPO
       printf("%c", 10);
       //Alcuni cambiamenti necessari:
       w--;
    
       }
    
        return 0;
    }

  2. #2
    Cosa c'è di strano? Quel for è scritto così:
    codice:
    for(j; j >= 1; j--);
    ovvero, indentando correttamente,
    codice:
    for(j; j >= 1; j--)
        ;
    Il ; "da solo" è la cosiddetta istruzione vuota, per cui il for ad ogni iterazione non fa nulla; semplicemente, continua a decrementare j finché rimane maggiore o uguale a 1, il che di fatto corrisponde ad azzerarla.

    Per inciso, quel j nel primo pezzo del for non serve (basterebbe
    codice:
    for(; j >= 1; j--)
        ;
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Bravo MItaly, sono proprio sbatato.
    E dire che: conoscevo questo errore comune (anzi, ho scritto dei codici in cui facevo incrementare così certe variabili),
    conosco anche l'uso di for( ;<condizione>; )..(persino la codizione si può omettere, usando break;..)

    Grazie ancora, Vincenzo.

  4. #4
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.