函数 getopt 的除数数
Number of divisors with the function getopt
我正在做一个程序,它接收一个数字并为您提供除数。
例如
在命令中:
practica -n 30
预期输出:
1,2,3,5,6,10,15,30
我有这个代码:
void divisor(char *temp1);
int main(int argc,char **argv){
int option;
char *n;
while((option =getopt(argc,argv,"n")) !=-1){
switch(option){
case 'n':
n=optarg;
break;
}
}
divisor(n);
}
void divisor(char *temp1){
char f=*temp1;
int n=f-'0';
int a;
a=1;
while (a<n)
{
if(n%a==0)
printf("%d,",a);
a++;
}
a=n;
if(n%a==0)
printf("%d",a);
printf("\b ");
}
我正在使用命令行,程序关闭。
我想,你的 getopt()
调用应该是这样的
while((option =getopt(argc,argv,"n:")) !=-1){ //notice the :
因为您将为该选项提供参数(值)。
就是说,在您的代码中,在 divisor()
函数中,
char f=*temp1;
int n=f-'0';
看起来不对。 temp
是一个 char
指针,取消引用指针只会为您提供第一个 char
存储的值,而预期值 30
不会存储为单个 char
,而是以字典格式存储。
我认为,您可以使用 strtol()
将字典表示法转换为 int
值,例如
int x = strtol(temp, NULL, 0);
我正在做一个程序,它接收一个数字并为您提供除数。 例如 在命令中:
practica -n 30
预期输出:
1,2,3,5,6,10,15,30
我有这个代码:
void divisor(char *temp1);
int main(int argc,char **argv){
int option;
char *n;
while((option =getopt(argc,argv,"n")) !=-1){
switch(option){
case 'n':
n=optarg;
break;
}
}
divisor(n);
}
void divisor(char *temp1){
char f=*temp1;
int n=f-'0';
int a;
a=1;
while (a<n)
{
if(n%a==0)
printf("%d,",a);
a++;
}
a=n;
if(n%a==0)
printf("%d",a);
printf("\b ");
}
我正在使用命令行,程序关闭。
我想,你的 getopt()
调用应该是这样的
while((option =getopt(argc,argv,"n:")) !=-1){ //notice the :
因为您将为该选项提供参数(值)。
就是说,在您的代码中,在 divisor()
函数中,
char f=*temp1;
int n=f-'0';
看起来不对。 temp
是一个 char
指针,取消引用指针只会为您提供第一个 char
存储的值,而预期值 30
不会存储为单个 char
,而是以字典格式存储。
我认为,您可以使用 strtol()
将字典表示法转换为 int
值,例如
int x = strtol(temp, NULL, 0);