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

来源:互联网 发布:该域名升级访问中 编辑:程序博客网 时间:2024/06/05 09:27

格式化输出函数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”来吃掉
0 0
原创粉丝点击