查看原文
其他

NDK探究之旅《三》—C语言的输入输出函数

2017-05-09 于亚豪 终端研发部

前言介绍

C语言的输入输出函数及其用例测试

于亚豪的博客地址

正文

NDK探究之旅《一》——对jni和NDK的认识

NDK探究之旅《二》——C语言的基本认识

有关于java的输入输出函数:

C语言的输出函数:

我们先来看一下printf函数
  • printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息。

  • printf()函数的调用格式为: printf("<格式化字符串>", <参量表>)。

  • 格式输出,它是c语言中产生格式化输出的函数(在 stdio.h 中定义)。用于向终端(显示器、控制台等)输出字符。格式控制由要输出的文字和数据格式说明组成。要输出的的文字除了可以使用字母、数字、空格和一些数字符号以外,还可以使用一些转义字符表示特殊的含义。

  • 4,作用:在c语言中产生格式化输出的函数(定义在 stdio.h 中),其向终端(显示器、控制台等)输出字符。

备注:

c语言的双精度小数点只能保存到后6位

如:

#include<stdio.h>#include<string.h> intmain() {   char c,s[20], *p;   inta=1234, *i;   floatf=3.141592653589;   doublex=0.12345678987654321;   p="How do you do";   strcpy(s,"Hello, Comrade");   *i=12;      c='\x41';   printf("a=%d\n", a);    /*结果输出十进制整数a=1234*/   printf("a=%6d\n", a);   /*结果输出6位十进制数a= 1234*/   printf("a=%06d\n", a);  /*结果输出6位十进制数a=001234*/    printf("a=%2d\n", a);   /*a超过2位, 按实际值输出a=1234*/   printf("*i=%4d\n", *i); /*输出4位十进制整数*i= 12*/   printf("*i=%-4d\n",*i); /*输出左对齐4位十进制整数*i=12*/     printf("i=%p\n", i);    /*输出地址i=06E4*/   printf("f=%f\n", f);    /*输出浮点数f=3.141593*/   printf("f=6.4f\n", f);  /*输出6位其中小数点后4位的浮点数f=3.1416*/      printf("x=%lf\n", x);   /*输出长浮点数x=0.123457*/   printf("x=%18.16lf\n", x);/*输出18位其中小数点后16位的长浮点数x=0.1234567898765432*/      printf("c=%c\n", c);    /*输出字符c=A*/   printf("c=%x\n", c);    /*输出字符的ASCII码值c=41*/   printf("s[]=%s\n", s);  /*输出数组字符串s[]=Hello, Comrade*/   printf("s[]=%6.9s\n", s);/*输出最多9个字符的字符串s[]=Hello, Co*/   printf("s=%p\n", s);    /*输出数组字符串首字符地址s=FFBE*/      printf("*p=%s\n", p);   /* 输出指针字符串p=How do you do*/   printf("p=%p\n", p);    /*输出指针的值p=0194*/   getch();    retunr0; }

C语言的输入函数:

函数名: scanf

功 能: 执行格式化输入

scanf()函数是格式化输入函数, 它从标准输入设备(键盘) 读取输入的信息。其调用格式为canf(“<格式化字符串>”, <地址表>);格式化字符串包括以下三类不同的字符;

  • 1 格式化说明符: 格式化说明符与printf()函数中的格式说明符基本相同。

  • 空白字符: 空白字符会使scanf()函数在读操作中略去输入中的一个或多个空白字符。

  • 非空白字符: 一个非空白字符会使scanf()函数在读入时剔除掉与这个非空白字符相同的字符。地址表是需要读入的所有变量的地址, 而不是变量本身。这与printf()函数完全不同, 要特别注意。各个变量的地址之间同“,”分开。

例1

int i,j; scanf(“%d, %d”, &i, &j);

上例中的scanf()函数先读一个整型数, 然后把接着输入的逗号剔除掉, 最后读入另一个整型数。如果“,”这一特定字符没有找到, scanf()函数就终止。若参数之间的分隔符为空格, 则参数之间必须输入一个或多个空格。

对于字符串数组或字符串指针变量, 由于数组名和指针变量名本身就是地址, 因此使用scanf()函数时, 不需要在它们前面加上”&”操作符。

main() {   char *p, str[20];   scanf(“%s”, p);   scanf(“%s”, str);   printf(“%s\n”, p);   printf(“%s\n”, str); }

可以在格式化字符串中的“%”各格式化规定符之间加入一个整数, 表示任何读操作中的最大位数。

如例2中若规定只能输入10字符给字符串指针p, 则第一条scanf() 函数语句变为scanf(“s”, p);程序运行时一旦输入字符个数大于10, p就不再继续读入, 而后面的一个读入函数即scanf(“%s”, str)就会从第11个字符开始读入。

实际使用scanf()函数时存在一个问题, 下面举例进行说明:当使用多个scanf()函数连续给多个字符变量输入时

例如:

main() {  char c1, c2; 
 scanf(“%c”, &c1); 
 scanf(“%c”, &c2);  
 printf(“c1 is %c, c2 is %c”, c2, c2);

}

运行该程序, 输入一个字符A后回车 (要完成输入必须回车), 在执行scanf(“%c”, &c1)时, 给变量c1赋值”A”

但回车符仍然留在缓冲区内, 执行输入语句scanf(”%c”, &c2)时, 变量c2输出的是一空行, 如果输入AB后回车, 那么输出结果为: c1 is A, c2 is B。要解决以上问题,

可以在输入函数前加入清除函数fflush()。修改以上程序变成:

#include<stdio.h>main() {   char c1, c2;   scanf(“%c”, &c1);   fflush(stdin);   scanf(“%c”, &c2);   printf(“c1 is %c, c2 is %c”, c1, c2); }

c语言的输入输出函数相对而言是非常简单的.

利用C打印水仙花:

利用C打印出0-1000之间所有的"水仙花数"

所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。

代码如下:

打印结果:

博客地址:



让心,在阳光下学会舞蹈

让灵魂,在痛苦中学会微笑

—终端研发部—



如果你觉得此文对您有所帮助,欢迎入群 QQ交流群 :232203809   

微信公众号:终端研发部

(欢迎关注学习和交流)




            

Hello,伙伴们

长按二维码就可以关注我们啦



(欢迎关注学习和交流)


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存