stdio.h:C的标准输入输出:I/O(input output)
- stdout:输出流
- 行缓冲:stdout在终端上进行输出的时候,输出的规则为每当出现换行符的时候进行一次刷新缓存,然后在进行操作(printf输出的时候,是看到换行符才进行输出)
- fopen()函数(C库的标准io函数)
fopen函数可以不用文件描述符
mode的种类及含义
r:只读
w:只写:如果文件不存在,创建一个新的;如果文件存在,清空原先文件的内容
a:追加:如果不存在,创建一个新的;如果文件存在,在文件末尾进行追加
r+:可读可写,文件不存在,打开失败
w+:包括w和r+
a+:包括a和r+
代码如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fp;
fp = fopen("./text.txt", "w+");
if(NULL == fp)
{
puts("open error!");
exit(1);
}
fclose(fp);
return 0;
}
运行结果如下:
- fread和fwrite:
- size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
- size_t fwrite(void *ptr, size_t size, size_t nmemb, FILE *stream);
ptr:字符串指针
size:读取每个字符的大小
nmemb:读多少
stream:文件描述符指针
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE *fp;
fp = fopen("./text.txt", "w+");
if(NULL == fp)
{
puts("open error!");
exit(1);
}
char *str = "I am the little prince.\n";
int num = fwrite(str, sizeof(char), strlen(str), fp);
if(0 == num)
{
perror("fwrite!");
fclose(fp);
exit(1);
}
fclose(fp);
return 0;
}
空的text.txt文件中写入“I am the prince.”,运行结果如下:
将text.txt文件里的字符串写入字符型数组变量buffer[1024]中,代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE *fp;
fp = fopen("./text.txt", "w+");
if(NULL == fp)
{
puts("open error!");
exit(1);
}
char *str = "I am the little prince.\n";
int num = fwrite(str, sizeof(char), strlen(str), fp);
if(0 == num)
{
perror("fwreit!");
fclose(fp);
exit(1);
}
fseek(fp, 0, SEEK_SET);
char buffer[1024] = {0};
int num2 = fread(buffer, sizeof(char), 1024, fp);
if(0 == num2)
{
perror("fread!");
fclose(fp);
exit(1);
}
printf("buffer:%s\n",buffer);
fclose(fp);
return 0;
}
运行结果如下:
- 读字符家族
-
getc:从文件里读取一个字符
getc(fp)
返回值:当读到文件末尾无字符的时候,返回EOF(NULL) -
fgetc:函数调用,效果和getc一样
-
getchar():从键盘读入字符
作用:从stdin中读取一个字符。
返回值:返回读取字符的ASCII值或者EOF字符或者出错值。
-
写字符的家族
fputc:将某一字符写入文件流
int fputc(int c, FILE *stream);
int fputs(const char *s, FILE *stream);
putc:(宏)输出一字符到指定流中。
int putc(int c, FILE *stream);
putchar:在屏幕上显示字符
int putchar(int c);
int puts(const char *s); -
printf系列
- printf:
int printf(const char *format, …); - fprintf:
int fprintf(FILE *stream, const char *format, …);
其中FILE *stream相当于stdout
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE *fp;
int c;
int i = 10;
int j = 20;
fp = fopen("./text.txt", "w+");
double l = 3.1415926;
fprintf(fp, "%d %d %f\n", i, j, l );
printf("\n");
return 0;
}
运行结果如下:
int dprintf(int fd, const char *format, ...);
- sprintf():往字符串里写字符串
int sprintf(char *str, const char *format, …);
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char str[1024] = {0};
int c;
int i = 10;
int j = 20;
double l = 3.1415926;
sprintf(str, "hello , my lady!\n%d,%d,%.7f\n", i, j, l);
printf("%s", str);
printf("\n");
return 0;
}
运行结果如下:
int snprintf(char *str, size_t size, const char *format, ...);
- scanf系列
int scanf(const char *format, …);
-
fscanf():从文件流里写读字符串
int fscanf(FILE *stream, const char *format, ...);
-
sscanf():从字符串读取变量
int sscanf(const char *str, const char *format, …);