如何更改 scanf("%d",&variable) 以从 C 中的命令行接收 argv
How can I change a scanf("%d",&variable) to receive an argv from the command line in C
我正在尝试修改程序的一部分,该程序目前在运行时接受用户输入并将响应保存到对变量的引用,而是让它在编译时将响应作为 argv[] 获取。我可以从 argv 获取响应,但我不确定如何保留变量引用功能。
原代码如下:
printf("\n Enter Variable : ");
scanf("%d",&variable);
输出:
PID 突发到达
0 0 12
1 2 4
2 3 1
3 4 2
输入量子时间:5
0 2 3 3 7 1 9
平均等待时间 = 0.00
平均周转时间 = 2.25。
这是我尝试过的:
variable = argv[1];
输出:
0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1
并且:
&variable = argv[1];
另外:
(int*)&variable = argv[1];
第一次尝试通过命令行输入编译运行,但程序的输出与原来的broken/different不同。第二次和第三次尝试给出了关于使用 & 作为左操作数的 gcc 错误。有谁知道如何使用 argv[] 而不是 scanf() 来模仿原始功能?
scanf
正在读取字符串并将其转换为整数(%d
)。当您使用 argv[1]
时,您只有字符串,但尚未将其转换为整数。您需要使用 atoi
或 strtol
之类的函数,例如:
variable = strtol(argv[1], NULL, 10);
或者,正如@JohnBollinger 正确指出的那样,sscanf 也有效:
sscanf(argv[1], "%d", &variable);
如果您尝试将命令行参数转换为整数,那么我认为您正在寻找的功能在 atoi
或 strtol
中。但是 scanf
的近乎替代品是 sscanf
,它从字符串而不是标准输入中读取。
sscanf(argv[1], "%d", &variable);
您第一次尝试失败的原因是因为您真正在做的是将 char*
指针转换为整数。它实际上并不是在读取字符串的内容。您看到指针的值转换为 int
.
你的另外两个没有工作,因为 &variable
不是左值,不能分配给。
我正在尝试修改程序的一部分,该程序目前在运行时接受用户输入并将响应保存到对变量的引用,而是让它在编译时将响应作为 argv[] 获取。我可以从 argv 获取响应,但我不确定如何保留变量引用功能。
原代码如下:
printf("\n Enter Variable : ");
scanf("%d",&variable);
输出:
PID 突发到达
0 0 12
1 2 4
2 3 1
3 4 2
输入量子时间:5
0 2 3 3 7 1 9
平均等待时间 = 0.00
平均周转时间 = 2.25。
这是我尝试过的:
variable = argv[1];
输出:
0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1 0 2 0 3 0 1
并且:
&variable = argv[1];
另外:
(int*)&variable = argv[1];
第一次尝试通过命令行输入编译运行,但程序的输出与原来的broken/different不同。第二次和第三次尝试给出了关于使用 & 作为左操作数的 gcc 错误。有谁知道如何使用 argv[] 而不是 scanf() 来模仿原始功能?
scanf
正在读取字符串并将其转换为整数(%d
)。当您使用 argv[1]
时,您只有字符串,但尚未将其转换为整数。您需要使用 atoi
或 strtol
之类的函数,例如:
variable = strtol(argv[1], NULL, 10);
或者,正如@JohnBollinger 正确指出的那样,sscanf 也有效:
sscanf(argv[1], "%d", &variable);
如果您尝试将命令行参数转换为整数,那么我认为您正在寻找的功能在 atoi
或 strtol
中。但是 scanf
的近乎替代品是 sscanf
,它从字符串而不是标准输入中读取。
sscanf(argv[1], "%d", &variable);
您第一次尝试失败的原因是因为您真正在做的是将 char*
指针转换为整数。它实际上并不是在读取字符串的内容。您看到指针的值转换为 int
.
你的另外两个没有工作,因为 &variable
不是左值,不能分配给。