鱼C论坛

 找回密码
 立即注册
查看: 1421|回复: 8

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

[复制链接]
发表于 2020-5-29 11:13:24 | 显示全部楼层 |阅读模式
5鱼币
#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[i]) == 1)
        ++i;
        printf("Here are your %d entries:\n", number = i);
        for( i = 0; i < number; i++)
        {
                printf("%7.2f", ptd[i]);
                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[i]) == 1)
        ++i;
这个循环 我感觉是一个当 i <max 和 scanf内容同时为真的时候 循环内容执行   但是 scanf("%lf,&ptd[i])这个没有看懂
最佳答案
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[i]) == 1 没有看懂
就是判断是否成功读入了ptd 的第 i 个元素。


                               
登录/注册后可看大图

满意请给个最佳哦~

最佳答案

查看完整内容

1.scanf 的返回值是成功读入的元素个数。 这里如果正常读入 max,那么 scanf 返回值应该为1。 所以条件的意思是没有成功读入 max。 2.就是判断是否成功读入了ptd 的第 i 个元素。 满意请给个最佳哦~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[i]) == 1 没有看懂
就是判断是否成功读入了ptd 的第 i 个元素。


                               
登录/注册后可看大图

满意请给个最佳哦~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-29 18:27:44 | 显示全部楼层
求个最佳啦~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-5-29 18:41:27 | 显示全部楼层

不是,关于你回答的第一个,你可以试试上机敲几个试试,我的理解和你一样,但机器不认账。
第二个的话,括号内的意思确实是像你说的那样,但是那个==1还是很模糊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

请仔细说明情况,我都不知道你想说什么。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-29 19:33:25 | 显示全部楼层
本帖最后由 WoodenlightW 于 2020-5-29 19:34 编辑

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

第二个问题,那个循环就是在给数组元素赋值,这样写应该好理解一点
while(i < max)
{
    scanf("%lf", &ptd[i]);
   ++i;
}
那个等于1同样是判断scanf()是否执行成功
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

再看了一遍明白了,另外你的01,02这个灰色框框是怎么做到的,使用贴代码的那个吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-30 07:56:37 | 显示全部楼层
Justin1 发表于 2020-5-29 22:24
再看了一遍明白了,另外你的01,02这个灰色框框是怎么做到的,使用贴代码的那个吗

是的,就是那个贴代码的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-5-30 19:57:09 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-5-29 18:47
请仔细说明情况,我都不知道你想说什么。

能加个好友吗,自学有时候有些不太懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-13 19:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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