C語言複習3/27

來源:互聯網
上載者:User

標籤:logs   pre   int   丟失   ken   結束   max   完全   size   

1.指向指標的指標

#include<stdio.h>int main(){    char *a[] = { "hello","world","my","love" };    char **p;              //*p表示p為指標變數,char *表示p指向char *類型的變數    p = a;                   //p = &a[0]    printf("%s\n", *p);//輸出a[0]    return 0;}

2.函數指標

int (*p)(int, int);//定義一個函數指標p,指向的函數有兩個int類型的形參,函數傳回值為int型。

#include<stdio.h>int main(){    void(*p)(int, int);    void max(int, int);    void min(int, int);    int n = 0;    scanf_s("%d", &n);    if (n == 1)        p = max;    else        p = min;    (*p)(3, 4);    return 0;}void max(int x, int y){    printf("%d\n", x > y ? x : y);}void min(int x, int y){    printf("%d\n", x < y ? x : y);}

函數指標就是函數的入口地址。

3.結構體

/*方法一*/struct Student{    ...}student1,student2;/*方法二*/struct Student{    ...};struct Student student1, student2;//struct Student是類型名/*方法三*/typedef struct{    ...}Student;Student student1, student2;/*方法四*/struct{      ...}student1,student2;

4.檔案類型指標

typedef struct{    short level;          //緩衝區“滿”或“空”的程度    unsigned flags;       //檔案狀態標誌    char fd;              //檔案描述符    unsigned char hold;   //如緩衝區無內容不讀取字元    short bsize;          //緩衝區的大小    unsigned char* buffer;//資料緩衝區的位置    unsigned char* curp;  //指標當前的指向    unsigned istemp;      //臨時檔案指標    short token;          //用於有效性檢查}FILE;

聲明FILE結構體類型的資訊包含在標頭檔“stdio.h”中。在程式中可以直接使用FILE類型名定義變數,每一個FILE類型變數對應一個檔案的資訊區,在其中存放該檔案的有關資訊。

FILE *fp;//定義一個指向檔案的指標變數fp;

4.檔案操作

  • fopen(檔案名稱,使用檔案方式);

通常將fopen函數的傳回值賦給一個指向檔案的指標變數。

FILE *fp;

fp = fopen("a1","r");

這樣fp就和檔案a1相聯絡了,或者說fp指向了a1檔案

//電腦從ASCII檔案讀入字元時,遇到斷行符號分行符號,系統把它轉換為一個分行符號,在輸出時把分行符號轉換成斷行符號和換行兩個字元。在使用二進位檔案時,不進行這種轉換,在記憶體中的資料形式與輸出到外部檔案中的資料形式完全一致,一一對應。

fclose(檔案指標);//若函數成功執行返回0,否則返回EOF(即-1)

  • fclose(fp);

如果不關閉檔案將會遺失資料。因為,在向檔案寫資料時,是先將資料輸出到緩衝區,待緩衝區滿後才正式輸出給檔案。如果當資料未充滿緩衝區而程式結束運行,就有可能使緩衝區中的資料丟失。用fclose函數關閉檔案,先把緩衝區中的資料輸出到磁碟檔案,然後才撤銷檔案資訊區。有的編譯系統在程式結束前會自動先將緩衝區中的資料寫入到檔案,從而避免了這個問題,但是應當養成在程式終止之前關閉所有檔案的習慣。

  • 向檔案讀寫字元

fgetc(fp);//從fp指向的檔案中讀入一個字元,讀成功,帶回所讀的字元,否則返回EOF

fputc(ch,fp);//把字元ch寫到檔案指標變數fp指向的檔案中,輸出成功,傳回值就是輸出的字元,輸出失敗,則返回EOF

#include<stdio.h>#include<stdlib.h>int main(){    FILE *fp;    char ch, filename[30];    printf("請輸入所用的檔案名稱:");    scanf("%s", filename);    if ((fp = fopen(filename, "w")) == NULL)    {        printf("無法開啟此檔案\n");        exit(0);    }    ch = getchar();                           //用來接收輸入完檔案名稱後的斷行符號符    printf("請輸入一個準備儲存到磁碟中的字串(以#結束):");    ch = getchar();    while (ch != ‘#‘)    {        fputc(ch, fp);        putchar(ch);        ch = getchar();    }    fclose(fp);    putchar(10);                             //向螢幕輸出一個分行符號    return 0;}
//將一個檔案中的內容複寫到另一個檔案中
#include<stdio.h>#include<stdlib.h>int main(){ FILE *fp_in,*fp_out; char ch, filename_in[30],filename_out[30]; printf("請輸入讀入的檔案名稱:"); scanf("%s", filename_in); if ((fp_in = fopen(filename_in, "r")) == NULL) { printf("無法開啟此檔案\n"); exit(0); } printf("請輸入寫出的檔案名稱:"); scanf("%s", filename_out); if ((fp_out = fopen(filename_out, "w")) == NULL) { printf("無法開啟此檔案\n"); exit(0); } while (!feof(fp_in)) //feof函數的作用是檢查是否到檔案末尾 { ch = fgetc(fp_in); fputc(ch, fp_out); putchar(ch); } putchar(10); fclose(fp_in); fclose(fp_out); return 0;}

注意:C系統已把fputc和fgetc函數定義為宏名putc和getc

#define     putc(ch,fp)     fputc(ch,fp)

這是在stdio.h中定義的

  • 向檔案讀寫字串

char* fgets(char* str,int n,FILE* fp);

從fp指向的檔案中讀取n - 1個字元,在字串後加‘\0‘,把它們放到字元數組str中。如果在讀完n - 1個字元之前遇到分行符號‘\n‘或檔案結束符EOF,讀入即結束,但將所遇到的分行符號‘\n‘也作為一個字元讀入。若執行fgets函數成功,則傳回值為str數組首元素的地址,如果一開始就遇到檔案尾或讀資料出錯,則返回NULL。

int puts(char* str, FILE* fp);

將str所指向的字串輸出到fp指向的檔案中。字串末尾的‘\0‘不輸出。若輸出成功,函數值為0,失敗時,函數值為EOF。

  • 用二進位方式向檔案讀寫一組資料

C語言允許用fread函數從檔案中讀一個資料區塊,用fwrite函數向檔案寫一個資料區塊。在讀寫時是以二進位形式進行的。在向磁碟寫資料時,直接將記憶體中的一組資料原封不動、不加轉換地複製到磁碟檔案上,在讀入時也是將磁碟檔案中若干位元組的內容一批讀入記憶體。一般調用形式為:

fread(buffer,size,count,fp);

fwrite(buffer,size,count,fp);

其中:

buffer:是一個地址。對fread來說,它是用來存放從檔案讀入的資料的儲存區地址。對fwrite來說,是要把此地址開始的儲存區中的資料向檔案輸出(以上指的是起始地址)。

size:要讀寫的位元組數

count:要讀寫多少個資料項目(每個資料項目長度為size)

fp:FILE類型檔案指標

在打卡檔案時指定用二進位檔案,這樣可以用fread和fwrite函數讀寫任何類型的資訊。

C語言複習3/27

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.