C语言中的scanf、getchar、putchar、gets、puts
C语言中的scanf、getchar、putchar、gets、puts
C语言函数库中有一批标准输入输出函数,它是以标准的输入输出设备(一般为终端设备)为输入输出对象的。其中有putchar(输出字符)、getchar(输入字符)、printf(格式输出)、scanf(格式输入)、puts(输出字符串)、gets(输入字符串)。
- C语言本身不提供输入输出语句,输入输出操作是由C语言标准函数库中的函数来实现的。
- printf和scanf不是C语言的关键字,而是库函数的名字。
- 如果程序调用标准输入输出函数,则需在本程序开头用#include指令把stdio.h头文件包含到程序中,例#include
。
1.scanf ()
scanf()函数的一般形式:scanf(“格式控制”,地址表列)
- %是格式字符,指定输入格式
- 地址表列中每一项必须以取地址运算符&开头输入数据的类型
格式 | 字符意义 |
---|---|
d | 输入十进制整数 |
o | 输入八进制整数 |
x | 输入十六进制整数 |
u | 输入无符号十进制整数 |
f或e | 输入浮点型数字 |
c | 输入单个字符 |
s | 输入字符串 |
scanf需要注意:
- 在输入多个数值数据时,若格式控制中没有非格式字符作输入数据之间的间隔则可用空格、Tab或者回车做间隔。
- 在输入多个字符数据时,若格式控制中无非格式字符,则认为所有输入的字符均为有效字符。
- 在输入(单个)数据时,C编译器在碰到空格、Tab、回车或者非法数据时(如对“%d”输入45B时,B为非法数据,)则认为该数据结束。输出的结果为45。
事例:
数值数据:
1.在scanf语句的格式串中没有非格式字符时1 | #include <stdio.h> |
1 2 3
或者
1
2
3
1 | #include <stdio.h> |
输入时用“,”作间隔符,输入为4,5,6
再比如1
scanf("a=%d,b=%d,c=%d",&a,&b,&c);
输入应为:a=3,b=4,c=5
1 | scanf("%3d",&a); |
输入456789只把456赋值变量a,其余部分被截去1
scanf("%4d%4d",&a,&b);
输入456789将把456赋值a,而把789赋值b
字符数据
1.在scanf输入的字符数据中无非格式字符时1 | scanf("%c%c%c",&a,&b,&c); |
在输入字符数据时,若格式控制中无非格式字符,则认为所有输入的字符均为有效字符。
输入d\e\f,则把‘d’赋值给a,‘\’赋值给b,‘e’赋值给c。只有当输入为def,才能将‘d’赋值给a.’e’赋值给b,‘f’赋值给c。
如果格式控制串中有非格式字符则输入时也要输入该非格式字符。1
scanf ("%c %c %c",&a,&b,&c);
因为在格式控制中加入了空格作为间隔,所以在输入各数据之间需加空格。1
canf ("%c,%c,%c",&a,&b,&c);
因为在格式控制中加入了‘,’作为间隔,所以在输入各数据之间需加‘,’。
ASCII
1 | #include <stdio.h> |
输入三个小写字母,输出其ASCII吗和对应的大写字母
将整个字符串一次输入或输出。用‘%s’格式符,意思是对字符串(string)的输入输出
- scanf函数中的输入项如果是字符数组名,不要再加地址符&,因为在C语言中数组名代表该数组第一个元素的地址(或者说数组的起始地址)。
1
scanf("%s", &str); //str前面不应加&
- 输出的字符中不包括结束符′\0′。
- 用“%s”格式符输出字符串时,printf函数中的输出项是字符数组名,而不是数组元素名。
1
2
3
4
5
6
7#include <stdio.h>
int main()
{
char c[]="China";
printf("%s\n",c);
return 0;
} - 如果数组长度大于字符串的实际长度,也只输出到遇′\0′结束。
- 如果一个字符数组中包含一个以上′\0′,则遇第一个′\0′时输出就结束。从键盘输入:China
1
2char c[6];
scanf("%s",c);
系统会自动在China后面加一个‘\0’结束符如果利用一个scanf函数输入多个字符串,则应在输入时以空格分隔。1
2char str1[5],str2[5],str3[5];
scanf("%s%s%s",str1,str2,str3);
从键盘输入:How are you?
由于有空格字符分隔,作为三个字符串输入。从键盘输入:How are you?1
2char str[13];
scanf("%s",str);
由于系统把空格字符作为输入的字符串之间的分隔符,因此只能将空格前的字符“How”送到str中
2.getchar()
getchar()函数原型:int getchar(void)
用于从标准输入输出控制台读取字符
【参数】该函数没有参数
【返回值】函数的返回值为用户输入的第一个字符的ASCII码,若出错返回-1,且将用户输入的字符回显到屏幕。(循环语句中)如果用户在按回车键之前输入了不只一个字符,其他字符会保留在键盘缓冲区中,等待后续getchar()调用读取。也就是说,后续的getchat()调用不会等待用户按键,而是直接读取缓冲区中的字符,直到缓冲区的字符读取完毕后,才等待用户按键。1
2
3
4
5
6#include<stdio.h>
int main( ){
int ch;
while( (ch=getchar()) != '\n' ) //从控制台流中读取字符,直到按回车键结束
printf ("%c", ch; //输出读取内容
}
输入abcd,输出abcd1
2
3
4
5
6#include<stdio.h>
int main( ){
int ch;
while( (ch=getchar()) != '\n' ) //从控制台流中读取字符,直到按回车键结束
printf ("%d", ch; //输出读取内容
}
输入abcd,输出979899100
注意将ch=getchar()用括号括起来
3.putchar()
putchar()原型:int putchar(int ch)
用于将给定的字符输出控制台
【参数】ch为要输出的字符。
【返回值】输出成功,返回该字符的ASCII码值,否则返回EOF。
purchar(‘字符’)或者putchar(字符变量)1
2
3
4
5
6
7
8
9#include <stdio.h>
int main()
{
char ch;
ch='A';
putchar(ch);
putchar('A');
return 0;
}
输出结果:AA
4.gets()
gets()函数原型:char gets(char str);
【参数】char *类型, str 可以是一个字符指针变量名(没理解),也可以是一个字符数组名。
1、gets() 函数的功能是从输入缓冲区中读取一个字符串存储到字符指针变量 str 所指向的内存空间。
2、从终端输入一个字符串到字符数组,并且得到一个函数值,该函数是字符数组的起始地址
1 | #include <stdio.h> |
从键盘输入:Computer
输出:ComputerComputer
将输入的字符串″Computer″送给字符数组str(请注意,送给数组的共有9个字符,而不是8个字符),返回的函数值是字符数组str的第一个元素的地址。
5.puts()
puts()函数原型:int puts(int *s);
作用:将一个字符串(以‘\0’结束的字符序列)输出到终端
用puts函数输出的字符串中可以包含转义字符。
在用puts输出时将字符串结束标志′\0′转换成′\n′,即输出完字符串后换行。1
2
3
4
5
6
7
8#include <stdio.h>
int main(void)
{
char str[]={"China\nBeijing"};
puts(str);
return 0;
}
输出结果:China
Beijing