① c語言如何實現對txt文件的讀取和寫入
1、使用VS新建空工程,直接點擊確定,如下所示。
② C語言如何將一行文本插入到文本文檔的特定一行
1、關鍵使用這幾個函數
int fseek (FILE *stream,long offset,int fromwhere);
long ftell(FILE *stream);
int rewind(FILE *stream);
2、常式:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<Windows.h>
/*讀出文件放到數組中,新增數據插入到該數組中;
重新將數組中的數據寫入該文件中
*/
voidmain(intargc,char*agrv)
{
FILE*fp;
charname[20];//輸入變數
intsum;//輸入變數
charfName[10][20];//可存儲10個人名
intfScore[10];//存儲10個分數記錄
charbuff1[20];
charbuff2[20];
inti=0;
//打開存儲文件
if((fp=fopen("c:\scorelist.txt","r"))==NULL)
{
printf("Cannotopenthefile");
getch();
exit(0);
}
else
{
while(!feof(fp))
{
ZeroMemory(buff1,sizeof(buff1));//清空內存
ZeroMemory(buff2,sizeof(buff1));
fgets(buff1,sizeof(buff1),fp);//讀取名稱
fgets(buff2,sizeof(buff2),fp);//讀取第二行分數
if(strcmp(buff1,"")==0)
{
continue;
}
else
{
strcpy(fName[i],buff1);
printf("%s",fName[i]);//輸出名稱
fScore[i]=atoi(buff2);//將字元型轉換成int型
printf("%i ",fScore[i]);//列印輸出分數值
}
i++;
}
}
fclose(fp);
//打開存儲文件,將排好序的數據重新寫入文件中
if((fp=fopen("c:\scorelist.txt","w"))==NULL)
{
printf("Cannotopenthefile");
getch();
exit(0);
}
else
{
printf("Inputthenewname: ");
scanf("%s",name);
printf("Inputthenewscore: ");
scanf("%i",&sum);
intj=0;
//獲取新增積分排序位置
while(sum<fScore[j])
{
j++;
}
//移動數據重新對數組排序,從後往前排序
intm=i;
while(i>j)
{
strcpy(fName[i],fName[i-1]);
fScore[i]=fScore[i-1];
i--;
}
strcpy(fName[j],name);
strcat(fName[j]," ");
fScore[j]=sum;
//寫入文本文件
intk=0;
while(k<=m)
{
fputs(fName[k],fp);
fprintf(fp,"%i ",fScore[k]);
k++;
}
}
fclose(fp);
}
③ C語言中,怎麼在一個文本文件中的指定位置插入數據而不會把後面的內容覆蓋
c語言並沒有提供這樣的庫函數,需要自己寫。
你寫將要插入位置後面的文件內容讀到緩沖,然後定位文件偏移量插入數據,在將讀出來的寫入。
因為文件在磁碟上是連續存放的,不可能說直接在中間插入內容而不覆蓋原來的,別的語言提供的都是自己按照上述思路寫的。或者除非有某些文件系統存放方式不同(但我沒見過)。
④ C語言如何在文件中指定的一行上插入一行
由於你的文件類型是文本文件,不是二進制文件,所以麻煩些。但是步驟還是好做的。基本思路:從第一個文本文件中用 fgets() 函數讀出一行數據,對讀出的每一行數據進行判斷,如果需要在它的適當位置插入一行,你就把相應的新內容、以及該行的內容寫到第二個文本文件中。如果不需要在該位置插入一行,那就直接將該行數據用 fprintf() 函數寫入第二個文本文件中。
⑤ c語言實現文本編輯器的插入實例
舉手之勞,幫你弄了。
像這個題,沒有點分一般是沒人來的,但小可貴在釣,不在魚。弄了算了。
本題的一個完整的c程序如下,win-tc和Dev-c++下運行通過。
#include <stdio.h>
#define MAXLEN 80
#define MAXLINE 200
char buffer[MAXLEN],fname[120];
char *lineptr[MAXLINE];
FILE *fp;
void edit(),replace(),insert(),delete(),quit();
char comch[]="EeRrIiDdQq";/*命令符*/
void(*comfun[])()={edit,replace,insert,delete,quit};/*對應處理函數*/
int modified=0,/*正文被修改標志*/
last;/*當前正文行數*/
char *chpt;/*輸入命令行字元指針*/
main()
{
int j;
last=0;
while(1)
{
printf("\nInput a command:[e,r,i,d,q].\n");
gets(buffer);/*讀入命令行*/
for(chpt=buffer;*chpt==''||*chpt=='\t';chpt++);/*掠過空白符*/
if(*chpt=='\0') continue;/*空行重新輸入*/
for(j=0;comch[j]!='\0'&&comch[j]!=*chpt;j++);/*查命令符*/
if(comch[j]=='\0') continue;/*非法命令符*/
chpt++;/*掠過命令符,指向參數*/
(*comfun[j/2])();/*執行對應函數*/
fprintf(stdout,"The text is:\n");
for(j=0;j<last;j++)/*顯示正文*/
fputs(lineptr[j],stdout);
}
}
void quit()
{
int c;
if(modified)/* 如正文被修改 */
{
printf("Save? (y/n)");
while(!(((c=getchar())>='a'&&c<='z')||(c>='A'&&c<='Z')));
if(c=='y'||c=='Y')
save(fname); /* 保存被修改過的正文 */
}
for(c=0;c<last;c++)
free(lineptr[c]); /* 釋放內存 */
exit(0);
}
void insert()
{
int k,m,i;
sscanf(chpt,"%d%d",&k,&m); /* 讀入參數 */
if(m<0||m>last||last+k>=MAXLINE)/* 檢查參數合理性 */
{
printf("Error!\n");
return;
}
for(i=last;i>m;i--)/* 後繼行向後移 */
lineptr[i+k-1]=lineptr[i-1];
for(i=0;i<k;i++) /* 讀入k行正文,並插入 */
{
fgets(buffer,MAXLEN,stdin);
lineptr[m+i]=(char *)malloc(strlen(buffer)+1);
strcpy(lineptr[m+i],buffer);
}
last+=k; /* 修正正文行數 */
modified=1; /* 正文被修改 */
}
void delete()
{
int i,j,m,n;
sscanf(chpt,"%d%d",&m,&n); /* 讀入參數 */
if(m<=0||m>last||n<m) /* 檢查參數合理性 */
{
printf("Error!\n");
return;
}
if(n>last)
n=last; /* 修正參數 */
for(i=m;i<=n;i++) /* 刪除正文 */
free(lineptr[i-1]);
for(i=m,j=n+1;j<=last;i++,j++)
lineptr[i-1]=lineptr[j-1];
last=i-1; /* 修正正文行數 */
modified=1; /* 正文被修改 */
}
void replace()
{
int k,m,n,i,j;
sscanf(chpt,"%d%d%d",&k,&m,&n); /* 讀入參數 */
if(m<=0||m>last||n<m||last-(n-m+1)+k>=MAXLINE)/* 檢查參數合理性 */
{
printf("Error!\n");
return;
}
/* 先完成刪除 */
if(n>last)
n=last; /* 修正參數 */
for(i=m;i<=n;i++) /* 刪除正文 */
free(lineptr[i-1]);
for(i=m,j=n+1;j<=last;i++,j++)
lineptr[i-1]=lineptr[j-1];
last=i-1;
/* 以下完成插入 */
for(i=last;i>=m;i--)
lineptr[i+k-1]=lineptr[i-1];
for(i=0;i<k;i++)
{
fgets(buffer,MAXLEN,stdin);
lineptr[m+i-1]=(char *)malloc(strlen(buffer)+1);
strcpy(lineptr[m+i-1],buffer);
}
last+=k; /* 修正正文行數 */
modified=1; /* 正文被修改 */
}
save(char *fname) /* 保存文件 */
{
int i;
FILE *fp;
if((fp=fopen(fname,"w"))==NULL)
{
fprintf(stderr,"Can't open %s.\n",fname);
exit(1);
}
for(i=0;i<last;i++)
{
fputs(lineptr[i],fp);
free(lineptr[i]);
}
fclose(fp);
}
void edit() /* 編輯命令 */
{
int i;
FILE *fp;
i=sscanf(chpt,"%s",fname); /* 讀入文件名 */
if(i!=1)
{
printf("Enter file name.\n");
scanf("%s",fname);
}
if((fp=fopen(fname,"r"))==NULL) /* 讀打開 */
{
fp=fopen(fname,"w"); /* 如不存在,則創建文件 */
fclose(fp);
fp=fopen(fname,"r"); /* 重新讀打開 */
}
i=0;
while(fgets(buffer,MAXLEN,fp)==buffer)
{
lineptr[i]=(char *)malloc(strlen(buffer)+1);
strcpy(lineptr[i++],buffer);
}
fclose(fp);
last=i;
}
⑥ 怎麼把c語言編的程序的結果輸入到一個文本文件中
c語言編的程序的結果輸入到一個文本文件中可以使用fprintf;
例:
#include<stdio.h>
main(){
FILE *fpt;
fpt = fopen("wendangming.txt","w");//打開文檔,寫入
fprintf(fpt,"Hello world");
fclose(fpt);
}
(6)c語言文本文件插入擴展閱讀
它打開一個文本文件,逐個字元地讀取該文件
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
fstream testByCharFile;
int num;
char c;
testByCharFile.open("6.5.cpp",ios::in);
while(!testByCharFile.eof())
{
testByCharFile >> c;
num++;
}
testByCharFile.close();
cout << num << endl;
}
⑦ C語言怎麼導入文本裡面的內容數據
1、c語言並沒有提供這樣的庫函數,需要自己寫。將要插入位置後面的文件內容讀到緩沖,然後定位文件偏移量插入數據,在將讀出來的寫入。
⑧ C語言中怎麼插入文件記錄
1、可以使用fseek()來指定文件位置。
函數原型:int fseek(FILE *stream, long offset, int fromwhere);
函數說明:函數設置文件指針stream的位置。如果執行成功,stream將指向以fromwhere(偏移起始位置:文件頭0(SEEK_SET),當前位置1(SEEK_CUR),文件尾2(SEEK_END))為基準,偏移offset(指針偏移量)個位元組的位置。如果執行失敗(比如offset超過文件自身大小),則不改變stream指向的位置。
返回值:如果執行成功,stream將指向以fromwhere為基準,偏移offset(指針偏移量)個位元組的位置,函數返回0。如果執行失敗(比如offset超過文件自身大小),則不改變stream指向的位置,函數返回一個非0值。
2、常式:向test.txt的末尾添加「this is a text"的字元串。
#include<stdio.h>
#include<string.h>
intmain()
{
constchar*szwrite="thisisatext";
FILE*fp=fopen("test.txt","a+");
if(fp==0){
printf("can'topenfile ");
return0;
}
fseek(fp,0,SEEK_END);
fwrite(szwrite,strlen(szwrite)*sizeof(char),1,fp);
fclose(fp);
return0;
}
⑨ C語言怎麼把字元串用fprintf寫入文本文件
把把字元串寫入文件,基本示例如下:
FILE *fp;
char s[]= "hello world!";
char c = ' ';
fp = fopen("file.txt","a");
fprintf(fp,"%s",s); //字元串使用%s
fprintf(fp,"%c",c); //字元使用%cfclose(fp);從文件讀取到字元串 char s1[30];fp=fopen("file.txt","r");fscanf(fp, "%[^ ] ", s1);printf("%s ",s1);fclose(fp); 本來挺簡單的一件事,可是讓我頭疼了好幾個小時。
在前面寫了 fp = fopen("file.txt","a");
fprintf(fp,"%s",s); //字元串使用%s
但是fclose(fp);這句被我寫在了return 0;之前,然後字元串死活寫不進文件裡面去。後來終於發現是因為使用了while(1)循環讀取埠數據,所以一直沒有執行fclose(fp);這句,才導致文件裡面一直是空的。所以fclose(fp);這句話不要忘記了哦~~ :)
⑩ C語言如何寫入文本文件
1、首先輸入下方的代碼
#include <stdio.h>
int main()
{
//下面是寫數據,將數字0~9寫入到data.txt文件中
FILE *fpWrite=fopen("data.txt","w");
if(fpWrite==NULL)
{
return 0;
}
for(int i=0;i<10;i++)
fprintf(fpWrite,"%d ",i);
fclose(fpWrite);
//下面是讀數據,將讀到的數據存到數組a[10]中,並且列印到控制台上
int a[10]={0};
FILE *fpRead=fopen("data.txt","r");
if(fpRead==NULL)
{
return 0;
}
for(int i=0;i<10;i++)
{
fscanf(fpRead,"%d ",&a[i]);
printf("%d ",a[i]);
}
getchar();//等待
return 1;
}