6 svar
158 visningar
Leonhart behöver inte mer hjälp
Leonhart 536 – Livehjälpare
Postad: 20 jan 2022 11:03

Nested loop

Hej! Jag försöker skriva en kod där man matar in ett heltal 'height' som då gör att datorn printar ut ett block av # (vertikalt och horisontellt)med det antal man matade in. Alltså, om man matar in height=4 ska man få output:

####

####

####

####

Jag har gjort något fel i min kod men vet inte riktigt vart felet ligger, antar att det ligger i loop då allt annat ser rätt ut.

    x=0; 
    y=0;
    space=0;
    while(x<height)
    {
      while (space<height-x-1)
        {
         printf(" ");
         space++;
        }      
     
      while(y<height)
       {
        printf("#");
        y++;
       }
        printf("#");
        x++;
        printf("\n");
     }

Såhär blir min output:

Programmeraren 3389
Postad: 20 jan 2022 11:11 Redigerad: 20 jan 2022 11:12

Lägg till utskrifter i looparna av de ingående variablerna så kan du följa dem och se vad som går fel.

Också: Det är enklare och tydligare att åstadkomma utskriften med nästade for-loopar, nu är koden svår att följa.

Leonhart 536 – Livehjälpare
Postad: 20 jan 2022 12:31 Redigerad: 20 jan 2022 12:34

Hej! Tack för tipset, jag vill dock gärna komma med underfund med while-loop även om for-loop blir mer effektivt. Jag raderade delarna som har med space att göra (ska utveckla koden efter #-blocket men råkade lägga in den delen för tidigt). Men nu får jag output:

####

#

#
#

Jag får nu rätt antal rad och kolumn när jag matar in 4 men resterande # printas inte ut? När jag testade koden för y och x för sig blev det rätt ås problemet ligger nog i hur jag har nästat loopen men jag vet inte riktigt hur jag ska ta mig vidare.

Programmeraren 3389
Postad: 20 jan 2022 13:05

Nu ser jag inte senaste versionen men originalkoden ser lite knepig ut.
Varför skrivs # på två ställen? Den andra av dem ser onödig ut.

Du verkar inte nollställa y efter varje rad, det är nog huvudfelet (x används som rad och y som kolumn i koden).

Leonhart 536 – Livehjälpare
Postad: 20 jan 2022 17:18
Du verkar inte nollställa y efter varje rad, det är nog huvudfelet (x används som rad och y som kolumn i koden).

Varför ska y nollställas? Är inte problemet ATT y nollställs i min kod?

    x=0; 
    y=0;
    while(x<height)
    {
      while(y<height)
       {
        printf("#");
        y++;
       }
        printf("#");
        x++;
        printf("\n");
     }

Jag tänkte att det ska finnas kod för # på två ställen eftersom den ena hör till loopen för x (rad) respektive y (kolumn).

När jag matar in input height=4 ger det mig output:

####

#

#

#

Men jag försöker printa 

####

####

####

####

Peter_ 470 – Avstängd
Postad: 20 jan 2022 17:29

Vad vill jag åstadkomma? Jag vill ha n st '#' på en rad:

n = 4;
for (i = 0; i < n; i++)
    printf("#");
(Alltid bra att börja från grunden och se att det fungerar).

Vad vill jag nu? Jo, samma sak på lika många rader:
Då skriver jag om programmet med en loop utanför den första ...

Kommer du vidare?



Leonhart 536 – Livehjälpare
Postad: 20 jan 2022 17:42

Nu förstår jag, tack för all hjälp!

Svara
Close