在C语言中,有多个函数可以从键盘获得用户输入:
- scanf():和 printf() 类似,scanf() 可以输入多种类型的数据。
- getchar()、getche()、getch():这三个函数都用于输入单个字符。
- gets():获取一行数据,并作为字符串处理。
在这其中scanf函数是最灵活、最复杂、最常用的输入函数,但它不能完全取代其他函数,所以都要有所了解。
下面是关于scanf函数用法的一些总结:
scanf() 格式控制符汇总
格式控制符 | 说明 |
%c | 读取一个单一的字符 |
%hd、%d、%ld | 读取一个十进制整数,并分别赋值给 short、int、long 类型 |
%ho、%o、%lo | 读取一个八进制整数(可带前缀也可不带),并分别赋值给 short、int、long 类型 |
%hx、%x、%lx | 读取一个十六进制整数(可带前缀也可不带),并分别赋值给 short、int、long 类型 |
%hu、%u、%lu | 读取一个无符号整数,并分别赋值给 unsigned short、unsigned int、unsigned long 类型 |
%f、%lf | 读取一个十进制形式的小数,并分别赋值给 float、double 类型 |
%e、%le | 读取一个指数形式的小数,并分别赋值给 float、double 类型 |
%g、%lg | 既可以读取一个十进制形式的小数,也可以读取一个指数形式的小数,并分别赋值给 float、double 类型 |
%s | 读取一个字符串(以空白符为结束) |
%c格式对应的是单个字符,%s格式对应的是字符串。
%c输入函数只会对一个字节空间赋值,而%s会一直赋值,直到输入中遇到空白字符为止
举例:
1:char a;
2:char b[20];
3:scanf("%c",&a); //只能输入一个字符。
4:scanf("%s",b); //可以输入一串不超过20字符的字符串
在输入数组时,谨记:
int n;
int a[6];
scanf("%d\n",&n);
for(int i=0;i<n;i++)
{
for(int k=0;k<6;k++)
{
scanf("%d",&a[k]);
}
如果像上述那样输入会造成编译器把六个数字会当成一个数字输进去
方法1:用字符数组
char a[7];
gets(a);
方法2:用%1d
让编译器一次只能读入一个数字
long long 类型的输入输出
long long a;
scanf("%lld",&a);
printf("%lld",a);
unsigned long long :
的范围是[0,264-1]。如果越界了以后就相当于是对264-1求模了。
long long:是有符号类型它的范围是[-263-1,263+1],因为有符号的第63位表示“正负”而不表示数值。但数据越界了以后就会从负数开始计数
printf("%lld",a);
printf("%llu",a);
int 十进制:-2^31=-21 4748 3648 到 2^31-1=21 4748 3647。共10位,21亿。
在32位或64位机器中,int占4个字节,即32位。(一个字节,占8位)
int能表示的最大正整数为:
0111 1111 1111 1111 1111 1111 1111 1111 (最高位表示符号位,正数符号位为0)对应的10进制数为2^31-1=2147483647,对应的十六进制表示为:0x7FFFFFFF。
int能表示的最小负整数为:
1000 0000 0000 0000 0000 0000 0000 0000 (最高位表示符号位,负数符号位为1),负数在计算机中以补码的形式存在,所以对应的原码(补码的补码)也是1000 0000 0000 0000 0000 0000 0000 0000,对应的十六进制表示为0x80000000,而C/C++规定该值为-2^31=-2147483648。
所以最终,int类型(整数类型)的范围为-2^31 ~ 2^31-1,即-2147483648~2147483647,十六进制表示:0x80000000~0x7FFFFFFF。
%d的几种形式总结
1、%d就是普通的输出了
2、%2d是将数字按宽度为2,采用右对齐方式输出,若数据位数不到2位,则左边补空格.%-2d是将数字按宽度为2,采用左对齐方式输出。
3、%02d,和% 2d差不多,只不过左边补0
修饰符 格式说明 意义:1、M
%md 以宽度m输出整型数,不足m时,左补空格
2、0m
%0md 以宽度m输出整型数,不足m时,左补零
3、m,n
%m.nf 以宽度m输出实型小数,小数位为n位