如何更改 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] 时,您只有字符串,但尚未将其转换为整数。您需要使用 atoistrtol 之类的函数,例如:

variable = strtol(argv[1], NULL, 10);

或者,正如@JohnBollinger 正确指出的那样,sscanf 也有效:

sscanf(argv[1], "%d", &variable);

如果您尝试将命令行参数转换为整数,那么我认为您正在寻找的功能在 atoistrtol 中。但是 scanf 的近乎替代品是 sscanf,它从字符串而不是标准输入中读取。

sscanf(argv[1], "%d", &variable);

您第一次尝试失败的原因是因为您真正在做的是将 char* 指针转换为整数。它实际上并不是在读取字符串的内容。您看到指针的值转换为 int.

你的另外两个没有工作,因为 &variable 不是左值,不能分配给。