C++使用<输入文件和>输出文件启动程序
C++ start programm with < input file and > output file
我需要知道如何在C++中使用Unix参数<有人告诉我,如果我用./program < input file > output file
运行程序,程序将从<
后面声明的文件中读取,并将写入>
之后声明的文件
实际代码看起来像这个
int main(int argc, char** argv)
{
FILE* filein = fopen(argv[1], "r");
FILE* fileout = fopen(argv[2], "w");
...
所以我想把我在程序中声明的文件放在这里开始处理,因为我稍后将在程序中使用filein
和fileout
。
我只被允许使用stdio.h
,所以请保持它的基本功能。
提前感谢
此shell cmd语法
./program < input_file > output_file
不需要对传递给主的参数做任何事情
int main(int argc, char** argv) {
您只需参考std::cin
和std::cout
即可获得上述输入和输出文件。
它是一个shell特性,称为标准输入/输出流重定向。如果你想通过argv
将额外的参数传递给你的程序,你通常会使用以下语法
./program -x --opt1 < input_file > output_file
正如你所说的
"我只被允许使用
stdio.h
,所以请保持基本。"
在这种情况下,可以使用预定义的stdin
/stdout
宏。
FILE* filein = stdin;
FILE* fileout = stdout;
这是您应该使用的默认值。如果你想拥有额外的功能,即用户指定特定的输入/输出文件名作为程序参数,你还应该检查传递给你的主命令行参数:
int main(int argc, char* argv[]) {
FILE* filein = stdin;
FILE* fileout = stdout;
if(argc > 1) {
filein = fopen(argv[1], "r");
}
if(argc > 2) {
fileout = fopen(argv[2], "w");
}
}
默认情况下,您的程序从标准输入读取并写入标准输出,如果按上述方式执行的话。因此,只需在没有任何参数的情况下调用程序,就会给用户留下输入内容的提示。
这是实现控制台程序的首选且最灵活的风格,控制台程序应处理流式输入并将(处理)转换为任何输出。
void main()
{
printf("Hello World");
}
这是">"cmd 的一个简单示例
如果您编译了上面的代码,然后运行cmd
./program
在您的控制台中将输出Hello World
如果你运行
./program >1.txt
然后您将在控制台中看不到任何输出,但您会在文件夹中找到一个名为1.txt
的文件(只需我们ls
cmd即可查看文件)和int 1.txt
(使用vim 1.txt
查看内容),您将看到输出Hello World
在这种情况下,CCD_ 22cmd用于将CCD_ 23的输出重定向到CCD_
下面是一个工作示例:
#include <stdio>
int main(void)
{
// Read in the data from the piped file
std::string text;
std::cin >> text;
// Send output to the redirected output file
std::cout << text;
return 0;
}
同样,不需要使用fopen
或FILE
类型的任何变量,因为操作系统已重定向cin
流以使用管道传输到程序中的文件。
编辑1:使用C样式I/O
您还可以使用标准输入和标准输出来使用C形叶I/O。
#include <cstdio>
int main(void)
{
int a;
scanf("%d", &a);
printf("%dn", a);
return 0;
}
无论您使用C风格I/O还是C++I/O,操作系统都会重定向标准输入和输出流,以便从您(通过重定向)传递到程序的文件中进行读写。
;和>是重定向程序,您只需要从stdin读取并写入stdout。您的程序将通过stdin读取"输入文件"的内容,并且您的程序写入stdout的所有内容都将在输出文件中。
你不需要自己处理这些文件。
当从UNIXshell运行程序时,使用输入和输出重定向将导致shell将标准输出和输入流重定向到这些文件。一旦发生这种情况,您的程序不需要也不会知道。只需像往常一样使用printf
和scanf
(等等)。
- 如何在 的开头<x>和结尾<y>之间更改带有文件输出的字符串的值
- C++对象数组的文件输出
- bcdedit 文件输出不起作用,但其他命令可以
- 如何从文本文件输出数据?(学生成绩单计划)
- 使用 C++文件 I/O 输出 pdf 文件
- C 文件输出垃圾
- 从堆栈中读取字符后,如何修复不正确的文件输出
- C++:具有随机名称的文件输出
- 在命令提示符下看到换行符,但在文件输出中可以看到 相同的字符串
- 生成文件不会生成预期的文件输出
- C++11 fgetc 在"r+b"模式下使用时向我的文件输出 0
- 使用函数从文件输出
- GCC.obj文件输出不具有确定性(.debug_info,PROGPITS部分)
- C cstdiofile :: Writestring给出了不正确的文件输出
- C 输出:STD :: COUT和文件输出没有相同的内容
- GCC和MSVC之间的文件输出不一致
- C++文件输出奇怪的数字,并且部分代码没有运行
- 如何将特定字符从TXT文件输出到特定点
- C 调用从TXT文件输出信息的函数
- 将交易从文本文件输出到屏幕