关于缺乏“int main(int argc,char * argv [])”知识
我是一名物理学家,通常我只想完成计算,这就是我真正需要的。不过,我一直在使用关于缺乏“int main(int argc,char * argv [])”知识
int main(int argc, char* argv[])
,并一直是其非常讨好的二进制文件在我没想到即初始化变量
~$ ./program.exe a b c (a, b and c are numbers in this case, not letters ok?)
所以,问题是
水平如何变得灵活*如何我用这种方式(或其他)“解析”或“管道”从一个到另一个没有使用文件?*
例如:假设“a.exe”提供了一组“X-Y”点(如在电子表格中),以及我在“b.exe”上插入了哪些点。或者说,我使用bash/awk脚本来格式化“a.exe”的输出格式,将其绘制在gnuplot上。
-----------------------------------------
再次嗨。我正在尝试这样做,但是,我仍然遇到问题。
要看到我在做什么错了,我写了简单的程序
#include <cstdio>
#include <iostream>
#include <cmath>
using namespace std;
int main(int argc, char* argv[]){
for (int i = 0; i <= argc; i++)
cout << "argv[" << i << "]= " << argv[i] << endl;
getchar();
return 0;
}
;并与内容的文件(可以说是“TEST.DAT”)
1
2
3
4
5
6
自我不想在我的程序上阅读文件的内容,我只是想“扔掉”它,所以我试过
more test.dat | ./program.exe
甚至
./program.exe << EOF
1 2 3 4 5
EOF
,但它不工作,我认为它应该。
再次感谢。
您正在混合参数和管道的两个概念。
您在main
函数中指定的参数处理参数,而不是管道。
“管道”字符|
用于管道,并且不影响参数,它会影响输入和输出流。 <
和>
可以用于从一个文件进行管道传输。
你的程序调用后追加什么是参数,例如:
progam.exe arg1 arg2 arg3
这些将在节目中bolerplate代码进行解析,并argv
数组中结束时,main
函数被调用。
当您使用<
字符管道的文件到一个程序,该文件的内容将被发送到该程序的输入流:
program.exe < data.txt
该计划将不会有控制台输入(屏幕和键盘),而是从文件中提供数据。
当您使用>
字符传输到文件时,程序的输出将转到文件而不是控制台。例如:
program.exe > result.txt
当使用|
字符管从一个程序到另一个时,第一个节目的输出流是其它程序的输入流。例如:
program.exe | sort.exe
第一个程序写入输出流的所有内容都会进入另一个程序的输入流。如果您没有指定任何输入或输出文件,则第一个程序具有控制台输入,第二个程序具有控制台输出。因此,数据流经这样的两个程序:
[console] --> [program.exe] --> [sort.exe] --> [console]
您可以管几个程序,以便数据从第一个程序流到最后。例如:
program.exe | sort.exe | more.exe
然后,数据流throught所有三个程序:
[console] --> [program.exe] --> [sort.exe] --> [more.exe] --> [console]
(通常不需要该.exe
扩展时指定一个程序,我只包括在这里,以程序之间清楚地区分,自变量和文件)。
好的答案 - 值得添加,为了好处,从输入流获取输入可以使用'scanf'完成,并且将输出发送到输出流的方式是使用'printf' –
,认识到这些操作符(和|)都是在典型环境中由shell实现的,实际的程序二进制文件不需要做任何事情,实际上通常不知道正在使用的操作符,这一点很重要。它们不出现在'argv []'中。 – unwind
这帮了很多Guffa。现在我知道它代表什么。尽管如此,我只是尝试了另一件事情,但仍然没有得到我需要的东西。我只是编辑帖子。我不想读,我想“扔”东西的程序。 – stringparser
这个问题应该在*上。 – greatwolf
您可以使用xargs命令将文件内容更改为命令行参数。 'cat test.dat | xargs preogram.exe' –