一.只用于标准输入(stdin)和标准输出(stdout)的函数
1.getchar putchar
2.gets puts
- gets:从标准输入读字符。直到出现换行符或读到文件结尾为止。不会检测空间是否足够,会造成空间越界。
- 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
- sanf:遇到空格、回车、tab键都会结束输入。即不提取后面继续输入的字符。
4.sscanf sprintf
scanf:解包
- 遇到空格、回车、\0、\t、\v、\f。均结束提取(简单地说就是空白字符与\0都会结束sscanf的提取)。
- sscanf(buf, "%c3%c", &ch1, &ch2); buf与format字符串中有匹配项可以跳过,比如3。
- 跳过数据:%*d %*s
- 指定提取宽度:%3s %*2s
- 指定提取范围:[a~zA~Z0~9] [aBc]
- 取反%[^a]
sprintf:组包
- 格式化字符串
- 字符串连接
- 把数字转成字符串
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argc, char *argv[])
{
//注意:xx个数并没有限制
printf("请输入一个格式为123456@xiao_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
三.文件的打开和关闭
- FILE *fp = fopen("file_name", "mode"); 成功返回文件指针,失败返回NULL。
- 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。
四.文件的随机(指定位置)读取
- 移动文件流指针:int fseek(FILE* stream, long offset, int whence); 开始:SEEK_SET 当前位置:SEEK_CUR 文件末尾:SEEK_END
- 获取流指针的位置:long ftell(FILE* stream);
- 将流指针移到文件开头:void rewind(FILE* stream);