鱼C论坛

 找回密码
 立即注册
查看: 1763|回复: 6

[已解决]不懂就问 关于for循环中scanf的问题

[复制链接]
发表于 2018-10-8 16:38:31 | 显示全部楼层 |阅读模式

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

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

x
一个找出最小值的简单程序 但是执行出现了问题
#include <stdio.h>
#define max 1024
int main(void)
{
        int n,array[max],min;
        scanf("%d",&n);//n代表期望数字个数
        for(int i=0;i<n;i++)
        {
                scanf("%d ",&array[i]);
        }//问题出现在这里 只需要输入n个数,但是运行时需要输入n+1个数才能正常运行
        min=0;
        for(int i=1;i<n;i++)
        {
                if(array[i]<array[min])
                {
                        min=i;
                }
        }
        printf("min = %d",array[min]);
        return 0;
}
可是i=0,i<n,不是表示在for中循环n次,也就是读取n个数吗
i=1后程序运行正常,但不支持n=1的情况
求各位大神解答,不胜感激!!!
最佳答案
2018-10-8 16:49:30
#include <stdio.h>
#define max 1024
int main(void)
{
    int n, array[max], min;
    scanf("%d",&n); 
    for(int i = 0; i < n; i++)
    {
        scanf("%d",&array[i]);    //%d 之后不要空格
    }
    min = 65536;
    for(int i = 1; i < n; i++)
    {
        if(array[i] < min)
        {
            min = array[i];
        }
        }
    printf("min = %d", min);
    return 0;
}
你是单次输入,不需要空格,你空格,当作期望接受到空白,虽然输入多一次,但是最后一个是不被考虑的,只是完成空格的作用。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-10-8 16:49:30 | 显示全部楼层    本楼为最佳答案   
#include <stdio.h>
#define max 1024
int main(void)
{
    int n, array[max], min;
    scanf("%d",&n); 
    for(int i = 0; i < n; i++)
    {
        scanf("%d",&array[i]);    //%d 之后不要空格
    }
    min = 65536;
    for(int i = 1; i < n; i++)
    {
        if(array[i] < min)
        {
            min = array[i];
        }
        }
    printf("min = %d", min);
    return 0;
}
你是单次输入,不需要空格,你空格,当作期望接受到空白,虽然输入多一次,但是最后一个是不被考虑的,只是完成空格的作用。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

感谢老哥!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-8 16:54:54 | 显示全部楼层
可以这样玩
#include <stdio.h>
#define max 1024
int main(void)
{
    int n, array[max], 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[i]);
        if(array[i] < min)
        min = array[i];
    }

    printf("min = %d", min);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-8 17:08:48 | 显示全部楼层

感谢, 还有麻烦问一下 65536在C语言中有什么特殊的意义吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-8 17:27:59 | 显示全部楼层
447908543 发表于 2018-10-8 17:08
感谢, 还有麻烦问一下 65536在C语言中有什么特殊的意义吗

没有,你要找最小值,一开始当然要用一个比较大的数。2^16 = 65536,16位的最大数 65535。反正目前来说都是 32 位了,能够支持
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

感谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-2 16:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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