Вопрос по Си


Re2sgsII

Пользователь
Форумчанин
Регистрация
06.10.2015
Сообщения
45
Репутация
3
У меня такой вопрос ,почему происходит циклический цикл while
Код:
#include <stdio.h>
#define PRIVETSTVIE "Здравствуйте !"

int spasibo ();
int main ()

{
    float chek, zdacha;
    int svoi ;
    printf("%s \n" ,PRIVETSTVIE);
    printf("У вас по чеку \n");
    scanf("%f", &chek);
    printf("Сколько у вас наличных ? \n");
    scanf("%d", &svoi);
    while ( svoi > chek)
    {

        printf("Если наличные %d больше суммы по чеку %.2f то %d > %.2f \n",svoi ,chek,svoi, chek );
        printf("Если наличные %d меньше суммы по чеку %.2f то %d < %.2f \n",svoi ,chek,svoi, chek );
        printf("Если наличные %d равно суммы по чеку %.2f то %d = %.2f \n",svoi ,chek,svoi, chek );

    }
    zdacha = svoi - chek ;
    printf("Теперь посчитаем какая у вас получилась сдача %d - %.2f = %.2f \n\n", svoi ,chek ,zdacha);
    spasibo();
    return 0;
}
int spasibo ()
{
    printf("Спасибо за покупку ! \n");
    printf("Приходите еще !");
    return 0;
}
Вот сам ответ
Код:
суммы по чеку 400.00 то 500 < 400.00
Если наличные 500 равно суммы по чеку 400.00 то 500 = 400.00
Если наличные 500 больше суммы по чеку 400.00 то 500 > 400.00
Если наличные 500 меньше суммы по чеку 400.00 то 500 < 400.00
Если наличные 500 равно суммы по чеку 400.00 то 500 = 400.00
Если наличные 500 больше суммы по чеку 400.00 то 500 > 400.00
Если наличные 500 меньше суммы по чеку 400.00 то 500 < 400.00
Если наличные 500 равно суммы по чеку 400.00 то 500 = 400.00
Если наличные 500 больше суммы по чеку 400.00 то 500 > 400.00
Если наличные 500 меньше суммы по чеку 400.00 то 500 < 400.00
Если наличные 500 равно суммы по чеку 400.00 то 500 = 400.00
Если наличные 500 больше суммы по чеку 400.00 то 500 > 400.00
Если наличные 500 меньше суммы по чеку 400.00 то 500 < 400.00
Если наличные 500 равно суммы по чеку 400.00 то 500 = 400.00
Если наличные 500 больше суммы по чеку 400.00 то 500 > 400.00
Если наличные 500 меньше суммы по чеку 400.00 то 500 < 400.00
Если наличные 500 равно суммы по чеку 400.00 то 500 = 400.00
Если наличные 500 больше суммы по чеку 400.00 то 500 > 400.00
Если наличные 500 меньше суммы по чеку 400.00 то 500 < 400.00
Если наличные 500 равно суммы по чеку 400.00 то 500 = 400.00
Если наличные 500 больше суммы по чеку 400.00 то 500 > 400.00
Если наличные 500 меньше суммы по чеку 400.00 то 500 < 400.00
Если наличные 500 равно суммы по чеку 400.00 то 500 = 400.00
Если наличные 500 больше суммы по чеку 400.00 то 500 > 400.00
Если наличные 500 меньше суммы по чеку 400.00 то 500 < 400.00
Если наличные 500 равно суммы по чеку 400.00 то 500 = 400.00
Если наличные 500 больше суммы по чеку 400.00 то 500 > 400.00
Если наличные 500 меньше суммы по чеку 400.00 то 500 < 400.00
Если наличные 500 равно суммы по чеку 400.00 то 500 = 400.00
Если наличные 500 больше суммы по чеку 400.00 то 500 > 400.00
Если наличные 500 меньше суммы по чеку 400.00 то 500 < 400.00
Если наличные 500 равно суммы по чеку 400.00 то 500 = 400.00
Если наличные 500 больше суммы по чеку 400.00 то 500 > 400.00
Если наличные 500 меньше суммы по чеку 400.00 то 500 < 400.00
Если наличные 500 равно суммы по чеку 400.00 то 500 = 400.00
Если наличные 500 больше суммы по чеку 400.00 то 500 > 400.00
Если наличные 500 меньше суммы по чеку 400.00 то 500 < 400.00
Если наличные 500 равно суммы по чеку 400.00 то 500 = 400.00
Если наличные 500 больше суммы по чеку 400.00 то 500 > 400.00
Если наличные 500 меньше суммы по чеку 400.00 то 500 < 400.00
Если наличные 500 равно суммы по чеку 400.00 то 500 = 400.00
Если наличные 500 больше суммы по чеку 400.00 то 500 > 400.00
Если наличные 500 меньше суммы по чеку 400.00 то 500 < 400.00
Если наличные 500 равно суммы по чеку 400.00 то 500 = 400.00
Если наличные 500 больше суммы по чеку 400.00 то 500 > 400.00
Если наличные 500 меньше суммы по чеку 400.00 то 500 < 400.00
Если наличные 500 равно суммы по чеку 400.00 то 500 = 400.00
Если наличные 500 больше суммы по чеку 400.00 то 500 > 400.00
Если наличные 500 меньше суммы по чеку 400.00 то 500 < 400.00
Если наличные 500 равно суммы по чеку 400.00 то 500 = 400.00
Если наличные 500 больше суммы по чеку 400.00 то 500 > 400.00
Если наличные 500 меньше суммы по чеку 400.00 то 500 < 400.00
Если наличные 500 равно суммы по чеку 400.00 то 500 = 400.00
Если наличные 500 больше суммы по чеку 400.00 то 500 > 400.00
Если наличные 500 меньше суммы по чеку 400.00 то 500 < 400.00
Если наличные 500 равно суммы по чеку 400.00 то 500 = 400.00
и так до бесконечности ,такое состояние складывается ,где то я не правильно написал
 

Re2sgsII

Пользователь
Форумчанин
Регистрация
06.10.2015
Сообщения
45
Репутация
3
Немного изменил код программы ,хоть и определяет больше ,меньше либо равно ,но все равно идет циклический ответ
Код:
#include <stdio.h>
#define PRIVETSTVIE "Здравствуйте !"

int spasibo ();
int main ()

{
    float chek, zdacha;
    int svoi ;
    printf("%s \n" ,PRIVETSTVIE);
    printf("У вас по чеку \n");
    scanf("%f", &chek);
    printf("Сколько у вас наличных ? \n");
    scanf("%d", &svoi);
    while ( svoi > chek)
    {
        printf("Если наличные %d больше суммы по чеку %.2f то %d > %.2f \n",svoi ,chek ,svoi ,chek );

    }

    while ( svoi < chek)
    {
        printf("Если наличные %d меньше суммы по чеку %.2f то %d < %.2f \n",svoi ,chek ,svoi ,chek );

    }

    while (svoi == chek)
    {
        printf("Если наличные %d равно суммы по чеку %.2f то %d == %.2f \n",svoi ,chek ,svoi ,chek );

    }

    zdacha = svoi - chek ;
    printf("Теперь посчитаем какая у вас получилась сдача %d - %.2f = %.2f \n\n", svoi ,chek ,zdacha);
    spasibo();
    return 0;
}
int spasibo ()
{
    printf("Спасибо за покупку ! \n");
    printf("Приходите еще !");
    return 0;
}
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 174
Репутация
8 310
У вас в теле цикла не меняются переменные svoi, по сему из цикла не выйдет никогда...


Что-бы из цикла выйти, нужно инкрементировать например svoi++, есть еще оператор brake, выход из любого цикла...
 

virt

Уважаемый пользователь
Форумчанин
Регистрация
24.11.2016
Сообщения
704
Репутация
228
while ( svoi > chek). Цикл будет пока выполняется условие, следовательно в цикле нужно декрементировать svoi-- ну и изначально svoi должно-быть больше переменной chek.

Ну а если нужен бесконечный цикл, то достаточно сделать так while (1), или for (; ; ;).
 

Re2sgsII

Пользователь
Форумчанин
Регистрация
06.10.2015
Сообщения
45
Репутация
3
svoi должно-быть больше переменной chek
Даже если больше ,все равно цеклический ответ !
Просто к данной программе цикл не подходит !
Сюда больше подойдет if ,но я пока не дошёл до этого !
 
Последнее редактирование:

virt

Уважаемый пользователь
Форумчанин
Регистрация
24.11.2016
Сообщения
704
Репутация
228
Не мое конечно дело, но по мойму и работу с циклами вам нужно подучить, вайл и репит будет выполнятся пока выполняется условие, пример, если while(a>b), то нужно в цикле инкрементировать a++, обычно пишут слева переменную, а справо константу, но есть кодеры у которых типо стиль свой и они пишут слево константу, а справо переменную, короче встречал такую запись, гы-гы:

while (0<i) тоже и с ифами...i'm crazy

С фором проще,та инкремент в условии, пример for(int i=0; i<10;i++); т.е. цикл десять раз будет !

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

Re2sgsII

Пользователь
Форумчанин
Регистрация
06.10.2015
Сообщения
45
Репутация
3
Дело в том ,что если добавить цикл while в данной программе то при инкрементировании chek++ ,подсчет уже будет другой ,а не тот что нужен
к примеру chek введу 456.23 а svoi 500 ,то при икрементировании chek++ будет ответ 0.23 ,а не 43.77 вот и вся разница .
Но есть другой вариант использовать false ( лож ) и true ( истина ) вот тогда и будет правильный ответ ,но это я помню по php надеюсь есть и в СИ
 
Последнее редактирование:

Re2sgsII

Пользователь
Форумчанин
Регистрация
06.10.2015
Сообщения
45
Репутация
3
Приветствую всех !
У меня такой вопрос
Код:
#include <stdio.h>
#define PRIVETSTVIE "Здравствуйте !"

int spasibo ();
int main()
{
    float zdacha;
    float svoi, check;
    printf("%s \n", PRIVETSTVIE);
    printf("Сумма по чеку составляет \n");
    scanf("%f", &check);
    printf("Введите сумму наличных \n");
    scanf("%f", &svoi);
    do
    {
        printf("Введите сумму наличных еще раз \n");
        scanf("%f", &svoi);
        printf("У вас достаточно денег для покупки \n");
    } while (svoi < check);
    zdacha = svoi - check;
    printf("Давайте теперь посчитаем какая будет сдача %.2f - %.2f = %.2f \n\n" ,svoi , check, zdacha);
    spasibo();
    return 0;
}
int spasibo ()
{
    printf("Спасибо за покупку ! \n");
    printf("Приходите еще !");
    return 0;
}
так программа работает ,но стоит только сделать значение суммы наличных меньше чем по чеку ,программа будет просить еще раз ,пока я не введу больше суммы по чеку ,почему так происходит ?
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 174
Репутация
8 310
У вас цикл while (svoi < check); будет работать пока свои меньше чека, ну всё верно, если свои больше чека, то выйдите из цикла и сможите оплатить покупку, иначе зациклитесь, пока сумма наличных не привысит сумму чека, либо не будет равно сумме чека...:)
 

Re2sgsII

Пользователь
Форумчанин
Регистрация
06.10.2015
Сообщения
45
Репутация
3
У вас цикл while (svoi < check); будет работать пока свои меньше чека, ну всё верно, если свои больше чека, то выйдите из цикла и сможите оплатить покупку, иначе зациклитесь, пока сумма наличных не привысит сумму чека, либо не будет равно сумме чека...:)
Вот теперь допер спасибо
 
Верх Низ