C语言中的输入和输出函数

你好,未来的程序员们!今天,我们将踏上一段激动人心的旅程,探索C编程世界中的输入和输出(I/O)。作为你友好的邻居计算机老师,我将在编码的这个基本方面为你提供指导。那么,拿起你的虚拟记事本,让我们一起潜入!

C - Input & Output

C语言中的标准文件

在我们开始在键盘上敲击之前,让我们先来聊聊一些基本的东西:C语言中的标准文件。你瞧,当你运行一个C程序时,它会自动为你打开三个文件。这就像有三个乐于助人的助手准备好了,来管理你的程序与外部世界的通信。

  1. stdin(标准输入)
  2. stdout(标准输出)
  3. stderr(标准错误)

这些文件是程序与用户和系统之间的门户。把stdin想象成你程序的耳朵,stdout是它的嘴巴,而stderr是当出错时它大声呼喊的方式。酷吧?

输入和输出函数的类型

现在,让我们来谈谈我们用来与这些文件交互的工具。在C语言中,我们有两种主要的I/O函数类型:

  1. 未格式化的I/O函数
  2. 格式化的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)。&放在ageheight前面是关键——它告诉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