函数的使用:降低代码重复率,
程序模块化有利于修改完善阅读
标准输出:
printf(“%c” ‘a’);碰到结束符\0结束输出
puts("abc");标准输出字符串,输入完成自动输出换行结束
char str=puts("abcde");
printf("%s\n", &str);
fputs(*str,*stream) 从str指定字符串写入stream指定文件夹,结束不加‘\0’;输出屏幕固定为stdout;
char *str="abcds" ;
fputs(str,stdout);
标准输入 :
getchar();从标准输入设备读取一个值到变量中,以空格回车键结束输入;
int num=getchar();
scanf("%u",5);通过转义符得到用户标准设备读取的值输入到变量中,以空格回车键结束输入;
int nums;
scanf("%d",&nums);
printf(“nums=%d”,nums);
//通过正则表达式可以获取带空格的字符串:scanf("%[^\n]",nums);
gets();从输入设备读取字符串遇到回车结束或尾部结束,由于读取不知道字符串大小容易数组越界溢出;
char str[20];
gets(str); //输入完成自动包含字符‘\0’结束符
printf("%s\n",str);
fgets(int*,sizeof(),file); 从stream指定文件内读取字符,保存到(int)指定的空间中,键盘输入固定写为stdin;
int nums[10];
fgets(nums,sizeof(nums),stdin); //(数组指针,数组长度,从哪里输入)输入完成自动包含换行,不含结束符
printf(“nums=%s\n”,nums);
字符串函数:
strcpy(a,b):把b指向的字符串复制到a指向的空间,包含结束符\0;
char a[10]="abcd"; //a空间不够大会造成缓冲溢出
char b[]="efg";
strcpy(a,b);
printf("%s",a);
strncpy(a,b,n);把指向b的字符串前n个字符复制到a中,指定长度不包含结束符;
strcat(a,b);把b的字符串连接到a的尾部包含结束符\0;a空间不够大数据会溢出;
strncat(a,b,n);把b的前n个字符串连接到a的尾部包含结束符\0;a空间不够大数据会溢出;
strcmp(a,b);比较a和b的ASCII码值大小,相等返回0,大于返回ASCII码值;
char* a="abcde";
char* b="abdcf";
if(strcmp(a,b)==0){printf("a=b");}
else if(strcmp(a,b)>0){printf("a>b");}
else{printf("a<b");}
strncmp(a,b);比较a和b的前n个ASCII码值大小,相等返回0,大于返回ASCII码值;
sprintf(a,b);格式化数据输出,碰到结束符\0结束;
int n=5;
char a[30]={0};
char b[]="abc def";
int len=sprintf(a,"n=%d,b=%s",n,b);//把n和b的值传入a数组中和标准输出用法相同;
printf("%s\n", a);
printf("len = %d\n", len);
sscanf(a,b);格式化输入,用法和标准输入相同;
char a[] = "5+6=12"; int b; int c; int d;
scanf("%d+%d=%d", &b, &c, &d);
sscanf(a, "%d+%d=%d", &b, &c,&d);//a=b+c;
printf("%s", a);
strchar(str1,str2):查找字符串中str2字符串出现在str1的首次位置
strstr(str1,str2):判断str2是否是str1的子串,返回首次出现str2的位置不包含\0终止符;
char* str1="ascedkhabcaijabcop";
char* str2="abc";
int n=0;
while((str1=strstr(str,str2))!=NULL)
{
str1=str1+strlen(str2);
n++;
if(*str1==0){break;}
}
printf("str2出现的次数为:%d\n",n);
strtok(a,"$");分隔符拆分对象必须可读可写,按照既定参数拆分,只替换a中出现的第一个$出现的为\0;
atio:字符串转整数 //转换必须是数组值类型的可转
atof:字符串转浮点数 //float atof(const char *nums);
atol:字符串转长整数
字符串求长度:
sezeof(); 求变量的长度
strlen(); 求变量长度遇到\0自动结束的位置
char str[]="abc de\0f";
int index=strlen(str);
printf("%d", index);
内层操作函数:
menset(*a,int b,sizeof(n)); b的范围是0~255,填充的字符是unsigned char;字符b以n个写入数组a;
memcpy(*a,*b,n);拷贝*b空间的前n个字节到*a所值的内存地址上;ab所指向内存空间不能重叠;
memove(*a,*b,n);同上,内存空间可以重叠,效率低;
memcmp(*a,*b,n);a,b空间前n个字节
随机函数:
void rand(unsigned int seed); 设置产生随机数是的时间种子,头文件为系统include<stdlib.h>
time_t time(time_t *t); 获取当前系统时间,头文件为include<time.h>
int rand(void); 返回值为随机数;
time_t Tm=time(NULL);
srand((unsigned int)tm);
int nums=rand();
printf("nums=%d\n",nums);
return 0;
srand((unsigned)time(NULL))%10;
结束函数:
exit();退出当前程序
return();结束本函数返回返回值;
多文件编程:格式一般为:
#ifndef __HEAD_H__
#define __HEAD_H__
.............头文件
#endif
c语言中没有字符串类型,普通字符数组没有0或'\0'结束符,字符串数组以0或‘\0’结束;’
int main(int argc,char *argv[]) //main函数固定格式,argc标明数组成员数量,argv数组每个成员都是char*类型;
自定义函数:
自定义函数由函数声明 ,函数定义,函数调用组成;
函数声明:声明函数原型;
int std(int*,int*);
函数定义:函数定义类型+函数名+形参列表+函数体实现+返回值 ;
int std(int* a, int* b) //形参值传值操作函数调用结束会自动释放,一般使用传址(指针)处理数据;
{
int temp; //定义临时置空值
temp=*a; //函数实现交换*a和*b
*a=*b;
*b=temp;
return 0; //返回定义的int类型值0程序正常结束。返回类型不能是函数体内临时变量,函数体结束会自动释放;
}
函数调用:定义实参,把实参传入函数形参对应位置完成调用;
int main()
{
int num1=59;
int num2=99;
int* a=&num1;
int* b=&num2;
std(a,b);
printf("num1=%d,num2=%d",num1,num2);
}