黑马程序员——输入函数printf()和输出函数()

---恢复内容开始---

一、输入函数printf()

          printf函数是一个标准库函数,它的函数在头文件“stdio.h”中。其格式为:printf(“格式控制字符串”, 输出地址表列)。

     格式字符串

     1.类型

              

         2.格式控制

       1)输出宽度

                 用十进制整数来表示输出的最少位数。若实际位数多于定义的宽度,则按实际位数输出,若实际位数少于定义的宽度则补以空格或0。

 int a=5;
    printf("%d\n",a);
    printf("%2d\n",a);
    printf("%02d",a);

  

       2)浮点数%f精度

                float的有效数字是7位,精度是小数点后6位;double的有效数字是15位,精度是小数点后6位。

int main()
{   float a=556.123456f;
    printf("%f\n",a);
    printf("%.2f\n",a);
    printf("%6.2f\n",a);
    printf("%7.2f",a);
    return 0;
}

  

二、输入函数scanf()

     scanf函数是一个标准库函数,它的函数在头文件“stdio.h”中。其格式为:scanf(“格式控制字符串”, 输入地址表列)。scanf是一个阻塞式的函数:函数执行后,会等待用户的输入,如果用户不输入任何内容,它会一直等待。

     1.“*”符
      用以表示该输入项,读入后不赋予相应的变量,即跳过该输入值。如:

scanf("%d %*d %d",&a,&b);

        当输入为:1   2   3时,把1赋予a,2被跳过,3赋予b。

     2.宽度

      用十进制整数指定输入的宽度(即字符数)。例如:

scanf("%5d",&a);

         输入12345678只把12345赋予变量a,其余部分被截去。又如:

scanf("%4d%4d",&a,&b);

         输入12345678将把1234赋予a,而把5678赋予b。

     3.长度
      长度格式符为l和h,l表示输入长整型数据(如%ld)和双精度浮点数(如%lf)。h表示输入短整型数据。
      使用scanf函数还必须注意以下几点:

        1)scanf函数中没有精度控制,如:scanf("%5.2f",&a);是非法的。

        2)scanf中要求给出变量地址,如给出变量名则会出错。如 scanf("%d",a);是非法的,应改为scnaf("%d",&a);才是合法的。

        3)在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔则可用空格,TAB或回车作间隔。C编译在碰到空格,TAB,回车或非法数据(如对“%d”输入“12A”时,A即为非法数据)时即认为该数据结束。 

        4)在输入字符数据时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。

scanf("%c%c%c",&a,&b,&c);

         输入 d、e、f 则把'd'赋予a,' ' 赋予b,'e'赋予c。只有当输入为 def 时,才能把'd'赋于a,'e'赋予b,'f'赋予c。

#include <stdio.h>
int main(void){
    char a,b;
    printf("input character a,b\n");
    scanf("%c%c",&a,&b);
    printf("%c%c\n",a,b);
    return 0;
}

     由于scanf函数"%c%c"中没有空格,输入M  N,结果输出只有M。而输入改为MN时则可输出MN两字符。

      4.如果格式控制串中有非格式字符则输入时也要输入该非格式字符。

scanf("%d,%d,%d",&a,&b,&c);

           其中用非格式符“ , ”作间隔符,故输入时应为:5,6,7。又如: 

scanf("a=%d,b=%d,c=%d",&a,&b,&c);

          则输入应为:a=5,b=6,c=7。

   5.scanf运行的原理

      1)用户输入的内容被存放到scanf的输入缓冲区中。之后,scanf函数会根据格式控制符串的要求,从缓冲区中依次取它想要的内容。如果冲缓冲区中取得的内容和我们的格式要求一致,则把值赋予变量,否则不会修改变量的值。

      2)如果scanf缓冲区中还有内容,则scanf不会提示 我们再次输入。

     

      

 

posted @ 2015-05-19 12:09  Yj.Adair  阅读(388)  评论(0编辑  收藏  举报