c语言-C语言文件一小问题!求大神

问题描述

C语言文件一小问题!求大神

#include"stdio.h"
#include"stdlib.h"
#define N 3
#define M 4
struct student
{
int num;
char name[20];
int score[M];
}stu[N];
int main()
{
int i,j;
FILE fp;
if((fp=fopen("shuju.txt","wb"))==NULL)
{
printf("文错误件打开n");
exit(0);
}printf("请分别输入%d同学们的学号、姓名、四个课程成绩n",N);
for(i=0;i<N;i++)
{
printf("请输入第%d个同学信息:",i+1);
scanf("%d%s",&stu[i].num,stu[i].name);
for(j=0;j<M;j++)
scanf("%d",&stu[i].score[j]);
fwrite(&stu[i],sizeof(struct student ),1,fp);
}
printf("%d个同学的信息已经存入磁盘文件中n",N);
fclose(fp);
if((fp=fopen("shuju.txt","rb"))==NULL)
{
printf("文错误件打开n");
exit(0);
}
printf("
***********学生的信息是:*************n");
for(i=0;i<N;i++)
{
fread(&stu[i],sizeof(struct student ),1,fp);
printf("第%d个同学信息:",i+1);
printf("%dt%s",stu[i].num,stu[i].name);
for(j=0;j<M;j++)
printf("t%d",stu[i].score[j]);
printf("n");
fclose(fp);
}
return 0;
}
运行结果

疑问:

第一:为什么文本(txt)数据是这样的呢??求解?
第二:能把汉字存进文本文件中去吗??

解决方案

文件定义的是FILE fp? 不应该是FILE *fp么。。。。

另外您是用二进制方式写的文件,那么它将以自己的格式处理文件,所以您看不到原来文件的内容。

如果您想看到内容, 要修改
(1) 写打开fopen用"w"方式,不用"wb"
(2) 把所有fwrite改为fprintf具体写什么您得自己定义
例如fprintf(fp,"%s %d", name, score)之类的,具体格式其实和printf到屏幕一样,只是fprintf是写到文件里了
(3) 读打开也是"r",别用"rb"
(3) 再读文件的时候也不能用fread了,要用fscanf(fp,"%s%d");之类, 具体读什么也和scanf从键盘读一样。格式和您写入的相关。
不能一个结构体那么读了,只能和您输入数据那样按结构体的字段从文件里直接读。

解决方案二:

直接存二进制信息是最好的,虽然没法在记事本中直接看到,但是程序读取比较方便。
如果存储成文本,解析起来反倒麻烦。

解决方案三:

因为你是wb二进制方式写的文件。然后结构体中整体写入的。

解决方案四:

你这个不是文本文件,而是二进制文件。
你直接存的是结构体。
举例来说
int num=1,你存在文本文件中的是01 00 00 00,你在记事本打开,这4个字节都是不可识别的字符。
而你在记事本中写“1”,存入的其实是31。

解决方案五:

定义文件指针变量一般格式为:
FILE * 指针变量标识符;
一般定义为:FILE * p;
中文的话应该用“r+”或“w+”,“wb”是存储为二进制文件

解决方案六:

建议你学一些C#的东西

解决方案七:

1、首先FILE fp,应该改成FILE *fp;
2、fp = fopen("shuju.txt","w");
建议你去看一看C语言基础教程,里面的文件操作章节,希望对你有所帮助。

时间: 2024-12-02 01:03:52

c语言-C语言文件一小问题!求大神的相关文章

c语言-C语言的一个小问题,求大神

问题描述 C语言的一个小问题,求大神 #include int main() { float c,f; scanf("%f",&f); c=(5.0/9)*(f-32); printf("摄氏度为%fn",c); return 0; } 语句c=(5.0/9)*(f-32); 中的5.0换成5的话输出结果就错了,这是为什么呀,求大神指点 解决方案 如果除数是5的话,那么/就是整除的意思. 你也可以写成 5f,让它被视作是float 解决方案二: 5/9 取整

c语言取小数问题,急求大神解答!

问题描述 c语言取小数问题,急求大神解答! 程序是#include int main() { float a,b; int n; scanf("%f",&a); n=(1000*a+0.5); b=(n*1.0)/1000; printf("%f",b); return 0; } 输入123.4567 输出是123.457001 输入1234.567 输出时1234.567017 输入12345.67 输出是12345.669922 为什么会这样呢?求大神解

c语言- 有限域?GF(2^8)本原多项式及有限域元素生成表的算法(C语言算法实现,MATLAB验证) 求大神、求大神, ??

问题描述 有限域?GF(2^8)本原多项式及有限域元素生成表的算法(C语言算法实现,MATLAB验证) 求大神.求大神, ?? 有限域?GF(2^8)本原多项式及有限域元素生成表的算法(C语言算法实现,MATLAB验证) 求大神.求大神, ??

c语言-C语言中的函数问题,求大神教我怎么完成。。。。

问题描述 C语言中的函数问题,求大神教我怎么完成.... C语言中的函数问题,求大神教我怎么完成................ 解决方案 #include <stdio.h> int add(int a, int b) // 定义函数 { return a + b; } int main() { int x = 1, y = 2; int r = add(x, y); // 调用函数 printf("%dn", r); } 解决方案二: printf("...&

c语言指针指向地址的问题 求大神详细解答

问题描述 c语言指针指向地址的问题 求大神详细解答 #include int main(int argc char const *argv[]){ int b=0x12345678;char *p4=(char *)&b;printf(""p=0x%hhxn""*p4 );printf(""p=0x%hhxn""*(p4+1) );char *p7=""helloworld"";

C语言--折半法的问题,求大神指点

问题描述 C语言--折半法的问题,求大神指点 对于某公司的职工进行工资排序,且用折半法找到指定的职工 #include<string.h> #define M 3 void inputName(char name[][121],double money[]); void ouput(char name[][121],double money[]); void sortPay(char name[][121],double money[]); void sortName(char name[][

c语言-C语言,第八题,求大神

问题描述 C语言,第八题,求大神 大神请帮忙检查一下,是逻辑错了还是什么问题?为什么得不到正确的输出? 解决方案 int fun(int n,int a){ int sum=0; for(int i=0;i<n;i++){ sum=sum+(n-i)*a*pow((double)10,i); } return sum; } 解决方案二: return sum 不应该放while循环里面吧 解决方案三: 根据题的意思你那n和a好像搞反了,还有就是i=i++应该放在pow后面,return语句放在w

编程c语言-c语言课设考试题目,求大神们帮忙

问题描述 c语言课设考试题目,求大神们帮忙 各位兄弟们能不能帮帮忙,课设考试.竞赛编程题目">

方法-将java项目打成exe或者cmd文件问题,求大神,急,感激不尽

问题描述 将java项目打成exe或者cmd文件问题,求大神,急,感激不尽 可以将一个java 项目打成一个exe或者cmd文件吗?可以让用户双击运行 之后调用我的某类的main方法 解决方案 最方便的工具用exe4j百度有.你的java得有main方法 解决方案二: 教你打包Java程序,jar转exe随处可跑

c++-想用C++抽取txt文件中某标签对里面内容并保存到另外一个txt文件中,求大神帮助

问题描述 想用C++抽取txt文件中某标签对里面内容并保存到另外一个txt文件中,求大神帮助 A文件中,内容是这样的: [fullText]abcd[rating] [fullText]efg[rating] 我想要抽取[fullText] [rating]之间的内容,并将其保存到B文件中, 不同标签对的内容用空格隔开. 应该怎么写呢? 解决方案 正则表达式,解析出数据后保存 解决方案二: z字符串解析,截取对应位置子字符串. 解决方案三: 先分析行的内容,以回车换行符:如果确定 [fullTe