English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

這是一個要計算一篇文章每個單字出現幾次的程式,
程式才剛開始寫,計算還沒開始,只是讀就有問題了,
因為我剛學不久,不知哪裡有問題,
不知是否有哪些部份遺漏或疏忽,請大家幫我找一找,
真的非常感謝大家。
=====================================================
#include
#include
int main(int argc, char *argv[])
{ FILE *read;
char a[100] ;
int i,no[100];
for(i=0;i<=100;i++)
no[i]=i ;
read=fopen(\"D://計算單字//read.txt\",\"r\") ;
if(read==NULL)
{printf(\"檔案打不開\");
getch();
exit(0);
}
while(1)
{i=0 ;
while(1)
{
a[i]=getc(read);
if(a[i]==\' \')
break;
printf(\"%c\",a[i]);
i++;
} //問題好像在這附近
if(feof(read)!=0)
{printf(\"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\");
break;
}
}
printf(\"\\n\") ;
fclose(read);
system(\"PAUSE\");
return 0;
}

2006-07-19 18:30:56 · 2 個解答 · 發問者 Nina 2 in 電腦與網際網路 程式設計

我希望的是找出我錯的地方,並非另一個程式
謝謝大家

2006-07-22 06:55:54 · update #1

2 個解答

我把程式碼重新再寫一次,我測試過可以使用,假如你的英文單字很多,先估計有多少個,再把下面的 "單字數目" 值做修改就可以了。
"單字數目" 以 "個" 為單位,123個單字就改成 123 ,以此類推。

//Power by Microsoft Visual Studio 2005
//可以使用 Dev-C++ 編譯此程式
#include
#include
#include
#define STRING 128//單字數目
#define STRING_LENGTH 128//單字長度
#define blnTrue EOF//布林值
#define blnFalse 0
int main(int argc,char *argv[]){
//=====START=====//
void vocabulary_counter(char *FILE_NAME);
char file_name[]="vocabulary.txt";
vocabulary_counter(file_name);
//=====END=====//
system("PAUSE");
return 0;
}
void vocabulary_counter(char *FILE_NAME){
int match_char(char LETTER);
FILE *ptrFile;
int i=0,j=0,k,nCounter[STRING]={0},arrflag;
char chLetter;
char temp_string[STRING_LENGTH],str_string[STRING][STRING_LENGTH];
for(;i strcpy(str_string[i],"");
}
i=0;
ptrFile=fopen(FILE_NAME,"r");
if(ptrFile!=NULL){
while(!feof(ptrFile)){
chLetter=getc(ptrFile);
if(match_char(chLetter)==blnFalse){
temp_string[i++]=chLetter;
}else{
temp_string[i]='\0';
i=0;
for(k=0;k<=j;k++){
arrflag=strcmp(str_string[k],temp_string);
if(arrflag==0){
nCounter[k]++;
break;
}else{
arrflag=EOF;
}
}
if(arrflag!=0){
nCounter[j]++;
strcpy(str_string[j++],temp_string);
}
}
}
for(k=0;k printf("string: %s, repeat %d times.\n",str_string[k],nCounter[k]);
}
}
fclose(ptrFile);
}
int match_char(char LETTER){
int i,blnFlag=blnFalse;
char chSep[]=" ,.\n";//分界符號
for(i=0;i<=(int)strlen(chSep);i++){
if(LETTER==chSep[i]){
blnFlag=blnTrue;
}
}
if(LETTER==-1){//檔案結束符號
blnFlag=blnTrue;
}
return blnFlag;
}

2006-07-20 04:15:01 補充:
#define STRING 128//單字數目
我自己測試單字數設超過7000左右會當機,值太大。
char chSep[]=" ,.\n";//分界符號
忽略逗號、句點等等…

陣列值需求量很大的話,可能要改用鏈結串列的資料結構。

2006-07-25 10:40:17 補充:
你有兩個出錯的地方…第一個:陣列設 no[100],n[0]~n[99]for(i=0;i<100;i++){//錯誤 1 no[i]=i; }第二個:檔案結束符號為-1,常數 EOF=-1if(a[i]==' '||a[i]==EOF){//錯誤 2 break;}

2006-07-25 10:47:51 補充:
我找到兩個嚴重錯誤的地方!

寫在補充裡!

你是不是用新版的 Dev-C++ Beta 版?

那個 Beta 版本的除錯器不能用。

==============================

2006-07-20 00:00:29 · answer #1 · answered by Big_John-tw 7 · 0 0

#include
#include
#include /*要多加這個標頭檔,因為getch( )
這個function在conio.h裡*/
int main(int argc, char *argv[])
{ FILE *read;
char a[100] ;
int i,no[100];
for(i=0;i<=100;i++)
no[i]=i ;
read=fopen("D://計算單字//read.txt","r") ;
if(read==NULL)
{printf("檔案打不開");
getch();
exit(0);
}
while(1)
{i=0 ;
while(1)
{
a[i]=getc(read);
if(a[i]==' ')
break;
printf("%c",a[i]);
i++;
} //問題好像在這附近
if(feof(read)!=0)
{printf("\\\\\\\\\\\\\\\\\\\\\\");
break;
}
}
printf("\n") ;
fclose(read);
system("PAUSE");
return 0;
}

2006-07-19 19:13:38 · answer #2 · answered by cgm 2 · 0 0

fedest.com, questions and answers