C 语言输入输出详解
在 C 语言编程中,输入和输出(I/O)操作是非常基础且重要的部分。输入意味着为程序提供数据,这些数据可以来自文件或者命令行;而输出则是将程序处理的结果展示在屏幕、打印机或者保存到文件中。C 语言提供了丰富的内置函数来完成这些操作。
一、标准文件
C 语言把所有设备都视为文件,因此设备(如显示器)的处理方式和文件相同。在程序执行时,会自动打开三个标准文件,用于访问键盘和屏幕:
标准文件 | 文件指针 | 对应设备 |
---|---|---|
标准输入 | stdin | 键盘 |
标准输出 | stdout | 屏幕 |
标准错误 | stderr | 屏幕 |
文件指针是访问文件的关键,通过它我们可以实现从键盘读取数据以及将结果输出到屏幕等操作。 |
二、常用输入输出函数
1. printf () 函数
printf()
函数用于将格式化的数据输出到标准输出设备(通常是屏幕)。
- 语法:
int printf(const char *format, ...);
- 参数说明:
format
:格式化字符串,规定了输出的格式,包含普通字符和格式说明符。...
:可变参数列表,根据格式化字符串中的格式说明符,提供要输出的数据。
示例:
#include <stdio.h> // 执行 printf() 函数需要该库
int main()
{
printf("菜鸟教程"); //显示引号中的内容
return 0;
}
解析:
- 所有 C 语言程序都从
main()
函数开始执行。 printf()
函数在stdio.h
头文件中声明,#include <stdio.h>
预处理命令用于引入该头文件,若未引入,编译器遇到printf()
函数时会报错。return 0;
表示程序正常退出。
格式化输出整数:
#include <stdio.h>
int main()
{
int testInteger = 5;
printf("Number = %d", testInteger);
return 0;
}
上述代码中,%d
是格式说明符,用于匹配整型变量 testInteger
并将其值输出到屏幕,输出结果为 Number = 5
。
格式化输出浮点型数据:
#include <stdio.h>
int main()
{
float f;
printf("Enter a number: ");
// %f 匹配浮点型数据
scanf("%f",&f);
printf("Value = %f", f);
return 0;
}
在这个例子中,先使用 scanf()
函数从键盘读取一个浮点数,再用 printf()
函数将其输出,%f
用于格式化输出浮点数。
2. scanf () 函数
scanf()
函数用于从标准输入设备(通常是键盘)读取格式化的输入。
- 语法:
int scanf(const char *format, ...);
- 参数说明:
format
:格式化字符串,指定输入的格式,包含格式说明符。...
:可变参数列表,是存储输入数据的变量地址,变量前需加&
符号。
示例:
#include <stdio.h>
int main() {
int a;
float b;
printf("Enter an integer and a float: ");
scanf("%d %f", &a, &b);
printf("You entered: %d and %.2f\n", a, b);
return 0;
}
执行上述代码,输入 10 3.14
,输出 You entered: 10 and 3.14
。注意 scanf()
对输入格式有严格要求,输入需与格式说明符匹配,且读取字符串时遇到空格会停止。
三、字符输入输出函数
1. getchar () 函数
int getchar(void)
函数从屏幕读取下一个可用的字符,并以整数形式返回。每次只能读取一个字符,可在循环中使用以读取多个字符。
2. putchar () 函数
int putchar(int c)
函数把字符输出到屏幕上,并返回相同的字符。同样每次只能输出一个字符,可在循环中输出多个字符。
示例:
#include <stdio.h>
int main( )
{
int c;
printf( "Enter a value :");
c = getchar( );
printf( "\nYou entered: ");
putchar( c );
printf( "\n");
return 0;
}
输入文本并回车后,程序会读取并输出第一个字符。
四、字符串输入输出函数
1. fgets () 函数
char *fgets(char *str, int n, FILE *stream)
函数用于从标准输入设备读取一行字符串,推荐使用,可避免缓冲区溢出问题。
- 参数说明:
str
:指向字符数组的指针,用于存储读取的字符串。n
:要读取的最大字符数(包括空字符\0
)。stream
:文件流,通常使用stdin
表示标准输入。
示例:
#include <stdio.h>
int main() {
char str[100];
printf("Enter a string: ");
fgets(str, sizeof(str), stdin);
printf("You entered: %s", str);
return 0;
}
2. puts () 函数
int puts(const char *str)
函数用于将一个字符串输出到标准输出设备,并自动在末尾添加换行符。成功时返回非负值,失败时返回 EOF
。
示例
#include <stdio.h>
int main() {
char str[] = "Hello, World!";
puts(str);
return 0;
}
输出 Hello, World!
。
3. fputs () 函数
int fputs(const char *str, FILE *stream)
函数用于将字符串输出到指定的流(如标准输出、文件等),不会自动添加换行符。
- 参数说明:
str
:要输出的字符串(以空字符\0
结尾的字符数组)。stream
:指定输出的流,可以是标准输出(stdout
)、文件流等。
- 返回值:成功时返回非负值(通常是输出的字符数),失败时返回
EOF
。
示例:
#include <stdio.h>
int main() {
char str[] = "Hello, World!";
fputs(str, stdout); // 输出 "Hello, World!",不换行
return 0;
}
puts () 和 fputs () 的区别:
特性 | puts() | fputs() |
---|---|---|
换行符 | 自动添加 | 不添加 |
输出流 | 只能输出到标准输出 | 可输出到任意流 |
参数 | 一个字符串参数 | 字符串参数和流参数 |
返回值 | 成功返回非负值,失败返回 EOF | 成功返回非负值,失败返回 EOF |
五、文件输入与输出
1. fopen () 函数
FILE *fopen(const char *filename, const char *mode)
函数用于打开一个文件。
- 参数说明:
filename
:要打开的文件名。mode
:打开文件的模式,如"r"
(只读)、"w"
(只写)、"a"
(追加)等。
- 返回值:成功时返回指向
FILE
对象的指针,失败时返回NULL
。
2. fclose () 函数
int fclose(FILE *stream)
函数用于关闭一个已打开的文件。
- 参数说明:
stream
是指向FILE
对象的指针。 - 返回值:成功时返回
0
,失败时返回EOF
。
示例:
#include <stdio.h>
int main() {
FILE *file;
file = fopen("example.txt", "w"); // 打开文件用于写入
if (file != NULL) {
fprintf(file, "Hello, world!\n"); // 写入文件
fclose(file); // 关闭文件
}
char buffer[100];
file = fopen("example.txt", "r"); // 打开文件用于读取
if (file != NULL) {
fscanf(file, "%s", buffer); // 读取数据
printf("Read from file: %s\n", buffer);
fclose(file); // 关闭文件
}
return 0;
}
通过以上对 C 语言输入输出函数的详细介绍,希望能帮助你更好地掌握 C 语言中的 I/O 操作,编写出功能更强大、更完善的程序。