#include<stdio.h>
#include<math.h>
int main(int argc, char **argv){
// read in the command-line argument
double x,c;
double epsilon = 1e-15; // relative error tolerance
double t ; // estimate of the square root of c
//scanf("%lf",&t);
t=**argv-'0';
printf("%lf ",t);
c=t;
// repeatedly apply Newton update step until desired precision is achieved
while (fabs(t - c/t) > epsilon*t) {
t = (c/t + t) / 2.0;
}
// print out the estimate of the square root of c
printf("%lf",t);
return 0;
}
在这个程序中,我想用命令行参数运行。我怎么能这样做?
答案 0 :(得分:2)
命令行参数的数量在argc
中。每个参数都在argv[0]
,argv[1]
等。传统上,argv[0]
包含可执行文件的名称。
答案 1 :(得分:2)
打开终端(命令行)并输入“gcc nameOfFile.c argument1 argument2” 不要输入引号。您键入的每个参数都将传递给您的程序,并可由argv [0],argv [1]等访问
答案 2 :(得分:2)
使用scanf
代替sscanf
(对标准输入进行操作),对字符串进行操作。
那就是
sscanf(argv[1], "%lf", &t);
扫描第一个命令行参数。
答案 3 :(得分:2)
看起来您想要将double值传递给您的程序。但是您正在使用**argv
来检索从命令行传递的double。但是**argv
实际上只是一个字符。
您需要做的是使用atof()
将字符串转换为double。
t = atof(argv[1]); // argv[1] is the 1st parameter passed.
另一个潜在的问题是:fabs(t - c/t)
如果t
变为0,您可能会面临除零。
答案 4 :(得分:2)
要从终端运行命令行参数,您需要使用此语法
gcc filename.c
./a.out "your argument her without quotation mark"
答案 5 :(得分:1)
1)你需要使用argc(#/命令行参数)和argv [](参数本身)。
2)在访问命令行变量之前检查argc总是一个好主意(即确保在尝试使用它之前确实获取命令行参数)。
3)有几种方法可以将命令行参数(字符串)转换为实数。一般来说,我更喜欢“sscanf()”。
以下是一个例子:
#include<stdio.h>
#include<math.h>
int main(int argc, char **argv){
double x,c;
double epsilon = 1e-15; // relative error tolerance
double t ; // estimate of the square root of c
//scanf("%lf",&t);
if (argc != 2) {
printf ("USAGE: enter \"t\"\n")l
return 1;
}
else if (sscanf (argv[1], "%lf", &t) != 1) {
printf ("Illegal value for \"t\": %s\n", argv[1]);
return 1;
}
printf("%lf ",t);
c=t;
// repeatedly apply Newton update step until desired precision is achieved
while (fabs(t - c/t) > epsilon*t) {
t = (c/t + t) / 2.0;
}
// print out the estimate of the square root of c
printf("%lf",t);
return 0;
}