【问题标题】:Basic addition loop c基本加法循环 c
【发布时间】:2018-10-17 20:22:42
【问题描述】:

我正在尝试编写一个代码,它将一个值 - 比如 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,没有全局变量

【问题讨论】:

  • 在第一个代码中,您需要增加tot,而不是j,不是吗?或者你需要读入tot 而不是j,但是这些名字,就它们的意义而言,是错误的。您确实还需要检查来自scanf() 的返回值,因此您可以发现用户输入了 K(代表 King)而不是 9。
  • 这是switch 的一种奇怪的写法:)
  • 这是我被教导的方式,通常的方式是什么?
  • 这不是我被教导的方式。那是一个深夜......

标签: c stdio


【解决方案1】:

您需要增加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 (Minimal, Complete, Verifiable Example) 是可以的。

【讨论】:

    【解决方案2】:

    问题是你每次都在循环中重置 j 用户输入这一行 - scanf("%d",&amp;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);
     }
    

    【讨论】:

    • 你应该在使用之前检查scanf()的返回值。我不确定第三个变量是否真的有必要,但你所写的基本上可以工作——假设输入是有效的。
    • 对,这绝对不是最好的,假设输入是有效的,只是从原始代码中解决问题......感谢您指出。
    猜你喜欢
    • 2013-09-06
    • 1970-01-01
    • 2016-10-12
    • 2020-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-25
    • 1970-01-01
    相关资源
    最近更新 更多