Базовый цикл сложения c - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь написать код, который добавляет значение - скажем, X - к пользователю, введенному в int, и продолжает позволять пользователю добавлять дополнительные значения int в «X + все ранее введенные значения int» до значения 21 или больше достигается - где код выходит из цикла. Я думал, что это будет простой случай value = value + X, но я где-то ошибаюсь ...

void additionFunction()
{
     int j=0;
     int tot;

     //tot=cat.firstCard+cat.secondCard; is the actual tot value but for simplicity;

     tot=5;

     for(j=0; j+tot<22; j=j+tot)
     {
         printf("Enter next card\n");
         scanf("%d",&j);
     }
}

Я знаю, что это очень простой вопрос, но я застрял в том, что еще можно попробовать. Первоначально он был реализован в цикле if, do, switch в сокращенном виде;

if(cat.firstCard!=11 && cat.secondCard!=11)
{
    do
    {
    switch(tot+j>=4 && tot+j<=8)
    {
        printf("Hit\nEnter next card\n");
        scanf("%d",&j);
        break;
    }
    switch(tot+j==9 && (cat.dealersCard==2 || (cat.dealersCard>=7 && cat.dealersCard<=11)))
    {
        printf("Hit\nEnter next card\n");
        scanf("%d",&j);
        break;
    }
    ...
    switch(tot+j>=17 && tot+j<=21)
    {
        printf("Stand\n");
        j=50;
        break;
    }
    switch(tot+j>21)
    {
        printf("Bust\n");
        j=50;
        break;
    }
    }while(j!=50);
}
else  //etc.

Этот метод тоже не работал. Я знаю, что это просто, но я нигде не могу найти ответ. Было бы здорово, если бы вы ответили за второй случай, но любой ответ приветствуется!

использовать только stdio.h, без глобальных переменных

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Проблема в том, что вы сбрасываете j каждый раз в цикле при вводе пользователем этой строки - scanf("%d",&j);

Это должно исправить это, назначив вход в другую переменную и добавив его к j.

 int j=0,input,tot=5;

 for(j=0; j+tot<22; j=j+input)
 {
     printf("j=%d tot=%d\n",j,tot);
     printf("Enter next card\n");
     scanf("%d",&input);
 }
0 голосов
/ 08 мая 2018

Вам нужно увеличить tot вместо j.Я думаю, что это может быть понятнее, как это:

void additionFunction(void)
{
    int tot = 5;

    while (tot < 22)
    {
        int j;
        printf("Enter next card\n");
        if (scanf("%d", &j) != 1)
            break;
        tot += j;
        printf("Read: %d - total = %d\n", j, tot);
     }
}

Я сохранил ваши имена переменных, но их можно улучшить (tottotal; jvalue, возможно),Я добавил второй printf(), чтобы определить, что происходит лучше (но есть место и для его улучшения, хотя также можно использовать отладчик для просмотра информации).Я подозреваю, что вам нужно будет проделать дополнительную работу в цикле или вернуть значение из функции, но это нормально, как MCVE ( Минимальный, Полный, Проверяемый пример ).

...