問題是,您正在嘗試打印FILE指針而不是文件的內容 - 您需要一個變量來存儲它。
看到其他方法很有意思。這裏是fscanf()函數的實現 -
#include <stdio.h>
#define FILENAME "test.txt"
int main(void)
{
FILE *myfile;
char string[81] = {'\0'};
myfile=fopen(FILENAME , "r");
if(myfile == NULL)
{
printf("The file test.txt could not be found! Exiting...\n");
return -1;
}
while(fscanf(myfile, " %80[^\n]s", string) != EOF)
{
printf("%s\n", string);
}
fclose(myfile);
return 0;
}
當你打開一個文件,如果操作失敗,將返回NULL,這是很好的做法,明確檢查這讓你知道什麼出了錯。 fscanf()返回成功讀取的次數(在此爲1,轉換爲字符串時爲1),如果已達到文件末尾,則返回EOF。格式字符串首先使用空格刪除輸入流中的所有前面的空格(換行符,空格,製表符)。
在scanf()函數中使用字段寬度說明符(80)意味着只有很多字符會被讀取,所以輸入不能超過分配的空間 - 非常有用!
[^]表示流只會被讀取直到遇到指定的字符。 [^ \ n]是一種獲取字符串空白的方式,因爲scanf()系列通常只會讀取字符串空白。請注意,換行符不會被刪除(它仍然是流中的第一個)。
然後打印字符串,並添加一個換行符。該程序將遍歷多達80行的文字(由換行符分隔)。如果你想保留這些行,你可以使字符串成爲char數組的數組,並且每次都增加。這是fscanf()格式字符串中的第一個空格派上用場的地方,它將刪除仍在流開頭的換行符(以及任何其他前面的空格)。
我還沒有找到任何學習C在線的權威教程,但有很多可用的。目前的標準是不是初學者友好的,但一個草案形式是免費提供:http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf
另一個很好的資源(但不是教程)是http://c-faq.com/
的標準庫函數,我底細的最好的參考資料我發現是Harbison & Steele的C:參考手冊 - 但不幸的是它不是免費的。
根據定義,'sizeof(char)'是1。 – 2011-06-12 20:03:12
@Jon是的,你說得對,謝謝。 – 2011-06-12 20:06:17