简单的 C 程序错误..无法解决
Simple C Program Error..Can't resolve it
我正在尝试使用 srand() 在 C 中生成随机数。我想生成从 1 到 25 的数字而不重复,所以我实现了以下程序。
#include <stdio.h>
#include <time.h>
int main()
{
int i=0,n,a[25]={0},b[25]={0},cntr=0;
srand(time(NULL));
while(cntr!=25)
{
n=rand()%26;
if(n!=9)
{
if(a[n]!=1)
{
a[n]=1;
printf("%d ",n);
b[i]=n;
printf("%d\n",b[i]);
cntr++;
i++;
}
}
}
for(i=0;i<25;i++)
{
printf("%d ",b[i]);
}
return 0;
}
现在有个奇怪的问题。当我在生成随机数的循环中打印数组 b 时,它会打印正确的数字。但是当我在循环外打印它时,数组 b 的第一个元素变为 1,我在随机数中得到重复值 1。如果有人能帮助找出程序中的错误,我将不胜感激。
这是我提供程序输出的 link ideone:Ideone Link
您声明了 a[25]
,但您访问了自 n=rand()%26;
以来的 26 个元素中的任何一个,因此改为声明
int i=0,n,a[26]={0},b[26]={0},cntr=0;
顺便说一句,使用所有警告和调试信息进行编译(例如 gcc -Wall -Wextra -g
)。然后使用调试器 (gdb
)。 watchpoint 会有帮助。
there are several little oops in the posted code.
the following corrects those oops
#include <stdio.h>
#include <stdlib.h> // srand(), rand()
#include <time.h> // time()
int main()
{
int i=0; // generated number counter
int n; // generated number
int a[25]={0}; // tracks which numbers have been generated
int b[25]={0}; // random array of numbers 1...25
srand(time(NULL));
while(i<25) // correct loop termination
{
n=rand()%25+1; // yields 0...24 +1 gives 1...25
if(a[n]!=1)
{ // then, number not previously generated
a[n]=1; // indicate number generated
printf("%d ",n); // echo number
// save number in current location in array 'b'
b[i]=n;
printf("%d\n",b[i]); // echo number again
i++; // step offset into array 'b' (and loop counter)
} // end if
} // end while
for(i=0;i<25;i++)
{
printf("%d ",b[i]);
} // end for
return 0;
} // end function: main
我正在尝试使用 srand() 在 C 中生成随机数。我想生成从 1 到 25 的数字而不重复,所以我实现了以下程序。
#include <stdio.h>
#include <time.h>
int main()
{
int i=0,n,a[25]={0},b[25]={0},cntr=0;
srand(time(NULL));
while(cntr!=25)
{
n=rand()%26;
if(n!=9)
{
if(a[n]!=1)
{
a[n]=1;
printf("%d ",n);
b[i]=n;
printf("%d\n",b[i]);
cntr++;
i++;
}
}
}
for(i=0;i<25;i++)
{
printf("%d ",b[i]);
}
return 0;
}
现在有个奇怪的问题。当我在生成随机数的循环中打印数组 b 时,它会打印正确的数字。但是当我在循环外打印它时,数组 b 的第一个元素变为 1,我在随机数中得到重复值 1。如果有人能帮助找出程序中的错误,我将不胜感激。
这是我提供程序输出的 link ideone:Ideone Link
您声明了 a[25]
,但您访问了自 n=rand()%26;
以来的 26 个元素中的任何一个,因此改为声明
int i=0,n,a[26]={0},b[26]={0},cntr=0;
顺便说一句,使用所有警告和调试信息进行编译(例如 gcc -Wall -Wextra -g
)。然后使用调试器 (gdb
)。 watchpoint 会有帮助。
there are several little oops in the posted code.
the following corrects those oops
#include <stdio.h>
#include <stdlib.h> // srand(), rand()
#include <time.h> // time()
int main()
{
int i=0; // generated number counter
int n; // generated number
int a[25]={0}; // tracks which numbers have been generated
int b[25]={0}; // random array of numbers 1...25
srand(time(NULL));
while(i<25) // correct loop termination
{
n=rand()%25+1; // yields 0...24 +1 gives 1...25
if(a[n]!=1)
{ // then, number not previously generated
a[n]=1; // indicate number generated
printf("%d ",n); // echo number
// save number in current location in array 'b'
b[i]=n;
printf("%d\n",b[i]); // echo number again
i++; // step offset into array 'b' (and loop counter)
} // end if
} // end while
for(i=0;i<25;i++)
{
printf("%d ",b[i]);
} // end for
return 0;
} // end function: main