如何进入控制台程序并从中读取
How to enter to and read from a console program?
对于我想要编写的程序,我必须向控制台程序输入命令和从控制台程序读取命令,但我不知道如何。
为了便于理解,以下示例的解决方案可能会有所帮助:
我想写一个程序,将所有自然数平方到100,并将结果保存到文本文件中。假设我不知道如何对数字进行平方,因此使用具有以下(不可用)源代码的可执行文件square_x.exe:
#include <iostream>
using namespace std;
int main(){
double in;
cout << "Input: ";
while(cin>>in){
cout << in << static_cast<char>(253)/*²*/ << " = " << in*in << endl
<< endl
<< "Input: ";
}
return 0;
}
那么我必须如何添加到下面的代码片段中呢?(建议,用"不知何故"表示):
#include <fstream>
using namespace std;
ofstream file;
void writeToFile( const char* name, const char* content ){
file.open( name, ios::app );
file << content;
file.close();
}
int main(){
char buffer[30], buffer2[50];
//Somehow call square_x.exe
for( int i = 1 ; i <= 100 ; i++ ){
//Somehow send i to square_x.exe
//Somehow get a result from square_x.exe and safe it to buffer2
//Extract from the got string the result of the calculation
strtok(buffer2," "); strtok(0, " ");
strncpy(buffer2,strtok(0, " n"),sizeof(buffer2)-1);
sprintf( buffer , "%dn%snn" , i , buffer2 );
writeToFile( "list.txt", buffer );
}
//Somehow close square_x.exe
return 0;
}
我问我的一个朋友是否可以帮我,他给我发了这个。但由于我不知道如何更改代码以满足我的需求,他就把我送到了这里。
我认为您真正想要的是将输入传递给辅助程序并获得其输出的方式。
引用的链接解释了如何使用WinAPI函数执行此操作。不幸的是,由于缺少fork
函数(*),在Windows上没有更简单的解决方案。
将链接作为引用,您必须在源//Somehow call square_x.exe
中使用管道和子进程创建(CreatePipe
和CreateProcess
API调用,此处的子进程为square_x.exe
)替换该链接。然后,要向子级发送内容,只需在输入管道的写入端使用WriteFile
,而要从子级读取内容,则需要在输出管道的读取端使用ReadFile
。
但您的示例会有点困难,因为您的孩子添加了嘈杂的字符串"Input: "
,您将不得不忽略它。
试着把这个放在你的代码中,如果你被卡住了,回来问另一个问题(用新代码)。
(*)但你可以找到一个为你处理所有血腥细节的库,比如@a486408提出的libexecstream。
您可以尝试使用libexecstream-它允许您启动新进程并使用c++iostream与它们通信,而无需深入研究特定于操作系统的内容。
- 我的程序没有从文件中读取并输入数据
- 如何使用C++读取另一个程序中的源代码输出
- 如何将字符串和整数读取到两个单独的动态数组中的程序编写?
- 编写一个读取五个整数并执行一些任务的C++程序
- 为什么我的程序在读取/写入文件时会删除最重要的数字?
- 从不属于应用程序的闪存读取
- For 循环在尝试读取数组 c++ 时程序崩溃
- 为什么我的驱动程序只读取部分字符串?
- 为 Sql 服务器实现 odbc 包装器.将数据库数据读取为字符或要求驱动程序将数据转换为 C 类型
- 当注入程序的内存空间时,如何读取从 0 到 0xFFFFFFFFF 的每个字节?我正在创建模式扫描仪
- 如何运行外部程序,向其传递内存地址以读取/写入?
- boost::asio 不会触发读取处理程序,而 Wireshark 会看到传入的数据
- 我需要编写一个程序来读取一个文件,该文件将输出所有唯一的整数,如果已经看到整数,它将被关闭
- 如何以相反的顺序读取C++程序的输入
- 正在比较标头记录值和读取程序崩溃的行数.C++
- 文件读取程序有..黑屏问题
- 从输入文件读取程序
- C++:无法使用其他程序读取程序的特定内存地址内的值
- 简单的c++文件读取程序只返回垃圾
- 无法读取程序输出