C сторожевой петлей вопрос - PullRequest
       5

C сторожевой петлей вопрос

0 голосов
/ 24 сентября 2010

Предполагается, что эта программа оценивает высоту нескольких зданий по типу здания и количеству этажей.Существует цикл, который продолжает задавать вопросы, пока пользователь не введет «0» для типа здания.В конце он печатает отчет, показывающий типы зданий и сколько из них соответствуют строительным нормам.У меня проблемы с компиляцией программы, но я не уверен, что цикл тоже правильный.

#include <stdio.h> 
#include <math.h>
//constants
#define MIN_HEIGHT 180
#define MAX_HEIGHT 220
#define ROOF_MULT 2.0

int main()
{
    //variables
    int type, stories, F_TO_MECH, osum, rhsum, msum;
    double height, ADD_MECH_HEIGHT, code, F_HEIGHT;
    osum=0, rhsum=0, msum=0;


    //Find type of building and number of stories.
    printf("Enter a building type (1=Office, 2=Residential/Hotel, 3=Mixed-Use, 0=Stop): ");
    scanf("%d", &type);
    printf("Enter the number of stories in the building: ");
    scanf("%d", &stories);


    //Switch to differentiate constants of building types.
    while (type != 0)
    {
        do
        {
            switch (type) //Switch for building constants.
            {
                case 1:     F_HEIGHT=3.9;
                            ADD_MECH_HEIGHT=2.0;
                            F_TO_MECH=20;
                            break;

                case 2:     F_HEIGHT=3.1;
                            ADD_MECH_HEIGHT=1.55;
                            F_TO_MECH=30;
                            break;

                case 3:     F_HEIGHT=3.5;
                            ADD_MECH_HEIGHT=1.75;
                            F_TO_MECH=25;
                            break;
            }

            //Formula to find height.
            height = (stories * F_HEIGHT) + ((F_HEIGHT * ROOF_MULT) + ADD_MECH_HEIGHT) + (ADD_MECH_HEIGHT * (stories / F_TO_MECH));


            if( height <= MAX_HEIGHT )
            {
                if( height >= MIN_HEIGHT )
                {
                    switch (type)
                    {
                        case 1: osum = osum++;

                        case 2: rhsum = rhsum++;

                        case 3: msum = msum++;
                    }
                }
            }
                printf("Enter a building type (1=Office, 2=Residential/Hotel, 3=Mixed-Use, 0=Stop): ");
                scanf("%d", &type);
                printf("Enter the number of stories in the building: ");
                scanf("%d", &stories);

        } //End While statment.
    //print results.
    printf("Building Type   Count \n-------------------\nOffice         %3.0f\nRes/Hotel      %3.0f\nMix-Use        %3.0f\n", osum, rhsum, msum;

    return 0;
}

Вот ошибка, которую я получаю при попытке компилировать: assign04.c: 79: error: Ожидается«while» перед «printf» assign04.c: 82: ошибка: ожидаемое объявление или утверждение в конце ввода

Любая помощь будет принята.

Обновлено:

int main()
{
//variables
int type, stories, F_TO_MECH, osum, rhsum, msum;
double height, ADD_MECH_HEIGHT, F_HEIGHT;
osum=0, rhsum=0, msum=0;

//Find type of building
printf("Enter a building type (1=Office, 2=Residential/Hotel, 3=Mixed-Use, 0=Stop): ");
scanf("%d", &type);

//Switch to differentiate constants of building types.
do
{
    //find the number of stories.
    printf("Enter the number of stories in the building: ");
    scanf("%d", &stories);

    switch (type) //Switch for building constants.
    {
        case 1: F_HEIGHT=3.9;
                    ADD_MECH_HEIGHT=2.0;
                    F_TO_MECH=20;
                    break;

        case 2:     F_HEIGHT=3.1;
                    ADD_MECH_HEIGHT=1.55;
                    F_TO_MECH=30;
                    break;

        case 3: F_HEIGHT=3.5;
                    ADD_MECH_HEIGHT=1.75;
                    F_TO_MECH=25;
                    break;
    }

    //Formula to find height.
    height = (stories * F_HEIGHT) + ((F_HEIGHT * ROOF_MULT) + ADD_MECH_HEIGHT) + (ADD_MECH_HEIGHT * (stories / F_TO_MECH));


    if( height <= MAX_HEIGHT )
    {
        if( height >= MIN_HEIGHT )
        {
            switch (type)
            {
                case 1: osum = osum++;

                case 2: rhsum = rhsum++;

                case 3: msum = msum++;
            }
        }
    }

} while (type != 0); //End While statment.

//print results.
printf("Building Type   Count \n-------------------\nOffice         %3.0f\nRes/Hotel      %3.0f\nMix-Use        %3.0f\n", osum, rhsum, msum;

return 0;
}

Ответы [ 3 ]

1 голос
/ 24 сентября 2010

A цикл while имеет вид:

while(condition)
{
    body of code
}

И цикл do while имеет вид:

do
{
    body of code
} while(condition);

Разница в том, что цикл do while гарантирует тело телацикл будет выполнен по крайней мере один раз.

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

1 голос
/ 24 сентября 2010

Ваши брекеты не сбалансированы;вам не хватает конечной скобки.Похоже, вам не хватает конца вашего do предложения.

Также обратите внимание, что, поскольку ваши операторы scanf находятся вне какого-либо цикла, ваш вопрос будет задан только один раз.Вам нужно будет спросить пользователя внутри цикла.Вы также можете, скорее всего, избежать двух вложенных (do и while) циклов;одного должно быть достаточно.

0 голосов
/ 24 сентября 2010
while (type != 0)
{
    do
    {

Я не вижу } while (condition);, который соответствует do.

Кроме того, это не относится к вашей ошибке компиляции, но вам следует избегать использования scanf, если вы не знаете, что делаете: http://c -faq.com / stdio / scanfprobs.html

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