close

標題:

c語言讀檔問題

發問:

請問我在讀檔的時候,因為不知道檔案內文字的多寡,所以必須設立一個條件當讀不到文字的時候就停止,但是不知道要怎麼設定.而且還有一個條件就是在讀檔的時候必須把標點符號都去除,這個要怎麼設定,必須用到ACSLL碼的轉換嗎?如果要用到請哪位大大能夠指導一下#include void main(void){ FILE *stream,*stream1; char list[5000]; int i,k=0; stream = fopen( "Taiwan.txt", "r"); ... 顯示更多 請問我在讀檔的時候,因為不知道檔案內文字的多寡,所以必須設立一個條件當讀不到文字的時候就停止,但是不知道要怎麼設定. 而且還有一個條件就是在讀檔的時候必須把標點符號都去除,這個要怎麼設定,必須用到ACSLL碼的轉換嗎?如果要用到請哪位大大能夠指導一下 #include void main(void){ FILE *stream,*stream1; char list[5000]; int i,k=0; stream = fopen( "Taiwan.txt", "r"); stream1= fopen( "456.txt", "w"); fseek( stream, 0L, SEEK_SET ); printf( "列印出讀入的數值 "); for(i=0;i
最佳解答:

先回答一下開頭的問題: 1. "請問我在讀檔的時候,因為不知道檔案內文字的多寡,所以必須設立一個條件當讀不到文字的時候就停止,但是不知道要怎麼設定." stdio.h中有一個巨集EOF ,這個是代表檔案的完結(End of File),值為-1 如果我取得的char數值是EOF就代表檔案完結了, 如: if(c == EOF) //c是char 還可以用feof(stream);來檢查EOF: if(feof(stream)) 文字的多寡是可以找到的, 如果剛剛fopen後: long size; //因為一個半形字是一個byte, 所以我們拿取byte的數目 fseek(stream, 0L, SEEK_END); //去到stream的結尾 size = ftell(stream); //取得file pointer位置 rewind(stream); //回到stream的開頭 那size就是文字的多寡了. 2. "把標點符號去除" 第一件事是認出那個char是不是標點符號. 半形字的標點符號可以用ctype.h中的ispunct認出.如: if(ispunct(c)) //如果c是標點符號 另一件事...是ASCII 不是ASCLL 在你的程式碼中只能讀5000個字, 所以不會把讀入的字全部寫入array (如果有10000000個字, 那記憶體可不就用完!) 對於取得和寫入char是有一些function可以用的, 不用次次都用fscanf和fprintf. c = fgetc(stream); //取得一個char讀入c fputc(c, stream1); //把c寫入stream1 我改了的程式碼如下: #include #include int main(void){ char c; FILE *stream, *stream1; stream = fopen( "Taiwan.txt", "r"); stream1= fopen( "456.txt", "w"); printf( "列印出讀入的數值 "); while(1){ c = fgetc(stream); //取得char if(feof(stream)){ //如果讀完了就break break; } if(!ispunct(c)){ //不是標點就寫入stream1 (對全形標點沒有用) putchar(c); fputc(c, stream1); } } fclose( stream ); fclose( stream1 ); getc(stdin); }

 

此文章來自奇摩知識+如有不便請留言告知

其他解答:6FE1C172A843305D

arrow
arrow
    創作者介紹
    創作者 gpjqem1 的頭像
    gpjqem1

    gpjqem1的部落格

    gpjqem1 發表在 痞客邦 留言(0) 人氣()