生命很宝贵 生命很宝贵
关注数: 13 粉丝数: 10 发帖数: 414 关注贴吧数: 130
文件输出segmentation fault 求助 我想的是 输入一个文件中的内容 然后读取内容并输出每个字母出现的频率 然后再让使用者 输入一个shift(例如‘1’那么就是吧‘a'变成’b'或‘f'变成’g'),然后输出解码之后的文章 下面是我的程序 但是输出的时候会出现segmentation fault的错误 小弟看了好久也没明白错误出在哪里 求指教 #include <stdio.h> #include <ctype.h> void count_freq(int count[] ); void print_freq(int count[] ); int rotate_left(int ch); int rotate_right(int ch); int encode(int ch , int shift); int main(int argc, char *argv[]) { FILE *fp; int count[26] = { 0 }; int ch; int shift; fp = fopen(argv[1],"r"); while(( ch = getc(fp)) != EOF ) { count_freq( count ); } print_freq( count ); fclose(fp); printf("Enter your best guess of shift: "); scanf("%d",&shift); fp = fopen(argv[1],"r"); while(( ch = getc(fp)) != EOF ) { encode(ch,shift); } return 0; } void count_freq( int count[] ) { int ch; int i; while(( ch = getchar()) != EOF ) { ch = toupper( ch ); if(( ch >= 'A' )&&( ch <= 'Z' )) { i = ch - 'A'; count[i]++; } } } void print_freq( int count[] ) { double total = 0.0; int i; for( i=0; i < 26; i++ ) { total += count[i]; } for( i=0; i < 26; i++ ) { printf( "%c: %5d [%1.1f",'A'+i,count[i],count[i]*100.0/total); putchar('%'); printf("]\n"); } } int rotate_right( int ch ) { if (ch >='A' && ch <='Z') { ch =(ch-'A'+ 1) % 26 + 65; } else if (ch >='a' && ch <='z') { ch = (ch -'a'+ 1) % 26 + 97; } return ch; } int rotate_left ( int ch ) { if (ch >='A' && ch <='Z') { ch = (ch - 65 - 1 + 26) % 26 + 65; } else if (ch >='a' && ch <='z') { ch=(ch - 97 - 1 + 26) % 26 + 97; } return ch; } int encode( int ch , int shift) { int n; if (shift > 0) { for (n = 1;n <= shift;n++) { ch = rotate_right(ch); } } else if (shift < 0 ) { for (n =-1;n >= shift;n--) { ch = rotate_left(ch); } } else { ch = ch; } putchar(ch); return ch; }
1 下一页