Печать шаблона с циклом «В то время как» и только с использованием трех операторов вывода в C - PullRequest
0 голосов
/ 31 января 2010

У меня есть задание для школы, которое действительно лучше меня.

Вот вопрос:

(2) Написать программу на C, используя while цикл (ы) в сочетании только с следующие три выходных оператора (Каждый появляется ТОЛЬКО ОДИН РАЗ в вашем программа): printf ("*"); Е ( "\ п"); Е ( «^«); чтобы распечатать шаблон:

* * * * * * * * ^
* * * * * * * *
* * * * * * * * ^
* * * * * * * *
* * * * * * * * ^
* * * * * * * *

Примечание: между каждым есть пробел * и первая, третья и пятая строки есть пробел перед ^.

А вот и мой код:

#include<stdio.h>

int main () {

 int star = 0;
 int row = 1;
 int hat = 1;

 while(row < 6) {

  printf(" *");
  star++; 

  while(star > 8) {

   while( (hat % 2) == 1) {

    printf(" ^"); 
   }

   printf("\n");
   row++;
  }
 }
    return 0; 
}

Я пробовал много разных версий этого кода, и большинство из них заканчивалось бесконечно печатными строками *.

Если бы кто-нибудь мог помочь, это было бы здорово, поскольку я пытался и пытался это делать некоторое время, и хотя я хотел бы продолжать попытки, крайние сроки - это крайние сроки, и они всегда, кажется, приходят слишком быстро.

Спасибо

EDIT:

Rev.2 кода:

include<stdio.h>

int main () {
int star = 0;
int row = 1;
int hat = 0;

while(row <= 6) {

    printf(" *");
    star++; 

    while(star >= 8) {
        hat++;  

        if( (hat % 2) == 1) {
            printf(" ^");
            hat++;  
        }

        printf("\n");
        row++;
        star = 0;
    }
}
return 0;   
}

Надеюсь, я правильно завершаю циклы, но, похоже, это не работает. Я не прошу карту «Выйти из тюрьмы бесплатно», но любая приветствуется.

Ответы [ 5 ]

2 голосов
/ 31 января 2010

Просто намек:

   while( (hat % 2) == 1) {

должно быть if() и должно быть размещено в другом месте вашей программы.

2 голосов
/ 31 января 2010

Первая проблема в этом блоке:

 while(star > 8) {

   while( (hat % 2) == 1) {

    printf(" ^"); 
   }

   printf("\n");
   row++;
  }

Вы никогда не сбросите star при переходе к следующему ряду.

Кроме того, я не вижу, чтобы вы увеличивали hat в любом месте.

Я удивлен, что ваши звезды печатаются бесконечно - поскольку hat начинается с 1 и не изменяется внутри этого цикла while, этот цикл никогда не должен заканчиваться.

Другая проблема - star считает количество звезд, которые вы уже напечатали, верно? Таким образом, вам нужно только 8 звездочек на строку, но ожидание, пока star > 8 не позволит вам напечатать 9 на строку.

0 голосов
/ 31 января 2010

Мой ответ здесь

#include<stdio.h>

int main() {
    int row = 0;
    int hat = 0;
    while(row < 6) {
            int col = 0;
            while(col < 8) {
              printf("* ");
              col++;
            }
            while( (hat % 2) == 0) {
              printf("^");
              hat++;
            }
            printf("\n");
            row++;
            hat = row;
    }
}
0 голосов
/ 31 января 2010

Если у вас бесконечный цикл while, проверьте свои циклы на этот шаблон:

var = inital value;
while (var has not exitcondition)
{
    ....
    var = modify value;
}

Обычно причиной бесконечного цикла является то, что модификация var не находится внутри цикла, поэтому var никогда не достигнет условия выхода.

0 голосов
/ 31 января 2010

hat фиксировано, то есть нигде не увеличивается, а star не сбрасывается каждый раз в цикле ... Я выделил проблемные строки ...

while(row < 6) {

  printf(" *");
  star++; 

  while(star > 8) {

   while( (hat % 2) == 1) { // since hat = 1, 1%2 == 1 is true....

    printf(" ^"); 
   }

   printf("\n");
   row++;
  }

  star = 0; // !!!

 }

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...