C#如何获得另一个控制台应用程序的输出

控制台应用程序是C++写的,主体是一个while的死循环,每接收一行输入就会有一行输出,接收特定的命令后退出。(比如while(1){scanf("%d%d",&a,&b... 控制台应用程序是C++写的,主体是一个while的死循环,每接收一行输入就会有一行输出,接收特定的命令后退出。( 比如 while(1) { scanf("%d%d",&a,&b);if(a==0&&b==0) break;else printf("%d\n",a+b); } //实例中当然不会这么简单,只是该程序已经写死,无法修改了),然后我就在C#里面用一个Process类对象,重定义该控制台应用程序的输入输出,但是实践中发现控制台应用程序在退出前是无法获得其标准化输出的,就是说还在while循环体里面的话,在C#程序里面调试的时候会卡在读取的那行代码。我现在想在C#程序里面操控这个控制台应用程序的输入输出,每发送一行命令即获得该命令的执行结果而不要等控制台应用程序退出,请问该如何实现?
我把我测试的代码贴出来,大家帮我看看哪里应该修改(C#部分)。
C++代码
#include <stdio.h>
void main()
{
int a,b;
while(1)
{
scanf("%d%d",&a,&b);
if(a==0&&b==0) return;
printf("%d+%d=%d\n",a,b,a+b);
}
}

C#代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.IO;
namespace Test
{
class Program
{
static void Main(string[] args)
{
string result;
Process p = new Process();
p.StartInfo.FileName = @"C:\\a.exe";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardInput = true;
p.Start();
p.StandardInput.WriteLine("1 2");
p.StandardInput.Flush();
result = p.StandardOutput.ReadLine();
Console.WriteLine(result);
Console.ReadKey();
}
}
}
展开
 我来答
majieliang001
2012-05-03 · 超过28用户采纳过TA的回答
知道答主
回答量:103
采纳率:0%
帮助的人:47.1万
展开全部
Process p = new Process();
p.StartInfo.FileName = @"";//控制台程序的路径
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardInput = true;
p.Start();

p.StandardInput.WriteLine("");
p.StandardOutput.ReadLine();
更多追问追答
追问
不知道你试过没有,反正我是试过的,这样是读不到的,因为在控制台退出之前是无法得到标准输出的。
追答
Process p = new Process();
p.StartInfo.FileName = @"";//控制台程序的路径
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardInput = true;
p.Start();

p.StandardInput.WriteLine(" ");
p.StandardInput.Flush();
string result = p.StandardOutput.ReadLine();
Console.WriteLine(result);
Console.ReadKey();
输入之后,加了句p.StandardInput.Flush();,反正我测试,可以的。
C#用ReadLine(),C++里输出后,确保有换行,不然会认为一行没有输出完的,所以ReadLine()就读不到了;如果C++输出结尾没有换行,C#就用Read()读。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
飞讯奇十心小宇1430
2012-05-02 · 超过26用户采纳过TA的回答
知道答主
回答量:133
采纳率:0%
帮助的人:69.5万
展开全部
这个是跨线程了,可以使用一个中间只进行数据的传输如文件 数据库 两个控制台 同时监听。
追问
问题是C++程序没有源代码,无法修改。否则直接转为C#岂不更容易?还是说不需要对控制台进行处理就可以实现?能否给个代码或者实例?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yuyou2103
2012-05-01
知道答主
回答量:6
采纳率:0%
帮助的人:9491
展开全部
where(1)
{
int a=convert.ToInt32(Console.ReadLine());
int b=convert.ToInt32(Console.ReadLine());
if(a==0&&b==0)
{
Console.WriteLine("请输入两个数:a和b的值");
break;
}
}
else
{
Console.WriteLine("{0}+{1}={2}",a,b,a+b);

}
追问
看来你没有看题目啊,我已经不忍心追问你了,感谢你来回答吧,我还是等其他高人吧~
追答
where(true)
{
int a=convert.ToInt32(Console.ReadLine());
int b=convert.ToInt32(Console.ReadLine());
if(a==0&&b==0)
{
Console.WriteLine("请输入两个数:a和b的值");
break;
}
}
else
{
Console.WriteLine("{0}+{1}={2}",a,b,a+b);

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
abcayad
2012-05-03 · TA获得超过145个赞
知道答主
回答量:144
采纳率:0%
帮助的人:150万
展开全部
使用进程的OutputDataReceived事件可能对你这个问题有帮助
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
138002883
2012-05-02
知道答主
回答量:4
采纳率:0%
帮助的人:4320
展开全部
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式