【问题标题】:Program start-over function程序重新启动功能
【发布时间】:2020-10-13 12:27:11
【问题描述】:

我是 C 编程的初学者,如果我能获得一些关于如何设置程序重新启动的提示,我将不胜感激?我目前正在构建一个猜谜游戏,用户有 10 次尝试猜测随机提供的密码。我希望程序能够从一开始就为用户提供新一轮游戏(尝试编号 1 猜数字:),即重新运行程序。

这是程序:

#include 
#include 

#defineguessLimit 10

主函数()
{

    int secret_number;
    整数猜测;
    intguessCount = 0;
    int outofGuesses = 0;
    诠释我;

    setbuf(标准输出,NULL);

    srand(时间(0));
    secret_number = rand() % 100;

    printf("\n---猜猜密码---\n");


    for(i=1;i 秘密号码){
            printf("对不起,数字太大了。\n");
        }
        如果(我==10){
            printf("尝试失败");
        }
        如果(猜测>99 || 猜测
    

【问题讨论】:

  • 您想了解什么是“循环”。它们是您在程序中重复内容的方式:learn-c.org/en/For_loops
  • 他们已经有一个for 循环——所以大概他们了解这些是如何工作的。我建议使用while 循环。
  • 将整个游戏的代码放在另一个函数中,并从main() 循环调用。除了应该只调用一次的srand(time(0));
  • 附带说明 - 如果您提供“更高/更低”的反馈,则给用户 10 次猜测 1-100 范围内的数字的机会过于慷慨。如果我的计算是正确的,那么二进制搜索最多会在log2(100)=6.64... 次尝试中找到答案。换句话说,如果你知道自己在做什么,你应该能够在不超过 7 次尝试中找到答案。二进制搜索当然是通过猜测边界之间的数字然后根据您的反馈调整边界来工作的。

标签: c


【解决方案1】:

您可以将 for 循环封装在 while 循环中,并让条件成为来自控制台的输入以指示用户已完成播放。

【讨论】:

    【解决方案2】:

    最好的做法是将主要例程包装在while loop 中,并使用条件来确定您是要重复还是退出循环。在这种情况下,do while 构造可以很好地工作。只需询问用户是否想在循环结束时再次播放。如果没有,则退出。否则,重复代码。请注意不要在循环中调用 srand(time(0)) 或重置随机序列。

    #include <stdlib.h>
    #include <time.h>
    
    #define guessLimit 10
    
    int main()
    {
    
        int secret_number;
        int guess;
        int guessCount = 0;
        int outofGuesses = 0;
        int i;
        char play;
    
        srand(time(0));
    
        do {
            secret_number = rand() % 100;
    
            printf("\n---GUESS THE SECRET NUMBER---\n");
    
    
            for(i=1; i < 11; i++){
            printf("Attempt number %d Guess a number: ", i);
            scanf("%d", &guess);
            if(guess == secret_number){
                printf("Correct number!\n");
                break;
            }
    
            if(guess < secret_number){
                printf("sorry, number too small.\n");
            }
            else if(guess > secret_number){
                printf("Sorry, number too big.\n");
            }
            if(i==10){
                printf("Out of Attempts");
            }
            if(guess>99 || guess<0){
                printf("Out of Range.\n");
               }
            }
            printf("\nPlay again? (y/n): ");
            scanf(" %c", &play);
        } while (play == 'y');
    
        return 0;
    }
    

    附带说明 - 如果您提供“更高/更低”的反馈,给用户 10 次猜测 1-100 范围内的数字的机会就太慷慨了。如果我的计算是正确的,二分查找最多会在log2(100)=6.64... 次尝试中找到答案。换句话说,如果你知道自己在做什么,你应该能够在不超过 7 次尝试中找到答案。二进制搜索当然是通过猜测边界之间的数字,然后根据您的反馈调整边界。

    【讨论】:

      猜你喜欢
      • 2022-01-20
      • 1970-01-01
      • 2021-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多