参考内容及部分图片来源:
https://www.runoob.com/cprogramming/c-function-printf.html
目录
C本身没有输入输出功能,均是由函数提供的
printf()
输出函数包含于头文件<stdio.h>中
printf输出的格式如下:
printf("<格式化字符串>", <参量表>);
下面是函数的声明
int printf(const char *format, ...)
format -- 这是字符串,包含了要被写入到标准输出 stdout 的文本。它可以包含嵌入的 format 标签,format 标签可被随后的附加参数中指定的值替换,并按需求进行格式化。
format的输出格式如下:%[flags][width][.precision][length]specifier
常用的format如下:
specifier如下:
flags如下:
width如下:
.precision如下:
length如下:
实际案例:
char ch = 'A';
char str[20] = "www.runoob.com";
float flt = 10.234;
int no = 150;
double dbl = 20.123456;
printf("字符为 %c \n", ch);
printf("字符串为 %s \n" , str);
printf("浮点数为 %f \n", flt);
printf("整数为 %d\n" , no);
printf("双精度值为 %lf \n", dbl);
printf("八进制值为 %o \n", no);
printf("十六进制值为 %x \n", no);
输出结果:
printf和转义字符
printf输出需要注意,并不是全部输出,转义字符是会转化为本来的样子,具体情况如下:
【解释】首先要明确该字符串中包含的转义字符,”a \b re \’ hi \' y \\ \b ou \n”中的转义字符(带下划线的部分)共有6个,其中’\b’是退格符,输出时将光标往左边回退一个位置,题目中的‘a’,‘\\’将会被覆盖。
‘\’’为单引号字符,’\\’为\字符,’\n’为回车换行符。所以显示的结果为C。
(来源:链接:https://www.nowcoder.com/questionTerminal/866c750a16864101abeea9f6e4270072
来源:牛客网)
常见的转移字符如下:
但是要注意,符号!和符号%比较特殊,!没有转义字符,%的转移字符是%%
题目:
正确答案是:
printf("\"My salary was increased by 15%%!\"\n");
scanf()
输出函数包含于头文件<stdio.h>中
scanf输出的格式如下:
printf("<格式化字符串>", <参量表>);
下面是函数的声明
int scanf(const char *format, ...)
format的输出格式如下:[=%[*][width][modifiers]type=]
具体实例:
scanf因为格式的原因,对输入的要求也不一样
#include<stdio.h>
int main(void)
{
int a,b,c;
printf("请输入三个数字:");
scanf("%d%d%d",&a,&b,&c);
printf("%d,%d,%d\n",a,b,c);
return 0;
}
交互如下:
- 1、&a、&b、&c 中的 & 是地址运算符,分别获得这三个变量的内存地址。
- 2、%d%d%d 是按十进值格式输入三个数值。输入时,在两个数据之间可以用一个或多个空格、tab 键、回车键分隔。
以上内容是可以在输入中加入空格,tab键和回车分割,但是下面的情况就不允许进行这样的操作
#include<stdio.h>
int main(void)
{
int a,b,c;
printf("请输入三个数字:");
scanf("%d, %d, %d",&a,&b,&c);
printf("%d, %d, %d\n",a,b,c);
return 0;
}
如果格式控制字符串中有非格式字符,则输入时也需要输入相应的非格式字符
输入1,2,3
区别在于,%d之间有了逗号,那么交互输入的时候,必须严格输入
输入时 , 前一定要紧跟在数字后面,数字与 , 之间不能有空格。
练习
题目1:
10A20B↙
解释】scanf用于输入整数时,当遇到非数字字符结束,此时非数字字符将存入键盘
缓冲区,如果接着读入字符,将从键盘缓冲区中读取该字符。对于C的输入,10后面是字
符’A',则将10给a1,'A’就赋给c1,20赋给a2,’B’赋给c2.所以正确的输入方法是C.
(牛客网@1185925亓乂)
因为是整形和字符类型的整合输入,所有如果加空格的话,会把空格赋给c1和c2
答案:A
scanf函数的标准输入格式为:scanf(格式控制字符串,地址列表);
其中格式控制字符串的一般形式为 %[*][数据宽度][长度]类型。
1.类型 :%o (八进制)、%d(十进制)、%x(十六进制)、%f (字符型)、%u(无符号类型)、%c (字符型)、%s(字符串型)
2.数据宽度:用十进制整数来指定字符宽度 例如
int a,b;
scanf("%5d",&a);
当输入为1234567时,截取前面5位赋给a,则有a=12345
scanf("%4d%4d",&a,&b);
当输入为12345678时,此时截取前4位给a,后4位给b,则有a=1234,b=5678
3.长度:长度格式符为l或h,其中l表示长整型数据例如%ld、双精度浮点数%lf,h表示的是短整型数据
当输入多个数值型数据时,如果格式控制字符串中没有非格式字符(逗号、空格等 ) 出现 ,例如scanf("%d%d",&a,&b);此时在输入数据时可以用空格、TAB或回车来表示输入数据之间的间隔,比如输入 1_2(回车) (这里下划线表示的是空格),则a=1,b=2
4.如果格式控制字符串中有非格式字符,则输入时也需要输入相应的非格式字符
(正如本题所示的输入中含有非格式字符 a=, b= 因此在输入的时候也应该输入a=, b=)
例如
int a,b;
scanf("%d,%d",&a,&b);含有非格式字符逗号,在输入数据的时候就应该输入1,2 此时有a=1,b=2
5. %*,表示的是在输入数据时将会跳过这个数值
例如
int a,b;
scanf("%d,%*d,%d",&a,&b);输入1,2,3 时,2将被跳过赋值,有a=1,b=3
(链接:https://www.nowcoder.com/questionTerminal/037f56bb366a48ad873bb13a71ecf50d
来源:牛客网)
题目2:
格式控制字符串中出现的常规字符(包括转义字符),务必原样输入。
答案是C
题目3:
答案B
在scanf中,格式控制符与printf函数中的使用方式相同,如%d、%o、%x、%c、%s、%f等等。
但是在输入时所有的“非格式控制符”都要原样输入。所以在本题中输入的时候b=,f=:以及逗号都必须要原样输入。仅有选项B符合要求。
(链接:https://www.nowcoder.com/questionTerminal/248afe36931f48ecb08be6324bbee9aa
来源:牛客网)