当前位置: 首页 > news >正文

嵌入式Linux C语言程序设计

嵌入式Linux C语言程序设计

数据的输入输出

3.1 数据的输出

在这里我们计论的数据的输出,指的是如何把数据量示到标准输出,即显示器上。

3.1.1 字符输出函数putchar

头文件:stdio.h
函数原型:int putchar(int c)
函数参数:c为字符常量或表达式
函数返回值:输出的字符
函数功能:在标准输出上显示一个字符
示例代码

#include<stdio.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指定输出格式,后面跟要输出的变量,为不定参,"…"代表。
函数返回值:成功返回输出的字节数,失败返回-1(EOF)
函数功能:格式化字符串输出

printf支持的格式

格式符作用格式符作用
i,d十进制整数s字符串
x,X十六进制无符号整数e,E指数形式浮点数
o八进制无符号f小数形式浮点数
u无符号十进制整数ge和f中较短的一种
c单一字符%%百分号本身

printf支持的格式说明符的修饰符

修饰符功能
m输出数据域宽,数据长度<m,左补空格;否则按实际输出
.n对实数,指定小数点后面位数(四舍五入)
.n对字符串,指定下实际输出位数
-输出数据在域内左对齐(缺省右对齐)
+指定在有符号的正数前显示正号+
0输出数值时指定左面不使用的空位自动填0
#在八进制和十六进制数前显示前导0,0x
l在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("%0+8d\n",a);printf("%0+10.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((ch==getchar())!=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 指定输入格式,后面跟要输入的变量的地址表,为不定参,用…代表。
函数返回值:成功返回输入的变量的个数,失败返回-1(EOF)
函数功能:按指定格式从键盘读入数据,存入地址表指定存储单元中,并按回车结束
目前,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指定输入数据宽度,遇空格或不可转换字符结束
*抑制符,指定输入项读入后不赋给变量

示例代码

#include<stdio.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;
}
[ben@ben-pc c_workspace]$ ./a.out 
input year month day2012 12 26
2012-12-26
input int float:9 9.1234
a=9,c=0.123400
[ben@ben-pc c_workspace]$ ./a.out 
input year month day2012 12 26
2012-12-26
input int float:1234567890
a=123,c=890.000000

关于scanf函数有一些特另需要注意的地方。

  1. 用“%c”格式符时,空格和转义字符作为有效的字符输入。
    示例代码
#include<stdio.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;
}
[ben@ben-pc temp]$ ./a.out 
input three characters:a b c
ch1=a,ch2= ,ch3=b
[ben@ben-pc temp]$ ./a.out 
input three characters:a\tb
ch1=a,ch2=\,ch3=t
  1. 输入数据时,遇到以下情竞认该数据结束
  • 空格 TAB 回车
  • 宽度结束
  • 非法输入
  1. scanf函数反回值是成功输入的变量的个数,当遇到非法输入时,返回值会小于实际变量个数
  2. 使用输入函数可能会留下垃圾
  • 调用getchar清除垃圾字符。
  • 用格式串中空格或"%*c"来"吃掉"scanf("%*c%c",&ch);

3.3 数据输入输出综合示例

3-1输入三角形的三条边长a,b,c,计算三角形的面积area计算公式如下:
s=(a+b+c)/2s=(a+b+c)/2s=(a+b+c)/2

area=s∗(s−a)∗(s−b)∗(s−c)area=\sqrt{s*(s-a)*(s-b)*(s-c)}area=s(sa)(sb)(sc)

#include<stdio.h>
#include<math.h>
int main()
{float a,b,c,s,area;scanf("%f%f%f",&a,&b,&c);s = 1.0/2*(a+b+c);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的数学库
[ben@ben-pc temp]$ gcc ./temp3.c -lm
[ben@ben-pc temp]$ ./a.out 
3 4 6
a=   3.00,b=   4.00,c=   6.00
area =    5.33

3-2 从键盘上输入a,b,c的值,求一元二次方程ax2+bx+c=0ax^2+bx+c = 0ax2+bx+c=0的根,
x1=−b+b2−4ac2a,x2=−b−b2−4ac2a x_1=\frac{-b+\sqrt{b^2-4ac}}{2a} , x_2=\frac{-b-\sqrt{b^2-4ac}}{2a} x1=2ab+b24ac,x2=2abb24ac

#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 = p+q;x2 = p-q;printf("\n\nx1=%5.2f\nx2=%5.2f\n",x1,x2);return 0;
}
[ben@ben-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

#include<stdio.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;
}
http://www.dtcms.com/a/391042.html

相关文章:

  • 【开题答辩全过程】以 基于Python的电影数据爬取及可视化分析为例,包含答辩的问题和答案
  • 推荐一些适合新手的Java项目教程
  • 探索PV操作:并发编程的核心钥匙
  • 一计算机网络基本概念-体系结构-思考题
  • Teslasuit动捕服的实际应用,系统利用电肌肉刺激为用户在VR中提供逼真的感觉和触觉
  • 【DMA】深入解析DMA控制器架构与运作原理
  • wayland 下 带特殊权限的 Qt GUI 程序 部署为 开机自启+守护进程
  • 无事随笔——mp踩坑
  • 根据后端给定的swagger文档生成对应的ts接口
  • 《黑天鹅》
  • docker编写java的jar步骤
  • HDR简介
  • 视觉Slam14讲笔记第4讲李群李代数【更新中】
  • 【无人机】ardupilot事项笔记
  • 大端模式与小端模式
  • Openwrt 平台下移植rk3568 rknn_yolov5_demo 应用程序问题分析
  • Dioxus后端代码
  • 概念篇:ReactJS + AppSync + DynamoDB 性能优化核心概念
  • 实践篇:ReactJS + AppSync + DynamoDB 性能优化实践
  • GPS 定位:守护财产安全的 “隐形防盗锁”
  • Vue3 + Three.js 进阶实战:批量 3D 模型高效可视化、性能优化与兼容性解决方案
  • 海外VPS索引版本兼容性检查,版本兼容问题检测与多系统适配方法
  • uniapp 常用
  • C语言入门教程 | 阶段一:基础语法讲解(数据类型与运算符)
  • 现代AI工具深度解析:从GPT到多模态的技术革命与实战应用
  • 自由学习记录(101)
  • 2025最新口红机防篡改版本源码
  • Unity2D-图片导入设置
  • 今日赛事前瞻:德甲:斯图加特VS圣保利,意甲:莱切VS卡利亚里
  • AWS CloudTrail 监控特定 SQS 队列事件完整配置指南