13. 標準輸入輸出庫
- 13.1 這樣的代碼有什麼問題?
char c;
while((c = getchar()) != EOF) ...
- 13.2 我有個讀取直到 EOF 的簡單程序, 但是我如何才能在鍵盤上輸入那個
``EOF" 呢?
- 13.3 為什麼這些代碼
while(!feof(infp)) {
fgets(buf, MAXLINE, infp);
fputs(buf, outfp);
}
把最後一行複製了兩遍?
- 13.4 我的程序的屏幕提示和中間輸出有時顯示在屏幕上, 尤其是當我用管道向
另一個程序輸出的時候。
- 13.5 我怎樣不等待回車鍵一次輸入一個字符?
- 13.6 我如何在 printf 的格式串中輸出一個 '%'?
我試過 \%, 但是不行。
- 13.7 有人告訴我在 printf 中使用 %lf 不正確。那麼, 如果 scanf()
需要 %lf, 怎麼可以用在 printf() 中用 %f 輸出雙精度數呢?
- 13.8 對於 size_t 那樣的類型定義, 當我不知道它到底是 long
還是其它類型的時候, 我應該使用什麼樣的 printf 格式呢?
- 13.9 我如何用 printf 實現可變的域寬度?就是說, 我想在運行時確定寬度
而不是使用 %8d?
- 13.10 如何輸出在千位上用逗號隔開的數字?金額數字呢?
- 13.11 為什麼 scanf("%d", i) 調用不行?
- 13.12 為什麼
char s[30];
scanf("%s", s);
不用 & 也可以?
- 13.13 為什麼這些代碼
double d;
scanf("%f", &d);
不行?
- 13.14 怎樣在 scanf() 格式串中指定可變的寬度?
- 13.15 當我用 ``%d\n" 調用 scanf 從鍵盤讀取數字
的時候, 好像要多輸入一行函數才返回。
- 13.16 我用 scanf %d 讀取一個數字, 然後再用 gets() 讀取字符串, 但是
編譯器好像跳過了 gets() 調用!
- 13.17 我發現如果堅持檢查返回值以確保用戶輸入的是我期待的數值,
則 scanf() 的使用會安全很多, 但有的時候好像會陷入無限循環。
- 13.18 為什麼大家都說不要使用 scanf()?那我該用什麼來代替呢?
- 13.19 我怎樣才知道對於任意的 sprintf 調用需要多大的目標緩衝區?
怎樣才能避免 sprintf() 目標緩衝區溢出?
- 13.20 為什麼大家都說不要使用 gets()?
- 13.21 為什麼調用 printf() 之後 errno 內有 ENOTTY?
- 13.22 fgetops/fsetops 和 ftell/fseek 之間有什麼區別? fgetops()
和 fsetops() 到底有什麼用處?
- 13.23 如何清除多餘的輸入, 以防止在下一個提示符下讀入?
fflush(stdin) 可以嗎?
- 13.24 既然 fflush() 不能, 那麼怎樣才能清除輸入呢?
- 13.25 對某些路徑文件名調用 fopen() 總是失敗。
- 13.26 我想用 ``r+" 打開一個文件, 讀出一個字符串, 修改之後再寫入,
從而就地更新一個文件。可是這樣不行。
- 13.27 怎樣在程序裡把 stdin 或 stdout 重定向到文件?
- 13.28 一旦使用 freopen() 之後, 怎樣才能恢復原來的 stdout
(或 stdin)?
- 13.29 怎樣同時向兩個地方輸出, 如同時輸出到屏幕和文件?
- 13.30 怎樣正確的讀取二進制文件?我有時看到 0x0a 和 0x0d 混淆了,
而且如果數據中包含 0x1a 的話, 我好像會提前遇到 EOF。
翻譯朱群英、孫雲, LaTeX2HTML 編譯 朱群英 (2005-06-23)