网站 不稳定,专门做生鲜的网站,计算机网站建设维护的基本知识,十大放黄不登录不收费嵌入式Linux C语言程序设计
数据的输入输出
3.1 数据的输出
在这里我们计论的数据的输出#xff0c;指的是如何把数据量示到标准输出#xff0c;即显示器上。
3.1.1 字符输出函数putchar
头文件#xff1a;stdio.h
函数原型#xff1a;int putchar(int c)
函数参数#xf…嵌入式Linux C语言程序设计
数据的输入输出
3.1 数据的输出
在这里我们计论的数据的输出指的是如何把数据量示到标准输出即显示器上。
3.1.1 字符输出函数putchar
头文件stdio.h
函数原型int putchar(int c)
函数参数c为字符常量或表达式
函数返回值输出的字符
函数功能在标准输出上显示一个字符
示例代码
#includestdio.h
int main()
{int a 65;char b B;putchar(a);putchar(\n);putchar(b);return 0;
}3.1.2 格式化输出函数printf
putchar函数只能在终端输出一个字符型的数据如果期望在终端按照 指定的格式输出若干个数据且为任意类型 就可以用printf函数。
头文件stdio.h
函数原型 int printf(const char *format,…)
函数参数format指定输出格式后面跟要输出的变量为不定参…代表。
函数返回值成功返回输出的字节数失败返回-1EOF
函数功能格式化字符串输出
printf支持的格式格式符作用格式符作用i,d十进制整数s字符串x,X十六进制无符号整数e,E指数形式浮点数o八进制无符号f小数形式浮点数u无符号十进制整数ge和f中较短的一种c单一字符%%百分号本身printf支持的格式说明符的修饰符修饰符功能m输出数据域宽数据长度m,左补空格;否则按实际输出.n对实数指定小数点后面位数四舍五入.n对字符串指定下实际输出位数-输出数据在域内左对齐缺省右对齐指定在有符号的正数前显示正号0输出数值时指定左面不使用的空位自动填0#在八进制和十六进制数前显示前导0,0xl在d,o,x,u前指定输出精度为long型l在e,f,g前指定输出精度为double型常用转义字符转义符功能\b退格BS,将当前位置移到前一列\n换行(LF),将当前位置移到一行开头\t水平指平(HT)跳到下一个TAB位置\r回车CR将当前位置移到本行开头代表一个双引号字符\代表一个反斜字符’’代码示例
#include stdio.h
int main()
{int a 1234;float f 123.478;char ch a;char s[] Hello world;printf(%8d,%2d,a,a);printf(%f,%8f,%8.1f,%2f,f,f,f,f);printf(%3c\n,ch);printf(%s\n%15s\n%10.5s\n%2.5s\n%.3s\n,s,s,s,s,s);return 0;
}下面举个例子演示一下格式符-的用法。
#include stdio.h
int main()
{int a 1234;float f 123.456;char s[] Hello world;printf(%8d,%-8d\n,a,a);printf(%10.2f,%-10.1f\n,f,f);printf(%10.5s,%-10.3s\n,s,s);return 0;
}下面例子演示一下格式符“0”“”“”的用法
#include stdio.h
int main()
{int a 1234;float t 123.456;printf(%08d\n,a);printf(%010.2f\n,f);printf(%08d\n,a);printf(%010.2f\n,f);a 123;printf(%0,%#0,%X,%#X\n,a,a,a,a);return 0;
}3.2 数据据输入
前文已经介绍了数据输出现在继续介绍数据输入这里所说的数据输入是指如何得到从键盘上输入的数据。
3.2.1 字符输入函数getchar
首先我们介绍一下字符型数据的输入在C库中有专门的字符输入函数。
头文件:stdio.h
函数原型int getchar(void)
函数参数无
函数返回值成功返回读到的字符失败或读到结束符返回EOF(-1)
函数功能:在键盘上读一个字符。
getchar是函数返回值的含义是存储从键盘上读取的字符返回值的类型确是int,很多人不理解认为返回值应该是char类型。实际上这里返回的是相应字符的ASCII码在计算机中字符是以ASCII码的形式处理的每个字符对应一个ASCII码值。
示例代码如下
#include stdio.h
int main()
{int ch;printf(Enter a character:);while((chgetchar())!EOF){printf(%c---%#x\n,ch,ch);}printf(end main\n);return 0;
}3.2.2 格式化输入函数scanf
getchar函数只能从键盘读到一个字符型的数据如果期望读到若干个数据且为任意类型可以用scanf函数
头文件stdio.h
函数原型int scanf(const char *format,…)
函数参数format 指定输入格式后面跟要输入的变量的地址表为不定参用…代表。
函数返回值成功返回输入的变量的个数失败返回-1EOF
函数功能按指定格式从键盘读入数据存入地址表指定存储单元中并按回车结束
目前scanf支技的格式字符很多。
scanf函数支持的格式说明符i,d十进制整数c单一字符x,X十六进制无符号整数s字符串o八进制无符号整数e指数形式浮点小数u无符号十进制整数f小数形式浮点小数scanf函ovgt支持的格式说明符的修饰符修饰符功能h用于d,o,x前指定输入为short型整数l用于d,o,x前指定输入为long型整数l用于e,f前指定输入为double型实数m指定输入数据宽度遇空格或不可转换字符结束*抑制符指定输入项读入后不赋给变量示例代码
#includestdio.h
int main()
{int a,b,c;printf(input a b c:);scanf(%d,a);scanf(%x,b);scanf(%o,c);printf(a%d,b%d,c%d\n,a,b,c);return 0;
}格式说明符修饰符的例子
#include stdio.h
int main()
{int yy,mm,dd;int a;float c;printf(input year month day);scanf(%4d%2d%2d,yy,mm,dd);printf(%d-%d-%d\n,yy,mm,dd);printf(input int float:);scanf(%3d%*4d%f,a,c);//4d指定输入项中4个数字读入后不赋给变量printf(a%d,c%f\n,a,c);return 0;
}[benben-pc c_workspace]$ ./a.out
input year month day2012 12 26
2012-12-26
input int float:9 9.1234
a9,c0.123400
[benben-pc c_workspace]$ ./a.out
input year month day2012 12 26
2012-12-26
input int float:1234567890
a123,c890.000000关于scanf函数有一些特另需要注意的地方。
用“%c”格式符时空格和转义字符作为有效的字符输入。
示例代码
#includestdio.h
int main()
{char ch1,ch2,ch3;printf(input three characters:);scanf(%c%c%c,ch1,ch2,ch3);printf(ch1%c,ch2%c,ch3%c\n,ch1,ch2,ch3);return 0;
}[benben-pc temp]$ ./a.out
input three characters:a b c
ch1a,ch2 ,ch3b
[benben-pc temp]$ ./a.out
input three characters:a\tb
ch1a,ch2\,ch3t输入数据时遇到以下情竞认该数据结束
空格 TAB 回车宽度结束非法输入
scanf函数反回值是成功输入的变量的个数当遇到非法输入时返回值会小于实际变量个数使用输入函数可能会留下垃圾
调用getchar清除垃圾字符。用格式串中空格或%*c来吃掉scanf(%*c%c,ch);
3.3 数据输入输出综合示例
3-1输入三角形的三条边长a,b,c,计算三角形的面积area计算公式如下
s(abc)/2s(abc)/2s(abc)/2
areas∗(s−a)∗(s−b)∗(s−c)area\sqrt{s*(s-a)*(s-b)*(s-c)}areas∗(s−a)∗(s−b)∗(s−c)
#includestdio.h
#includemath.h
int main()
{float a,b,c,s,area;scanf(%f%f%f,a,b,c);s 1.0/2*(abc);area sqrt(s*(s-a)*(s-b)*(s-c));printf(a%7.2f,b%7.2f,c%7.2f\n,a,b,c);printf(area %7.2f\n,area);return 0;
}#-lm连接c的数学库
[benben-pc temp]$ gcc ./temp3.c -lm
[benben-pc temp]$ ./a.out
3 4 6
a 3.00,b 4.00,c 6.00
area 5.33
3-2 从键盘上输入a,b,c的值求一元二次方程ax2bxc0ax^2bxc 0ax2bxc0的根
x1−bb2−4ac2a,x2−b−b2−4ac2a
x_1\frac{-b\sqrt{b^2-4ac}}{2a}
,
x_2\frac{-b-\sqrt{b^2-4ac}}{2a}
x12a−bb2−4ac,x22a−b−b2−4ac
#include math.h
#include stdio.h
int main()
{float a,b,c,disc,x1,x2,p,q;scanf(%f%f%f,a,b,c);disc b*b-4*a*c;p -b/(2*a);q sqrt(disc)/(2*a);x1 pq;x2 p-q;printf(\n\nx1%5.2f\nx2%5.2f\n,x1,x2);return 0;
}[benben-pc temp]$ ./a.out
1 3 2x1-1.00
x2-2.00
3.4字符串输入输出函数
1字符串输出函数puts
头文件stdio.h
函数原型int puts(const char *s)
功能在标准输出上显示字符串s
参数s为需要输出的字符串
返回值成功返回一个非0的数字失败返回-1或EOF
#include stdio.h
int main()
{char s[]welcome;puts(s);return 0;
}puts函数在输出字符串时地会自动追加换行字符’\n’。使用时注意字符数组必须以’\0’结束
2字符串输入函数fgets
头文件stdio.h
函数原型char* gets(char* s,int size,FILE *stream)
功能从键盘输入一以回结束的字符串放入字符数组中并自动加上‘\0’
参数s为字符数组存储输入的字符串,size要读取的字符数包含‘\0’,stream是指向FILE的指针。该FILE标识了要从中读取的字符流。
返回值成功返回字符数组的起始地址失败或输入结束返回NULL
#includestdio.h
#define N 20
int main()
{int i 0;char s[N] {0};printf();while(fgets(s,N,stdin)!NULL){printf();printf(i%d:%s\n,i,s);i;}printf(end main\n);return 0;
}