作者ryannork (下雨天)
看板java
標題[JSP ] readline時會停住的問題…
時間Sun Jul 17 15:45:56 2011
<%
if(solStateNum == 0){
String WA_check[] = {"cmd","/c","D:\\"+solNumber[1]+".exe"};
try{
Process pro = runtime.exec(WA_check);
BufferedWriter WA_In = new BufferedWriter(
new OutputStreamWriter(pro.getOutputStream()));
BufferedReader WA_Out = new BufferedReader(
new InputStreamReader(pro.getInputStream()));
FileWriter errorWriter = new FileWriter(
"D:\\"+solNumber[1]+".txt",true);
%>
<sql:query var="test">
Select * From test_point Where qNum = ?
<sql:param value="${param.qNum}"/>
</sql:query>
<c:forEach var="test" items="${test.rows}">
<c:set var="input" scope="request" value="${test.testInput}"/>
<c:set var="output" scope="request" value="${test.testOutput}"/>
<%
String input = (String)request.getAttribute("input");
String output = (String)request.getAttribute("output");
WA_In.write(input);
WA_In.flush();
if((line = WA_Out.readLine()) != null){
if(!line.equals(output)){ //輸出資料比對
errorWriter.write("Your answer is : "+line);
errorWriter.write("The correct answer is : "
+output);
solStateNum = 3;
}
}
%>
</c:forEach>
<%
errorWriter.close();
WA_In.close();
WA_Out.close();
pro.destroy();
}
catch (Exception e) {
e.printStackTrace();
runtime.exit(0);
}
}
%>
這是我的部份程式
目的是要做由gcc編譯完後得到的exe檔,開啟並輸入值,
然後再比對輸出是否和正確答案一樣
編譯的c程式如下
#include<stdio.h>
int main() {
char s[9999];
while( scanf("%s",s)!=EOF ) {
printf("hello, %s\n",s);
}
return 0;
}
我是用if(true)return;的方式得知在readline時停住了(就是網頁跑很久都沒有結果)
卻一直不明白為何…
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.125.57.131
→ calais007:我猜你的input不存在CR/LF,你可以印每個byte出來看看 07/19 15:19
→ calais007:你可以看看最後有沒有0D或是0A這兩個byte 07/19 15:21
→ ryannork:我用getbytes("UTF-8")得到 [B@1e3a0ec 這值次出來都不一 07/20 10:48
→ ryannork:之前也試過WA_in(input+"\r\n")但是結果是一樣的 = = 07/20 10:52
→ calais007:那就不要用readLine,看你來是最後沒有od和oa所以卡住了 07/20 14:31
→ calais007:打錯,是0d或0a 07/20 14:32
→ ryannork:不好意思,那請問可以用什麼代替? 07/20 17:46