Justin1 发表于 2020-5-29 11:13:24

动态分配数组代码中 scanf()一些不理解的地方

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
        double *ptd;
        int max;
        int number;
        int i = 0;
       
        puts("What is the maximum number of type double entries?");
        if(scanf("%d", &max) !=1)
        {
                puts("Number not correctly entered -- bye.");
                exit(EXIT_FAILURE);
        }
        ptd = (double *) malloc(max * sizeof(double));
        if( ptd == NULL)
        {
                puts("Memory allocatuon failed.Goodbye.");
                exit(EXIT_FAILURE);
        }
       
        puts("Enter the values (q to quit):");
        while( i < max && scanf("%lf", &ptd) == 1)
        ++i;
        printf("Here are your %d entries:\n", number = i);
        for( i = 0; i < number; i++)
        {
                printf("%7.2f", ptd);
                if( i % 7 == 6)
                putchar('\n');
        }
        if(i % 7 != 0)
        putchar('\n');
        puts("Done.");
        free(ptd);
       
        return 0;
}

这段代码,我有几个不理解的地方。
第一:if(scanf("%d", &max) !=1)   这个if 语句中的内容 !=1我理解是输入一个数不等于1的话执行下面的内容,实际上if语句内的并没有执行。
第二:while( i < max && scanf("%lf", &ptd) == 1)
        ++i;
这个循环 我感觉是一个当 i <max 和 scanf内容同时为真的时候 循环内容执行   但是 scanf("%lf,&ptd)这个没有看懂

永恒的蓝色梦想 发表于 2020-5-29 11:13:25

1.第一:if(scanf("%d", &max) !=1)   这个if 语句中的内容 !=1我理解是输入一个数不等于1的话执行下面的内容,实际上if语句内的并没有执行。scanf 的返回值是成功读入的元素个数。
这里如果正常读入 max,那么 scanf 返回值应该为1。
所以条件的意思是没有成功读入 max。

2.i < max && scanf("%lf", &ptd) == 1 没有看懂就是判断是否成功读入了ptd 的第 i 个元素。

static/image/hrline/1.gif
满意请给个最佳哦~

永恒的蓝色梦想 发表于 2020-5-29 18:27:44

求个最佳啦{:10_297:}~

Justin1 发表于 2020-5-29 18:41:27

永恒的蓝色梦想 发表于 2020-5-29 18:27
求个最佳啦~

不是,关于你回答的第一个,你可以试试上机敲几个试试,我的理解和你一样,但机器不认账。
第二个的话,括号内的意思确实是像你说的那样,但是那个==1还是很模糊

永恒的蓝色梦想 发表于 2020-5-29 18:47:18

Justin1 发表于 2020-5-29 18:41
不是,关于你回答的第一个,你可以试试上机敲几个试试,我的理解和你一样,但机器不认账。
第二个的话, ...

请仔细说明情况,我都不知道你想说什么。

WoodenlightW 发表于 2020-5-29 19:33:25

本帖最后由 WoodenlightW 于 2020-5-29 19:34 编辑

scanf()返回值是输入参数的个数   这里只输入一个数,所以应该返回1,否则表示scanf()函数执行失败

第二个问题,那个循环就是在给数组元素赋值,这样写应该好理解一点
while(i < max)
{
    scanf("%lf", &ptd);
   ++i;
}
那个等于1同样是判断scanf()是否执行成功

Justin1 发表于 2020-5-29 22:24:15

永恒的蓝色梦想 发表于 2020-5-29 11:13
1.scanf 的返回值是成功读入的元素个数。
这里如果正常读入 max,那么 scanf 返回值应该为1。
所以条件的 ...

再看了一遍明白了,另外你的01,02这个灰色框框是怎么做到的,使用贴代码的那个吗

永恒的蓝色梦想 发表于 2020-5-30 07:56:37

Justin1 发表于 2020-5-29 22:24
再看了一遍明白了,另外你的01,02这个灰色框框是怎么做到的,使用贴代码的那个吗

是的,就是那个贴代码的。

Justin1 发表于 2020-5-30 19:57:09

永恒的蓝色梦想 发表于 2020-5-29 18:47
请仔细说明情况,我都不知道你想说什么。

能加个好友吗,自学有时候有些不太懂
页: [1]
查看完整版本: 动态分配数组代码中 scanf()一些不理解的地方