用system输出随即数的问题下面的程序没有在文件里生成随即数,文件是空白的,我觉得好像是$RANDOM这个变量没
用system输出随即数的问题
下面的程序没有在文件里生成随即数,文件是空白的,我觉得好像是$RANDOM这个变量没有定义,是不是用system的时候shell变量是没有值的?
- C/C++ code
1 #include<stdio.h> 2 #include<stdlib.h> 3 4 int main(){ 5 6 system("touch filein"); 7 for(int i=0;i<1001;i++) 8 system("echo $RANDOM >> filein"); 9 return 0; 10 11 }[解决办法]
RANDOM 是个环境变量 在shell下确实可以
你换一个环境变量测试一下
[解决办法]
我刚拿楼主的代码运行了,filein里面生成了1001个随机数。
fedora10 + gcc4.3.2
楼主再看看这样是什么结果?
system("echo $RANDOM");
system("echo $HOME");
system("echo $HOME >> filein");
[解决办法]
楼主直接在终端里面运行echo $RANDOM,总会有输出吧。
$ echo $RANDOM
23929
刚看到有人说这个$RANDOM不是变量,而是一个函数。
我这里env输出的环境变量没有$RANDOM
[解决办法]
楼主用的是bash还是dash?
据说在dash里可能没有$RANDOM
[解决办法]
那就调用random()函数生成随机数吧,还可以指定随机函数的种子等, 具体用法见man
[解决办法]
据说ubuntu里面system函数启动的是dash
[解决办法]
唉,弄不明白了。
其实我没用过ubuntu,刚才写的都是乱搜出来的,而且不一定准确。希望不要误导楼主。
[解决办法]
其实你可以自己先写个shell script,然后用system函数调用就成了。
例子:
t.sh
- Perl code
#!/bin/bash #在这里可以指定你的shell,我这里用的是bashecho "Hello,world!"
[解决办法]
system("#/bin/ash echo $RANDOM");
[解决办法]
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
extern int setenv(const char *,const char *,int);
int main(void)
{
char name[] = "RANDOM";
int cur;
system("touch file.lst");
srand(time(0));
if(getenv(name) == NULL)
{
for(int i=0;i<1001;i++)
{
char value[100];
cur=rand();
sprintf(value,"%d",cur);
if(setenv(name,value,1) != 0)
{
printf("error!!\n");
exit(1);
}
system("echo $RANDOM >> file.lst");
}
}
else
{
for(int i=0;i<1001;i++)
system("echo $RANDOM >> file.lst");
}
exit(0);
}
