驴来 发表于 2018-7-2 01:06:35

c语言新手求教

在学习冒泡法的时候我发现我明明定义了一个十个元素的数组,但在执行程序输入数组元素时却需要输入11个元素,该怎么解释呢?

BngThea 发表于 2018-7-2 09:09:43

scanf的引号中的 '\n' 去掉,不要进行格式控制

DadingVIP 发表于 2018-7-4 10:57:59

BngThea 发表于 2018-7-2 09:09
scanf的引号中的 '\n' 去掉,不要进行格式控制

正解,能详细解释一下吗{:9_241:}

平淡最真 发表于 2018-7-5 11:53:10

这是我的理解:
在scanf("%d\n",&a)中用\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个数才结束输入
页: [1]
查看完整版本: c语言新手求教