动态分配数组代码中 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)这个没有看懂 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
满意请给个最佳哦~ 求个最佳啦{:10_297:}~ 永恒的蓝色梦想 发表于 2020-5-29 18:27
求个最佳啦~
不是,关于你回答的第一个,你可以试试上机敲几个试试,我的理解和你一样,但机器不认账。
第二个的话,括号内的意思确实是像你说的那样,但是那个==1还是很模糊 Justin1 发表于 2020-5-29 18:41
不是,关于你回答的第一个,你可以试试上机敲几个试试,我的理解和你一样,但机器不认账。
第二个的话, ...
请仔细说明情况,我都不知道你想说什么。 本帖最后由 WoodenlightW 于 2020-5-29 19:34 编辑
scanf()返回值是输入参数的个数 这里只输入一个数,所以应该返回1,否则表示scanf()函数执行失败
第二个问题,那个循环就是在给数组元素赋值,这样写应该好理解一点
while(i < max)
{
scanf("%lf", &ptd);
++i;
}
那个等于1同样是判断scanf()是否执行成功 永恒的蓝色梦想 发表于 2020-5-29 11:13
1.scanf 的返回值是成功读入的元素个数。
这里如果正常读入 max,那么 scanf 返回值应该为1。
所以条件的 ...
再看了一遍明白了,另外你的01,02这个灰色框框是怎么做到的,使用贴代码的那个吗 Justin1 发表于 2020-5-29 22:24
再看了一遍明白了,另外你的01,02这个灰色框框是怎么做到的,使用贴代码的那个吗
是的,就是那个贴代码的。 永恒的蓝色梦想 发表于 2020-5-29 18:47
请仔细说明情况,我都不知道你想说什么。
能加个好友吗,自学有时候有些不太懂
页:
[1]