【问题标题】:C Programming - Lotto SimulationC 编程 - 乐透模拟
【发布时间】:2015-03-10 19:17:45
【问题描述】:

我正在制作一个程序来模拟乐透。数字可以在 1-45 之间,但抽出的数字必须是唯一的。程序在此范围内生成 6 个随机数并将它们添加到数组中。用户输入他们的号码,程序会检查这两个数组是否相同,即他们是否中了乐透。

我不知道为什么,但我的程序不会生成随机数,也不会检查它们是否相等。

> #include <stdio.h>
> #include <stdlib.h>
> 
> int main(int argc, const char * argv[]) {
>     // insert code here...
>     int lotto[6];
>     int i;
> 
>     int user[6];
>     for(i=0; i<6; i++){
>         printf("Please enter a number between 1 and 45: \n");
>         scanf("%d", &user[i]);
>     }
>     printf("User's numbers: \n");
>     for(i=0; i<6; i++){
>         printf("%d \n", user[i]);
>     }
>     printf("Generate 6 Random Lotto Numbers \n");
>     
>     
>     for(i=0; i<6;i++){
>          lotto[i] = rand() % 45 + 1;
>      }
>     for(i=0; i<6; i++){
>         printf("%d \n",lotto[i]);
>      }
> 
>     
>     
>     
>      for(i=0; i<6; i++){
>          if(lotto[i] != user[i]){
>              printf("Hard luck. Try again next time.");
>              break;
>          }
>          else{
>              printf("You've won the lotto!");
>          }
>      
>     }
>      return 0; }

向我指出了代码中的一些错别字。我还添加了一段代码,但我将对其进行评论,因为我不确定这是否是我想做的事情所需的正确方法。

任何帮助都会非常有帮助,我将更加感激。 :)

【问题讨论】:

  • 为什么你的生成器循环中有一个`scanf`???
  • 欢迎来到本站。您是否熟悉调试器以逐步跟踪您的程序并查看会发生什么?
  • 您似乎正在使用从STDIN 扫描的输入覆盖您的随机数。
  • 是的,我知道。我忘了取出 scanf 部分。
  • 我把它拿出来,现在它可以很好地生成随机数。但是我不知道如何检查数字是否可以重复或如何阻止用户输入大于 50 和小于 1 的数字。 for(i=0; i45){ printf("请输入有效数字。");一世 - ; } else{ scanf("%d", &user[i]); }

标签: c arrays for-loop random


【解决方案1】:

检查乐透最简单的解决方案是对两个数组进行排序,然后您在用户 [i] 和乐透 [i] 之间的错误比较就会起作用

为了避免重复,需要一个新函数,它将新值、数组、最大索引作为参数。这需要检查第一个(最大 index-1)元素中是否存在新值。您需要在创建乐透数据的所有 6 次迭代中以及在每次 scanf 之后检查用户输入数据的重复项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多