菜鸟求助各位大侠
菜鸟刚学文件,写了一个程序将“aa.txt”文件中保存的26个大写英文字母转换成2进制数,存入到“b.txt”中。但是程序编译成功后,在打印“b.txt”里的2进制内容,在结尾处老是有乱码。各位大侠帮我看看哪里出了问题,跪谢啊。。。
- C/C++ code
#include <stdio.h>#include <string.h>#include <stdlib.h>void binary(char ch[],int n,char c);void inputbinary(char ch[],FILE *input);void display(FILE *input);void reverse(char s[]);int main(){ FILE *output,*input; char c,ch[9] = {'0'}; if((output = fopen("aa.txt","r")) == NULL){ printf("File opne fail...\n"); exit(0); } if((input = fopen("b.txt","wb+")) == NULL){ printf("File open fail...\n"); exit(0); } while(!feof(output)){ c = fgetc(output); binary(ch,9,c); inputbinary(ch,input); } rewind(input); display(input); putchar('\n'); fclose(output); fclose(input);}void binary(char ch[],int n,char c){ int i = 0; char s[20]; do{ s[i++] = c%2 + '0'; }while((c/=2) != 0); s[i] = '\0'; for(i=0;i<8;i++){ ch[i] = s[i]; if(s[i] == '\0') ch[i] = '0'; } ch[i] = '\0'; reverse(ch);}void inputbinary(char ch[],FILE *input){ int i = 0; while(ch[i] != '\0') fputc(ch[i++],input); fputc(ch[i],input); fputc(' ',input);}void display(FILE *input){ char c; while(!feof(input)){ c = fgetc(input); putchar(c); }}void reverse(char s[]){ int i,j; char tmp; for(i=0,j=strlen(s)-1;i<j;i++,j--){ tmp = s[i]; s[i] = s[j]; s[j] = tmp; }}[解决办法]
http://topic.csdn.net/u/20081202/23/88924fa0-f45f-4975-b516-2d3b56f28982.html
楼主试下,关闭文件b.txt后,再打开输出
是否还会出现乱码的情况呢?
[解决办法]
打开a.txt用的方式"r",然而打开b.txt用的方式是"wb+",读取的是assic值,而去存取的是二进制形式,所以会有问题。
[解决办法]
我没看代码(一般不是我写的我看不懂),不过我怀疑你的数组没有初始化,我以前也遇到过类似的问题,输出是乱码,结果被指出数组没有初始化,希望对你有用
[解决办法]
- C/C++ code
#include<stdio.h>int main(){ char c,i; if(freopen("aa.txt","r",stdin)&&freopen("b.txt","w",stdout)){ while(~scanf("%c",&c)){ for(i=8;i--;c<<=1)printf("%d",(128&c)==128); printf("\n"); } }}
[解决办法]
在读EOF前又多读了一个字符;把
while(!feof(output)){
c = fgetc(output);
binary(ch,9,c);
inputbinary(ch,input);
}
改成:
while((c = fgetc(output))!= EOF){
binary(ch,9,c);
inputbinary(ch,input);
}
搞定了