2016-12-03 3 views
-1

Я новичок в кодировании и не понимаю, почему мой код не работает? Любая синтаксическая ошибка?Моя первая петля не работает

#include <stdio.h> 
#include <cs50.h> 
int height; 
int row; 
int space; 
int hash; 

int main(void) 
{ 
    // ask user for input 
    do 
    { 
     printf("height: "); 
     height = GetInt(); 
    } 
    while (height < 0 || height > 23); 

    // make pyramid 

    for (row = 1; row >= height; row++) 
    { 
     for (space = (height - row); space > 0; space--) 
     { 
      printf("8 "); 
     } 

     for (hash = 1; hash >= (row+1); hash++) 
     { 
      printf("#"); 
     } 
     printf("\n"); 
    } 
    return 0; 
}  

Программа запрашивает высоту, затем получает ее и выдает. (Loop не работает).

+0

Вы не должны спрашивать нас, есть ли синтаксические ошибки. Ваш компилятор сообщает вам, есть ли они. Позаботьтесь о ';' в конце цикла while. Этот цикл не будет делать много ... Где принадлежит последний '}'? И в отношении вашего вопроса в целом: Что вы ожидаете, что происходит? – Gerhardh

+0

Компилятор требует этого ';' –

+0

Компилятор хочет иметь правильное выражение, которое может быть блоком или оператором. Вы предоставляете пустое заявление. – Gerhardh

ответ

1

Хорошо, давайте рассмотрим начало кода:

while (height < 0 || height > 23); 

Вот вы говорите, что высота должна быть ниже нуля или выше 23. Может ли ваша пирамида негативно высоты? Было бы лучше просто переключиться:

while(height< 23) 

Кроме того, вы используете ; после некоторого времени. Хотя синтаксис таков:

while(condition) 
{ 
    do something; 
} 

Я попытался запустить код, и кажется, что вы ошиблись в логике. Например, внутри while вы не изменяете условие цикла, делая его бесконечным циклом. Правильно отрегулируйте for, и он будет работать.

EDIT - Так как вы используете Do/While синтаксис таков:

do 
{ 
    something; 
} 
while(condition); 

Действие, которое вы хотите быть выполнены в цикле должна быть внутри do скобки.

+0

Я предполагаю, что цикл while должен быть равен if: 'if (height> 0 && height <23);' Также цикл должен получить другое условие: 'for (row = 1; row <= height; row ++)' В противном случае цикл не будет делать много, если высота не равна 0 или 1. – Gerhardh

0

(редактировать: этот ответ из контекста, потому что OP отредактирован свой пост К тому времени, я ответил, что не было никакого do { } while заявления.)

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

while (height < 0 || height > 23); 

... вы делаете свой цикл программы, не делая ничего до тех пор, пока условия являются истинными. ; делает тело вашего цикла while пустым.

Это также может случиться с другими конструкциями. Очень часто люди жалуются на форумы, что всю ночь отслеживали ошибку, чтобы узнать, что это была точка с запятой в неправильном месте.

Мой совет вам: всегда использовать брекеты. Даже когда они не кажутся необходимыми.

Смежные вопросы