输入输出(二)
一、学习目标
1、掌握字符输入函数的用法。
2、掌握格式输入函数的用法。
3、总结与思考。
二、字符输入函数
字符输入函数getchar
格式:getchar()
功能:从键盘读一字符
返回值:正常,返回读取的代码值;出错或结束键盘输入(Ctrl+d),返回-1
#include<stdio.h>
int main()
{
int ch;
printf(">");
ch = getchar();
putchar(ch);
putchar('\n');
printf("ch = %d \n",ch);
return 0;
}
运行结果:
in_out$ ./getchar
>4
4
ch = 52
in_out$ ./getchar
>r
r
ch = 114
in_out$ ./getchar
>�
ch = -1
三、格式输入函数
1.格式输入函数:scanf()
格式:scanf(“格式控制串”,地址表)
功能:按指定格式从键盘读入数据,存入地址表指定存储单元中,并按回车键结束
返回值:正常,返回输入数据个数
地址表:变量的地址,常用取地址运算符&
#include<stdio.h>
int main()
{
int ch;
printf(">");
scanf("%d", &ch);
printf("ch = %d \n",ch);
return 0;
}
运行结果:
in_out$ ./scanf1
>65
ch = 65
2.scanf支持的格式字符(同输入的格式字符)很多
#include<stdio.h>
int main()
{
int ch;
printf(">");
scanf("%x", &ch);
printf("ch = %d \n",ch);
return 0;
}
运行结果:(十进制转成16进制)
$ ./scanf1
>11
ch = 17
一种错误形式:(所有提示可以单独写一行提示语句,不要混到里面)
#include<stdio.h>
int main()
{
int ch;
printf(">");
scanf("please input:%x", &ch);
printf("ch = %d \n",ch);
return 0;
}
运行结果:
错误结果:$ ./scanf1
>11
ch = 32765
正确结果:$ ./scanf1
>please input:11
ch = 17
用n的返回值小于输入变量的个数这个条件来去识别用户输入失败。
#include<stdio.h>
int main()
{
int ch, n;
printf(">");
n = scanf("%x", &ch);
printf("n = %d ch = %d \n", n, ch);
return 0;
}
运行结果:(第二个运行结果 输入q 不符合要求(要求为整数))
$ ./scanf1
>22
n = 1 ch = 34
$ ./scanf1
>q
n = 0 ch = 1548841456
3.scanf函数支持的格式说明符可以带一下修饰符
h:用于d,o,x前,指定输入为short型整数
l:①用于d,o,x前,指定输入为long型整数;
②用于e,f前,指定输入为double型整数
m:指定输入数据宽度,遇空格或不可转换字符结束
*:抑制符,指定输入项读入后不赋给变量
#include<stdio.h>
int main()
{
int ch, n;
long m;
printf(">");
n = scanf("%x%ld", &ch, &m);
printf("n = %d ch = %d m = %ld\n", n, ch, m);
return 0;
}
运行结果:(%ld 指定是long型)
$ ./scanf1
>21 5
n = 2 ch = 33 m = 5
m的用法
#include<stdio.h>
int main()
{
int y, m, d;
printf(">");
scanf("%4d%2d%2d", &y, &m, &d);
printf("%d.%d.%d\n", y, m, d);
return 0;
}
运行结果:
$ ./scanf2
>20201215
2020.12.15
4.用“%c”格式符时,空格和转义字符作为有效字符输入
#include<stdio.h>
int main()
{
char y, m, d;
printf(">");
scanf("%c%c%c", &y, &m, &d);
printf("%d.%d.%d\n", y, m, d);
return 0;
}
运行结果:两次运行结果可以看出在字符型修饰符中空格是参与运行的有效字符(空格的ASCII码为32)
$ ./scanf3
>abc
97.98.99
$ ./scanf3
>a b c
97.32.98
5.总结:输入数据时,遇到以下情况认为该数据结束
(1)遇空格,TAB,回车
(2)遇非法输入(不按照要求输入)
(3)遇宽度结束
四、总结与思考
主要介绍了C语言中的两个输入函数,字符输入函数个格式输入函数(重点)
思考:1.格式输入函数有哪些格式字符?
i,d:十进制整数
x X:十六进制无符号整数
o:八进制无符号整数
u:无符号十进制整数
c:单一字符
s:字符串
e:指数形式浮点小数
f:小数形式浮点小数
2.格式输入函数的格式字符有哪些附加说明符?
h:用于d,o,x前,指定输入为short型整数
l:①用于d,o,x前,指定输入为long型整数;
②用于e,f前,指定输入为double型整数
m:指定输入数据宽度,遇空格或不可转换字符结束
*:抑制符,指定输入项读入后不赋给变量