(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函數的區別
點擊開啟連結