c语言读取文件数据乱码

2025-03-09 12:11:48
推荐回答(3个)
回答1:

参考代码如下:
#include
#include
#include
int main()
{
FILE *fp;
char ch;
if ((fp=fopen("o.txt","wr+"))==0) //据所知=没有"wr+"的表达,如果是读取数据的话改成if((fp = ("o.txt","r"))==NULL)就可以了
exit(0);
while(!feof(fp))
{ ch=fgetc(fp);
printf("%c",&ch); //改成printf("%c",ch),加上取地址符就变成读取ch的内存值了
}
return 0;
}

回答2:

给你一个你参考下就行了

#include
using namespace std;
void creat()//创建文件并且输入信息
{
int tel;
char name[20],add[20];
//char name[10];
FILE *fp;
cout<<"请输入要创建的文件的名称\n";
cin>>name;
if((fp=fopen(name,"a+"))==NULL)
{
cout<<"cannot open this file\n";
exit(0);
}
fprintf(fp,"%-10s%-20s%-50s\n","姓名","电话号码","住址");
cout<<"请依次输入姓名、电话号码、住址(以0结束)\n";
cin>>name;
while(strcmp(name,"0"))
{
cin>>tel>>add;
fprintf(fp,"%-10s%-20d%-50s\n",name,tel,add);
cin>>name;
}
fclose(fp);
}
void output()//输出文件的内容
{
FILE *fp;
char tel[20];
char name[20],add[20];
cout<<"请输入要输出的文件的名称\n";
cin>>name;
if((fp=fopen(name,"r"))==NULL)
{
cout<<"cannot open this file\n";
exit(0);
}
cout<<"\t通讯录\n";
while(!feof(fp))
{
fscanf(fp,"%s%s%s\n",name,tel,add);////一定要是%s 格式
printf("%-10s%-20s%-50s\n",name,tel,add);
}
fclose(fp);

}

int main()
{
char a[20]="12";
int b= atoi(a);;//吧字符串变成数字
cout< creat();
output();
return 0;
}
/////或者更简单的/////////////////////////////////
///一个程序
#include
using namespace std;
void output()//输出文件的内容
{
FILE *fp;
char buff[50];
char name[20];
cout<<"请输入要输出的文件的名称\n";
cin>>name;
if((fp=fopen(name,"r"))==NULL)
{
cout<<"cannot open this file\n";
exit(0);
}

while(!feof(fp))
{
fgets(buff,50,fp);
puts(buff);
}
fclose(fp);

}

int main()
{


output();
return 0;
}

回答3:

把打开方式改为 "r"以及把读取信息用fscanf吧,因为如果你是原先先把kk.txt写好,然后再用你的程序打开它的话,由于里面有换行符以及空格等内容,除非开始你是用fwrite函数写入的结构信息,否则fread会把这些都作为信息读取的(也就是说它读到一个struct Student_type大小的数据就结束,而不管这里面到底存放的是什么,这个过程中读到的可能不是一个完整的结构的数据),所以就会出现你所说的乱码。