循环语句输入一串字符,然后原样输出!出了点问题,但是不知道是什么情况!
括号加错了,应该将括号加在c前面而不是等号后面。 将括号加在等号后的汇编代码:for (;c = (getchar()) != '
';)003413D9 mov esi,esp 003413DB call dword ptr [__imp__getchar (3482B8h)] 003413E1 cmp esi,esp 003413E3 call @ILT 310(__RTC_CheckEsp) (34113Bh) 003413E8 cmp eax,0Ah //比较getchar返回的是不是
003413EB setne al //将比较结果赋值给al,这里是出错的关键,这条指令将al...全部
括号加错了,应该将括号加在c前面而不是等号后面。
将括号加在等号后的汇编代码:for (;c = (getchar()) != '
';)003413D9 mov esi,esp 003413DB call dword ptr [__imp__getchar (3482B8h)] 003413E1 cmp esi,esp 003413E3 call @ILT 310(__RTC_CheckEsp) (34113Bh) 003413E8 cmp eax,0Ah //比较getchar返回的是不是
003413EB setne al //将比较结果赋值给al,这里是出错的关键,这条指令将al设置成了1或者0003413EE mov byte ptr [c],al //这里再将al的值赋给变量c,而此时al不是1就是0所以错误003413F1 movsx ecx,byte ptr [c] 003413F5 test ecx,ecx 003413F7 je wmain 77h (341417h) 简单一点说就是先执行getchar函数,然后判断是否是
,最后将判断结果赋值给变量c,而不是将getchar函数取到的值赋值给变量c,运算优先级错误!而且你的代码也有逻辑问题,输入的第一个字符根本就不会被打印,因为getchar会将其覆盖, 完全打印应该是这样:char c;scanf("%c",&c);for (;c != '
';){printf("%c
",c); c = getchar()) ;}。收起