将命令行参数和文本文件传递给程序
Posted
技术标签:
【中文标题】将命令行参数和文本文件传递给程序【英文标题】:Passing a Command Line Argument and a textfile to a program 【发布时间】:2016-06-20 10:48:05 【问题描述】:我有一个读取和反向编码任务,我需要传递一个文本文件和一个字符(-L
或 -W
),具体取决于操作员是希望按行还是按单词反向返回文本文件。 (我还应该注意,分配要求在代码期间不向用户询问任何内容。必须决定在命令行中需要哪种变体。)
我不需要代码帮助来反转行或单词,但需要帮助来理解如何接收字符和文本文件,然后在代码中使用它们。我尝试在main
上使用参数(int argc, char *argv[])
,但无论何时我尝试只传入-L
,终端都会显示Command not found
或clang: error: argument to '-L' is missing (expected 1 value)
另外,当我的老师将文本文件传递给程序时,他经常使用>
。谁能解释一下这个怎么用?
例如。 program.c > hello.txt
然后他最终会在程序中使用那个.txt
。
【问题讨论】:
你是如何尝试通过 -L 的? 我猜>
用于重定向。如果是这样,./a.out > hoge.txt
表示./a.out
的标准输出将不是终端而是hoge.txt
命令program.c > hello.txt
看起来很奇怪。是否有Cinterpreter(或者编译器隐藏在软件中)直接在他的环境中执行C源文件?
请注意,>
(和<
)是由 shell 处理的 I/O 重定向操作符——程序既看不到操作符也看不到以下文件名。听起来您可能需要:./your-program -L input-file.txt > output-file.txt
作为命令行,-W
作为替代方案。如果既没有指定-L
也没有指定-W
,你的程序会做什么?它可能应该默认为一个或另一个。同样,如果没有文件传递,你会怎么做?然后正常行为是读取标准输入。如果传递了许多文件,则依次处理每个文件。查找getopt()
函数。
【参考方案1】:
考虑一下:
program -L < data.txt
或
program -W < data.txt
或
cat data.txt | program -L
“-L”或“-W”将位于argv[1]
。
祝你好运!
【讨论】:
【参考方案2】:传递命令行参数的思路如下
Argc:为执行而传递的“字符串”(参数)的参数计数器数量。 它总是 1 或更大,因为函数的调用是一个参数。
Argv:参数向量(pointers),是指向命令行接收到的每个参数的指针
程序调用示例:
./myprogram -w
argc=2
argv 将有两个指向字符串(char)的指针:
argv[0]="./myprograms"
argv[1]="-w"
现在解决您的问题
通过命令行执行程序时,您有很多选择:
1) 其中之一是提供文件的程序输入(文件将逐个字符传递到以 EOF 或 -1 结尾的标准输入 - 不是 ascii 字符 -) 这些可以通过以下方式完成
./program.c
2)将程序的输出重定向到一个文件
./program.c > hello.txt
您要做的是在传递参数时输入文件,这可以通过以下方式完成
./program.c < hello.txt -L
重要提示:“
argc=2
argv[0]="./program.c"
argv[1]="-L"
如果您需要更多帮助或不清楚的地方,希望这有助于发表评论。祝你的课程好运!!!
【讨论】:
谢谢!这应该对我有帮助。我现在要去健身房,但今晚晚些时候会编写代码。如果我需要更多帮助,我一定会问。 小问题,你将如何实际使用来自./program.c <hello.txt -L
的信息(特别是.txt 文件中的信息。
你应该使用 getchar()、gets(..) 和其他函数来获取字符来管理 stdInput 检查这个链接它的解释很好。tutorialspoint.com/cprogramming/c_input_output.htm以上是关于将命令行参数和文本文件传递给程序的主要内容,如果未能解决你的问题,请参考以下文章