1. c语言怎样修改文件中的结构体数组
write(&cus[i],sizeof(struct client),1,fp) 是什么意思
答:C语言把一个结构体数组写入文件分三步: 1、以二进制写方式(wb)打开文件 2、调用写入函数fwrite()将结构体数据写入文件 3、关闭文件指针 相应的,读文件也要与之匹配: 1、以二进制读方式(rb)打开文件 2、调用读文件函数fread()读取文件中的数据.
2. c语言中如何修改储存在文件的结构体内容中。小文件
假定一个结构体变量定义如下:
struct Student {...} a;
将结构体保存到文件中:
fwrite(&a,sizeof(struct Student), 1, fp); //从a的地址里读取1个结构体,向fp文件中写入读取到的数据
从文件中读取结构体数据:
fread(&a,sizeof(struct Student),1,fp); //从fp文件中读取一个结构体数据,保存到a的地址里。
3. 在c语言中,怎么修改文件中相关数据信息
三种方法:
(1)将文件中数据读入内存中,修改后,清空源文件,存入新数据。
(2)以读写的方式打开文件,将文件指针移动到要修改的地方,写入新数据。新数据将会覆盖掉旧数据。
(3)以读写的方式打开文件,将文件指针定位到需要修改数据的末尾,然后删除需要修改的数据(通过循环n次执行fputc(8,fp),直到清空需要修改的数据为止.
8为退格键对应的ascii)。
然后计算需要加入的新数据长度,通过fputc(32,fp)来添加空格到文件中(32为空格键的ascii).
然后根据指针位置,填入数据覆盖掉这些空格。
第一种方法适合数据量较小的情况,
后两种情况适合数据量较大的情况,但程序写起来麻烦,如果用心写代码,也用不了多久。呵呵。
4. c语言 结构体程序求修改
#include<time.h>
#include <stdio.h>
#include <stdlib.h>
#define ID 1
#define ID1 2
#define ID2 3
#define ID3 4
struct human
{
int blood;
int state;//状态
int rate;
};
int num=0; //回合数
struct human one={400,0,50};
struct human two={400,0,50};
struct human three={400,0,50};
struct human four={400,0,50};
void show(struct human h)
{
printf("第%d回合\n角色%d 体力%d %s 回复率%d%\n",++num,ID,h.blood,h.state?"正常":"中毒",h.rate);
}
void show1(struct human h1)
{
printf("\n角色%d 体力%d %s 回复率%d%%\n",ID1,h1.blood,h1.state?"正常":"中毒",h1.rate);
}
void show2( struct human h2)
{
printf("\n角色%d 体力%d %s 回复率%d%%\n",ID2,h2.blood, (h2.state ? "中毒":"正常"),h2.rate);
}
void show3(struct human h3)
{
printf("\n角色%d 体力%d %s 回复率%d%%\n",ID3,h3.blood,h3.state?"正常":"中毒",h3.rate);
}
int main()
{
char ch;
srand( (unsigned)time( NULL ) );
show(one);
show1(two);
show2(three);
show3(four);
while(ch=getchar())
{
if(ch==10)
{
int r=rand();
if(r>16384)
{
one.state=1;
one.blood=one.blood-r/100;
if(one.blood<=0)
{
one.blood=0;
}
}
else one.state=0;
show(one);
if(r<16384)
{
two.state=1;
two.blood=two.blood-r/130;
if(two.blood<=0)
{
two.blood=0;
}
}
else two.state=0;
show1(two);
if(r>16384)
{
three.state=1;
three.blood=three.blood-r/105;
if(three.blood<=0)
{
three.blood=0;
}
}
else three.state=0;
show2(three);
if(r<16384)
{
four.state=1;
four.blood=four.blood-r/150;
if(four.blood<=0)
{
four.blood=0;
show3(four);
return 0;
}
}
else four.state=0;
show3(four);
}
}
return 0;
}
你的程序我基本上看懂了,上面的代码能够正常执行
1.c语言不支持bool类型,所以定义state时,应该定义成int state
2.char ch,应该写在函数前面,因为c语言不支持变量的随定义随引用(即如果要使用一个变量,只需先写一定义变量的语句即可,并不需要在函数开头定义)
3.c语言不支持引用类型,引用是c++增加的特性
void show(human &h)
应该写成void show( struct human h)
4.较低版本的c语言不支持直接使用自定义的结构体类型定义变量,结构体类型前还需要加struct关键字 如human one是不行的,必须是struct human one
5. C语言怎么修改文件信息
#include<stdio.h>
#include<stdlib.h>//文件操作函数头文件
struct st{//定义一个结构体
char a[11];//301
char b[11];//01
char c[29];//xiaoming
char d[9];//m1
};
int main()
{
FILE *fp;//文件指针
fp=fopen("D:\123.txt","r+");//用fopen函数打开D盘下,名为123.txt的文件;
struct st s={"301","01","xiaoming","m"};//各成员的初值;
scanf("%s%s",s.c,s.d);//输入之后会把原有的信息覆盖掉;
fprintf(fp,"%s %s %s",s.a,s.b,s.c,s.d);//用fprintf函数将固定格式的数据写入文件;
printf("%s %s %s %s",s.a,s.b,s.c,s.d);
fclose(fp);
return 0;
/*这样就可以修改文件内容了,之前没仔细看,没看到是文件操作*/
}
6. C语言编程 结构体 请在源程序中修改,请注释。
#include<stdio.h>
#include<stdlib.h>//forexit()
#defineMAXLENTH100
typedefstruct{
intID;
floatheight;
}STUDENT;
intgetRecs(STUDENTs[]);
voidsort(STUDENTs[],intn);
voiddisplay(STUDENTdata[],intn);
/*1.从文件获取学生身高表;2.按身高升序排序后在屏幕上打印身高表。
1.intgetRecs(STUDENTSs[])
功能:从文件records.txt中读数据到结构体数组s中,并返回人数n。
2.voidsort(STUDENTSs[],intn)
功能:对结构体数组s按身高从低到高排序。
*/
intmain(){
STUDENTdata[MAXLENTH];
intn=getRecs(data);
sort(data,n);
display(data,n);
return0;
}
intgetRecs(STUDENTs[]){
intn=0;
FILE*fp=fopen("records.txt","rt");
if(!fp){
printf("can'topenfile
");
exit(1);
}
while(!feof(fp)){
fscanf(fp,"%d%f",&s[n].ID,&s[n].height);
n++;
}
fclose(fp);
returnn;
}
voidsort(STUDENTs[],intn){
inti,j,k;
STUDENTtemp;
for(i=0;i<n-1;++i){
k=i;
for(j=i+1;j<n;++j)
if(s[k].height>s[j].height)k=j;
if(k!=i){
temp=s[i];
s[i]=s[k];
s[k]=temp;
}
}
}
voiddisplay(STUDENTdata[],intn){
inti;
if(n==0)printf("
顺序表是空的!");
else{
for(i=0;i<n;++i)
printf("%5d%.2f
",data[i].ID,data[i].height);
}
}