鱼C论坛

 找回密码
 立即注册
查看: 1600|回复: 10

c语言for问题

[复制链接]
发表于 2015-7-15 16:59:19 | 显示全部楼层 |阅读模式
15鱼币
第一个:
        for(;(c=getchar())!='\n';)
        {       
                printf("%c\n",c);
        }
第二个:
        for(c=getchar();c!='\n';)
        {       
                printf("%c\n",c);
        }

请问第一个正常执行,为什么第二个就是死循环,一直打印输入的字符?

还有一个问题,c=getchar(),getchar();输出结果是一样,整个赋值语句的printf输出也是输出最后的值吗?

最佳答案

查看完整内容

1.第一个:(C=getchar()) != '\n' 这个表达式作为循环条件,在每次循环的时候都会被调用,所以每次循环printf();后都需要重新输入字符,直到输入的字符为'\n'停止循环。 2.第二个:c=getchar() 这个表达式放在了循环定义部分,这句表达式只会在进入for循环第一次的时候运行,之后的循环过程中,如果第一次输入的不为'\n',for将始终陷入死循环中。 3.for(定义部分;循环条件;循环度量); 定义部分:只会在最开始的时候运行 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-7-15 16:59:20 | 显示全部楼层
1.第一个:(C=getchar()) != '\n'  这个表达式作为循环条件,在每次循环的时候都会被调用,所以每次循环printf();后都需要重新输入字符,直到输入的字符为'\n'停止循环。
2.第二个:c=getchar() 这个表达式放在了循环定义部分,这句表达式只会在进入for循环第一次的时候运行,之后的循环过程中,如果第一次输入的不为'\n',for将始终陷入死循环中。
3.for(定义部分;循环条件;循环度量);
定义部分:只会在最开始的时候运行一次。
循环条件:进入循环体之前必须要执行的,即,每次循环都需要第一个执行。、
循环度量:例如i++,这里是每次循环最后执行的地方。
以上就是for循环的具体语法含义。学语法最重要的就是要灵活的理解为什么这么写。不要把思维局限在课本上的例子,语法是有限的,编程是无限的。
4.c=getchar(),getchar();作为逗号表达式,最右边的那个表达式会作为逗号表达式最终的值,而逗号表达式的执行顺序为从左向右。假如分别输入1,2。则c的最终值为2。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-7-15 17:24:06 | 显示全部楼层
第一个问题:
  第一个:
        for(;(c=getchar())!='\n';)
        {        
                printf("%c\n",c);
        }
  这种情况下, getchar执行了两次, 第一次c取得了字符, 第二次取得了回车字符'\n', 所以直接正常退出
  第二个:
        for(c=getchar();c!='\n';)
        {        
                printf("%c\n",c);
        }
  这种情况下 getchar只执行了一次, c只取得了字符, 并没有继续取得后面的'\n'字符, 自然无限循环下去
        楼主 尝试改成这样既可
        for(c=getchar();c!='\n';)
        {        
                printf("%c\n",c);
                c = getchar();
        }
第二个问题有点没看懂
getchar是从当前标准输入中取出一个字符, printf是打印变量内的内容, 如果能保证每次getchar之后赋值的变量 始终是printf打印的变量 那么他们是一样的

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
骇客king + 5 + 5 + 3

查看全部评分

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

使用道具 举报

发表于 2015-7-15 17:24:35 | 显示全部楼层
楼主 我想起你来了!
之前你老提汇编的问题
好久不见了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-7-16 09:58:51 | 显示全部楼层
for( 表达式1; 表达式2; 表达式3 )
表达式1:循环变量的初始化(初始值)
表达式2:循环条件(终止值)
表达式3:循环变量自增

第二个 表达式2:c!='\n'是循环条件,说明只要你按下换行键后就一直满足循环打印表达式1初始化了的那个字符

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +2 收起 理由
骇客king + 5 + 5 + 2

查看全部评分

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

使用道具 举报

 楼主| 发表于 2015-7-16 20:34:28 | 显示全部楼层
看完汇编看看C,然后再回去学汇编,然后再过来学C~!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-7-16 20:41:46 | 显示全部楼层
ryxcaixia 发表于 2015-7-15 17:24
楼主 我想起你来了!
之前你老提汇编的问题
好久不见了!

你貌似换头像了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-7-16 20:42:31 | 显示全部楼层
musilintan 发表于 2015-7-15 16:59
1.第一个:(C=getchar()) != '\n'  这个表达式作为循环条件,在每次循环的时候都会被调用,所以每次循环pri ...

多谢,明白了,表达式1只在开始的时候执行一次
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-7-31 11:43:30 | 显示全部楼层
{:1_1:}循环条件
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-10-8 21:52:05 | 显示全部楼层
感谢楼主谢谢你 学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-10-9 01:04:16 | 显示全部楼层
谢谢你 学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-26 11:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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