关于scanf和gets函数共用时出现的一些问题的解释

本文探讨了在C语言中使用scanf与gets连续输入字符串时出现的问题,并提供了两种解决方案。一种是在scanf后加入清除缓存的操作,另一种是修改scanf的格式字符串。这两种方法都能有效避免因输入缓冲区中的回车符导致gets无法正确读取输入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先声明一下:我是一个新手,遇到的问题的解决方法是从网上获取的。

关于该题目的问题的由来,是由于我写的一下代码引起的:

#include<stdio.h>
int main()
{
    //实验输入字符串;
    char a[20];
    char b[20];
    scanf("%s",&a);
    printf("Printf:%s\n",a);
    gets(b);
    printf("Gets:%s",b);
    return 0;
}
运行发现:gets不起作用,b无输出。问题原因是:
输入字符串a后的回车,影响到后面输入第二个字符串的gets函数,gets函数虽然以回车作为输入确认,但不会保留这个回车符,所以如果直接敲回车,那么将认为输入了一个没有内容的字符串,即空字符串。所以第二个字符数组实际得到的是‘\0’。因为,scanf输入函数,会形成一个回车的缓存。这里可以在scanf后加一个清除缓存函数。

有同学把程序改成了这样:

#include<stdio.h>
int main()
{
    char a[20];
    char b[20];
    scanf("%s\n",&a);
    printf("Printf:%s\n",&a);
   gets(b);
    printf("Gets:%s",b);
    return 0;
}

这样虽然,从运行结果来看,两个printf都有输入,但很奇怪:scanf输入一个字符串后,还需一个回车,然后还需输入,这样函数才会运行。这个问题的原因是: \n是换行符,就是在输出这一句话以后再这句话的结尾自动打一个回车,然后在输出其他内容。

这编文章参考:说说用scanf输入字符的问题http://blog.youkuaiyun.com/ch63771807/article/details/7915514

scanf("%d\n",&a);里的\n 有什么作用http://bbs.bccn.net/viewthread.php?tid=324533&page=2

再次感谢各位网友!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值