There are a couple ways you can do it.
1. The program that is to get the numbers should get then from argv. The program that passes the numbers just passes them in the argument list as if you passed them on the command line.
// Program A
int main(int argc, char **argv)
{
int n1, n2;
// This program expects to get two numbers in argv.
// So the value of argc must be 3.
if( argc != 3)
{
printf("wrong number of arguments\n");
return 1;
}
n1 = atoi(argv[1]);
n2 = atoi(argv[2]);
// now do something with the two numbers not shown
// exit the program
return 0;
}
This is program 2
int main()
{
// send program a.exe two numbers -- 12 and 13
system("a.exe 12 13");
return 0;
}
2. Another method if program a.exe is already written to get the two numbers from the keyboard then program b should write the numbers to a file and redirect the input for program a to the file.
// program b.exe
int main()
{
fstream out(myfile.txt);
out << "12\n13\n");
fclose(out);
system("a.exe <myfile.txt");
return 0;
}
There are other solutions as well, but I think the above are probably the easiest to implement.
Ancient Dragon
Retired & Loving It
30,049 posts since Aug 2005
Reputation Points: 5,662
Solved Threads: 2,343
I don't think there is any other way than command line arguments since the ways in which a program receives data are:
1. Standard input (keyboard in most cases)
2. File stream (reading data from files)
3. Command line arguments
Since you don't require 1 and 2, you obviously have to go with the third choice, that is command line arguments.
Now just a simple test:
1. Create a project "Driver" which willl contain a single file driver.cpp with contents:
#include <iostream>
using namespace std;
int main(int argc, char **argv)
{
int n1, n2;
// This program expects to get two numbers in argv.
// So the value of argc must be 3.
if( argc != 3)
{
printf("wrong number of arguments\n");
return 1;
}
n1 = atoi(argv[1]);
n2 = atoi(argv[2]);
cout << "The output in the driver program is " << n1 + n2 ;
return 0;
}
2. Compile the project so that the executable is created (driver.exe)
3. Create a project "Main" which will contain a single file main.cpp with the following contents:
#include <iostream>
int main()
{
system("driver 12 13") ;
return 0;
}
4. Make sure the project "Main" and "Driver" are in the same directory (just for our convinience) along with their executables.
5. Compile and Run the main.cpp and you will see the expected output. Try this and see if it works in your case.
~s.o.s~
Failure as a human
11,938 posts since Jun 2006
Reputation Points: 3,281
Solved Threads: 734
I am not using args in the first program...just "cin>>" is there a way to still do this...withouth the args?
See my second example. put the numbers in a text file then redirect stdin from that file.
Another method is to use pipes. Here is an example program. The example opens the pipe for reading -- but in your case you will want to open it for writing because you want to send the other program the numbers.
Here is a working example for MS-Windows os
// program A
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
int a,b;
cout << "Enter first number\n";
cin >> a;
cin.ignore();
cout << "Enter second number\n";
cin >> b;
cin.ignore();
cout << "a: " << a << " b: " << b << "\n";
return 0;
}
// Program B. This will send two numbers, 12 and 13, to program A.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
char *cmd = "..\\progA\\debug\\progA.exe";
FILE *ptr;
if ((ptr = _popen(cmd, "w")) != NULL)
{
fprintf(ptr, "%d\n%d\n", 12, 13);
_pclose(ptr);
}
return 0;
return 0;
}
Ancient Dragon
Retired & Loving It
30,049 posts since Aug 2005
Reputation Points: 5,662
Solved Threads: 2,343