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<5000;i++) { if( list[i]=NULL ) { break; } fscanf( stream, "%c", &list[i] ); printf( "%c", list[i] ); } for(i=0;i<5000;i++) { fprintf( stream1, "%c", list[i] ); } fclose( stream ); fclose( stream1 ); } 這是我的程式碼 更新: 看了大大的程式碼之後再稍微做個小調整 主要是計算有幾個標點符號跟有幾個英文字母 然後方別將字母跟符號寫入不同的文字檔裡面 還有在寫檔的時候,將符號跟字母分別在存入A陣列跟B陣列 但是之後我想有幾個部份不太懂, 第一:整片文章是在哪裡個時候列印出來的? 第二:getc(stdin); 請問這個是指什麼意思? 第三:有一點我不太暸解,就是我想用IF這個條件,來將大寫的字母改成小寫的字母,不過要設定24個,想說有沒有什麼好的方法可以來做比較有效率的執行? 謝謝!!!

最佳解答:

先回答一下開頭的問題: 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 發表在 痞客邦 留言(0) 人氣()