【问题标题】:Conditional Statement for Random Number Generator in a range (in c)范围内随机数生成器的条件语句(在 c 中)
【发布时间】:2019-11-16 01:36:24
【问题描述】:

我想要完成的是:

用户尝试了 3 次。

请猜数字。(错误)

你猜错了。

你的数字太高(高或低)。

您还剩 2 个 tr(ies)。 (用户猜错了)

你猜错了。

你的数字太高(高或低)。

您还剩 1 个 tr(y)。

如上。如果用户离开了更多,我正在尝试更改“tr”之后的字母 比 1 它的 "ies" 和 "y" 为一个。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
    int num, guess, tries = 0;
    srand(time(0)); /* seed random number generator */
    num = rand() % 20 + 0; /* random number between 1 and 100 */
    int max_guess=3;
    printf("Guess My Number Game\n\n");

    do
    {
        printf("Enter a guess between 0 and 20 : ");
        scanf("%d", &guess);
        tries++;

        if (guess > num)
        {
            printf("Too high!");
            printf("You have %d tries left.\n\n",max_guess--);
        }
        else if (guess < num)
        {
            printf("Too low!");
            printf("You have %d tr%c left.\n\n",max_guess--,(tries=1 ? y));
        }
        else
        {
            printf("\nCorrect! You got it in %d guesses!\n", tries);
        }

    }
      while (guess != num);

    return 0;
}

如何提高 printf 中条件语句的可读性。

【问题讨论】:

  • 一个可能的解决方案是添加一个函数,该函数接受数量、尝试次数以及它是高还是低,然后打印出解决方案。如果剩余的尝试次数为 1,则打印 'try';否则打印“尝试”。您也可以将它与三元运算符内联 - 我会看看它。
  • printf("...tr%s...", max_guess&gt;1 ? "ies" : "y")
  • @pmg 建议max_guess != 1 因为如果max_guess 为零,你会想要0 tries left 而不是0 try left .. 实际上我会交换字符串并拥有max_guess == 1 但那是风格问题而不是实质问题 - 它只是一个更有吸引力的运营商;-)。您当然可能希望 no tries leftno 代替零,但这是一个不同的问题。

标签: c conditional-statements


【解决方案1】:

您可以在 print 函数中使用三元运算符,根据剩余的尝试次数选择性地打印“tries”或“try”。

#include <stdio.h>

int main(void) {
  int tries = 3;
  for(int tries = 3; tries >= 0; tries--) {
    printf("%d %s left.\n", tries, 
      tries != 1 ? "tries" : "try"
    );
  }
  return 0;
}

还剩 3 次尝试。
还剩 2 次尝试。
1 次尝试离开。
还剩 0 次尝试。

tries != 1 ? "tries" : "try" 表示“如果 (?) 尝试!= 1,则返回字符串“尝试”,否则 (:) 则返回字符串“尝试”。

【讨论】:

  • 如果他的目标是可读性,为什么要fprintf(stdout... 而不是printf(...?另外为了可读性,我建议:printf( "%d %s left.\n", tries, tries == 1 ? "try" : "tries" ) ;。单词的拆分节省很少,并且在可读性上花费很多。额外的括号也是多余的。如果你想让表达“脱颖而出”,也许可以将它放在自己的新行中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-20
  • 2010-12-24
  • 2014-02-25
  • 1970-01-01
  • 1970-01-01
  • 2019-08-06
  • 2011-05-09
相关资源
最近更新 更多