回 帖 发 新 帖 刷新版面

主题:还是那个问题,一次提出来,求完整答案,帮帮新手吧

这个问题我发了三个帖子,署名rainboat8的就是,分三次发就是想把问题拆开了慢慢研究明白,奈何答案实在看不懂,有时候又不统一,查半天书发现这貌似不是一两天能搞明白的。后天就要交差了,现在把问题一次晾出来,求一个完整答案,不仅交差,也方便学习,望各路大神再显神通,救救小弟吧,小弟刚会了一点基本的fortran语法就被老师安排了这样的任务……
问题是这样的:
    有一个A.exe,不知道源代码,只能直接运行。它是那种可以跟人交流的程序(这里不知道专业术语叫什么),它会提问题,你要回答n或y,或者数据,它会做出相应反应,并会输出一个文件作为结果。
    我现在要编一个B.f90,在这个程序里use dflib,用里面的runqq('文件名','')函数可以令A.exe程序运行起来(这个试过了,可以用),然后在B中输出一个C.txt文件,C里包含的都是A所需要的n、y或者数据、字符串之类的(这个我还可以勉强做到)。然后问题就来了,A已经运行了,如何让C变成A的“输入者”,即如何把C中的字符或数据作为A的命令,这里有段C++代码好像可以借鉴(不知道好不好用,没试过):
    int   old_in    =  dup(0); 
    FILE*   fin   =   fopen( "111.txt ", "r");            
    dup2(fileno(fin),   0); 
    貌似是把111.txt的什么接口号变成了A的输入接口号。所以我原先发帖求助怎样在fortran中使用api函数,后来又想问怎样fortran和c++混合编程但没问,直接问个全的吧,小弟只会最基本的语法,所以以前的好多回答很惭愧确实看不懂(像有位提到的管道,网上查了也没懂),希望大神能直接告诉我具体过程或者告诉我具体该查哪一章节。
    这个问题问个好多师兄,但他们都是对算法熟悉,对编译器的函数什么的不熟,所以我觉得能回答这问题的都是编程高手。哦,最后补充一下,我用的是cvf6.5,xp系统,那个C.txt的格式是这样的:
n
y
1
2
abc
    几个论坛里就这个有人回答了前两个帖子,其他论坛一个回复也没… 以后就在这混了。

回复列表 (共12个回复)

沙发

這個確實如我所講,需要用到管道讀寫。
當然,如果你已經有準備好的數據的話,那么可以這樣做:
runqq("a.exe < c.txt");

板凳

这个不行啊,首先是runqq有两个参数,后一个可以写成'',但不能没有;其次是这么写了之后也不好用啊,编译倒是成功了,一运行直接就一句“press any key to continue”就结束了,什么结果文件也没输出。

3 楼

[quote]這個確實如我所講,需要用到管道讀寫。
當然,如果你已經有準備好的數據的話,那么可以這樣做:
runqq("a.exe < c.txt");[/quote]

runqq('文件名','') 前一个参数就是文件名,后一个参数是输入输出命令,我试着把txt文件放在了后面引号里,写成runqq('a.exe ','c.txt, ')但程序说数据格式不对,input ignore什么的,网上也没有runqq的详细解释,最初找到的函数形式是这样的runqq('文件名','-C,-R'),搞不懂C,R什么意思,是不是在什么书上可以找到?

4 楼

試試:
i=runqq("cmd.exe","/c a.exe < c.txt")

5 楼

[quote]試試:
i=runqq("cmd.exe","/c a.exe < c.txt")[/quote]

好用了,太感谢了,你实在太厉害了。请问cmd.exe是什么意思,是运行的命令吗,还有/C呢?

6 楼

大神,能不能推荐我一些学fortran的书或者方法什么的,我是北航的,能加你qq吗

7 楼

我基本不用Q了,可以在人人、BaiduHi、微博等地方找我。這已經不屬于F的范疇了:)

8 楼

好吧,盼日后能再睹尊驾神通,呵呵

9 楼

另:
這個程序只能在WIN2000及以上的系統中使用,如果想在98下使用,則cmd.exe要改為command.com。
cmd是提供命令行的Shell程序,他的/C參數代表執行完命令后退出SHELL:)

10 楼

[quote]另:
這個程序只能在WIN2000及以上的系統中使用,如果想在98下使用,則cmd.exe要改為command.com。
cmd是提供命令行的Shell程序,他的/C參數代表執行完命令后退出SHELL:)[/quote]

恩… 坦白说,不懂,我再仔细学习一下visual fortran吧

我来回复

您尚未登录,请登录后再回复。点此登录或注册