c基础(二)输入输出与字符串操作函数

1.取随机数         2.scanf与printf        二.printf格式化输出

3. gets  puts   标准读写                          4.fgets   fputs   文件读取写入        

5.strlen  字符串长度                               6.strcpy,  strncpy 字符串拷贝 7.strcat ,strncat 字符串拼接              

8.strcmp, strncmp字符串比较  (Ascll大小)         9.sprint  sscanf                    10.strchr  strstr                     

11.strtok                 12.atoi  ,atol ,  atof

1.取随机数

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<time.h>

int main(void) {
	srand((unsigned int)time(NULL));     //设置随机数种子为时间,
	for (int i = 0; i <10; i++)
	{
		printf("%d\n", rand() % 11 + 90);   //取90-100得随机数
	}
	return 0;
}

   取模 10  表示 0-9之间的数 ,    取模100表示0-90之间的数        取模11表示0-10之间的数        rand() % 11 + 90);    表示 90-100

2.scanf与printf

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>

int main(void) {

	printf("请输入:_________");
	char str[100];
	scanf("%[^\t]",str);        // 正则表达式通配符,只有接受到换行才作为结束符
	printf("%s", str);
	int a=0;

	scanf("%d", &a);          //输入是一个数必须加上&取地址
	printf("%d\n", a);
	  
	return 0;
}

    1.   scanf("%[^\t]",str);    表示输入以  制表符结束, 将接受到的字符存入 字符数组str

    2.  scanf("%d", &a);       默认以空格结束符,   输入数字时  必须加上&取地址,否则报错 

 2.scanf 接受时,必须按照格式接受,          如果没有格式空格和回车可作为默认分隔符  

3. %1d   %2s   接受一位数   与两位字符串

 4.%*d%s    表示只接受字符串而忽律数字       %*[1-9]%s   表示屏蔽数字1-9 

  字符串默认 是以   '\0'   结尾   如下长度为4

二.printf格式化输出

  1.  printf("%.2f", 3.1425);   保留两位小数             2.printf("%3d",12 );   右对齐输出 不够左边空格补齐  超出正常输出

  3. printf("%05d \n",123 );    右对齐输出 不够左边用0补齐  超出正常输出     4. printf("%5s \n", "abc"); 与%d用法一致

  5.printf(" %.2s \n", "abc");   截取2位字符串      6.printf("%-5d ", 123);  左对齐

3. gets  puts   标准读写

  1.接受一个字符串  :gets(str)  允许输入的字符串可以有空格  ,直到接受到回车或者字符串结束标志才结束(不安全)

  2. 输出一个字符串 :puts   默认输出结束时自带输出一个换行       返回值   0成功    -1失败

4.fgets   fputs   文件读取写入

  1. fgets(  char* _Buffer,  int   _MaxCount,  FILE* _Stream);

        如果输入的大小 小于原始指针对应区域大小,会在字符串输入完成时自动加上 \n\0 ,相当于输入完成时按下的回车

        如果输入的大小 小于等于原始指针对应的区域大小会自动加上   \0 ,而不会再加上\n,因为已经满了

 

 2. fputs  (   char const* _Buffer,   _Inout_ FILE*  _Stream);     fputs是puts的文件操作版,但fputs不会自动输出一个   '\n'

     输出以   '\0'为结尾

5.strlen  字符串长度

  1.strlen 得出有效字符串的个数,标志是以  '\n'  为结尾   只能处理字符串,不能处理字符数组 

6.strcpy,  strncpy 字符串拷贝

  1.strcpy  拷贝字符串    参数 :   目标字符串,   源字符串           拷贝源的  \0  与 空格         成功返回地址,失败返回NULL

int main(void) {
	char arr1[] = "123";
	char arr2[4];
	strcpy(arr1, arr1);
	puts(arr1);    123    }

 2. strncpy  拷贝指定字符串个数    参数 :   目标字符串,   源字符串  , 拷贝个数      strncpy 不拷贝源数据的  \0  所以拷贝出现乱码

 

7.strcat ,strncat 字符串拼接

        char arr1[8] = "123";
	char arr2[] = "456";
	strcat(arr1, arr2);

  1. strcat(arr1, arr2);  把arr2追加到 arr1   所有注意arra1的数组越界异常        2. strncat   指定追加个数    3.strcat(arr1,"随意加");

    追加自动拷贝  '\0'

8.strcmp, strncmp字符串比较  (Ascll大小)

        char arr1[8] = "hello\0dad";
	char arr2[] = "hello\0sdhdgfh";
	int rest = strcmp(arr1, arr2);
	printf("%d\n", rest);   0

   比较的是 \0 以前的有效 字符             strncmp比较指定位数的字符串 Ascll码值         (有效字符串)

9.sprint  sscanf

int main(void) {
	int a = 123;
	char arr[] = "abc";
	char dest[100];
	sprintf(dest, "%s %d", arr, a);
	printf("%s \n", dest);        abc 123

	int b;
	char arr2[10];
	sscanf(dest, "%s %d", arr2, &b);
	printf("%s", arr2);
	printf("%d", b);             abc123
	return 0;
}

  1. sprint 将多个字符串按照自定义格式   放入另一个新的字符串中         

  2.sscanf  按照自定义格式将一个字符串拆分为多个整数或字符串

10.strchr  strstr

int main(void) {
	char arr[] = "eeeall哈o";
	char arr2 = 'l';
	char arr3[] = "ee";

	printf("%s \n", strchr(arr, arr2));   //ll哈o

	printf("%s \n", strchr(arr, 97));     //all哈o
	
	printf("%s \n", strstr(arr, arr3));   //eeeall哈o

	printf("%s", strstr(arr, "哈"));        //哈o
	return 0;    
}


   1. strchr  寻找与一个字符   相同的开头的字符串(原理 比较Ascll相同)  

   2. strstr  寻找与字符串   相同的开头的字符串(原理 比较Ascll相同)     strstr可以寻找汉字    而strchr不行  一个汉字两个字节

11.strtok

int main(void) {
	char arr[] = "www.csdn.com";
	char* p = strtok(arr, ".");
	while (p != NULL) {
		printf("%s \n", p);          www   csdn com

		p = strtok(NULL, ".");
	}
	return 0;
}

    1.第二次切割写NULL           原理是将切割点换成   '\0'    列如.           会破坏原始字符串

12.atoi  ,atol ,  atof

int main(void) {
	char arr[] = "    100";
	int a= atoi(arr);
	printf("%d \n", a);

	char arr2[] = " 1005";
	int b = atol(arr2);
	printf("%d \n", b);
	
	char arr3[] = "3.142665";
	float c = atof(arr3);
	printf("%f \n", c);
	
	return 0;
}

   1.atoi  跳过前面空格  将字符串转换为整形        2.atol   将字符串转换为长整形      3.atof   将字符串转换为浮点型double也可以

     4.1000dasdasda   可以转换     dada100不能转换

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值