Ⅰ c語言實現以二進制位的方式寫文本文件。運行8次,每次輸入一個二進制位,最後打開檢查文件。
本程序只實現了功能,應再加一些錯誤檢查才好,鑒於實現復雜,影響主題,就不寫了
#include<stdio.h>
intwrite_file(char*file,intbit)
{
FILE*fp=fopen(file,"r+b");//以讀寫方式打開二進制文件
charch=0;
if(fp==NULL)
fp=fopen(file,"w");//第一次沒有文件時會找不到文件
else
{
fread(&ch,1,1,fp);
ch<<=1;
if(bit)
ch|=0x01;
fseek(fp,0,SEEK_SET);
}
if(fwrite(&ch,1,1,fp)!=1)//將ch寫入文件,以二進制寫方式
{
return-1;
}
fclose(fp);
return0;
}
intmain()
{
charfilename[128]={"D:\abc.txt"};//為了方便就不輸入文件名了
/*放開這里可以輸入文件名
printf("inputfilename:");
scanf("%s",filename);
*/
intbit;
printf("inputanum:");
while(scanf("%d",&bit)!=1||(bit!=0&&bit!=1))
{
fflush(stdin);
printf("inputerror,re-input ");
}
if(write_file(filename,bit))
{
printf("writefileerror,clearfileandre-do ");
return-1;
}
return0;
}
Ⅱ 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;
}
Ⅲ 怎麼在C語言裡面輸入二進制數字
c語言不能直接表示二進制,沒有數字前綴表示。
例子如下:
假設有一個
int
類型的數,值為5,那麼,我們知道它在計算機中表示為:
00000000
00000000
00000000
00000101
5轉換成二制是101,不過int類型的數佔用4位元組(32位),所以前面填了一堆0。
(3)c語言二進制寫入文本擴展閱讀
進制是一種計數的方式,常用的有二進制、八進制、十進制、十六進制。任何數據在計算機內存中都是以二進制的形式存放的。
我對進制的個人理解,二進制數是以2為計算單元,滿2進1位的數;八進制數是以8為計算單元,滿8進1位的數。
對於任何一個數字,我們都可以用不同的進制來表示,比如,十進制數12,用二進製表示為1100,用八進製表示為14,用十六進製表示為0xc。
Ⅳ C語言中,以二進制模式打開的文件不能寫入文本嗎
展開全部
可以的,直接用fwrite向裡面寫數組就可以把文本寫進去了。
別用fprintf了
Ⅳ 請c語言高手給寫一個函數,實現以二進制位的方式寫文本文件。
你的意思是輸入的8個以01組成的數組,將其寫入到文件中,而存儲時,將這個數組轉換成對應的字元記入文件中吧。
但這樣不是寫
二進制文件
啊!
Ⅵ C語言讀寫二進制文本文件(.txt),如果可行,加200分,先謝過
假定你用MS VC++ 6.0 編譯器,不是TC.
假定 第1、2、3、4位元組表示分數, 是 int 型
文件名 abc.txt
如果還沒有2進制文件,則可以自己建1個,假定數據為:
// int mark[1000]={60,70,80,95,30};
// char m[1000][25]={"zhang","wang","Li","Zhao","Fang"};
打開寫入:
// fin=fopen(namein,"wb+");
// for (i=0;i<n;i++) { fwrite(&mark[i],4,1,fin);fwrite(m[i],25,1,fin);}
// fclose(fin);
再運行。
下面沒有使用「結構」,分數存 mark[], 人名存 m[][25].
#include <stdio.h>
int main() {
FILE *fin;
char namein[80]="abc.txt";
int mark[1000],t;
char m[1000][25],ts[25];
int i,j,n=0;
fin=fopen(namein,"rb+");
if (!fin){
printf("open %s error\n",namein);
}
while(1){
fread(&mark[n],4,1,fin);
if (feof(fin)) break;
fread(&m[n],25,1,fin);
if (feof(fin)) break;
n++;
}
printf("I read %d data\n",n);
for (i=0;i<n;i++) printf("%d %s\n",mark[i],m[i]);
for (i=0;i<n-1;i++)
for (j=i+1;j<n;j++){
if (mark[j]>mark[i]){
t = mark[i];mark[i]=mark[j];mark[j]=t;
strcpy(ts,m[i]); strcpy(m[i],m[j]);strcpy(m[j],ts);
}
}
rewind(fin);
for (i=0;i<n;i++)
{ fwrite(&mark[i],4,1,fin);fwrite(m[i],25,1,fin);}
fclose(fin);
return 0;
}
Ⅶ c語言中採用二進制文件存儲數據的問題
1、二進制文本使用fopen函數的二進制模式「rb」就可以打開。對於程序來說,不管後綴名如何,文件分為兩種類型:文本文件和二進制文件。 C語言里有一系列文件操作函數。區分文本和二進制文件,需要在打開文件時設置不同的控制符mode的變數即可。
2、fopen的函數原型:FILE * fopen(const char * path,const char * mode);
fopen函數的第一個參數是文件路徑,第二個參數是打開方式,有以下幾種方式:
r 以只讀方式打開文件,該文件必須存在。
r+ 以可讀寫方式打開文件,該文件必須存在。
rb+ 讀寫打開一個二進制文件,允許讀數據。
rw+ 讀寫打開一個文本文件,允許讀和寫。
w 打開只寫文件,若文件存在則文件長度清為0,即該文件內容會消失。若文件不存在則建立該文件。
w+ 打開可讀寫文件,若文件存在則文件長度清為零,即該文件內容會消失。若文件不存在則建立該文件。
a 以附加的方式打開只寫文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾,即文件原先的內容會被保留。(EOF符保留)
a+ 以附加方式打開可讀寫的文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾後,即文件原先的內容會被保留。 (原來的EOF符不保留)
wb 只寫打開或新建一個二進制文件;只允許寫數據。
wb+ 讀寫打開或建立一個二進制文件,允許讀和寫。
wt+ 讀寫打開或著建立一個文本文件;允許讀寫。
at+ 讀寫打開一個文本文件,允許讀或在文本末追加數據。
ab+ 讀寫打開一個二進制文件,允許讀或在文件末追加數據。
上述的形態字元串都可以再加一個b字元,如rb、w+b或ab+等組合,加入b 字元用來告訴函數庫打開的文件為二進制文件,而非純文字文件。
3、常式:
#include <stdlib.h>
#include<stdio.h>
intmain()
{
FILE*fpPhoto,*fpText,*fpTarget;
intiRead;
charszBuf[100];
printf("請輸入第一個文件名(jpg): ");
gets(szBuf);
fpPhoto=fopen(szBuf,"rb");
printf("請輸入第二個文件名(txt): ");
gets(szBuf);
fpText=fopen(szBuf,"rb");
printf("請輸入目的文件名(jpg): ");
gets(szBuf);
fpTarget=fopen(szBuf,"wb");
if(!fpPhoto||!fpText||!fpTarget)
{
printf("打開文件失敗! ");
system("pause");
return-1;
}
while((iRead=fread(szBuf,1,sizeof(szBuf),fpPhoto))>0)
fwrite(szBuf,1,iRead,fpTarget);
while((iRead=fread(szBuf,1,sizeof(szBuf),fpText))>0)
fwrite(szBuf,1,iRead,fpTarget);
fclose(fpPhoto);
fclose(fpText);
fclose(fpTarget);
return0;
}