字符串的输入输出

字符串的输入输出

一、字符串
*1、概念:由字母,数字组成的数组叫做字符串数组。
*且命名形式为:char 函数名[];

2、字符串的输入:

  1. scanf输入
    形式:scanf("%s",数组地址)
    scanf输入是c语言输入中最常用到的,但是对于字符串数组中不可以接受空格
int main(void)
{
	char arr[100];
//	scanf("%[^\n]",arr);
	//scanf中用正则定义[^\n]时则也可以接受输入时出现空格
	printf("%s\n",arr);
	return 0;



}
注:当不是输入字符串数组时数组地址前面他应该添加地址符&
		当scanf("%[^\n]",数组地址)可以接受输入时出现空格
  1. gets
    形式:gets(数组)
    此方法可以接受输入时出现空格
#include<stdio.h>
int main(void)
{
	char arr[100];
	gets(arr);
//gets可以接受字符串输入时出现空格,注意数组中要表明明确的大小
//	scanf("%[^\n]",arr);
	//scanf中用正则定义[^\n]时则也可以接受输入时出现空格
	printf("%s\n",arr);
	return 0;



}
注:gets可以接受字符串输入时出现空格,注意数组中要表明明确的大小!
  1. fgets
    形式:fgets(储存位置,储存大小,stdin指针)
    fgets可以让数组最后自带一个\n,可以自动换行,但前提是输入的字符串长度要比自己规定的段两个字节(用于存放\0和\n)。
#include<stdio.h>
int main(void)
{
	char arr[10];
	fgets(arr,sizeof(arr),stdin);
	printf("%s\n",arr);
	return 0;

}

3、字符串的输出

  1. printf
    形式:printf("%s",数组地址)
    此方法时所有c语言输出最常用到的一种形式。
#include<stdio.h>
int main (void)
{
	char ch[]="hello world";
	printf("%s",ch);
	return 0;

}
  1. puts
    形式:puts(数组)
    puts输出字符串的时候结尾自动带一个\n换行。
#include<stdio.h>
int main (void)
{
	char ch[]="hello world";
	puts(ch);//putd输出字符串的时候会在结尾自动带一个\n换行
	return 0;

}
**```
**3、限定字符串的长度****
	限定字符串长度的方法一般是在输出时%后加一个数字,
	

```c
#include<stdio.h>
int main(void)
{
	char arry[10];//一个汉字占两个字节
	scanf("%9s",arry);//9为限定字符串的长度为9
	printf("%s",arry);
	return 0;
}

注:一个汉字占两个字节,一个数字占一个字节,\0占一个字节。
%后面的数字决定字符串的长度,注意此方法用的是scanf,所以在输入时不接受空 格。

4、字符串的拼接

利用数组转存的形式把所有数组放进另一个数组里面,实现字符串的拼接。

#include<stdio.h>
int main (void)
{
char char1[]="hello";//不能用''
char char2[]="world";
char char3[20];//记得表明字符串的数量,且要一个准确的数值。
int i=0,j=0;
while(char1[i]!='\0')//也可以用=0
{char3[i]=char1[i];
i++;}
while(char2[j]!='0')
{
	char3[i+j]=char2[j];
j++;}
char3[i+j]='\0';//记得这是加一个数组结束的2标志\0
printf("%s",char3);
return 0;
}

注意:while循环中while(char1【i】!=‘\0’)中,‘\0’可以用0来替换,但是不等同 于‘0’。
char3[i+j]=’\0’;//记得这是加一个数组结束的2标志\0

5、计算字符串长度strlen()
形式:strlen(数组);

#include<stdio.h>
#include<string.h>
int main (void)
{
	char ch[]="hello world";
	printf("数组大小:%d",sizeof(ch));//应包含一个最后的\0
	printf("字符串长度: %d",strlen(ch));//不包含\0,且头文件要用string.h
	return 0;



}

注:头文件要加#include<sting.h>
strlen()和sizeof()的区别:

  1. sizeof()统计的数字包含\0,而strlen()统计的是具体的·输入的字符串长度。
  2. sizeof是算符,strlen是函数;
  3. sizeof可以用类型做参数,strlen只能用char*做参数,且必须是 以’’\0’'结尾的;(sizeof还可以用函数做参数)
  4. 数组作为参数传给函数时传的是指针而不是数组,传递的是数组 的首地址,

二、单片机作业的探索

1、所用的软件为keil5和程序烧录软件
2、步骤:

  1. 搭建流水灯电路:
    在这里插入图片描述
    2、编写实验程序

  2. 单片机所用头文件为#include"reg52.h"(单片机必须使用的头文件)和#include<intrins.h>(包含延时函数,位移函数等)

  3. 宏定义led为P2的八个引脚
    利用八进制的形式(标志为0x)控制每个引脚的亮灭,一般情况下1代表高电平,0代表地电平。、
    sbit是单片机中定一特殊功能寄存器的位变量,即定义单个引脚时应用的形式。

#define led =P2;
sbit k3=P3^0;//定义P3^0为k3按键
int a[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//单独定义每一个引脚,实现逐个点亮
int b[4]={0x03,0x0c,0x30,0xc0};//同时定义两个引脚,同时实现两亮
int c[5]={0xff,0x3f,0x0f,0x03,0x00};//同时定义两个引脚,实现两灭
  1. 延时函数:目的是控制灯闪烁的灭的时间。
    最简洁的形式为:`
 void delay(int  i)
{
while(i--);

}
  1. 按键:
    分类:
    1、独立按键

​ 独立按键式直接用I/O口线构成的单个按键电路,其特点式每个按键单独占用一根I/O口线,每个按键的工作不会影响其他I/O口线的状态。工作原理:逐位查询没跟I/O口线的输入状态,如某一根I/O口线输入为低电平,则可确认该I/O口线所对应的按键已按下,然后,再转向该键的功能处理程序。

	2、矩阵键盘

​ 矩阵键盘又称行列键盘,它是用四条I/O线作为行线,四条I/O线作为列线组成的键盘。在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为4*4个,工作原理:分两步,第一步将列线为输入状态,然后再行线上输出低电平,当测得某列有低电平数据时则那列有按键按下。第二部就是将行线为输入状态,列线上输出低电平,然后再检测哪条行线上有低电平,然后行列相交则可知道。

void keypos()
{
	if(k3=0)
	{
	delay(1000);//此步骤为消抖,目的是给机器反应时间,让所有电位达到统一电平
	if(k3=0{
	j++;
	}
	}
while(!k3);//判断k3键是否松开
}
  1. 流水灯的实现
    原理:芯片通过操作导致指定引脚释放出高电平,所对应的灯接收到闭合电路产生电流导致LED等闪亮。
    三种实现方式:

1、采用顺序程序结构

即用数组形式控制八个引脚来输出高电平,然后加上延时函数实现流水灯的效果。

void mud i(int i)
	{
	for(i=1;i<=8;i++{
		p2=a[i];
	delay(5000);
	}
	}

2、移位方法实现流水灯

采用位移运算符将引脚上的高电平向左移或者向右移。在配上延时函数。

void mud (int i)
{
led=0x01;
delay(10000);
while(1)
{
for(i=0;i<8;i++)
{
	P2=0x01<<i;
	delay(1000);
}
}

}

3、库函数实现流水灯

C52 提供了 crol(字符循环左移);cror (字符循环右移)等库函数,包含在头文件intrins.h中。

void mud (int i)
{
led=0x01;
delay(10000);
while(1)
{
for(i=0;i<8;i++)
{
	led=_crol_(led,1);//向左移,每次移一位
	delay(1000);
	//led=_cror_(led,1);//向右移,每次移一位
}
}

}

总程序

```c
#include"reg52.h"
#include<intrins.h>
typedef unsigned int u16//此做法可以让后期方便修改整个程序变量类型
typedef unsigned char u8;
#define led =p2;//同时定义八个引脚常利用宏定义的形式
sbit k3=p3^0;
u16 i=0,j=0;
u18 a[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
u18 b[4]={0x03,0x0c,0x30,0xc0};
u18 c[5]={0xff,0x3f,0x0f,0x03,0x00};
void delay(u16 i£©
{
while(i--);

}
void mud (u18 j)
	{
	if(j=1)
	{
	for(i=1;i<=8;i++)
	{
	P2=a[i];
	delay(5000);
	}
	}
	if(j=2)
	for(i=0;i<4;i++)
	{
	P2=b[i];
	delay(5000);
	}
	if(j=3)
	for(i=0;i<5;i++)
		{
			P2=c[i];	 
			delay(50000); 
				}
void keypos()
{
if(k3==0)
{
delay(1000);
if(k3==0)
{
j++;
}
whlie(!k1);
if(j>3)j=1;
}
}
void main()
{
keypos();
while(1)
{
keypos();
}

文章转载至
在这里插入图片描述
http://blog.bools.cn/archives/186

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值