『壹』 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是打開只讀文件.
這是我改的,可以讀寫