(Linux)嵌入式打卡第四天

输入输出专题

简介:

C语言库提供了三套输入输出函数,C库输入输出必须添加头文件 #include <stdio.h>

printf() 和 scanf()

putchar() 和 getchar()

puts() 和 gets()

man手册:

linux 提供了函数的使用说明手册。

使用方式:

man 数字 函数名/命令

2 --> 系统调用函数

3 --> C语言库函数

putchar / getchar

putchar 函数

man手册 : man 3 putchar

头文件:#include <stdio.h>

函数原型:

int putchar(int c);

|       |           |   |----> 形式参数名称

|       |           |----- -->形式参数类型

|       |------- ------>函数名称

|--------------------->函数返回值

函数功能:

向终端输出一个字符;

函数参数:

c 需要向终端中输出的字符;

返回值:

成功:输出字符

失败:EOF (-1)

#include <stdio.h>

int main(int argc, const char *argv[])
{
	//putchar()直接输出字符
	putchar('a');
	putchar(10);

	//putchar()函数参数使用数字
	putchar(65);
	//65是数字,putchar输出字符会通过ascii码转换为A
	
	putchar(10);//ascii码 10 对应字符/n换行


	//putchar():函数参数变量
	int number = 101;//101的ascii -> 'e'
	putchar(number);
	putchar(10);

	//putchar() :函数输出表达式
	putchar(number - 32);
	putchar(10);

	return 0;
}
结果:
a
A
e
E

getchar函数

man手册:man 3 getchar

头文件:#include <stdio.h>

函数原型:

int getchar(void);

函数功能:

从终端中获取一个字符

函数参数:

无参数

返回值:

成功:返回值就是获取的字符

失败:EOF


int main(int argc, const char *argv[])
{
	//通过getchar获取一个字符
	
	//定义一个变量保存从终端获取的字符
	char ch;
	ch = getchar();
	getchar();

	printf("ch = [%c] [%d]\n",ch,ch);

	//getchar();获取多个字符
	//会把 换行\n,空格space 也识别为字符
	//但这种字符没有用,将之称为垃圾字符
	//使用getchar()吃掉垃圾字符
	
	char ch1 = getchar();
	getchar();
	char ch2 = getchar();
	getchar();
	printf("ch1 = [%c],[%d]\n",ch1,ch1);
	printf("ch2 = [%c],[%d]\n",ch2,ch2);


	return 0;
}

puts / gets

puts函数

man手册:man 3 puts

头文件:#include <stdio.h>

函数原型:

int puts(const char *s); //put 输出 s -> string

功能:

向终端中,输出一个字符串,puts自带换行符,会自动换行

参数:

s:类型:char * -->指针类型

需要输出的字符串。

#include <stdio.h>

int main(int argc, const char *argv[])
{
	//puts向终端中输出一个字符串
	puts("www.baidu.com");//双引号之间的内容是字符串
	
	//字符串的表达方式:使用数组表示
	char str[32] = "hello world";
	puts(str);//puts输出一个变量

	//字符串也可以使用指针表示
	char *mystr = "beijing";
	puts(mystr);//输出指针保存的字符串

	//注意:C语言中,puts输出的时候遇到\0就结束
	puts("aabbcc\0ddeeff");
	puts("aacc0ssfff");


	return 0;
}

gets函数

man 手册:man 3 gets

头文件:#include <stdio.h>

函数原型:

char *gets(char *s);

函数功能:

从终端中获取一个字符。

函数参数:

s:存储字符串的数组

注意:

gets不会检查存放字符串的大小,如果存放字符串的空间不够,会出现越界问题,很严重!

练习代码:

#include <stdio.h>

int main(int argc, const char *argv[])
{
	//定义一个字符串,存放从中端中获取得值
	char mystr[20];//定义一个字符串mystr,里面存20个字符
	gets(mystr);

	printf("mystr = %s\n",mystr);
	

	//error定义一个指针将终端获取的字符串存储到指针?
	char* p;//error指针在内存中占8字节,不是用来存放字符串的
	gets(p);//error
	printf("p = %s\n",p);//error

	return 0;
}

printf / scanf

printf函数

man手册:

man 3 printf

头文件:

#include <stdio.h>

函数原型:

int printf(const char *format,...);

功能:

向终端输出一个字符串(自己格式化之后的字符串)

函数参数:

format:格式控制串

格式说明:

%c 字符 eg: printf("this is %c", 'h');

%d 有符号十进制数字 eg: printf("number = %d", number);

%u 无符号十进制数字 eg: printf("%u", number);

%o 八进制数字 eg: printf("八进制数字: %o", number);

%x 十六进制数字 eg: printf("十六进制数字: %x", number);

%s 字符串 eg: printf("字符串: %s", mystr);

printf("age: %d, name:%s",age, name);

%f 浮点类型数据 eg: printf("float : %f", 3.14);

%e 指数形式浮点数据 eg: printf("科学计数法: %e", 3.15e+10);

%p 地址 eg: printf("&number = %p", &number);

附加格式说明:
l 小写的L, 输出long 和long long 以及double类型的时候使用.
eg: %ld --> 输出long类型的数据.
# 配合输出八进制, 十六进制数据的时候,添加上前缀.
eg: %#x :输出的十六进制的数字是有前缀的 0x
%#o :输出的八进制的数字是有前缀的 0
.nf %f输出的时候默认是6位小数, .nf可以限制小数的位数.
eg: %.2f :保留两位小数.
m m是一个数字. 正常的数字都是有位数.
eg: %3d :输出的空间占3个位置,如果位置不够,补充2个不显示的位置.
- 左对齐: 输出数据的时候进行左对齐.
eg: %-2d: 输出数字占2位并且左对齐.

返回值:

输出的字符串

#include <stdio.h>

int main(int argc, const char *argv[])
{	
	//输出字符
	char ch = 'A';
	printf("ch = %c\n",ch);


	//输出数字
	int value1 = 520;
	printf("value1 = %d\n",value1);

	unsigned int value2 = 1314;
	printf("value2 = %u\n",value2);//无符号数


	int value3 = 10;//10是十进制数字
	printf("八进制value3 = [%o] [%#o]\n",value3,value3);
	printf("十六进制value3 = [%x] [%#x]\n",value3,value3);


	//输出字符串
	char *mystr = "hello world";
	printf("mystr = %s\n",mystr);

	//输出浮点类型数据
	float value4 = 3.14f;
	printf("value4 = %f,保留两位小数%.2f\n",value4,value4);


	float value5 = 10000000.0f;
	printf("科学计数法 value5 = %e\n",value5);

	//输出地址
	printf("&value5 = %p\n",&value5);

	int a = 1,b = 2, c = 3;
	printf("%d%d%d\n",a,b,c);
	printf("%2d%2d%2d\n",a,b,c);//默认右对齐
	printf("%-2d%-2d%-2d\n",a,b,c);








	return 0;
}

scanf函数

man 手册: man 3 scanf

头文件: #include <stdio.h>

函数原型:

int scanf(const char *format,......);

功能:

从键盘中输入数据到程序中。

函数参数:

format:scanf函数中format与printf当中是一样的。

以下是最常用的:

格式说明: *****:

%c 字符 eg: scanf("%c", &ch); // scanf输入存放的数据在变量的地址当中

%d 有符号十进制数字 eg: scanf("%d%d",&v1, &v2);

%s 字符串 eg: scanf("%s", str); // 字符串的名称

                                                  // 输入的是没有空格的字符串

%f 浮点类型数据 eg: scanf("%f", &f);

%[^\n]s 字符串:带空格的字符串 eg: scanf("%[^\n]s")

注意:

scanf 认为\n 和space 都代表对应的一个格式输入结束。

eg:

scanf("%d%d",&v1,&v2);

从键盘中输入:123 456 \ 123\n456

输入一个字符串给数组s[6],hello,第一个字母对应数组第一个元素,h->s[0] e->s[1] l->s[2] ......

#include <stdio.h>

int main(int argc, const char *argv[])
{
	char ch[7];
	scanf("%s",ch);
	printf("%c\n",ch[3]);
	printf("%s\n",ch);
	return 0;
}
#include <stdio.h>

int main(int argc, const char *argv[])
{
	//从键盘中输入一个字符
	
	//定义一个变量,用来存放输入的字符
	char ch = 0;//定义一个char类型的变量,初始化为0

	printf("please input char >> ");
	scanf("%c",&ch);//从键盘中的字符存放到变量ch中。
	//scanf("please input char %c\n",&ch);//不可这样写
	//scanf("%c\n",%ch);//格式控制串的前后不可添加\n,space  
						//出现这俩输入就结束不了了,只能输入任意
						//的字符加回车才能结束
						//所以scanf的前后不要加任何东西

	printf("ch = %c\n",ch);

	//从键盘中输入数字
	int value1 = 0;
	int value2 = 0;

	printf("please input two number >> ");
	scanf("%d%d",&value1,&value2);//将键盘中输入的数据存放到
								//value1,value2当中
	printf("value1 = %d , value2 = %d\n",value1,value2);


	//输入字符串
	//定义字符串 mystr1 mystr2
	char mystr1[128];
	char mystr2[128];

	printf("please input string : >>");
	scanf("%s",mystr1);
	printf("mystr1 = %s\n",mystr1);
	getchar();


	printf("please input string : >>");
	scanf("%[^\n]s",mystr2);
	printf("mystr2 = %s\n",mystr2);




	return 0;
}
结果:
please input char >> a
ch = a
please input two number >> 12 23
value1 = 12 , value2 = 23
please input string : >>he
mystr1 = he
please input string : >>hello world
mystr2 = hello world

课堂练习:

#include <stdio.h>

int main(int argc, const char *argv[])
{
	char name[128];
	char iphone[128];
	int age = 0;
	char sex = 0;
	char school[128];
	char add[128];

	printf("请输入你的名字:");
	scanf("%s",name);
	getchar();

	printf("请输入你的电话:");
	scanf("%s",iphone);
	getchar();

	printf("请输入你的年龄:");
	scanf("%d",&age);
	getchar();

	printf("请输入你的性别:");
	sex = getchar();
	getchar();

	printf("请输入你的学校:");
	scanf("%s",school);
	getchar();

	printf("请输入你的地址:");
	scanf("%s",add);

	printf("*********************************\n");
	printf("     姓名:%s  \n",name);
	printf("     iphone:%s\n",iphone);
	printf("     age: %d\n",age);
	printf("     性别:%c\n",sex);
	printf("     学校:%s\n",school);
	printf("     地址:%s\n",add);
	printf("*********************************\n");


	return 0;
}

吃掉垃圾字符

输入数据的时候:

字符与字符之间:

scanf("%c", &ch);

scanf("%c", &ch1);

如果: 输入内容 a 空格/回车 b 吃掉垃圾字符

如果: 输入内容 ab; 不需要吃掉垃圾字符

字符与字符串之间:

scanf("%c", &ch);

scanf("%s", mystr);

如果: 输入内容 a 空格/回车 hello 吃掉垃圾字符

如果: 输入内容 ahelloworld; 不需要吃掉垃圾字符

具体是否要吃掉垃圾字符,需要具体情况,具体分析, 和你输入的内容相关.

分支控制语句

简介:

C语言程序结构有三种:

顺序结构:从上到下,从左到右,依次执行。

分支结构(选择结构):

判断语句: if switch

循环结构:while do ...while for

分支结构 if ... else 结构

简介:

if ... else 又称为判断语句,判断条件是否成立,根据不同的结果执行不同的代码。

判断语句格式:

单分支结构:

if(condition)

{

code;

}

含义:

判断条件是否成立,(true/false),如果条件成立,则执行code代码。

场景模拟:

从键盘中输入你的年龄. 判断年龄是否 > 18岁, 如果 > 18岁, 输出: 哥, 网吧您随便进,开心就好.

#include <stdio.h>

int main(int argc, const char *argv[])
{
	//从键盘输入年龄,判断是否>18
	//定义一个变量,保存年龄
	int age = 0;
	printf("please input your age: >>");
	scanf("%d",&age);

	//判断
	if(age > 18)
	{
		printf("哥,网吧您随便进,开心就好^ V ^\n");
	}
	else
	{
		printf("不满十八不让进V ^ V\n");
	}



	return 0;
}

情景模拟:

从键盘中输入一个年份, 输出这个年份是否是润年? 闰年: 能被4整除,但是不能被100整除 或者 被400整除.

#include <stdio.h>

int main(int argc, const char *argv[])
{
	//能被4整除,不能被100整除或者400整除
	int year = 0;
	printf("please input year: -> ");
	scanf("%d",&year);

	if(((year%4==0) && (year%100!=0)) || (year%400== 0))
	{
		printf("%d是闰年\n",year);
	}
	else
	{
		printf("%d是不是闰年\n",year);
	}
	
	
	return 0;
}
  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值