引言:
小伙伴们肯定因为多组输入写的代码错误导致题目超时,本菜菜也是对此深深痛心
下面本柴鸡就深入分析一下多组输入的问题(欢迎大佬纠错,本柴鸡积极改正)
一:多组输入:
顾名思义,输入多组数据,在输入多组数据的时候要着重注意数据的类型(不然你会后悔的)
二:错误代码展示:
题目要求:输如多个字母,每个字母用空格隔开,输出每个字母,每个字母用换行符隔开。
错误展示:
int main()
{
char c;
while (c=getchar()!=EOF)
{
printf("%c\n", c);
}
}
(嘿,你可能不懂EOF是什么,我偷偷告诉你:EOF是end of file ,就是文件的结束符,getchar,scanf等在缓冲区读取失败的时候就会返回EOF,这里就是用EOF来当做循环的结束条件,数据读取失败就退出。)
错误分析:没有注意到输入的数据是字符型,当数据输入缓冲区的时候,空格、回车符等等字符也都会输入到缓冲区中,而getchar是会读取到这些字符的,所以就会把空格,回车(这里本质跟换行符\n差不多)打印出来,WA啦!
解决方法:
1.通过getchar()来把字母中间的那些不需要的字符读取掉:
int main()
{
char c;
while (c=getchar()!=EOF)
{
printf("%c\n", c);
getchar();
}
}
2.嘿,我不用getchar我要用scanf,我就是玩
那么:
int main()
{
char c;
while (scanf("%c",&c)!=EOF)
{
printf("%c\n", c);
scanf(" ");
}
}
看懂了吗:
这里我们要了解scanf这个双引号里面的性质:总结起来就一句话:不是格式控制符的东西在输入的时候都要原样的输入
举个栗子:
int main()
{
int c;
scanf("c=%d",&c);
}
那么我们要输入的时候就得这样输入:c=(数字)
不然就会出现问题。
再跟你们讲一个秘密:用scanf输入字符串用%s的时候,不仅遇到'\0'会停止,遇到空格,换行符也会停止,所以用scanf输入一个带有空格的字符串是难以实现的(可以考虑使用gets)。
那么那么,这期博客就结束了,如果喜欢这篇博客或者这篇博客对你有一点点帮助的话,请多多点赞,收藏加转发哟,你的支持就是我前进的动力(一个赞一道题)!!!