嵌入式学习LV1-C语言- D3. 输入输出专题

D3.输入输出专题


如果出现图片无法查看可能是网络问题,我用的GitHub+图床保存的图片,用uu加速器说不定能解决,可以参考我另外一篇文章GitHub的使用方法
GitHub使用教程含网络问题_github加速器_肉丸子QAQ的博客-CSDN博客

关注后私信获取附加资料


1. 数据输出

1. 字符输出

  • C语言无I/O语句,I/O操作由函数实现
  • 字符输出函数
    • 格式: putchar( c )
    • 参数: c为字符常量、变量或表达式
    • 功能:把字符c输出到显示器上
    • 返值:正常,为显示的代码值;

示例:

#include <stdio.h>

int main()
{
	int a = 65;
	char ch = 'B';

	putchar(a);
	putchar('\n');
	putchar(ch);
	putchar('\n');

	return 0;

实验现象:

image-20230316154921169

2. 格式输出

  • 格式:printf(“格式控制串”,输出表)
  • 功能:按指定格式向显示器输出数据
  • 输出表:要输出的数据
  • 格式控制串:包含两种信息
    • 格式说明:%[修饰符]格式字符,用于指定输出格式
    • 普通字符:原样输出
格式符作用
i, d十进制整数
x,X十六进制无符号整数
o八进制无符号整数
u无符号十进制整数
c单一字符
s字符串
e,E指数形式浮点小数
f小数形式浮点小数
ge和f中较短一种
%%百分号本身

代码

#include <stdio.h>

int main()
{
        int a = 254;
        char ch = 'A';
        char s[] = "dsfsdf";
        float f1 = 567.89;

        printf("%d %o %x\n", a, a, a);//十进制 八进制 十六进制
        printf("%c-%d\n", ch, ch);//单一字符 十进制(字符对应的ASCLL码值)
        printf("%s\n", s);//字符

        printf("%f-%e-%g\n", f1, f1, f1);//小数点形式 指数形式 两种方式选较短的一种

        return 0;
}

现象:

image-20230316162736007

附加格式说明符
修饰符功能
m输出数据域宽,数据长度<m,左补空格;反之按实际输出
.n对实数,指定小数点后位数(四舍五入)
对字符串,指定实际输出位数
-输出数据在域内左对齐(缺省右对齐)
+指定在有符号数的正数前显示正号(+)
0输出数值时指定左面不使用的空位置自动填0
#在八进制和十六进制数前显示前导0,0x
l在d, o, x, u前,指定输出精度为long型
l在e, f, g前,指定输出精度为double型

代码1:

#include <stdio.h>

int main()
{
	int a = 254;
	float f1 = 345.667;
	char ch = 'a';

	printf("%8d\n%2d\n", a, a);
	printf("%9f-%9.2f-%.3f\n", f1, f1, f1);
	printf("ch=%5c\n", ch);


	return 0;
}

实验现象:

image-20230316164811150

对于字符串来说

代码2:

#include <stdio.h>

int main()
{
	char s[] = "Hellow world";

        printf("%15s\n", s);
        printf("%15.5s\n", s);
        printf("%2.5s\n", s);//小数点前面的是取宽度,太小则原样输出
        printf("%.5s\n", s);//小数点后面是取内容指定长度就输出多少长度
	return 0;
}

实验现象:

image-20230316165445075

代码3:

#include <stdio.h>

int main(int argc, char *argv[])
{
        int a = 254;
        float f1 = 345.7;
        char ch = 'a';

        printf("%08d\n%0+8d\n", a, a);
        printf("%09f-%09.2f-%.3f\n", f1, f1, f1);
        printf("ch=%5c\n", ch);

        return 0;
}

实验现象:

image-20230316170125536

2. 数据输入

1. 字符输入

字符输入函数getchar

  • 格式: getchar( )

  • 功能:从键盘读一字符

  • 返值:正常,返回读取的代码值;出错或结束键盘输入,返回-1 (ctrl +d结束输入)

代码:

#include <stdio.h>

int main()
{
	int ch;
	
	ch = getchar();//当自己不想输入时ctrl+d结束输入
	putchar(ch);
	putchar('\n');
	printf("ch=%d\n", ch);

	return 0;
}

实验现象:

image-20230316171502471

2. 格式输入

  • 格式: scanf(“格式控制串”,地址表)

  • 功能:按指定格式从键盘读入数据,存入地址表指定

  • 存储单元中,并按回车键结束

  • 返值:正常,返回输入数据个数

  • 地址表:变量的地址,常用取地址运算符&

注意:scanf里面不要写提示语句,最好单独用printf写

格式输入函数

修饰符功能
h用于d, o, x前,指定输入为short型整数
l用于d, o, x前,指定输入为long型整数
用于e, f前,指定输入为double型实数
m指定输入数据宽度,遇空格或不可转换字符结束
*抑制符,指定输入项读入后不赋给变量

代码:

#include <stdio.h>

int main()
{
	int n,y,r;
	printf("input: ");
	scanf("%d,%d,%d", &n, &y, &r);
    //scanf("%d%d%d", &n, &y, &r);
    //这里需要注意当scanf里面带有逗号的时候也需要在键盘输入的时候带有并且可以不用使用回车来选择输入下一位
    //例如%d %d %d在输入时可以数字空格数字空格数字连续输入,逗号同理
	printf("%d-%d-%d\n", n, y, r);

	return 0;
}

注意:字符串输入时空格和转义字符作为有效字符输入

3. 垃圾输入处理

#include <stdio.h>

int main()
{
	char x;
	int a;
	printf("input: ");
	scanf("%d",&a);
    //方法一
    getchar();//当输入完第一个scanf回车后,这个回车会直接带到下一scanf,需要一个getchar函数将回车消化
    //方法二
    //第二个scanf用格式串中空格或“%*c”来“吃掉”
    //scanf("%c",&a);
    //scanf("%*c%c",&x);
    
	scanf("%c",&x);
	printf("%d-%d-%c", a,x,x);
	printf("%d\n", '\n');

	return 0;
}

实验现象:

image-20230316201943677

回车的ASCII值是10

4. 字符串输入函数

字符串输入函数gets

  • 格式: char * gets(char *s)

  • 功能:从键盘输入一以回车结束的字符串放入字符数组中,并自动加‘\0’,这里注意字符串数组大小减一是实际可输入字符串的个数结束符要占一个储存

  • 说明1:输入串长度应小于字符数组维数

  • 说明2:与scanf函数不同,gets函数并不以空格作为字符串输入结束的标志。

注意:scanf函数在输入字符串的时候中间不能有空格

image-20230316203837995

代码

#include <stdio.h>

int main()
{
    char s[5];
    gets(s);
    printf("%s", s);
}

字符串输出函数puts

  • 格式:int puts(const char *s)

  • 功能:向显示器输出字符串(输出完,换行),输出自动换行

  • 说明:字符数组必须以‘\0’结束

作业

1.下列语句正确的是()
A.unsigned int i; scanf(“%d”,i); B. unsigned int i; scanf(“%f”,i);
C. unsigned int i; scanf(“%u”,&i);
2.以下程序
unsigned int Year,Mon,Day;
改为scanf(“%4u%2u%2u”,&Year,&Mon,&Day);
程序运行后在键盘输入20 16 1 2 0 2那么变量Day的值为()
A.1 B.12 C.2 D.21
3.用代码实现在终端上输入一行字符,原样输出(温馨提示:编程题需要把源码.c文件压缩上传到附件中,如果有多个,请压缩到一个压缩包中。)

  1. C
  2. A
  1. #include <stdio.h>
    int main(void)
    {
    char str[10];  
    printf("请输入字符串:");
    scanf("%s", str);
    printf("输出结果:%s\n", str);
    return 0;
    }
    
    
    
  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肉丸子QAQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值