目录
一.scanf的使用
scanf 和 printf 的使用
- scanf 就是我们经常使用的输入函数,可以对整型,浮点型,字符型进行输入,但是scanf 遇到空格,\n就会停止输入,取到空格和 \n 前面的数据(要输入的字符串里有空格怎么办,下面我会写到使用 gets() 函数去输入带有空格的字符串)
- printf 基本上所有数据都可以用 printf 输出,没有什么特别之处
简单举个例子
#include<stdio.h>
int main()
{
int a = 0;
scanf("%d", &a); //别忘了 & 符号
printf("%d\n", a);
return 0;
}
二.getchar的使用
getchar 和 putchar 的使用
- getchar 字符的输入,一次只能输入一个字符。该函数以无符号 char 强制转换为 int 的形式返回读取的字符(返回值是字符对应的ASCII码值),如果到达文件末尾或发生读错误,则返回 EOF(当我们输入的字符不止一个字符时,其他字符就会进入缓冲区,等待后续的getchar去调用,后续的读取不用我们按键,直接读取缓存区的字符,一直到读取完缓存区的字符)
- putchar 字符的输出,一般和 getchar 一起使用(将 getchar 转换的ASCII码值,转化成对应的字符)
简单代码
#include<stdio.h>
int main()
{
int a = 0; //这里定义整型,getchar会将字符型强制转换成整型
while ((a = getchar()) != EOF)
{
putchar(a);
}
return 0;
}
上图中输入 abc ,输出的也是 abc :getchar每次只能读取一个字符,其他的字符都存在缓存区,当缓存区有字符时,我们是不能输入的,等待后续的getchar去调用读取,然后通过putchar去输出,一直到读取完缓存区的所有字符(Ctrl+z就是文件结束符)
三.gets的使用
gets和puts的使用
- gets字符串的输入,可以无限读取,不会判断上线,以回车结束读取(还是要考虑buffer(缓存器)空间的,确保空间足够大,如果buffer空间不够,将会溢出,溢出的内容会被写入到堆栈中,破坏相关变量的值)
- puts字符串的输出(与printf("%s\n",s);的作用相同),只能输出字符串,遇到 '\0' 就停止
之前刷题时间就遇到了使用gets的情况
题目:字符串的分类统计
输入一行字符,分别统计出其中英文字母、数字、空格和其他字符的个数。
题目要求是有空格的,用 scanf() 去输入肯定不行,scanf() 遇到空格就结束了,所以就要使用gets
#include<stdio.h>
#include<string.h>
int main()
{
char str[100];
int i, letter = 0, number = 0, space = 0, other = 0;
gets(str); //字符串输入
for (i = 0; i < strlen(str); i++)//用到strlen函数需要string.h头文件
{
if (str[i] >= 'a' && str[i] <= 'z' || str[i] >= 'A' && str[i] <= 'Z')
letter++; //字母个数增一
else if (str[i] >= '0' && str[i] <= '9')//单引号易出错
number++; //数字个数增一
else if (str[i] == ' ')
space++; //空格个数增一
else
other++; //其他字符个数增一
}
printf("%d %d %d %d", letter, number, space, other);
return 0;
}
总结
- 上面就是C语言中输入函数的使用,虽然不是很详细,但是应该可以让我们知道在特殊情况下应该怎么去选择输入函数(就像字符串的分类统计的题目,是要输入空格的,这个时候就应该选择gets)
- 我们大多数使用的是 scanf() ,了解更多为了防止在做题时有更多的选择,而不卡壳
感谢大家的观看,希望你能从这篇文章中学到一些东西(如有错误,提醒我,我会及时修改)
谢谢大家!!!