總網頁瀏覽量

2015年10月22日 星期四

[C] 2-5: 迴圈與測試資料讀取 4 - 檔尾封 File_stern_transom.cpp

2-5: 迴圈與測試資料讀取 4 - 檔尾封

這個題目和前三題的差別在於如何指定輸入資料有幾組案例

請撰寫一個程式運用 stdio 函式庫的 scanf 和 printf 函式讀取測試資料並且計算兩數之和、整數除法的商和餘數、浮點數除法的商, 請練習下列迴圈控制

    nitems = scanf(...); // 讀入 a 和 b
    while (nitems==2) // 或是 nitems != EOF
    {
        ...
        nitems = scanf(...); // 讀入 a 和 b
    }

請注意:

  1. 下面的測試用範例中, 輸入測試資料由第一列開始, 每一列是一個案例, 包含兩個整數, 請讀入此兩個整數資料並且完成指定的運算
  2. 請注意觀察輸出測試資料, 程式需要輸出 n 列, 每一列是一個測試案例的測試結果, (假設 a + b = c, a / b = d, a % b = e, a / b = f) 列印的格式是每一列四個數字 c, d, e, f 以逗點和一個空格隔開, 其中 c, d, e 三個整數都列印在 5 格的欄位中, 浮點數 f 列印在 10 格的欄位中, 小數點後印 5 位數字
  3. 在你自己機器上測試時有兩種方法
  •         執行程式 prog.exe, 輸入資料, 按 <ctrl>-Z <enter>
  •         編輯一個資料檔案 test.txt, 打開 cmd.exe 視窗, 執行 prog < test.txt 或是 cat test.txt | prog 
  1. 另外你也可以練習運用 stdio 的 feof(stdin) 函式測試輸入是否已經結束, 試試看能不能來取代 while (nitems==2) 的測試, 如果執行前一個輸入指令時發現串流已經結束, 接下來的 feof() 函式會回傳 1 代表串流已經結束, 在你自己的機器應該是可以運作的, 不過因為 e-Tutor 是線上的測試系統, 他不接受檔案操作的相關命令, 例如 fopen, fclose, fflush 所以 feof 有可能也不接受





輸入測試資料:

73 56↵
28 27↵
185 30↵
1412 345↵
210 -75↵
-3123 -4215↵
-4703 1014↵
輸出測試資料:
  129,     1,    17,    1.30357↵
   55,     1,     1,    1.03704↵
  215,     6,     5,    6.16667↵
 1757,     4,    32,    4.09275↵
  135,    -2,    60,   -2.80000↵
-7338,     0, -3123,    0.74093↵
-3689,    -4,  -647,   -4.63807↵
 

 ----------------------------------------------------------------

 #include <stdio.h>
#include <stdlib.h>
int main(void) {

    int a=1, b=1;  
    int nitems = scanf("%d %d%*[^\n]",&a,&b);
    while (nitems!= EOF) // a 和 b 為前一列 scanf 讀入的資料
    {
        int add=0, div=0, mid=0;
        float div2=0.0;
        printf("%5d,%6d,%6d,%11.5f\n",add = a+b, div = a/b, mid = a%b, div2 = (float)a/b);
        nitems = scanf("%d %d%*[^\n]",&a,&b);
    }

    return 0;
}





 ----------------------------------------------------------------


nitems!= EOF

EOF很像是-1, 而scanf輸出的值則是 一個整數,表示輸入的參數數量,
而如果使用feod可以參考
http://yume-o-tsukamu.blogspot.tw/2013/03/cfeof.html




沒有留言:

張貼留言