c语言多次读入字符出现多次换行问题的理解和解决

        在循环读入字符时,总会出现在输出时出现很多换行符的问题。

例子1:

#include<stdio.h>
int main()
{
    char c;
    while(1)
    {
        c=getchar();   
        printf("%c\n",c);
    }
    return 0;
}

例子2:

#include<stdio.h>
int main()
{	
	char c;
	while(1)
	{
		scanf("%c",&c);
		printf("%c\n",c);
	}

	return 0;
}

        

上面两个例子都会在输入时造成这样的结果:

当我输入一个a,按下一个回车,最后它先输出一个a,然后换行了三次,光标移到了第5行。


问题的理解:

        实际上当我们按下回车时,回车会在输入栏中被等效成一个换行符,所以在回车过后光标会移动到下一行。也就是说实际上输入的不止是a,等效的输入应该是


a'\n'


        换种说法,\n被存在了输入缓存区里。

        程序接下来就变成了,读入一个a输出一个a再换一行。读入一个'\n'输出一个换行符,再输出输出函数内的一个换行符。一共换行三次。


方案的解决:

     问题的关键出现多了一个换行符。

解决1:

#include<stdio.h>
int main()
{	
	char c;
	while(1)
	{
		c=getchar();
		putchar(c);
	}
	return 0;
}

去掉了printf() 中的换行符,将读入的换行符直接putchar


解决2:

#include<stdio.h>
int main()
{	
	char c;
	while(1)
	{
		scanf(" %c",&c);
		printf("%c\n",c);
	}
	return 0;
}

在scanf()的%c前加上一个空格,这个的具体原理我也不明白,欢迎交流指导。

我的理解是scanf中的空格就是将空格清理,换行符也在其中,所以读入c变量中的字符不在具有换行符,

当然啦,还有另一些解决思路:

比如scanf("%s",a)可以直接读到空格或换行符就终止,不会使数组a中出现空格或换行符

也可以用gets()和puts() 或者 fgets()和fputs()。但千万不要混着使用,因为gets读到换行符就会终止,而puts会自动输出一个换行符。而fgets正好相反,fgets读入换行符,fputs直接输出,不加入换行符。


        希望有需要的人看到这个解答后能自己去实验一下。总结理解提升。一起进步吧(*^_^*)。

        这是我的第一篇博客,分享交流从这里开始吧。(纯萌新,有问题或者想法欢迎提出指正😘)。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值