日期:2014-05-16  浏览次数:20868 次

用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,我这里用的是bash
echo "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);
}