C语言中的输入和输出函数
你好,未来的程序员们!今天,我们将踏上一段激动人心的旅程,探索C编程世界中的输入和输出(I/O)。作为你友好的邻居计算机老师,我将在编码的这个基本方面为你提供指导。那么,拿起你的虚拟记事本,让我们一起潜入!
C语言中的标准文件
在我们开始在键盘上敲击之前,让我们先来聊聊一些基本的东西:C语言中的标准文件。你瞧,当你运行一个C程序时,它会自动为你打开三个文件。这就像有三个乐于助人的助手准备好了,来管理你的程序与外部世界的通信。
- stdin(标准输入)
- stdout(标准输出)
- stderr(标准错误)
这些文件是程序与用户和系统之间的门户。把stdin想象成你程序的耳朵,stdout是它的嘴巴,而stderr是当出错时它大声呼喊的方式。酷吧?
输入和输出函数的类型
现在,让我们来谈谈我们用来与这些文件交互的工具。在C语言中,我们有两种主要的I/O函数类型:
- 未格式化的I/O函数
- 格式化的I/O函数
未格式化的函数处理原始数据,而格式化的函数允许我们指定数据的格式。这就像吃白米饭(未格式化)和精美摆盘的美食(格式化)之间的区别。两者都能完成任务,但后者在展示上给你更多的控制!
未格式化的字符输入和输出函数:getchar()和putchar()
让我们从简单的未格式化字符I/O开始。来认识我们的前两个函数:getchar()
和putchar()
。
getchar()
getchar()
从标准输入(通常是你的键盘)读取单个字符。它就像一个耐心的倾听者,等待你输入一个字符。
#include <stdio.h>
int main() {
char ch;
printf("输入一个字符: ");
ch = getchar();
printf("你输入了: ");
putchar(ch);
return 0;
}
在这个例子中,getchar()
等待你输入一个字符,并将其存储在ch
中。它如此简单,却又如此强大!
putchar()
putchar()
是getchar()
的对立面。它将单个字符输出到标准输出(通常是你的屏幕)。它就像一个城镇公告员,一次宣布一个字母。
#include <stdio.h>
int main() {
char ch = 'A';
printf("打印一个字符: ");
putchar(ch);
return 0;
}
在这里,putchar(ch)
在你的屏幕上显示字符'A'。简单而有效!
格式化的字符串输入和输出函数:gets()、fgets()、puts()和fputs()
现在,让我们升级一下,谈谈字符串I/O。这些函数处理整个字符串,而不仅仅是单个字符。
gets()和fgets()
gets()
从stdin读取一行到缓冲区。然而,它被认为是不安全的,因为它不检查缓冲区溢出。这就是为什么我们更喜欢它的安全表亲fgets()
。
#include <stdio.h>
int main() {
char name[50];
printf("输入你的名字: ");
fgets(name, sizeof(name), stdin);
printf("你好,%s", name);
return 0;
}
在这个例子中,fgets()
读取一行文本(你的名字)到name
数组中。它更安全,因为我们指定了要读取的最大字符数。
puts()和fputs()
puts()
将字符串写入stdout并追加一个换行符。它的文件流对应函数是fputs()
。
#include <stdio.h>
int main() {
char greeting[] = "你好,世界!";
puts(greeting); // 输出: 你好,世界!(带有换行符)
fputs(greeting, stdout); // 输出: 你好,世界!(没有换行符)
return 0;
}
puts()
自动添加一个换行符,而fputs()
给你更多的控制。
格式化的输入和输出函数:scanf()和printf()
现在我们来到了C语言I/O中的重头戏:scanf()
和printf()
。这些函数就像是瑞士军刀一样的I/O工具——多功能且强大。
scanf()
scanf()
从stdin读取格式化的输入。它就像一个挑剔的食客,只接受按照指定方式准备的食物。
#include <stdio.h>
int main() {
int age;
float height;
printf("输入你的年龄和身高: ");
scanf("%d %f", &age, &height);
printf("你%d岁了,身高%.2f米。\n", age, height);
return 0;
}
在这里,scanf()
从输入中读取一个整数(%d
)和一个浮点数(%f
)。&
放在age
和height
前面是关键——它告诉scanf()
在哪里存储这些值。
printf()
printf()
是scanf()
的输出对应函数。它就像一个技艺高超的讲故事者,将你的数据编织成格式化的字符串。
#include <stdio.h>
int main() {
int apples = 5;
float price = 0.75;
printf("我有%d个苹果,每个花费$%.2f。\n", apples, price);
return 0;
}
在这个例子中,printf()
将我们的数据格式化成一个漂亮的、可读的句子。
C语言中的格式说明符
格式说明符是使scanf()
和printf()
如此强大的秘密酱料。它们就像是给这些函数的指令,告诉它们如何解释或呈现数据。
下面是常见格式说明符的便捷表格:
说明符 | 数据类型 |
---|---|
%d | 整数 |
%f | 浮点数 |
%c | 字符 |
%s | 字符串 |
%lf | 双精度浮点数 |
%x | 十六进制 |
%o | 八进制 |
%p | 指针 |
记住,你可以修改这些说明符。例如,%.2f
打印一个浮点数,保留两位小数,而%5d
在一个宽度为5字符的字段中打印一个整数。
那么,伙计们!我们已经涵盖了C语言中输入和输出的基础知识。记住,熟能生巧。所以,出去开始编码吧!谁知道呢?也许你会创造出科技领域的下一个大事件。下次见,快乐编程!
Credits: Image by storyset