请问大神为什么这个C语言程序运行结果是13?我怎么觉得是12345?求大神解释,这是怎么运行的?

#include
#include

int main(void)
{
char c;
for(c=getchar();getchar()!='#';c=getchar())
putchar(c);
}图片说明

c

8个回答

执行情况是这样的:
首先执行getchar()得到'1';
然后执行getchar()得到'2',判断不等于'#',执行putchar(c),输出‘1’;
然后执行c=getchar()得到'3';
然后执行getchar()得到'4',判断不等于'#',执行putchar(c),输出‘4’;
然后执行c=getchar()得到'5'
然后执行getchar()得到'#',判断等于'#',结束循环。

qq_31429225
EveryLink 回复weixin_41461554: 还有个问题,请问printf("%d,%o,%x",'a'/4,0x14,014);的输出结果为什么是24,24,c
一年多之前 回复
weixin_41461554
weixin_41461554 一步一步分析 如图所示
一年多之前 回复
treewutong
treewutong 写错了,第二次输出的是‘3’
一年多之前 回复

c=getchar();读取1
getchar()读取2,判断不等于#
打印1
然后读取3
在读取4判断不等于#
打印3
在读取5
读取#判断循环结束

整个过程捋了下,大概是这样
改成for(c=getchar();c!='#';c=getchar())就没问题

getchar()读取键入数据
for里面就有三个
第一个赋值给c
中间判断!+"#"的那个getchar()已经不是1了,而是读取的新键入得值
然后第三个getchar()重新赋值给c,此时对应键入的值是3了已经。

依次推类
for循环第一个是初始化,中间的是判断条件,每次都会执行。后面的是执行完循环体后执行的表达式。
就是说除了第一次c=getcher()后

假设你的输入为1234567........#
第一次执行for
c=getcher() //1
getcher()!="#" //2!="#"
putchar(c); //输出c,此时c为1
c=getcher() //3

第二次执行
getcher()!="#" //4!="#
putchar(c); //此时c=3
c=getcher() //5

第三次执行
getcher()!="#" //6!="#"
putchar(c); //5,因为此时c为5,在上一次for结束时执行表达式赋值的
c=getcher() //7

.....
当读取到#
这一步判断"#"!="#"不成立,这时不执行循环体了,就是说此时的putchar(c);不会执行

以后就是这样

答案给的是135,不明白为什么?

在for循环的条件表达式中做循环判断是指针就移位

getchar()用重复了

char c;实际对应的数字啊 几个数字之和就是13了。

关键代码如下:
for(c=getchar();c!='#';c=getchar())
putchar(c);

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!