【发布时间】:2011-11-30 09:58:19
【问题描述】:
我遇到的问题是我必须用 c 编写一个 hanois 塔游戏,并且环数的输入不能在程序中,但代码必须读取执行中的环数。
示例: ./hanoitower 3
并且代码应该将 3 作为输入。我该怎么做?
【问题讨论】:
我遇到的问题是我必须用 c 编写一个 hanois 塔游戏,并且环数的输入不能在程序中,但代码必须读取执行中的环数。
示例: ./hanoitower 3
并且代码应该将 3 作为输入。我该怎么做?
【问题讨论】:
命令行参数通过 C 程序的 main() 函数作为字符串传播。
在int main(int argc, char *argv[]) 中,argc 是参数的数量,而 argv 是包含参数的字符串数组。请注意,程序名称本身始终是第一个“参数”。
由于参数作为字符串传递,您可能需要将3 转换为整数,这可以通过atoi 函数完成。这是一个开始:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int rings;
if(argc != 2) {
printf("Usage: %s number-of-rings\n",argv[0]);
return 1;
}
rings = atoi(argv[1]);
printf("Using number-of-rings = %d\n", rings);
...
return 0;
}
【讨论】:
这会比在这里提问要快得多。不要忘记阅读 C 编译器(可能是 GCC)、build automation 工具(例如 GNU make 或 ninja)和调试器(可能是 GDB)的文档。如果您在 Linux 上编写代码,请阅读Advanced Linux Programming 和syscalls(2),以及GNU glibc(或musl-libc,如果您使用它)的文档。
然而,程序参数作为一个空终止的字符串数组提供给主函数,通常声明为
int main (int argc, char**argv) { /*...*/ }
如果您使用./hanoistower 3 运行您的程序并且您的hanoistower.c 是您的源代码(您需要在启用调试和警告的情况下进行编译,即Linux 上的gcc -Wall -g hanoistower.c -o hanoistower),那么您有一个额外的参数,所以
argc == 2argv[0] 是 "./hanoistower" 字符串argv[1] 是 "2" 字符串(使用 atoi 将其转换为 int)argv[2] 是 NULL
请学习使用调试器(Linux 上为gdb)。
【讨论】:
只需将argc和argv添加到main方法参数列表中即可,如下图:
int main ( int argc, char *argv[] )
然后使用argv 作为变量来指定代码中的环数。
【讨论】: