看板 java 關於我們 聯絡資訊
<% 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