【发布时间】: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>1 ? "ies" : "y") -
@pmg 建议
max_guess != 1因为如果max_guess为零,你会想要0 tries left而不是0 try left.. 实际上我会交换字符串并拥有max_guess == 1但那是风格问题而不是实质问题 - 它只是一个更有吸引力的运营商;-)。您当然可能希望no tries left用no代替零,但这是一个不同的问题。