首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

初学者各位大侠

2012-09-06 
菜鸟求助各位大侠菜鸟刚学文件,写了一个程序将“aa.txt”文件中保存的26个大写英文字母转换成2进制数,存入到

菜鸟求助各位大侠
菜鸟刚学文件,写了一个程序将“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);
}
搞定了

热点排行