1. 程式人生 > >C語言IO函式總結

C語言IO函式總結

一.只用於標準輸入(stdin)和標準輸出(stdout)的函式

1.getchar putchar

2.gets puts

  1. gets:從標準輸入讀字元。直到出現換行符或讀到檔案結尾為止。不會檢測空間是否足夠,會造成空間越界。
  2. puts:向標準輸出裝置輸出一個字串,會自動新增換行符
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argc, char *argv[])
{
	char arr[8] = "";
	int len = sizeof(arr) / sizeof(arr[0]);

	printf("請輸入小於%d個字元的字串:\n", len);
	gets(arr);//執行時會出現斷錯誤

	system("pause");
	return 0;
}

3.sanf printf

  1. sanf:遇到空格、回車、tab鍵都會結束輸入。即不提取後面繼續輸入的字元。

4.sscanf sprintf

scanf:解包

  1. 遇到空格、回車、\0、\t、\v、\f。均結束提取(簡單地說就是空白字元與\0都會結束sscanf的提取)。
  2. sscanf(buf, "%c3%c", &ch1, &ch2); buf與format字串中有匹配項可以跳過,比如3。
  3. 跳過資料:%*d %*s
  4. 指定提取寬度:%3s  %*2s
  5. 指定提取範圍:[a~zA~Z0~9] [aBc]
  6. 取反%[^a] 

sprintf:組包

  1. 格式化字串
  2. 字串連線
  3. 把數字轉成字串
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main(int argc, char *argv[])
{
	//注意:xx個數並沒有限制
	printf("請輸入一個格式為[email protected]_ming.com的郵箱:");
	char arr[64] = "";
	scanf("%s", arr);
	char msg[32] = "";
	//sscanf(arr, "%*[^@]@%[^.]", msg);
	//sscanf(arr, "%*[^@]%*[@]%[^.]", msg);
	//sscanf(arr, "%*[^@]%*[@]%s%[^.]", msg);
	sscanf(arr, "%*[^@]%*[@]%s.", msg);

	printf("%s\n", msg);

	system("pause");
	return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main(int argc, char *argv[])
{
        //格式化字串
        char arr[32] = "";
        sprintf(arr, "%s%s", "我是xiao_ming", " 今年17歲");

	//連線字串
	char src[32] = "hello";
	char dst[32] = " world";
	sprintf(dst, src);
	printf("%s\n", dst);

	//把數字轉成字串
	char buf[32] = "";
	sprintf(buf, "%d", 1000);
	printf("%s\n", buf);

	system("pause");
	return 0;
}

二.可用於所有流的輸入輸出函式

1.fgetc(getc)    fputc(putc)
2.fgets         fputs
3.fprintf        fscanf
4.fread         fwrite

三.檔案的開啟和關閉

  1. FILE *fp = fopen("file_name", "mode"); 成功返回檔案指標,失敗返回NULL。
  2. int fclose(FILE* stream); 成功返回0,失敗返回-1。

開啟模式

含義

r或rb

以只讀方式開啟一個文字檔案(不建立檔案,若檔案不存在則報錯)

w或wb

以寫方式開啟檔案(如果檔案存在則清空檔案,檔案不存在則建立一個檔案)

a或ab

以追加方式開啟檔案,在末尾新增內容,若檔案不存在則建立檔案

r+或rb+

以可讀、可寫的方式開啟檔案(不建立新檔案)

w+或wb+

以可讀、可寫的方式開啟檔案(如果檔案存在則清空檔案,檔案不存在則建立一個檔案)

a+或ab+

以新增方式開啟檔案,開啟檔案並在末尾更改檔案,若檔案不存在則建立檔案

注意:b表示二進位制模式,二進位制模式只在window下有效,在linux中是無效的。linux下所有的文字檔案都以\n結尾。在window下二進位制讀取模式時可以獲得\r\n。

四.檔案的隨機(指定位置)讀取

  1. 移動檔案流指標:int fseek(FILE* stream, long offset, int whence); 開始:SEEK_SET   當前位置:SEEK_CUR   檔案末尾:SEEK_END
  2. 獲取流指標的位置:long ftell(FILE* stream);
  3. 將流指標移到檔案開頭:void rewind(FILE* stream);