C 接受主要论点
我正在写一个随机数生成器,我希望在程序内部和外部获取输入。我在主要论点上有困难。这是我的代码(抱歉,有点草率,但我才15岁) 我的问题在于主要功能C 接受主要论点,c,random,command-line-arguments,C,Random,Command Line Arguments,我正在写一个随机数生成器,我希望在程序内部和外部获取输入。我在主要论点上有困难。这是我的代码(抱歉,有点草率,但我才15岁) 我的问题在于主要功能 #include <stdio.h> #include <stdlib.h> #include <time.h> int min; int max; int howMany; int in; int rnd(); void menu(); void getMin(); void getMax(); void get
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int min;
int max;
int howMany;
int in;
int rnd();
void menu();
void getMin();
void getMax();
void getHowMany();
void getNumbers();
void quickRandTut();
void quickRand();
int main(int argc, char **argv[]){
int i;
int x;
srand(time(NULL));
if(argc > 1){
for(i = 0; i != argc; i++){
x = i + 1;
if(argv[i] == "-min") min = argv[x];
else if(argv[i] == "-max") max = argv[x];
else if(argv[i] == "-count") howMany = argv[x];
}
quickRand();
}
else if(argc == 1) menu();
return 0;
}
void menu(){
while(1){
system("clear");
printf("[1]Set Min.\n[2]Set Max.\n[3]Set How Many\n[4]Get Numbers\n[5]Quick Rand\n[6]Exit\n\nWhat would you like to do?\n>>>");
scanf("%d", &in);
if(in == 1) getMin();
else if(in == 2) getMax();
else if(in == 3) getHowMany();
else if(in == 4) getNumbers();
else if(in == 5) quickRandTut();
else if(in == 6) exit(0);
}
}
void getMin(){
int cont = 0;
while(cont == 0){
system("clear");
printf("What is the smallest number you want?\n>>>");
scanf("%d", &min);
if(min < 1){
system("clear");
printf("Your minimum must be at least 1...\n");
sleep(3);
}
else if(min > 0) cont = 1;
}
}
void getMax(){
int cont = 0;
while(cont == 0){
system("clear");
printf("What is the largest number you want?\n>>>");
scanf("%d", &max);
if(max < 1){
system("clear");
printf("Your maximum must be at least 1...\n");
sleep(3);
}
else if(max > 0) cont = 1;
}
}
void getHowMany(){
int cont = 0;
while(cont == 0){
system("clear");
printf("How many numbers would you like?\n>>>");
scanf("%d", &howMany);
if(howMany < 1){
system("clear");
printf("You must get at least 1 number...\n");
sleep(3);
}
else if(howMany > 0) cont = 1;
}
}
void getNumbers(){
int i;
int col = 0;
int num;
system("clear");
if(max < min){
system("clear");
printf("Your maximum must be larger than you minimum...\n");
sleep(3);
menu();
}
else if(max > min){
for(i = 0; i != howMany; i++){
col++;
num = rnd(min, max);
printf("%d. %d\n", col, num);
}
printf("\n\n[1]Continue\n>>>");
scanf("%d", &in);
menu();
}
}
int rnd(int min, int max){
return ((rand() % (max - min)) + min);
}
void quickRandTut(){
system("clear");
printf("You can use DSP's Random Number Generator by giving it external arguments.\n");
printf("You need to give it 3 arguments:\n\t-min #\n\t-max #\n\t-count #\n");
printf("\nHere is an example input and output:\n\nInput:\n\t/RAND -min 1 -max 10 -count 3\nOutput\n\t1. 3\n\t2. 9\n\t3. 4\n");
printf("\n-min #, -max #, and -count # arguments must be given in that order.\n\n[1]Menu\n>>>");
scanf("%d", &in);
menu();
}
void quickRand(){
int col;
int i;
int num;
system("clear");
for(i = 0; i != howMany; i++){
num = rnd(min, max);
printf("%d. %d\n", col, num);
}
}
当我运行它时,我给它以下参数:
/RAND -min 1 -max 100 -count 10
但它什么也没做。请尽可能提供帮助。尝试将
char**argv[]
更改为char*argv[]
并改变argv[x]代码>到*argv[x]代码>任何地方都会出现错误
就是
if(argv[i] == "-min") min = *argv[x];
else if(argv[i] == "-max") max = *argv[x];
else if(argv[i] == "-count") howMany = *argv[x];
这是为了消除错误尝试将char**argv[]
更改为char*argv[]
并改变argv[x]代码>到*argv[x]代码>任何地方都会出现错误
就是
if(argv[i] == "-min") min = *argv[x];
else if(argv[i] == "-max") max = *argv[x];
else if(argv[i] == "-count") howMany = *argv[x];
这是为了消除错误如另一个答案中所述,将char**argv
更改为char*argv[]
,这解决了一件事
其他错误也存在,因为您对字符串和整数一视同仁。您无法使用另一个答案中所述的,=,在C中比较它们,将char**argv
更改为char*argv[]
,这解决了一件事
其他错误也存在,因为您对字符串和整数一视同仁。您无法使用>,=,在C中对它们进行比较哇,这里有很多问题。清理一些东西会有很大帮助:
包括睡眠所需的标题
:
#include <unistd.h>
main()乱七八糟
您需要利用atoi
或strtol
将参数值转换为数值,而您的循环在编写时是不安全的。以下是它似乎需要的更改:
int main(int argc, char **argv){
int i;
// int x;
srand(time(NULL));
if(argc > 2){
for(i = 2; i < argc; i++){
// x = i + 1;
if ( strcmp (argv[i - 1], "-min") == 0 ) min = atoi (argv[i]);
else if (strcmp (argv[i - 1], "-max") == 0 ) max = atoi (argv[i]);
else if (strcmp (argv[i - 1], "-count") == 0 ) howMany = atoi (argv[i]);
}
quickRand();
}
else if(argc == 1) menu();
return 0;
}
int main(int argc,char**argv){
int i;
//int x;
srand(时间(空));
如果(argc>2){
对于(i=2;i
我不知道quickRand()
中的col
应该是什么,但您至少需要在尝试打印它之前将其初始化为某个内容
有了这些更改,您的代码就可以编译,而无需进一步警告。两条规则将有所帮助(1)始终初始化变量,(2)始终编译时至少启用警告(-Wall-Wextra
)。遇到其他问题时,请发表评论。哇,这里有很多问题。清理一些东西会有很大帮助:
包括睡眠所需的标题
:
#include <unistd.h>
main()乱七八糟
您需要利用atoi
或strtol
将参数值转换为数值,而您的循环在编写时是不安全的。以下是它似乎需要的更改:
int main(int argc, char **argv){
int i;
// int x;
srand(time(NULL));
if(argc > 2){
for(i = 2; i < argc; i++){
// x = i + 1;
if ( strcmp (argv[i - 1], "-min") == 0 ) min = atoi (argv[i]);
else if (strcmp (argv[i - 1], "-max") == 0 ) max = atoi (argv[i]);
else if (strcmp (argv[i - 1], "-count") == 0 ) howMany = atoi (argv[i]);
}
quickRand();
}
else if(argc == 1) menu();
return 0;
}
int main(int argc,char**argv){
int i;
//int x;
srand(时间(空));
如果(argc>2){
对于(i=2;i
我不知道quickRand()
中的col
应该是什么,但您至少需要在尝试打印它之前将其初始化为某个内容
有了这些更改,您的代码就可以编译,而无需进一步警告。两条规则将有所帮助(1)始终初始化变量,(2)始终编译时至少启用警告(-Wall-Wextra
)。遇到其他问题时,请发表评论。尝试将char**argv[]
更改为char*argv[]
,它应该是main(int-argc,char*argv[])
只有一个*
,而不是两个。可以是两个*
而没有[]
main(int-argc,char argv)
,这只解决了一半的问题。仍然是说从没有cast的指针生成一个整数你不能比较像C中那样的字符串:)尝试将char**argv[]
更改为char*argv[]
,它应该是main(int-argc,char*argv[])
只有一个*
,而不是两个。如果没有*
[]
)
这只解决了一半的问题。仍然是说从没有强制转换的指针生成整数你不能比较函数“main”中的C:)rand.C中的字符串:rand.C:23:15:警告:不同指针类型的比较缺少强制转换[默认启用]rand.C:23:30:警告:赋值从没有强制转换的指针生成整数[默认启用]rand.c:24:20:警告:不同指针类型的比较缺少强制转换[默认启用]rand.c:24:35:警告:赋值从没有强制转换的指针生成整数[默认启用]rand.c:25:20:警告:不同指针类型的比较缺少强制转换[默认启用]rand.c:25:41:警告:赋值从指针生成整数而不进行强制转换[默认启用]@DarkSun查看user3121023的注释。@DarkSun我的答案将帮助您摆脱语法错误,Kelm的答案将帮助您摆脱逻辑错误
@BhargavRao我们是一个伟大的团队,我们不是吗?@Kelm这是函数“main”中堆栈溢出.rand.c的主要本质:rand.c:23:15:警告:不同指针类型的比较缺少强制转换[默认启用]rand.c:23:30:警告:赋值从点开始生成整数