关于多组输入的问题

引言:

小伙伴们肯定因为多组输入写的代码错误导致题目超时,本菜菜也是对此深深痛心

下面本柴鸡就深入分析一下多组输入的问题(欢迎大佬纠错,本柴鸡积极改正


一:多组输入:

顾名思义,输入多组数据,在输入多组数据的时候要着重注意数据的类型(不然你会后悔的)

二:错误代码展示:

题目要求:输如多个字母,每个字母用空格隔开,输出每个字母,每个字母用换行符隔开。

错误展示:


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)。


那么那么,这期博客就结束了,如果喜欢这篇博客或者这篇博客对你有一点点帮助的话,请多多点赞,收藏加转发哟,你的支持就是我前进的动力(一个赞一道题)!!!

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值