我有一个程序,可以从命令行读取自然语言的句子并对其进行处理。
某些标点符号不被接受:要么收到一条特定的错误消息(例如使用括号时),要么得到>
(例如,当我键入'
时),就像终端还在等什么。
一种快速的解决方法是在引号中包含单个“有问题的”单词,但对我来说似乎不是一个很好的解决方法。
是否没有一种方法可以使命令行准备好将任何字符用作有效输入,而无需'用户'考虑是否要在引号中包含什么?
出于完整性考虑,这就是我对命令行内容进行编码的方式:int main(int argc , char ** argv){
,我想这是标准方式。
我正在使用最后一个Ubuntu,不知道这是否有意义。
答案 0 :(得分:5)
这里的问题与程序无关,而与调用程序有关。
从shell(如bash
)调用程序时,shell将尝试帮您一个忙,并在空白处分割命令行参数。它还将解释特殊字符,例如>
,;
和(
,以进行重定向,拆分命令和启动子shell。
要关闭此行为,必须对这些特殊字符进行转义,方法是在其前面加上\
或将命令行参数括在单引号或(仅在大多数情况下)双引号中。
仅当您的程序由Shell执行时,才需要这样做。如果它是由您控制的程序执行的,则可以直接控制传递给程序的参数列表(程序的argv
函数中的main()
)。
答案 1 :(得分:1)
这里的问题不在于C。这是命令行的工作方式。有些字符有特殊含义。引号允许您覆盖它。那就是“解决办法”。
答案 2 :(得分:0)
您可以通过\
跳过输入。
因此,脚本不会解释角色。取而代之的是,它会杂乱地考虑它。