‘壹’ c语言文件读写
有两处错误,一处小的,一处大的。
小的:i都没有初始化。怎么使i跟n比较(i<n)。
大的:fputc的用法没有了解清楚。fputc中int型参数的意义是那个字符的ASCII码值。如上面的程序只要在ch=rand()%2;后面加一条语句ch=ch+'0';就可以了。试试看。
‘贰’ C语言对记事本的读取和写入
按你需求重改的:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<conio.h>
#include<string.h>
#defineLEN101//一行最大字符数(LEN-1)/2
typedefstructrowStr//存储一行数据
{
charstr[LEN];
structrowStr*next;
}RSTR;
voidwriteFile(FILE*fp,RSTR*rstrHead);
RSTR*readFile(FILE*fp,intnRow);//参数:nRow:要读取几行
RSTR*strBA(RSTR*rstrHeadA,RSTR*rstrHeadB);//整合BA字符串,返回整合后链表首节点
voidmeError(void*p);//内存申请失败
intmain()
{
FILE*fp;
charfilePath[]="c:\list.txt";
RSTR*rstrHeadA=NULL,*rstrHeadB=NULL,*rstrHeadBA=NULL;
if((fp=fopen(filePath,"rt+"))==NULL)
{
printf("!");
exit(1);
}
fseek(fp,0,SEEK_SET);//文件流指针重置到开头
printf("----开始读取文件第一行到链表A----
");
rstrHeadA=readFile(fp,1);
printf("----开始读取文件剩余行到链表B----
");
rstrHeadB=readFile(fp,100);//这里第2个参数要大于等于文本剩余行数
printf("----把A的一行字符串整合到B的每行字符串末尾----
");
rstrHeadBA=strBA(rstrHeadA,rstrHeadB);
printf("----删除原文件新建新的空白文件----
");
if(remove(filePath)==0)
if((fp=fopen(filePath,"rt+"))==NULL)
{
printf("!");
exit(1);
}
fseek(fp,0,SEEK_SET);
printf("----先写入整合后的字符串到文件----
");
writeFile(fp,rstrHeadBA);
fclose(fp);
return0;
}
RSTR*strBA(RSTR*rstrHeadA,RSTR*rstrHeadB)
{
RSTR*rstrHeadBA=(RSTR*)malloc(sizeof(RSTR)),*rstrTailBA=NULL,*rstrNew=NULL;
meError(rstrHeadBA);
rstrHeadBA->next=NULL;
while(rstrHeadB->next)
{
rstrNew=(RSTR*)malloc(sizeof(RSTR));
meError(rstrNew);
rstrNew->str[0]=0;
rstrNew->next=NULL;
strcat(rstrNew->str,rstrHeadB->next->str);
strcat(rstrNew->str,rstrHeadA->next->str);
if(rstrHeadBA->next==NULL)
rstrHeadBA->next=rstrNew;
else
rstrTailBA->next=rstrNew;
rstrTailBA=rstrNew;
rstrHeadB=rstrHeadB->next;
}
returnrstrHeadBA;
}
RSTR*readFile(FILE*fp,intnRow)
{
inti=0;
RSTR*rstrHead=(RSTR*)malloc(sizeof(RSTR)),*rstrTail=NULL,*rstrNew=NULL;
meError(rstrHead);
rstrHead->next=NULL;
rstrNew=(RSTR*)malloc(sizeof(RSTR));
meError(rstrNew);
rstrNew->next=NULL;
rstrNew->str[0]=0;
while(fscanf(fp,"%[^
]%*c",rstrNew->str)!=-1)
{
if(rstrHead->next==NULL)
rstrHead->next=rstrNew;
else
rstrTail->next=rstrNew;
rstrTail=rstrNew;
rstrNew=(RSTR*)malloc(sizeof(RSTR));
meError(rstrNew);
rstrNew->next=NULL;
rstrNew->str[0]=0;
i++;
nRow--;
if(nRow==0)
break;
}
if(i==0)//无数据读取,删除预申请空间
rstrHead->next=NULL,rstrTail=NULL;
free(rstrNew);
returnrstrHead;
}
voidwriteFile(FILE*fp,RSTR*rstrHead)//一次写入一行商品信息
{
printf("----开始写入文件----
");
while(rstrHead->next)
{
fprintf(fp,"%s
",rstrHead->next->str);
rstrHead=rstrHead->next;
}
}
voidmeError(void*p)//内存申请失败
{
if(p==NULL)
{
printf("
异常:内存申请失败!回车结束程序!
");
while(getch()!='
');
exit(0);
}
}
‘叁’ c语言的读写
"%d,%d"格式字符串里的逗号就是个格式,输入的时候相应的也应写作5,6的格式,逗号换成任何字符串都一样,如"%daaabbb%d",那么输入就应是5aaabbb6形式
‘肆’ C语言如何实现对txt文件的读取和写入
1、使用VS新建空工程,直接点击确定,如下所示。
‘伍’ c语言中 所谓的【读】【和】写谁能用通俗点的语言帮我解释下
那要看是读、写什么了
对内存:
读 取出其中的内容
写 把数据存入内存
对(硬盘)文件:
读 把文件的内容取出来,存入内存
写 把内存中的内容存到文件中去
‘陆’ c语言里文件的读和写是什么意思
文件占用磁盘上的空间,保存信息。
读就是把信息从空间里拿出来,保存到变量里。
写就是把变量里的内容放到空间里。
注意: 由于C语言是缓冲写,所以要在关闭或刷新后才能看到文件内容。电脑处理文本型文件和二进制型文件的速度不同。因为电脑只能识别二进制,所以在处理文本型文件时需先将其转换为二进制型文件。
‘柒’ c语言怎么理解文件的输入输出相当于读和写这两个一直搞反
在理解输入和输出之前,先需要明白文件是放在硬盘当中的。当写入文件的时候,是把数据从内存放到硬盘里。当读取文件的时候,是把文件的数据从硬盘放到内存再进行下一步处理。而输入和输出是针对内存来讲的。写对应着输出,读对应着输入。
不学计算机的就不要讲了,误人子弟。
‘捌’ c语言文件读写
我写过很多了
其实很简单 要修改 没过于两种办法
1 全部读入内存 修改好 全部写入文件
2 逐行读入 如果不是要修改的内容 直接写入临时文件
如果是修改内容 修改后写入临时文件
完成后 把源文件删除 临时文件拷贝过来 改名
‘玖’ c语言 文件读写
void save()中
fprintf(fp,"\t\t\t\%s\t%s\t%2.1\tf%2.1f\t%2.1f\n",stud[i].num,stud[i].name,stud[i].score1,stud[i].score2,stud[i].score3);
【%2.1\tf】这个是不是有问题?
‘拾’ c语言文件读写方式:两种读写方式r和r+到底有什么区别啊
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fd;
char buf[1024];
char e[10];
int i,j=3;
if ((fd = fopen("file1.dat","ab+")) == NULL) //r是打开一个用于读取的文本文件.rb+是打开一个文件,并在末尾追加数据
{
printf("ERROR\n");
return 0;
}
else
{
fread(buf,1024,1,fd); //读取源文件的内容,我写的file1.dat的文件内容为三个字符
buf[j] = '\0';
printf("原文件内容为%s\n",buf);
printf("请输入你要添加的数据\n");
gets(e); //你要加在源文件后面的内容,键盘输入
fwrite(e,strlen(e),1,fd); //把你输入的字符串加在文件后面
j+=strlen(e); //文件内容增加
fseek(fd,0,0); //把文件的标号偏移到开头
fread(buf,1024,1,fd); //读取写入后的文件内容
buf[j] = '\0';
printf("写入后的文件为%s\n",buf);
}
}
r是打开只读文件.
这是我改的,可以读写