鱼C论坛

 找回密码
 立即注册
查看: 2992|回复: 12

for 与 scanf 函数

[复制链接]
发表于 2021-8-19 00:05:42 | 显示全部楼层 |阅读模式

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

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

x
//以下函数有很多没必要的问的,我会把要问的注释出来
//此程序为C Primer plus 141页,完全照着书打的

#include <stdio.h>
#define SIZE 10
#define PAR 72

int main(void)
{
        int index, score [SIZE];
        int sum = 0;
        float average;

        printf("Enter %d golf scores:\n", SIZE);
        for (index = 0; index < SIZE; index++)
                       
        //我就搞不懂这个for 和下面的 scanf 为什么连接起来了,又没有括号什么的,这样我就直接认为for这个单独语句产生了一个无意义的操作(指index +到10)然后跳到scanf函数,我都不知道该怎么理解了

                scanf("%d",&score[index]);                                     
        printf("The scores read in are as follows:\n");
        for (index = 0; index < SIZE; index++)
                printf("%5d",&score[index]);
        printf("\n");
        for (index = 0; index < SIZE; index++)
                sum += score[index];
        average =( float )  sum / SIZE;
        printf("Sum of scores = %d , average = %.2f\n", sum, average);
        printf("That's a handicap of %.0f.\n",average - PAR );

        return 0;
}





//此为输出

Enter 10 golf scores:
99 95 109 105 100              //此处为scanf输入               
96 98 93 99 97 98               //此处为scanf输入

//就算连接起来了,这里为什么要输入11个数字才到下一步,当SIZE为9时判断结束循环就加1变成10了,下次判断10不小于10,应该输入10个就结束了

The scores read in are as follows:
  99  95  109  105  100  96  98  93  99  97
Sum of scores = 991, average = 99.10
That's a handicap of 27.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-19 07:42:03 | 显示全部楼层
for, while, if, else, ...
这些关键字引起的程序段如果后边不用{} 括起来,默认这些关键字下的第一行是这些关键字所管理的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-19 08:07:25 | 显示全部楼层
1.作用域或者说是工作区的问题,{}是用来限定作用域的,如果没有{} for, while, if, else 下一句纳入工作区
2.我在dev调试过,以空格做分隔符,输入10个数据后,它会一次次的调用scanf来进行赋值,你可以自己调试看看
3.0 ~ 10 会循环10次,所以你输入第11个的时候跳出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-19 09:40:16 | 显示全部楼层
你没用花括号括起来
默认只循环一个语句呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-19 11:53:18 From FishC Mobile | 显示全部楼层
本帖最后由 JussKwh 于 2021-8-19 12:05 编辑

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-8-19 11:57:23 From FishC Mobile | 显示全部楼层
scanf后面不加括号,后面那个连一起我理解了。但是还有个问题书上写的for语句是,for(A;B;D){C}     先初始化一次(步骤A),然后判断(步骤B),然后执行(C),语句结束才执行(D)。   那么我这个语句就是在i等于9步骤(B)的时候scanf输入第十个数字(步骤C),结束后才i++到达10步骤(D),结束一个循环。     那么下个循环就是先判断10不小于10(B)直接跳出for循环,为什么在for循环里面的scanf还要输入第十一次(C),不是应该直接跳出到下一步吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-19 11:58:08 From FishC Mobile | 显示全部楼层
本帖最后由 JussKwh 于 2021-8-19 12:39 编辑

还有书上有个例子就是
int n=0;

while (n++<3);
       printf("n is %d\n",n);
printf("That's all thid program does.\n");

return 0;

按楼上的说话,while和printf连接起来,不是应该每次打印n的值吗
为什么最后只输出了

n=4                                         //主要是这个,下面那个不用管
That's all thid program does.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-19 12:40:47 | 显示全部楼层
别说我抬杠,我只是想明白它到底是怎么个计算过程
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-19 15:50:48 | 显示全部楼层
JussKwh 发表于 2021-8-19 11:58
还有书上有个例子就是
int n=0;

你while后面打了个分号,也就是n++符合条件就结束了,不会printf。然后一直到n++=4的时候,不小于3了,就输出了n=4,然后程序结束。至于你说的第一个for那个问题,那就是没打分号的结果,for执行条件,然后scanf视为for循环的一部分,当然会BUG。该打分号要打,不该打要不打。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-20 12:02:24 From FishC Mobile | 显示全部楼层
本帖最后由 JussKwh 于 2021-8-20 12:10 编辑
隐市仙 发表于 2021-8-19 15:50
你while后面打了个分号,也就是n++符合条件就结束了,不会printf。然后一直到n++=4的时候,不小于3了,就 ...


你自己去看看小甲鱼的视频他for后面有没有跟while一样的分号,n++为什么会加到4,i等于2的时候下一条语句就是3直接结束,怎么+到4的,小于3的条件为4这不就反了吗,for根本就没把printf放在循环里,当for语句结束直接执行printf,与上面第一个人说的while,for,if,什么接下来第一条语句不符合
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-20 16:46:42 | 显示全部楼层
d
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-21 11:59:19 | 显示全部楼层
JussKwh 发表于 2021-8-20 12:02
你自己去看看小甲鱼的视频他for后面有没有跟while一样的分号,n++为什么会加到4,i等于2的时候下一条语 ...

while(n++<3);
这里while后面跟了一个空语句
执行过程,n=0;
n=0,此时n++<3表达式的值为0<3,循环
n=1,此时n++<3表达式的值为1<3,循环
n=2,此时n++<3表达式的值为2<3,循环
n=3,此时n++<3表达式的值为3<3,跳出循环
注意++在后表达式的值为++之前的值,即n++表达式的值为n,之后n再加1
所以当n++<3时,是表达式的值小于3,之后n还要再加1,所以n=4

上述来源百度,简单来说就是n++和++n的区别,n++<3人类思维以为是加完小于3,然而实际是没加的时候小于3,然后+1结束。之后n++=3它不小于3了,还是会+1,然后跳出循环,于是就变4了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-24 10:43:02 | 显示全部楼层
JussKwh 发表于 2021-8-19 11:58
还有书上有个例子就是
int n=0;

while (n++<3);
就是while(...)与后面的;(啥都不干)连起来
就是while (n++<3)啥都不干
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 03:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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