鱼C论坛

 找回密码
 立即注册
查看: 2614|回复: 3

c语言新手求教

[复制链接]
发表于 2018-7-2 01:06:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在学习冒泡法的时候我发现我明明定义了一个十个元素的数组,但在执行程序输入数组元素时却需要输入11个元素,该怎么解释呢?
QQ图片20180702005650.png
QQ图片20180702005608.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-7-2 09:09:43 | 显示全部楼层
scanf的引号中的 '\n' 去掉,不要进行格式控制
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2018-7-4 10:57:59 | 显示全部楼层
BngThea 发表于 2018-7-2 09:09
scanf的引号中的 '\n' 去掉,不要进行格式控制

正解,能详细解释一下吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-5 11:53:10 | 显示全部楼层
这是我的理解:
  在scanf("%d\n",&a[n])中用\n(空白符)结尾时,在输入第一个值得时候,已经将值放到了变量的地址中,但scanf会跳过\n去读下一个字符。scanf会再读一个数,所以要再输入一个数。此时回车,表示输入结束,scanf执行完。

  第二次输入的数可以用第二个scanf来接收:
如:
#include "stdio.h"
main()
{
        int a,b;
        printf("input the data\n");
        scanf("%d\n",&a); 
        scanf("%d",&b);   //注意,这里没有\n
        printf("%d\n",a);
        printf("%d\n",b);
        return 0;
}
输入:
1
2
输出:
1
2
第二次输入的数值被第二个scanf接收到了,由于第二个scanf中没有\n,所以不用在输入第三个数值,直接回车就可以将输入的两个数值打印出来

如果上面的程序中第二个scanf中有\n(类似你程序中的for循环,每次执行的scanf都是带有\n的)
如:
#include "stdio.h"
main()
{
        int a,b;
        printf("input the data\n");
        scanf("%d\n",&a); 
        scanf("%d\n",&b);
        printf("%d\n",a);
        printf("%d\n",b);
        return 0;
}
输入:
1
2
3
输出:
1
2
第二次输入的数值也给了变量b,但是scanf("%d\n",&b);语句中有\n,所以还要在输入一个数值,才表示输入结束

正好对应你for循环中明明输入10个数,却要输入第11个数才结束输入
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-7-7 08:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表