scanf函数与printf函数用法
一开始学习就是用的cin、cout,所有习惯用这个,但是后来做题发现这样的输入方式有弊端,所以决定整理熟悉一下scanf函数与printf函数。
头文件
# include <stdio.h>
scanf("输入控制符",输入参数)
- 在 scanf 的“输入参数”中,变量前面的取地址符
&
不要忘记。 - scanf 中双引号内,除了“输入控制符”外什么都不要写。
- “输出控制符”和“输出参数”无论在“顺序上”还是在“个数上”一定要一一对应。
- “输入控制符”的类型和变量所定义的类型一定要一致。
// scanf 的"输入参数"中,变量前面的取地址符 &不要忘记 scanf("%d", &i); //输入一个整型数据 scanf("%f", &i); //输入一个浮点数 scanf("%c%c%c", &i, &j, &k);//字符
字符串:输入参数是已经定义好的"字符数组名", 不用加&, 因为在C语言中数组名就代表该数组的起始地址
scanf("%s",string);/*不能接收空格符*/ scanf("%[^/n]",string); scanf("%[^\n]",str);//直到输入回车键,读取才结束,当然不能超过str定义的大小,否则会出错。 // 此命令与gets(str)效果一样。
常用的输入并判断
while(scanf("%d",&n),n)//当n为0时中止循环
printf("输出控制符",输出参数)
//“输出控制符”和“输出参数”无论在“顺序上”还是在“个数上”一定要一一对应。 printf("%d\n", i); printf("%d %d\n", i, j); printf("i = %d, j = %d\n", i, j);
%x、%X、%#x、%#X 的区别
一定要掌握 %x(或 %X 或 %#x 或 %#X),因为调试的时候经常要将内存中的二进制代码全部输出,然后用十六进制显示出来。下面写一个程序看看它们四个有什么区别:
# include <stdio.h> int main(void) { int i = 47; printf("%x\n", i); printf("%X\n", i); printf("%#x\n", i); printf("%#X\n", i); return 0; }
输出结果: 2f
2F
0x2f
0X2F
从输出结果可以看出:如果是小写的x
,输出的字母就是小写的;如果是大写的X
,输出的字母就是大写的;如果加一个#
,就以标准的十六进制形式输出。
最好是加一个#
,否则如果输出的十六进制数正好没有字母的话会误认为是一个十进制数呢!总之,不加#
容易造成误解。但是如果输出 0x2f 或 0x2F,那么人家一看就知道是十六进制。而且%#x
和%#X
中,笔者觉得大写的比较好,因为大写是绝对标准的十六进制写法。
转义字符
printf 中有输出控制符%d
,转义字符前面有反斜杠\
,还有双引号。
要输出%d
只需在前面再加上一个%
,要输出\
只需在前面再加上一个\
,要输出双引号也只需在前面加上一个\
即可。
# include <stdio.h> int main(void) { printf("%%d\n"); printf("\\\n"); printf("\"\"\n"); return 0; }