fscanf返回值以及利用返回值做判斷問題


今天練習簡單算法題,遇到下面需求:

韓信點兵問題:讓士兵先后三人一排,五人一排,七人一排變換隊形,每次只需要掠一眼尾數就知道有多少人。輸入包含多組數據,每組數據包含3個非負整數a,b,c,表示每種隊形排尾的人數(a<3,b<5,c<7)輸出總人數的最小值或者報告無解。已知總人數不小於10,不超過100.輸入到文件結束為止。

樣例輸入:

2 1 6

2 1 3

樣例輸出:

41

沒有結果

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

問題不難,只是最后要求輸入到文件結束為止。我想這個需要使用文件輸入,重定向也可。控制語句可以while(fscanf(fin,"%d %d %d",&a,&b,&c)==3 && !feof(fin))

這就出了問題,因為fscanf讀取的時候指針是會移動的,當讀取最后一行時feof為1,如果像我上面這么寫,會導致最后一行的輸入數據讀取不進去。

另外我對於fscanf的返回值了解不夠也讓我在這里卡了很久。fscanf如果像上面成功讀取3個,返回值就是3,只成功讀取1個,返回值就是1,一個都沒讀取就是0;如果遇到錯誤或者讀到文件末尾會返回EOF(EOF的值為-1)。

這就有三種方式來控制

(1)while(fscanf(fin,"%d %d %d",&a,&b,&c)==3)

{

  。。。。。。

}

(2)while(fscanf(fin,"%d %d %d",&a,&b,&c))

{

  。。。。。。

  if(feof(fin))break;

}

(3)while(~fscanf(fin,"%d %d %d",&a,&b,&c))

{

  。。。。。。

}

對於(3),因為EOF=-1,按位取反就是0,作用和(2)差不多


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM