447908543 发表于 2018-10-8 16:38:31

不懂就问 关于for循环中scanf的问题

一个找出最小值的简单程序 但是执行出现了问题
#include <stdio.h>
#define max 1024
int main(void)
{
        int n,array,min;
        scanf("%d",&n);//n代表期望数字个数
        for(int i=0;i<n;i++)
        {
                scanf("%d ",&array);
        }//问题出现在这里 只需要输入n个数,但是运行时需要输入n+1个数才能正常运行
        min=0;
        for(int i=1;i<n;i++)
        {
                if(array<array)
                {
                        min=i;
                }
        }
        printf("min = %d",array);
        return 0;
}
可是i=0,i<n,不是表示在for中循环n次,也就是读取n个数吗
i=1后程序运行正常,但不支持n=1的情况
求各位大神解答,不胜感激!!!

claws0n 发表于 2018-10-8 16:49:30

#include <stdio.h>
#define max 1024
int main(void)
{
    int n, array, min;
    scanf("%d",&n);
    for(int i = 0; i < n; i++)
    {
      scanf("%d",&array);    //%d 之后不要空格
    }
    min = 65536;
    for(int i = 1; i < n; i++)
    {
      if(array < min)
      {
            min = array;
      }
        }
    printf("min = %d", min);
    return 0;
}你是单次输入,不需要空格,你空格,当作期望接受到空白,虽然输入多一次,但是最后一个是不被考虑的,只是完成空格的作用。

447908543 发表于 2018-10-8 16:51:26

claws0n 发表于 2018-10-8 16:49
你是单次输入,不需要空格,你空格,当作期望接受到空白,虽然输入多一次,但是最后一个是不被考虑的,只是 ...

感谢老哥!!

claws0n 发表于 2018-10-8 16:54:54

可以这样玩#include <stdio.h>
#define max 1024
int main(void)
{
    int n, array, min = 65536;
    printf("请输入数组的长度:");
    scanf("%d",&n);
    if(n > 1024)
                n = 1024;
    for(int i = 0; i < n; i++)
    {
    printf("请输入第%d个元素:",i+1);
      scanf("%d",&array);
      if(array < min)
      min = array;
    }

    printf("min = %d", min);
    return 0;
}

447908543 发表于 2018-10-8 17:08:48

claws0n 发表于 2018-10-8 16:54
可以这样玩

感谢{:5_106:}, 还有麻烦问一下 65536在C语言中有什么特殊的意义吗

claws0n 发表于 2018-10-8 17:27:59

447908543 发表于 2018-10-8 17:08
感谢, 还有麻烦问一下 65536在C语言中有什么特殊的意义吗

没有,你要找最小值,一开始当然要用一个比较大的数。2^16 = 65536,16位的最大数 65535。反正目前来说都是 32 位了,能够支持

447908543 发表于 2018-10-8 20:06:23

claws0n 发表于 2018-10-8 17:27
没有,你要找最小值,一开始当然要用一个比较大的数。2^16 = 65536,16位的最大数 65535。反正目前来说都 ...

感谢。{:5_106:}
页: [1]
查看完整版本: 不懂就问 关于for循环中scanf的问题