【问题标题】:Nested for loop array random numbers嵌套for循环数组随机数
【发布时间】:2017-09-03 06:11:11
【问题描述】:

所以我要做的是打印出 7 个随机数,并且循环不应该打印出重复项。 当我尝试调试时,似乎我没有进入我的 if 语句所在的嵌套循环。

我还打印出一个内存值,随机数被复制。

我认为我的第二个嵌套 for 循环有问题,但我不知道是什么,如果有人能看到问题并向我解释我的嵌套第二个循环发生了什么,我将不胜感激。

p>
#include <stdio.h>
#include <time.h>
#define SIZE 35

int main()
{
int number[SIZE];

srand(time(NULL));

for (int i = 1; i < 7; i++)
{
    number[i] = rand() % 35 + 1;
    for (int j = 0; j > i; j++)
    {
        if (number[i] == number[i])
        printf("%d\n", number[i]);
        i--;
    }
}
for (int i = 0; i < 7; i++)
{
    printf("%d\n", number[i]);
}
getchar();

return 0;
}

【问题讨论】:

  • 如果它“没有进入我的嵌套循环”,这不会无缘无故地发生。您应该使用调试器来确定原因(检查变量等)
  • if (number[i] == number[i]) 什么时候会是假的?
  • 旁白:rand() % 35 ==> rand() % SIZE。当数组长度为SIZE (35) 时,幻数7 是什么?您似乎混淆了值的数量及其范围。
  • for (int j = 0; j &gt; i; j++) 如果i 开始于1 并且j 开始于0 什么时候j 会大于i
  • 确实,谢谢,是的,我对这些数字及其范围有点困惑,只是想了解发生了什么。

标签: c arrays for-loop visual-c++ random


【解决方案1】:

对于初学者来说这个循环

for (int j = 0; j > i; j++)

永远不会被执行,因为j 的初始化方式总是小于i

程序可以如下所示

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

#define SIZE    35

int main(void) 
{
    int number[SIZE];
    int n = 7;

    int i = 0;

    srand( ( unsigned int )time( NULL ) );

    while ( i < n )
    {
        int value = rand() % SIZE + 1;

        int j = 0;
        while ( j < i && number[j] != value ) j++;

        if ( j == i ) number[i++] = value;
    }

    for ( i = 0; i < n; i++ ) printf( "%d ", number[i] );
    putchar( '\n' );

    getchar();

    return 0;
}

它的输出可能是

10 21 16 17 26 25 34

【讨论】:

    【解决方案2】:

    您似乎混淆了所需值的数量及其范围。

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    #define SIZE 35
    #define VALS 7
    
    int main(void) {
        int i, j;
        int had[SIZE] = { 0 };          // status array
        srand((unsigned)time(NULL));
        for(i = 0; i < VALS; i++) {
            do {
                j = rand() % SIZE;      // range 0..34
            } while(had[j] != 0);       // until new value had
            had[j] = 1;                 // set status
            printf("%d ", j + 1);       // range 1..35
        }
        return 0;
    }
    

    程序输出:

    33 25 17 28 2 27 10

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-09
      • 2021-07-18
      • 2020-03-25
      • 2021-10-23
      • 1970-01-01
      相关资源
      最近更新 更多