菜鸟求助各位大侠
菜鸟刚学文件,写了一个程序将“aa.txt”文件中保存的26个大写英文字母转换成2进制数,存入到“b.txt”中。但是程序编译成功后,在打印“b.txt”里的2进制内容,在结尾处老是有乱码。各位大侠帮我看看哪里出了问题,跪谢啊。。。
#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; }}#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);
}
搞定了