格式化输入(scanf)输出(printf)函数

格式化输出函数printf与格式化输入函数scanf是我们经常需要使用的函数,用来输出和输入的。
下面的例子,用来实现从键盘获取不同类型的数据并输出。

#include 
#include 

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”来吃掉

你可能感兴趣的:(课堂笔记)