[C]IO相關API

來源:互聯網
上載者:User

(1)fopen,fread,fwrite相關函數
以上三個API主要用於讀取二進位相關的資料,可以讀取一個結構體,如下樣本

struct{short count;long total;char name[5];}item;if(fwrite(&item,sizeof(item),1,fp) != 1)printf("fwrite error\n")


以下樣本,其中testfile為目前的目錄下的一個檔案,以下程式是將testfile檔案裡的內容輸出到標準輸出

#include <stdio.h>#include <unistd.h>int main(){FILE *fp;fp = fopen("testfile","r");char buf[1024];int n;printf("start to read\n");while ((n=fread(buf,1,sizeof(buf),fp))>0)fwrite(buf,1,n,stdout);fclose(fp);return 0;}

(2)fgets() gets() fputs() puts()函數
原型:char *fgets(char *restrict buf,int n,FILE *restrict fp)
char *gets(char *buf)
以上四個函數是每次一行的IO函數,fgets從標準fopen()開啟的檔案流讀取,gets從標準輸入讀取,以下樣本:

#include <stdio.h>#include <unistd.h>int main(){FILE *fp;fp = fopen("testfile","r");char buf[1024];char *str;str=fgets(buf,1024,fp);str = gets(buf);fclose(fp);return 0;}

(3)getc(FILE *fp)
   putc(int c,FILE *fp)

  以上函數用於輸入或者輸出一個字元,如下樣本:

  int c;  while(c=getc(stdin) !=EOF)if(putc(c,stdout)==EOF)printf("out put error");


 

(4)scanf()函數,

scanf函數詳細解釋

int main(){    int n,i,test;    while(scanf("%d",&n)!=EOF && n > 0){        for(i=0 ; i<n ; i++){            scanf("%d",&test);            printf("%d\n",getNumber(test));        }    }    return 0;}


char str[20];

注意,scanf("%s",str);中的%s讀取一串沒空白字元,當發現空白的時候輸入終止,字串結尾自動加上NUL結尾字元。

#include "stdio.h"  int main()  {      char string[50];            /*scanf("%s",string);不能接收空格符*/       scanf("%[^/n]",string);       printf("%s/n",string);       return 0;  }


scanf函數的控制串由三類字元構成:
1。格式化說明符; 
2。空白符; 
3。非空白符;
(A) 格式化說明符
 %p                 讀入一個指標 
 %u                 讀入一個無符號十進位整數 
 %n                 至此已讀入值的等價字元數 
 %[]                掃描字元集合 
 %%                 讀%符號 
(B) 空白字元
 空白字元會使scanf()函數在讀操作中略去輸入中的一個或多個空白字元,空白符可以是space,tab,newline等等,直到第一個非空白符出現為止。
(C) 非空白字元
 一個非空白字元會使scanf()函數在讀入時剔除掉與這個非空白字元相同的字元。

 例1. #include "stdio.h"  int main(void)  {  int a,b,c;  scanf("%d%d%d",&a,&b,&c);  printf("%d,%d,%d/n",a,b,c); return 0;  }  運行時按如下方式輸入三個值:3□4□5 (輸入a,b,c的值)3,4,5 (printf輸出的a,b,c的值)   (1) &a、&b、&c中的&是地址運算子,分別獲得這三個變數的記憶體位址。     (2) "%d%d%d"是按十進值格式輸入三個數值。輸入時,在兩個資料之間可以用一個或多個空格、tab鍵、斷行符號鍵分隔。        以下是合法輸入方式:        ① 3□□4□□□□5        ② 3           4□5        ③ 3(tab鍵)4           5例2. #include "stdio.h"  int main(void)  {  int a,b,c; scanf("%d,%d,%d",&a,&b,&c);  printf("%d,%d,%d/n",a,b,c); return 0;  }  運行時按如下方式輸入三個值:3,4,5 (輸入a,b,c的值) 或者3,□4,□5 (輸入a,b,c的值)3,□□□4,□5 (輸入a,b,c的值)  ...... 都是合法的,但是","一定要跟在數字後面,如: 3□,4,□5 就非法了,程式出錯。



(5),open read write函數和fopen fread fwrite函數的區別

點擊開啟連結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.