久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

文件操作 FILE結構體(C語言版)

 流浪的蜉蝣 2014-10-16

用VC 控制臺程序實現Word 的排版功能,,輸入文件名讀取小于64k 的英文文本,
然后對英文文本進行勻齊排版,,最后結果為:一行70個字符,,左右兩邊分別空
4 個字符,長單詞不能折斷,,每行必須對齊,,單詞中間插入空格。均勻插入,。

注意:1,、不能用STL庫,類似文件流fstream都不允許用
      2,、不能用sdk,mfc,,windows api
      3、用最基本的c/c++實現

從文件輸入輸出:

#include<stdio.h>

FILE *in,*out;
in=fopen("a.txt","r");       //其意義是在當前目錄下打開文件a.txt,, 只允許進行“讀”操作,,并使in指向該文件。
out=fopen("aout.txt","w");   //打開aout.txt, 只能向該文件寫入數據, 如果不存在則創(chuàng)建aout.txt;

fscanf(in,"%d",&a);
fprintf(out,"%d",a);
fscanf(stdin,"%d",&a)=scanf("%d",&a);
fclose(in);
fclose(out);


文件使用方式               意 義

“rt”      只讀打開一個文本文件,,只允許讀數據
“wt”      只寫打開或建立一個文本文件,,只允許寫數據
“at”      追加打開一個文本文件,并在文件末尾寫數據
“rb”      只讀打開一個二進制文件,,只允許讀數據
“wb”       只寫打開或建立一個二進制文件,,只允許寫數據
“ab”       追加打開一個二進制文件,并在文件末尾寫數據
“rt+”      讀寫打開一個文本文件,,允許讀和寫
“wt+”      讀寫打開或建立一個文本文件,,允許讀寫
“at+”      讀寫打開一個文本文件,允許讀,,或在文件末追加數據
“rb+”      讀寫打開一個二進制文件,,允許讀和寫
“wb+”      讀寫打開或建立一個二進制文件,允許讀和寫
“ab+”      讀寫打開一個二進制文件,,允許讀,,或在文件末追加數據


  對于文件使用方式有以下幾點說明:

  1. 文件使用方式由r,w,a,t,b,+六個字符拼成,,各字符的含義是:

  r(read): 讀
  w(write): 寫
  a(append): 追加
  t(text): 文本文件,,可省略不寫
  b(banary): 二進制文件
  +: 讀和寫

  2. 凡用“r”打開一個文件時,該文件必須已經存在, 且只能從該文件讀出,。

  3. 用“w”打開的文件只能向該文件寫入,。 若打開的文件不存在,則以指定的文件名建立該文件,,若打開的文件已經存在,,則將該文件刪去,重建一個新文件,。

  4. 若要向一個已存在的文件追加新的信息,,只能用“a ”方式打開文件。但此時該文件必須是存在的,,否則將會出錯,。

  5. 在打開一個文件時,如果出錯,,fopen將返回一個空指針值NULL,。在程序中可以用這一信息來判別是否完成打開文件的工作,并作相應的處理,。因此常用以下程序段打開文件:

 if((fp=fopen("c:\\hzk16","rb")==NULL)
 {
  printf("\nerror on open c:\\hzk16 file!");
  getch();  //等待用戶敲入一個字符再運行
  exit(1);
 }


* 字符讀寫函數 :fgetc和fputc

* 字符串讀寫函數:fgets和fputs

* 數據塊讀寫函數:freed和fwrite

* 格式化讀寫函數:fscanf和fprinf

一,、讀字符函數fgetc

[例10.1]讀入文件e10-1.c,在屏幕上輸出,。

# include <stdio.h>
#include<iostream>
void main()
{
    FILE*fp;
    char ch;
    if((fp=fopen("input.txt","rt"))==NULL)
    {
        printf("Cannot open file strike any key exit!");
        getchar();
        exit(1);
    }
    ch=fgetc(fp);/* 在文件打開時,,文件內部位置指針總是指向文件的第一個字節(jié)。*/
    while(ch!=EOF)
    {
        putchar(ch);
        ch=fgetc(fp);
    }
    printf("\n");
    fclose(fp);
}

二,、寫字符函數fputc

[例10.2]從鍵盤輸入一行字符,,寫入一個文件, 再把該文件內容讀出顯示在屏幕上,。

# include <stdio.h>
#include<iostream>
void main()
{
    FILE*fp;
    char ch;
    if((fp=fopen("output.txt","wt+"))==NULL)
    {
        printf("Cannot open file strike any key exit!");
        getchar();
        exit(1);
    }
    printf("input a string:\n");
    ch=getchar();
    while(ch!='\n')
    {
        fputc(ch,fp);
        ch=getchar();
    }
    rewind(fp);//將文件內部位置指針從末尾移向開頭;

    ch=fgetc(fp);
    while(ch!=EOF)
    {
        putchar(ch);
        ch=fgetc(fp);
    }
    printf("\n");
    fclose(fp);
}

三,、 字符串讀寫函數fgets

fgets(str,n,fp);   //從fp所指的文件中讀出n-1個字符送入字符數組str中, 末尾會自動加上'\0'。

[例10.4]從e10_1.c文件中讀入一個含10個字符的字符串,。

# include <stdio.h>
#include<iostream>
void main()
{
    FILE*fp;
    char str[11];
    if((fp=fopen("input.txt","rt"))==NULL)
    {
        printf("Cannot open file strike any key exit!");
        getchar();
        exit(1);
    }
    fgets(str,11,fp);
    printf("%s\n",str);
    fclose(fp);
}

  對fgets函數有兩點說明:

  1. 在讀出n-1個字符之前,,如遇到了換行符或EOF,則讀出結束,。

  2. fgets函數也有返回值,,其返回值是字符數組的首地址。


四,、寫字符串函數fputs

fputs("abcd",fp);    //把字符串"abcd"寫入fp所指的文件之中

[例10.5]在例10.2中建立的文件string中追加一個字符串,。

 

# include <stdio.h>
#include<iostream>
void main()
{
    FILE*fp;
    char ch, st[20];
    if((fp=fopen("output.txt","at+"))==NULL)
    {
        printf("Cannot open file strike any key exit!");
        getchar();
        exit(1);
    }
    printf("input a string:\n");
    scanf("%s",st);
    fputs(st,fp);
    rewind(fp);
    ch=fgetc(fp);
    while(ch!=EOF)
    {
        putchar(ch);
        ch=fgetc(fp);
    }
    printf("\n");
    fclose(fp);
}

五、數據塊讀寫函數fread和fwrite

fread(buffer,size,count,fp);  
fwrite(buffer,size,count,fp);  

其中buffer是一個指針,,在fread函數中,,它表示存放輸入數據的首地址。在fwrite函數中,它表示存放輸出數據的首地址,。
size 表示數據塊的字節(jié)數。count 表示要讀寫的數據塊塊數,。fp 表示文件指針,。

fread(fa,4,5,fp);   //其意義是從fp所指的文件中,每次讀4個字節(jié)(一個實數)送入實數組fa中,,連續(xù)讀5次,,即讀5個實數到fa中。

 

# include <stdio.h>
struct stu
{
    char name[10];
    int num;
    int age;
    char addr[15];
}boya[2],boyb[2],*pp,*qq;
main()
{
    FILE*fp;
    char ch;
    int i;
    pp=boya;
    qq=boyb;
    if((fp=fopen("stu_list","wb+"))==NULL)
    {
        printf("Cannot open file strike any key exit!");
        getch();
        exit(1);
    }
    printf("\ninput data\n");
    for(i=0;i<2;i++,pp++)
        scanf("%s%d%d%s",pp->name,&pp->num,&pp->age,pp->addr);
    pp=boya;
    fwrite(pp,sizeof(struct stu),2,fp);
    rewind(fp);
    fread(qq,sizeof(struct stu),2,fp);
    printf("\n\nname\tnumber age addr\n");
    for(i=0;i<2;i++,qq++)
        printf("%s\t%5d%7d%s\n",qq->name,qq->num,qq->age,qq->addr);
    fclose(fp);
}

六,、文件隨機讀寫:

rewind(文件指針),;       //將文件內部位置指針置于開頭;
fseek(文件指針,位移量,,起始點)  

其中:“文件指針”指向被移動的文件,。 “位移量”表示移動的字節(jié)數,要求位移量是long型數據,,以便在文件長度大于64KB 時不會出錯,。
當用常量表示位移量時,要求加后綴“L”,?!捌鹗键c”表示從何處開始計算位移量,規(guī)定的起始點有三種:文件首,,當前位置和文件尾,。


起始點    表示符號    數字表示
──────────────────────────
文件首    SEEK—SET    0
當前位置   SEEK—CUR    1
文件末尾   SEEK—END     2


fseek(fp,100L,0);    //把位置指針移到離文件首100個字節(jié)處。

還要說明的是fseek函數一般用于二進制文件,。在文本文件中由于要進行轉換,,故往往計算的位置會出現錯誤。文件的隨機讀寫在移動位置指針
之后,, 即可用前面介紹的任一種讀寫函數進行讀寫,。


[例10.8]在學生文件stu list中讀出第二個學生的數據。

 

# include <stdio.h>
struct stu
{
         char name[10];
     int num;
     int age;
     char addr[15];
}boy,*qq;

main()
{
    FILE*fp;
    char ch;
    int i=1;
    qq=&boy;
    if((fp=fopen("stu_list","rb"))==NULL)
    {
        printf("Cannot open file strike any key exit!");
        getch();
        exit(1);
    }
    rewind(fp);
    fseek(fp,i*sizeof(struct stu),0);
    fread(qq,sizeof(struct stu),1,fp);
    printf("\n\nname\tnumber age addr\n");
    printf("%s\t%5d %7d %s\n",qq->name,qq->num,qq->age,qq->addr);
}

七,、文件檢測函數

  C語言中常用的文件檢測函數有以下幾個,。

  一、文件結束檢測函數feof函數調用格式: feof(文件指針),;

  功能:判斷文件是否處于文件結束位置,,如文件結束,則返回值為1,,否則為0,。

  二、讀寫文件出錯檢測函數ferror函數調用格式: ferror(文件指針);

  功能:檢查文件在用各種輸入輸出函數進行讀寫時是否出錯,。 如ferror返回值為0表示未出錯,,否則表示有錯。

  三,、文件出錯標志和文件結束標志置0函數clearerr函數調用格式: clearerr(文件指針);

  功能:本函數用于清除出錯標志和文件結束標志,,使它們?yōu)?值。

 

八,、在附錄中給出了全部庫函數

ALLOC.H    說明內存管理函數(分配,、釋放等)。
ASSERT.H    定義 assert調試宏,。
BIOS.H     說明調用IBM—PC ROM BIOS子程序的各個函數,。
CONIO.H    說明調用DOS控制臺I/O子程序的各個函數。
CTYPE.H    包含有關字符分類及轉換的名類信息(如 isalpha和toascii等),。
DIR.H     包含有關目錄和路徑的結構,、宏定義和函數。
DOS.H     定義和說明MSDOS和8086調用的一些常量和函數,。
ERRON.H    定義錯誤代碼的助記符,。
FCNTL.H    定義在與open庫子程序連接時的符號常量。
FLOAT.H    包含有關浮點運算的一些參數和函數,。
GRAPHICS.H   說明有關圖形功能的各個函數,,圖形錯誤代碼的常量定義,正對不同

             驅動程序的各種顏色值,,及函數用到的一些特殊結構,。
IO.H      包含低級I/O子程序的結構和說明。
LIMIT.H    包含各環(huán)境參數,、編譯時間限制,、數的范圍等信息。
MATH.H     說明數學運算函數,,還定了 HUGE VAL 宏,, 說明了matherr和matherr

             子程序用到的特殊結構。
MEM.H     說明一些內存操作函數(其中大多數也在STRING.H 中說明),。
PROCESS.H   說明進程管理的各個函數,,spawn…和EXEC …函數的結構說明。
SETJMP.H    定義longjmp和setjmp函數用到的jmp buf類型,, 說明這兩個函數,。
SHARE.H    定義文件共享函數的參數。
SIGNAL.H    定義SIG[ZZ(Z] [ZZ)]IGN和SIG[ZZ(Z] [ZZ)]DFL常量,,說明rajse

             和signal兩個函數,。
STDARG.H    定義讀函數參數表的宏,。(如vprintf,vscarf函數)。
STDDEF.H    定義一些公共數據類型和宏,。
STDIO.H    定義Kernighan和Ritchie在Unix System V 中定義的標準和擴展的

             類型和宏,。還定義標準I/O 預定義流:stdin,stdout和stderr,說明

             I/O流子程序,。
STDLIB.H    說明一些常用的子程序:轉換子程序,、搜索/ 排序子程序等。
STRING.H    說明一些串操作和內存操作函數,。
SYS\STAT.H   定義在打開和創(chuàng)建文件時用到的一些符號常量。
SYS\TYPES.H  說明ftime函數和timeb結構,。
SYS\TIME.H   定義時間的類型time[ZZ(Z] [ZZ)]t,。
TIME.H     定義時間轉換子程序asctime、localtime和gmtime的結構,,ctime,、

             difftime、 gmtime,、 localtime和stime用到的類型,,并提供這些

             函數的原型。
VALUE.H    定義一些重要常量,, 包括依賴于機器硬件的和為與Unix System V相兼

             容而說明的一些常量,,包括浮點和雙精度值的范圍。

    本站是提供個人知識管理的網絡存儲空間,,所有內容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內容中的聯(lián)系方式,、誘導購買等信息,,謹防詐騙。如發(fā)現有害或侵權內容,,請點擊一鍵舉報,。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多