A.cpp产生数据,并在A.cpp中调用B程序,将A.cpp的数据当作B的输入参数

weibo_boer 2018-03-16 01:22:44
B.cpp
#include<iostream>
using namespace std;
int main()
{
int m,n;
cin>>m>>n;
cout<<m*n<<endl;
return 0;
}

A.cpp
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<string>
using namespace std;
int main()
{
for(int i=0;i<100;i++)
{
string s="b.exe ";
char temp[2];
itoa(i,temp,10);
s+=temp;
if(i%2==0)
s+=" 0";
else
s+=" 1";
char A[20];
cout<<s<<endl;
for(int j=0;j<s.length();j++)
A[i]=s[i];
system(A);
}

}

他们都在同一个文件夹下,这样可以做到吗?
直接这样写出不来结果。


...全文
641 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2018-03-17
  • 打赏
  • 举报
回复
//test.c 本程序演示两个进程之间通过临时文本文件交换数据实现间接调用
//A将请求数据写到文件a.txt,写完后改名为aa.txt
//B发现aa.txt存在时,读取其内容,调用相应功能,将结果写到文件b.txt,写完后删除aa.txt,再将b.txt改名为bb.txt
//A发现bb.txt存在时,读取其内容,读完后删除bb.txt
#include <io.h>
#include <stdio.h>
#include <windows.h>
int main(int argc,char **argv) {
    int d,r;
    FILE *f;
    char cmdstr[512];

    if (argc<2) {
        sprintf(cmdstr,"cmd /c \"%s\" B",argv[0]);
        WinExec(cmdstr,SW_HIDE);
        for (d=1;d<=5;d++) {//共使用1..5调用B 5次
            //A将请求数据写到文件a.txt,写完后改名为aa.txt
            f=fopen("a.txt","w");
            fprintf(f,"%d\n",d);
            fclose(f);
            rename("a.txt","aa.txt");
            printf("call with %d\n",d);
            //A发现bb.txt存在时,读取其内容,读完后删除bb.txt
            while (1) {
                Sleep(100);
                if (_access("bb.txt",0)!=-1) {
                    f=fopen("bb.txt","r");
                    fscanf(f,"%d",&r);
                    fclose(f);
                    remove("bb.txt");
                    break;
                }
            }
            printf("result:%d\n",r);
        }
        return 0;
    }
    if (argv[1][0]=='a'||argv[1][0]=='A') {//A
        for (d=1;d<=5;d++) {//共使用1..5调用B 5次
            //A将请求数据写到文件a.txt,写完后改名为aa.txt
            f=fopen("a.txt","w");
            fprintf(f,"%d\n",d);
            fclose(f);
            rename("a.txt","aa.txt");
            printf("call with %d\n",d);
            //A发现bb.txt存在时,读取其内容,读完后删除bb.txt
            while (1) {
                Sleep(100);
                if (_access("bb.txt",0)!=-1) {
                    f=fopen("bb.txt","r");
                    fscanf(f,"%d",&r);
                    fclose(f);
                    remove("bb.txt");
                    break;
                }
            }
            printf("result:%d\n",r);
        }
    } else {//B
        while (1) {
            //B发现aa.txt存在时,读取其内容,调用相应功能,将结果写到文件b.txt,写完后删除aa.txt,再将b.txt改名为bb.txt
            while (1) {
                Sleep(100);
                if (_access("aa.txt",0)!=-1) {
                    f=fopen("aa.txt","r");
                    fscanf(f,"%d",&r);
                    fclose(f);
                    r=r*10;
                    f=fopen("b.txt","w");
                    fprintf(f,"%d\n",r);
                    fclose(f);
                    remove("aa.txt");
                    rename("b.txt","bb.txt");
                    break;
                }
            }
            if (r==50) break;
        }
    }
    return 0;
}
//C:\tmp\test>test
//call with 1
//result:10
//call with 2
//result:20
//call with 3
//result:30
//call with 4
//result:40
//call with 5
//result:50
//
//C:\tmp\test>start /B test B
//
//C:\tmp\test>test A
//call with 1
//result:10
//call with 2
//result:20
//call with 3
//result:30
//call with 4
//result:40
//call with 5
//result:50
//
//C:\tmp\test>
幻夢之葉 2018-03-17
  • 打赏
  • 举报
回复
引用 5 楼 jianwen0529 的回复:
那你程序中就循环接收来自控制台的输入,就能符合你的需求了!
又或者读取文件,在文件中给出任意个测试数据也是可行的
幻夢之葉 2018-03-17
  • 打赏
  • 举报
回复
那你程序中就循环接收来自控制台的输入,就能符合你的需求了!
z416575462 2018-03-16
  • 打赏
  • 举报
回复
看上去应该不行.如果你希望两个执行过程能够相互交换信息,可以使用线程.,看上去好像你还是不怎么熟悉c语言,似乎这些代码都有问题. 如果不用线程,而用a启动b来执行任务,那么你要根据运行的系统,在a程序中写上一些执行b程序的exe文件的语句.同时把想传给b程序的数据当作启动b文件的参数,而在b程序中不能用这个main,要用main(int argc,char**argv),并在b程序里读取解析启动时传过来的argv和argc这个形参得到启动b时给出的额外参数(程序a在启动程序b时提供的).而要让b程序在执行完后可以让main 返回一个int值(如果计算结果是int),然后a再判断这个返回值.实际似乎不太好用.此外如果想独立的a和b相互通信应该学习进程间通信(IPC机制.),此外两个进程间在linux下还可以使用管道的技术(微软系统大概也有相应的东西),使得一个进程的输出重定向到另一个进程的标准输入里.这样前面的线程可以往标准输出中输出参数,而后面的进程读自己的标准入读到的就是前面那个线程输出的内容.
weibo_boer 2018-03-16
  • 打赏
  • 举报
回复
现在B.cpp是这样了

#include<iostream>
using namespace std;
int main(int argc,char * argv[])
{
int m,n;
cout<<argv[0]<<endl;
cout<<argv[1]<<endl;
cout<<argv[2]<<endl;
cin>>m>>n;
cout<<m*n<<endl;
return 0;
}

我在CMD下运行 B 5 6,

发现argv [0],argv[1],argv[2]都得到了正确的数据,那么,B中的m,n能不能在传入参数的时候为其赋值呢,因为要批量测试,手动给m,n赋值太麻烦了。
paschen 版主 2018-03-16
  • 打赏
  • 举报
回复
B程序的main改成:int main(int argc, char* argv[]) argv数组中的第一个单元指向的字符串总是可执行程序的名字,以后的单元指向的字符串依次是程序调用时的参数
FoolCarpe 2018-03-16
  • 打赏
  • 举报
回复
可以的
#include<stdlib.h>

int main(int argc, char *argv[]){
	system("ls -l");
        return 0;
}

64,685

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧