C语言之随机数和字符串输入输出
一、随机数产生函数
1、需要加入头文件 #include<stdlib.h> 和 #include<time.h>
2、Rand是伪随机数产生器,每次调用rand产生的随机数是一样的。
3、如果调用rand之前先调用srand就可以出现任意的随机数。
4、只要能保证每次调用srand函数的时候,参数的值是不同的,那么rand函数就一定会产生不同的随机数。
5、实例:
int main(void)
{
int t = (int)time(NULL);
srand(t); //随机数种子
int i;
for(i=0;i<10;i++)
{
printf("%d\n",rand()); //产生随机数(每次运行都会产生不同的随机数)
}
return 0;
}
二、字符串输入与输出函数
1、scanf函数
char a[100] = {0};
scanf("%s",a); //表示输入一个字符串,scanf是以回车键或空格作为输入完成标识的,但回车键本身并不会作为字符串的一部分。
注意:如果scanf参数中的数组长度小于用户在键盘输入的长度,那么scanf就会缓冲区溢出,导致程序崩溃。
例如:
#include<stdio.h>
int main(void)
{
char s[10] = {0};
scanf("%s",s);
int i;
for(i=0;i<10;i++)
{
printf("%d",s[i]);
}
printf("%s\n",s);
return 0;
}
2、gets()函数的使用
1、gets() 输入,不能只用类似“%s”或者“%d”或者之类的字符转义,只能接收字符串的输入。
2、实例:
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
char s[100] = {0};
gets(s); // 输入:hello world ,gets()函数同样是获取用户输入,它将获取的字符串放入s中,仅把回车键视为结束标志 ,但也有溢出问题
printf("-------\n");
printf("%s\n",s); // 输出:hello world
return 0;
}
3、gets()获取用户输入,atoi() 函数将字符串转为数字 ,头文件中加入 #include<stdlib.h>
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
char a[100] = {0};
char b[100] = {0};
gets(a); // 获取第一次输入,a的对象只能是数组 ,不能转义(字符串转为数字),需要 使用专门的函数
gets(b);
int i1 = atoi(a); // 将字符串转化为一个整数
int i2 = atoi(b);
printf("%d\n",i1+i2);
return 0;
}
4、fgets()函数用法--gets()函数的升级版
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
char c[10] = {0};
fgets(c,sizeof(c),stdin);//第一个参数是char的数组,第二个参数是数组的大小,单位字节,第三个参数代表标准输入。
// 输入: hello world
printf("%s\n",c);// 输出:hello wor --> 它把字符串尾的 0 也包括在内了,fgets()会自动截断,防止溢出,所以很安全
// 调用fgets()的时候,只要能保证第二个参数小于数组的实际大小,就可以避免缓冲区溢出的问题。
return 0;
}
5、puts()函数,将用户的输入原样打印出来
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
char d[100] = {0};
gets(d);
printf("------\n");
puts(d); //自动输出,附带换行
return 0 ;
}
6、fputs()函数,是puts的文件操作版
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
char e[100] = {0};
fgets(e,sizeof(e),stdin); // hello world mylove
printf("----------\n");
fputs(e,stdout); // hello world mylove
return 0;
}
读书原为修身,正己才能正人正世;不修身不正己而去正人正世者,无一不是盗名欺世;你把念过的书能用上十之一二,就是很了不得的人了。——朱先生