c语言出现常量中的换行符出错,C语言中换行符问题

在缓冲输入中,换行符的确是个麻烦的问题,在这里做一个总结。

1.getchar()

记住:getchar()函数 读取每一个字符!每一个!包括空格,制表符和换行符。

错误代码:

while(getchar()!=‘y’)

printf(“Well,then it is %d?\n”,++guess);

这里会出现输入一个n,但是出现两句“Well……”

原因是因为换行符也被传输进去了。

换行符当然不等于’y’,所以输出两次!

正确代码:

while(getchar()!=‘y’)

{

printf("………");

while(getchar()!=’\n’)

continue;

}

2.scanf()

记住:scanf()读取数字时会跳过空格,制表符和换行符。并且是把换行符 留在输入队列中!是留在!!!

如果读取数字时,你输入了非数字的字符,那么它也是把它留在输入队列!是留在!!!

错误代码:

while((ch=getchar())!=’\n’)

{

scanf("%d %d",&a,&b);

display(a,b,ch); //一个函数

}

输入一次运行正常,但到第二次,就不正常了。还没等你输入,就退出了。

原因就是scanf()把换行符留在了队列中,所以当输入ch后,按下了回车,输入队列中还剩下了’\n’

但是,scanf是不读’\n’的。所以第二次执行while循环时,getchar读取的是’\n’。所以就退出了。

正确代码:

while((ch=getchar())!=’\n’)

{

scanf("%d %d",&a,&b);

while(getchar()!=’\n’)

continue;

display(a,b,ch);

}

3.gets()

记住:gets()是输入一整行的。它是 丢弃换行符!记住,是丢弃!!!而puts()是自带换行符的。所以二者搭配使用。

使用gets()的危险在于,可能会导致缓冲区溢出(buffer overflow)。如果这些多余的字符擦去了重要程序数据,会导致程序异常中止!

4.fgets()

记住:fgets()会把换行符放在字符串末尾!也就是 读取换行符!!!而fputs()不会自带换行符,所以二者搭配使用。

另外,fgets()有三个参数,第一个是数组地址,第二个是读入字符最大数量,第三个是指明要读入的文件。

错误代码:

fgets(words,SLEN,stdin);

puts(words);

这会导致多个空行!

应该改成fputs(words);

如何处理掉fgets()中读取的换行符?

(1)

int i=0;

while(words[i]!=’\n’)

i++;

words[i]=’\0’;

(2)

如果你想舍弃未读取的字符,干脆

while(getchar()!=’\n’)

continue;

简单粗暴,换行符也一同没了。

4.gets_s()

记住:gets_s()函数读到换行符,是 舍弃!舍弃啊!!! 另外,gets_s()只有两个参数,因为只从标准输入中读取数据,所以跟fgets()相比不需要第三个参数。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值