在批处理脚本方面我非常流利,但我的c ++知识并不那么强大。我想知道如何创建一个c ++程序:
请注意,这不是BATCH和C ++之间的严格限制,并不与之前提出的问题重复。 提前谢谢。
答案 0 :(得分:1)
要拥有文本字段,您需要一个GUI。 GUI 不是C ++的固有部分,因此您必须使用一些GUI框架,如Qt。从理论上讲,你只能用WinAPI来做,但我想这会很痛苦。在我的示例中,我从控制台获取输入数字。
关于调用批处理和传递参数,这很简单。只需调用流程cmd.exe /C {yourbatch}.bat {parameters}
即可。请注意,您可以将输入数据作为命令行参数传递给批处理(也可以使用环境变量)。为了启动 exe -file,您可以使用WinAPI的CreateProcess函数(我从this answer中取样)
获得输出有点困难。其中一种方法是使用管道捕获批处理的控制台输出流。像this这样的东西......然而,简单地使用文件传递任何数据要容易得多。
示例C ++ :
#include <stdio.h>
#include <windows.h>
int main() {
int n;
scanf("%d", &n); //read integer n from console
int *arr = new int[n]; //create array of 1..n integers
for (int i = 0; i < n; i++)
arr[i] = i + 1;
char cmd[1024] = "cmd.exe /C script.bat"; //base command line
for (int i = 0; i < n; i++) //add array elements as console parameters
sprintf(cmd, "%s %d", cmd, i);
STARTUPINFO info = {sizeof(info)}; //create cmd.exe process
PROCESS_INFORMATION processInfo;
if (CreateProcess(NULL, cmd, NULL, NULL, TRUE, 0, NULL, NULL, &info, &processInfo)) {
WaitForSingleObject(processInfo.hProcess, INFINITE);
CloseHandle(processInfo.hProcess); //note that we wait for completition
CloseHandle(processInfo.hThread);
}
int sum;
FILE *f = fopen("sum.txt", "r"); //read sum from 'sum.txt'
fscanf(f, "%d", &sum);
fclose(f);
printf("Sum of 1..%d is %d\n", n, sum); //print the sum
return 0;
}
样本批次(必须在工作目录中命名为 script.bat ):
del sum.txt
set sum=0
for %%x in (%*) do ( //sum all the parameters
set /A sum+=%%~x
)
echo %sum% >sum.txt //write result to sum.txt