引言
在C语言编程中,标准输入输出库
1. 标准输入输出函数
函数描述printf向标准输出打印格式化字符串scanf从标准输入读取格式化输入putchar向标准输出写入一个字符getchar从标准输入读取一个字符puts向标准输出写入一个字符串并换行gets从标准输入读取一行字符串2. 文件操作函数
函数描述fopen打开文件fclose关闭文件fread从文件读取数据fwrite向文件写入数据fscanf从文件读取格式化输入fprintf向文件写入格式化输出fgets从文件读取字符串fputs向文件写入字符串3. 格式化输入输出函数
函数描述sprintf将格式化输出写入字符串sscanf从字符串读取格式化输入snprintf将格式化输出写入字符串,限定最大长度4. 字符和字符串操作函数
函数描述fgetc从文件读取一个字符fputc向文件写入一个字符ungetc将字符退回到输入流gets_s安全读取字符串(C11标准引入)5. 错误处理函数
函数描述perror打印错误信息clearerr清除文件流的错误标志feof检查文件流是否到达文件末尾ferror检查文件流是否发生错误我们将逐一介绍这些函数的详细内容及其使用方法。
1. 标准输入输出函数
标准输入输出函数主要用于从标准输入(通常是键盘)读取数据和向标准输出(通常是屏幕)写入数据。常用的标准输入输出函数有:
printf:向标准输出打印格式化字符串。scanf:从标准输入读取格式化输入。putchar:向标准输出写入一个字符。getchar:从标准输入读取一个字符。puts:向标准输出写入一个字符串并换行。gets:从标准输入读取一行字符串。printf 函数
printf 函数是C语言中最常用的输出函数,用于格式化输出数据。其基本语法如下:
int printf(const char *format, ...);
format:格式字符串,包含普通字符和格式说明符。...:可变参数,用于指定要输出的值。常用的格式说明符包括:
%d:整数%f:浮点数%s:字符串%c:字符#include
int main() {
int num = 10;
float pi = 3.14;
char ch = 'A';
char str[] = "Hello, World!";
printf("Integer: %d\n", num);
printf("Float: %.2f\n", pi);
printf("Character: %c\n", ch);
printf("String: %s\n", str);
return 0;
}
scanf 函数
scanf 函数用于从标准输入读取格式化数据。其基本语法如下:
int scanf(const char *format, ...);
format:格式字符串,包含格式说明符。...:指针参数,用于存储读取的值。示例代码:
#include
int main() {
int num;
float pi;
char ch;
char str[100];
printf("Enter an integer: ");
scanf("%d", &num);
printf("Enter a float: ");
scanf("%f", &pi);
printf("Enter a character: ");
scanf(" %c", &ch); // 注意:这里有一个空格,防止读取换行符
printf("Enter a string: ");
scanf("%s", str);
printf("You entered:\n");
printf("Integer: %d\n", num);
printf("Float: %.2f\n", pi);
printf("Character: %c\n", ch);
printf("String: %s\n", str);
return 0;
}
putchar 和 getchar 函数
putchar 函数用于向标准输出写入一个字符,其基本语法如下:
int putchar(int ch);
getchar 函数用于从标准输入读取一个字符,其基本语法如下:
int getchar(void);
int getchar(void);
示例代码:
#include
int main() {
char ch;
printf("Enter a character: ");
ch = getchar();
printf("You entered: ");
putchar(ch);
putchar('\n');
return 0;
}
puts 和 gets 函数
puts 函数用于向标准输出写入一个字符串并换行,其基本语法如下:
int puts(const char *str);
gets 函数用于从标准输入读取一行字符串,其基本语法如下:
char *gets(char *str);
注意:gets 函数由于安全性问题(缓冲区溢出)在C11标准中已被弃用,推荐使用 fgets 代替。
示例代码:
#include
int main() {
char str[100];
printf("Enter a string: ");
gets(str);
printf("You entered: ");
puts(str);
return 0;
}
2. 文件操作函数
fopen:打开文件fclose:关闭文件fread:读取文件fwrite:写入文件fscanf:从文件读取格式化输入fprintf:向文件写入格式化输出fgets:从文件读取字符串fputs:向文件写入字符串文件打开和关闭
fopen 函数用于打开文件,其基本语法如下:
FILE *fopen(const char *filename, const char *mode);
filename:要打开的文件名mode:文件打开模式,如 "r"(只读)、"w"(写入)、"a"(追加)等。fclose 函数用于关闭文件,其基本语法如下:
int fclose(FILE *stream);
示例代码:
#include
int main() {
FILE *file;
file = fopen("example.txt", "w");
if (file == NULL) {
printf("Error opening file!\n");
return 1;
}
fprintf(file, "Hello, World!\n");
fclose(file);
return 0;
}
文件读取和写入
fread 和 fwrite 函数用于读取和写入二进制文件,其基本语法如下:
size_t fread(void *ptr, size_t size, size_t count, FILE *stream);
size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream);
ptr:数据缓冲区size:每个数据项的大小count:要读取或写入的数据项数目stream:文件指针示例代码:
#include
int main() {
FILE *file;
int num = 12345;
file = fopen("example.bin", "wb");
if (file == NULL) {
printf("Error opening file!\n");
return 1;
}
fwrite(&num, sizeof(int), 1, file);
fclose(file);
return 0;
}
格式化文件输入输出
fscanf 和 fprintf 函数用于格式化文件输入输出,其基本语法与 scanf 和 printf 类似,但多了一个文件指针参数:
int fscanf(FILE *stream, const char *format, ...);
int fprintf(FILE *stream, const char *format, ...);
示例代码:
#include
int main() {
FILE *file;
int num;
file = fopen("example.txt", "r");
if (file == NULL) {
printf("Error opening file!\n");
return 1;
}
fscanf(file, "%d", &num);
printf("Read number: %d\n", num);
fclose(file);
return 0;
}
字符串文件操作
fgets 和 fputs 函数用于字符串文件操作,其基本语法如下:
char *fgets(char *str, int n, FILE *stream);
int fputs(const char *str, FILE *stream);
示例代码:
#include
int main() {
FILE *file;
char str[100];
file = fopen("example.txt", "r");
if (file == NULL) {
printf("Error opening file!\n");
return 1;
}
fgets(str, 100, file);
printf("Read string: %s", str);
fclose(file);
return 0;
}
3. 格式化输入输出函数
除了前面提到的 printf 和 scanf,
sprintf:将格式化输出写入字符串sscanf:从字符串读取格式化输入snprintf:将格式化输出写入字符串,限定最大长度sprintf 函数
sprintf 函数用于将格式化输出写入字符串,其基本语法如下:
int sprintf(char *str, const char *format, ...);
示例代码:
#include
int main() {
char buffer[100];
int num = 12345;
sprintf(buffer, "Number: %d", num);
printf("%s\n", buffer);
return 0;
}
sscanf 函数
sscanf 函数用于从字符串读取格式化输入,其基本语法如下:
int sscanf(const char *str, const char *format, ...);
示例代码:
#include
int main() {
char buffer[] = "12345";
int num;
sscanf(buffer, "%d", &num);
printf("Read number: %d\n", num);
return 0;
}
snprintf 函数
snprintf 函数与 sprintf 类似,但它允许指定写入字符串的最大长度,以防止缓冲区溢出。其基本语法如下:
int snprintf(char *str, size_t size, const char *format, ...);
示例代码:
#include
int main() {
char buffer[10];
int num = 12345;
snprintf(buffer, sizeof(buffer), "Number: %d", num);
printf("%s\n", buffer);
return 0;
}
4. 字符和字符串操作函数
fgetc:从文件读取一个字符fputc:向文件写入一个字符ungetc:将字符退回到输入流gets_s:安全读取字符串(C11标准引入)fgetc 和 fputc 函数
fgetc 函数用于从文件读取一个字符,其基本语法如下:
int fgetc(FILE *stream);
fputc 函数用于向文件写入一个字符,其基本语法如下:
int fputc(int ch, FILE *stream);
示例代码:
#include
int main() {
FILE *file;
char ch;
file = fopen("example.txt", "r");
if (file == NULL) {
printf("Error opening file!\n");
return 1;
}
while ((ch = fgetc(file)) != EOF) {
putchar(ch);
}
fclose(file);
return 0;
}
ungetc 函数
ungetc 函数用于将一个字符退回到输入流,其基本语法如下:
int ungetc(int ch, FILE *stream);
示例代码:
#include
int main() {
FILE *file;
char ch;
file = fopen("example.txt", "r");
if (file == NULL) {
printf("Error opening file!\n");
return 1;
}
ch = fgetc(file);
printf("Read character: %c\n", ch);
ungetc(ch, file);
ch = fgetc(file);
printf("Read character again: %c\n", ch);
fclose(file);
return 0;
}
gets_s 函数
gets_s 函数是C11标准中引入的安全字符串读取函数,用于防止缓冲区溢出。其基本语法如下:
char *gets_s(char *str, rsize_t n);
示例代码:
#include
int main() {
char str[100];
printf("Enter a string: ");
gets_s(str, sizeof(str));
printf("You entered: %s\n", str);
return 0;
}
5. 错误处理函数
perror:打印错误信息clearerr:清除文件流的错误标志feof:检查文件流是否到达文件末尾ferror:检查文件流是否发生错误perror 函数
perror 函数用于打印错误信息,其基本语法如下:
void perror(const char *str);
示例代码:
#include
int main() {
FILE *file;
file = fopen("nonexistent.txt", "r");
if (file == NULL) {
perror("Error opening file");
return 1;
}
fclose(file);
return 0;
}
clearerr 函数
clearerr 函数用于清除文件流的错误标志,其基本语法如下:
void clearerr(FILE *stream);
feof 和 ferror 函数
feof 函数用于检查文件流是否到达文件末尾,其基本语法如下:
int feof(FILE *stream);
ferror 函数用于检查文件流是否发生错误,其基本语法如下:
int ferror(FILE *stream);
示例代码:
#include
int main() {
FILE *file;
char ch;
file = fopen("example.txt", "r");
if (file == NULL) {
perror("Error opening file");
return 1;
}
while ((ch = fgetc(file)) != EOF) {
putchar(ch);
}
if (feof(file)) {
printf("\nEnd of file reached.\n");
} else if (ferror(file)) {
printf("\nAn error occurred.\n");
}
fclose(file);
return 0;
}
结论