当前位置:  开发笔记 > 开发工具 > 正文

尝试从命令行获取星号*作为main的输入

如何解决《尝试从命令行获取星号*作为main的输入》经验,为你挑选了2个好方法。

我正在尝试从命令行向我的main函数发送输入.然后输入发送到函数checkNum等.

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

    int x = checkNum(argv[1]);
    int y = checkNum(argv[3]);
    int o = checkOP(argv[2]);
    …
}

它应该是一个计算器,例如在我写命令行时:

program.exe 4 + 2

它会给我答案6(不包括此代码).

问题是当我想要繁殖时,我输入例如

program.exe 3 * 4

它似乎创建了一个指针(或者某些东西,不太确定),而不是给我指向char'的char指针*.

问题是我可以得到输入' *'的行为方式与我输入'+'的方式相同吗?

编辑:"*"在命令行中写入工作.有没有办法我只需要打字*

代码在Windows上运行,这似乎是问题的一部分.



1> abligh..:

正如@JohnBollinger在评论中所写,你应该使用

/path/to/program 3 '*' 4

它现在写的方式.

但显然需要一些解释.这是因为shell会在将命令行传递给程序之前对其进行解析.*将扩展到目录中的任何文件(UNIX)或类似的东西(windows),空格分隔.这不是你需要的.你无法在你的程序中修复它,因为它为时已晚.(在UNIX上,您可以确保您位于一个空目录中,但这可能没有帮助).

另一种方法是引用整个参数(并适当地重写你的程序),即

/path/to/program '3 * 4'

在这种情况下,您需要使用strtok_rstrsep逐步执行传递的(单个)参数,将其分隔在空格上.



2> John Bolling..:

shell如何处理命令行参数超出了程序的范围和控制范围.在程序中没有任何东西可以告诉shell避免执行任何正常的命令处理行为.

但是,我建议,不要依赖shell进行单词拆分,而是让程序期望整个表达式作为单个参数,并使其解析表达式.这不会减轻您对引号的需求,但它会使得结果命令看起来更自然:

program.exe 3+4
program.exe "3 + 4"
program.exe "4*5"

如果扩展程序以处理更复杂的表达式(例如包含括号的表达式(对shell也很重要)),这也会有所帮助.

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有