[英]What is the fastest way to count lines and words in a text file in ANSI C?
[英]Ansi C: Attempting to count total chars in a file
任務很簡單,但是方法返回0時遇到問題。
這意味着我的循環:
int getCharCount(FILE *fp) {
int c;
int i = 0;
while( (c = fgetc(fp)) != EOF) {
i++;
printf("Loop ran");
}
return i;
}
沒有運行。
在我的測試中,我發現循環永遠不會運行,因為“循環運行”從未打印出來。 我是c語言的新手,不確定在嘗試計算文件中的字符數時是否做錯了什么。
我覺得我應該提到該文件以“ wb +”模式打開,並且有一些很長的方法可以編輯該文件。 基本上,在使用此getCharCount()方法之前,將文本文件中的所有先前數據清除,然后用戶一次輸入多個44個字符長度的字符串,而我使用我剛剛發布的此方法來計算將使用的字符總數瀏覽我的顯示數據方法。
我正在圖書館工作,因此,如果需要張貼任何其他內容或需要澄清任何內容,我將盡量快速答復。 我不想發布我的整個代碼,因為有可能會作弊,我需要自己完成。
謝謝你
如果您寫入文件,然后在同一文件句柄上調用方法,則該文件句柄已經在文件末尾,因此它將立即看到EOF。 我們需要查看更多代碼以確保我認為。
因此,您可以在函數開始時倒回文件句柄。
或者,您可以僅調用ftell來查找文件中的偏移量,該偏移量與截斷,寫入和不倒帶時寫入的字節數相同。
您正在使用w+
模式打開,它將截斷文件。 在fopen手冊頁中:
w +開放供閱讀和寫作。 如果該文件不存在,則創建該文件,否則該文件將被截斷。 流位於文件的開頭。
如果您正在從文件讀取並且仍要寫入文件,則將要使用rb+
而不是wb+
來打開它。 如果您已經寫了它,並且想閱讀所寫的內容,則需要尋找文件指針的開頭。
// Both of these seek to the start
rewind(fp);
fseek(fp, 0, SEEK_SET);
為什么您必須一一讀取所有字節才能計數? 使用ftell( fp )
進行fseek( fp, 0, 2 )
跳轉到文件末尾並獲取當前位置(文件長度)要容易得多。
如果文件未打開,則可以使用:
off_t getFileSize(const char *filepath) {
struct stat fileStat;
stat(filepath, &fileStat);
return(fileStat.st_size);
}
如果文件已打開:
off_t getFileSize(int fd) {
struct stat fileStat;
fstat(fd, &fileStat);
return(fileStat.st_size);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.