[英]C - counting occurance of letters in a file - Error 139: Segmentation fault
我正在編寫一個程序,它計算文本文件每行中各種字母的出現次數。 我通過學校網站這樣做,它可能運行與Visual Basic類似的調試器。 當我嘗試提交代碼時,我得到錯誤139:分段錯誤。 該程序在我自己的CodeBlocks測試中工作,但站點調試器遇到上述錯誤。
程序等待用戶輸入要檢查的文件的名稱。 文件的內容保存到數組“a”中。 變量“Riadok”是行計數器,“pismena”是存儲字母出現計數的數組。 該程序檢查每一行並打印出一個表格,顯示在該行中找到每個字母的次數。
在提交過程中,網站會檢查許多不同類型的輸入,也許還有一些我還沒有想到的東西。 有什么建議嗎? 此外,我是一名初學者編碼器,所以歡迎任何關於代碼本身和改進的建議。
這是代碼:
#include <stdio.h>
#include <ctype.h>
int main(){
int riadok=1, pismena[26],i;
char a[100],c='0';
FILE *fr;
for (i=0;i<=25;i++) pismena[i]=0;
scanf("%s",a);
fr= fopen(a, "r");
printf(" A B C D E F G H I J K L M N O P Q R S T U V W X Y Z\n");
while ((c=getc(fr))!=EOF){
if(c!='\n') {
c=toupper(c);
pismena[c-'A']++;
}
else if(c=='\n') {
printf("%2d",riadok);
riadok++;
for (i=0;i<=25;i++){
printf(" %2d",pismena[i]);
pismena[i]=0;
c='0' ;
}
printf("\n");
}
}
printf("%2d",riadok);
riadok++;
for (i=0;i<=25;i++){
printf(" %2d",pismena[i]);
pismena[i]=0;
}
printf("\n");
fclose(fr);
return 0;
}
如果c
不是字母,則該行可能導致分段錯誤:
pismena[c-'A']++;
解決它的一種方法:
if (c >= 'A' && c <= 'Z') {
pismena[c-'A']++;
}
在對數組使用[c-'A']
索引之前,應測試c
是否在'A'和'Z'之間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.