gpt4 book ai didi

C - 计算文件中字母的出现次数 - 错误 139 : Segmentation fault

转载 作者:太空宇宙 更新时间:2023-11-04 08:43:13 24 4
gpt4 key购买 nike

我正在编写一个程序,计算文本文件每一行中各种字母的出现次数。我通过学校网站执行此操作,该网站可能运行类似于 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 - 计算文件中字母的出现次数 - 错误 139 : Segmentation fault,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22713423/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com