输入/输出函数
c语言本身没有提供专门的输入输出语句,所有的输入输出都是由调用标准库函数中的输入输出函数来实现的。
输入函数:scanf() 、 getchar()、gets():
- scanf(),是格式输入函数,可接收
任意类型
的数据。- getchar(),是
字符
输入函数, 只能接收单个字符
。- gets(),是
字符串
输入函数。输出函数:printf() 、 putchar()、puts():
- printf(),是格式输出函数,可按指定的格式显示任意类型的数据。
- putchar(),
字符
显示函数,只能显示单个字符
。- puts(),是
字符串
输出函数。
一、scanf()和printf()函数
1.scanf()
Ⅰ.功能和格式
功能:把从键盘上输入的数据根据找到的地址存入内存中,即给变量赋值。
格式:scanf("格式控制字符串",参数地址列表);
- “格式控制字符串”:约定输入数据的类型和格式,参数的个数必须与变量地址的个数一致。
- “参数地址列表”:以逗号 “, ”分隔的、
输入数据变量地址
序列。
Ⅱ.连续输入多个数据
scanf("%d%d%d",&a,&b,&c);
&
是寻址操作符,&a表示对象a在内存中的地址- 如果scanf中
%d是连着写
的,如“%d%d%d
”,在输入数据时,数据之间不可以用逗号分隔,只能用空白字符(空格或tab键或者回车键)分隔。如:“2 3 4
”- 如果是“
%d,%d,%d
”,则在输入数据时需要加“,”,如“2,3,4
”
Ⅲ.连续输入两个字符
这里会有一个问题:如果你的代码是这样的
char c1, c2;
scanf("%c%c", &c1, &c2); // 输入为”a b“或者“a回车b”
printf("%c,%c", c1, c2); // 那么你的输出为“a, ”
这是因为scanf()函数是从标准缓冲区读取字符的,由于每次输入之后都按了一次空格或回车,标准缓冲区记录了这次空格或回车,而char类型会记录这个回车,并赋值给了变量c2
解决方法
在%c前面加个空格,空格可抵消前面输入的回车符
char c1, c2; scanf("%c %c", &c1, &c2); // 输入为”a b“或者“a回车b” printf("%c,%c", c1, c2); // 那么你的输出为“a,b”
Ⅳ.阻塞式函数
拓展:scanf()函数是阻塞式函数,后面的putchar()和puts()也是。
因为:
- 等待输入:当程序执行到 scanf() 时,它会停止并等待用户输入数据。直到用户输入数据并按下 Enter 键,scanf() 才会继续执行。
- 不立即返回:与其他函数不同,scanf() 不会立即返回。它需要用户输入完整的数据行,然后按下 Enter 键,才会处理该输入并返回。
- 输入缓冲区:在大多数情况下,scanf() 从 stdin(标准输入)读取数据。如果用户输入的数据与 scanf() 的格式字符串匹配,函数会继续执行。如果不匹配,用户可能需要重新输入或进行其他操作。
- 非阻塞式 I/O:与之相对的是非阻塞式 I/O,其中读取操作会立即返回,无论是否已接收到完整的数据。对于 scanf() 来说,它需要等待用户完成输入,这使其具有阻塞的性质。
因此,基于上述原因,scanf() 通常被称为阻塞式函数。
2.printf()
二、getchar()和putchar()函数
1.功能和格式
getchar()
:输入字符数据
格式:getchar()
功能:从键盘缓冲区读入一个字符
putchar()
:输出字符
格式: putchar(ch),其中ch是一个字符变量
功能:从标准输出设备输出一个字符
切记:这两个都是针对一个字符的
2.示例
#include <stdio.h>
int main() {
char ch;
ch = getchar(); // 输入单个字符
putchar(ch); // 输出单个字符
putchar('\n'); // 执行换行效果,屏幕不显示
return 0;
}
三、gets()和puts()函数
1.功能和格式
在C语言中,gets()、puts() 是用于输入字符串、输出字符串的标准库函数,其原型定义在
<stdio.h>
头文件中。
puts()
:
格式:puts(字符串)
功能:将一个以 null 字符(\0
)结尾的字符串打印到标准输出(通常是控制台)上,并自动添加一个换行符。
get()
:
格式:gets(字符串变量) // 输入到这个字符串变量里
功能:读取标准输入设备输入的字符串,直到遇到【Enter】键才结束。
切记:这两个函数只针对字符串
2.示例
#include <stdio.h>
int main() {
char str[15];
printf("enter your name:");
gets(str); // 输入字符串至数组变量str
printf("your name is ");
puts(str); // 输出字符串,独占一行,自动添加换行
return 0;
}