格式化输出函数printf与格式化输入函数scanf是我们经常需要使用的函数,用来输出和输入的。
下面的例子,用来实现从键盘获取不同类型的数据并输出。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i;
int j = 0;
int num;
char ch;
long l_num;
float f_num;
double d_num;
char *src;
char ptr[100];
int a[3];
printf("input a num:");
scanf("%d", &num);
printf("num = %d\n",num);
printf("input a char1:");
scanf("%c", &ch);
printf("ch = %c\n", ch);
printf("input a char2:");
getchar();
putchar(ch);
printf("input a long :");
scanf("%ld", &l_num);
printf("l_num = %ld\n", l_num);
printf("input a float:");
scanf("%f", &f_num);
printf("f_num = %f\n", f_num);
printf("input a double:");
scanf("%lf", &d_num);
printf("d_num = %lf\n", d_num);
src = ( char *) malloc ( sizeof ( char *));
printf("input a str:");
scanf("%c", src);
printf("src = %c\n", *src);
printf("input a ptr1:");
scanf("%s", ptr);
printf("ptr1 = %s\n", ptr);
printf("input a ptr2:");
while( ptr[j] != '\0')
{
scanf("%c", &ptr[j]);
j++;
}
printf是一个行缓冲函数,先写到缓冲区,满足条件后,才将缓冲区刷到对应文件中,刷缓冲区的条件如下:
- 缓冲区填满
- 写入的字符中有‘\n’’\r’
- 调用fflush手动刷新缓冲区
- 调用scanf要从缓冲区中读取数据时,也会将缓冲区内的数据刷新
满足上面4个条件之一缓冲区就会刷新,也就是printf会真正调用write来写入。
printf函数的使用技巧
颜色代码:
QUOTE:
字背景颜色范围: 40–49 字颜色: 30–39
40: 黑 30: 黑
41: 红 31: 红
42: 绿 32: 绿
43: 黄 33: 黄
44: 蓝 34: 蓝
45: 紫 35: 紫
46: 深绿 36: 深绿
47: 白色 37: 白色
ANSI控制码:
QUOTE:
\033[0m 关闭所有属性
\033[1m 设置高亮度
\03[4m 下划线
\033[5m 闪烁
\033[7m 反显
\033[8m 消隐
\033[30m – \033[37m 设置前景色
\033[40m – \033[47m 设置背景色
\033[nA 光标上移n行
\03[nB 光标下移n行
\033[nC 光标右移n行
\033[nD 光标左移n行
\033[y;xH设置光标位置
\033[2J 清屏
\033[K 清除从光标到行尾的内容
\033[s 保存光标位置
\033[u 恢复光标位置
\033[?25l 隐藏光标
\33[?25h 显示光标
这样, 在某些时候就可以实现动态的输出.
scanf函数在输入数据时,遇到以下情况认为该情况结束:
- 遇到空格,TAB,或回车
- 与宽度结束
- 与非法输入
scanf函数有可能会留下一些“垃圾”数据,我们可以用以下的方法来解决:
- 用getchar()清除
- 用格式串中空格或“%*c”来吃掉