循环语句输入一串字符,然后原样输出!出了点问题,但是不知道是什么情况!
输入之后字符就变了!
括号加错了,应该将括号加在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或者0
003413EE 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()) ;
}。