【问题标题】:Input from the execution line in the terminal in c从c中终端的执行行输入
【发布时间】:2011-11-30 09:58:19
【问题描述】:

我遇到的问题是我必须用 c 编写一个 hanois 塔游戏,并且环数的输入不能在程序中,但代码必须读取执行中的环数。

示例: ./hanoitower 3

并且代码应该将 3 作为输入。我该怎么做?

【问题讨论】:

    标签: c terminal line


    【解决方案1】:

    命令行参数通过 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;
    }
    

    【讨论】:

      【解决方案2】:

      我强烈建议阅读一本好的 C 编程书籍(2020 年,Modern C)。

      这会比在这里提问要快得多。不要忘记阅读 C 编译器(可能是 GCC)、build automation 工具(例如 GNU makeninja)和调试器(可能是 GDB)的文档。如果您在 Linux 上编写代码,请阅读Advanced Linux Programmingsyscalls(2),以及GNU glibc(或musl-libc,如果您使用它)的文档。

      然而,程序参数作为一个空终止的字符串数组提供给主函数,通常声明为

       int main (int argc, char**argv) { /*...*/ }
      

      如果您使用./hanoistower 3 运行您的程序并且您的hanoistower.c 是您的源代码(您需要在启用调试和警告的情况下进行编译,即Linux 上的gcc -Wall -g hanoistower.c -o hanoistower),那么您有一个额外的参数,所以

      1. argc == 2
      2. argv[0]"./hanoistower" 字符串
      3. argv[1]"2" 字符串(使用 atoi 将其转换为 int
      4. argv[2]NULL

      请学习使用调试器(Linux 上为gdb)。

      【讨论】:

      • 我很惊讶您发现在论坛上提问比去图书馆花时间(几个小时)阅读一本好的 C 编程书籍更简单。
      • 你的大学没有图书馆?你知道,纸质教科书!!
      【解决方案3】:

      只需将argcargv添加到main方法参数列表中即可,如下图:

      int main ( int argc, char *argv[] )
      

      然后使用argv 作为变量来指定代码中的环数。

      【讨论】:

        猜你喜欢
        • 2016-03-19
        • 2011-06-24
        • 1970-01-01
        • 2015-04-02
        • 2017-12-10
        • 2012-03-06
        • 2014-07-03
        • 2020-07-24
        • 2014-12-15
        相关资源
        最近更新 更多