c语言使用stdin相关函数时一个蛋疼的问题

博主在解答高中同学关于C语言输入输出问题时,遇到了涉及缓冲区的问题。通过示例代码解释了scanf和gets函数如何处理输入,特别是如何处理换行符,以及为什么在预期之外的地方出现输出。理解缓冲区的行为对于正确处理C语言的输入输出至关重要。
摘要由CSDN通过智能技术生成

事情的起因是这样的,博主的一个高中同学在自学 c语言,看博主是读软件专业的,于是经常跑来问博主问题。一般博主都能轻松解决,不是因为c语言功力深厚,而是他问的那些东西实在太简单。尽管博主学的是c++,而且可怜的c++知识主要是从考前临阵磨枪以及一个简单的大作业中得来,但对付这些新手的问题还是绰绰有余的。不过这次遇到的问题碰到了博主的短板:输入输出。当时,考试不考,所以一直不懂。趁着这个机会,我补了一下缓冲区以及stdin的概念。

话不多说,上有问题的代码:

<pre name="code" class="cpp">void main()

{

    char str[10][20];

    int i,j,k,n;

    printf("input n (n<=10):");

    scanf("%d",&n);

    printf("input %d string:",n);


    for(i=0;i<n;i++)
	{
		
	    gets(str[i]); //有问题的代码行
        }  //输入N个字符串

    sort(str,n);        //对输入的字符串排序

    printf("sort string:\n");

    for(i=0;i<n;i++)

        puts(str[i]);

 
}

 上面这段代码,乍一看好像没有问题,但运行时问题就来了:它只接受n-1个字符串的输入。 

我修改了一下代码,把有问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值