爱问知识人 爱问教育 医院库

循环语句输入一串字符,然后原样输出!出了点问题,但是不知道是什么情况!

首页

循环语句输入一串字符,然后原样输出!出了点问题,但是不知道是什么情况!

输入之后字符就变了!

提交回答

全部答案

    2018-05-02 16:04:43
  •   括号加错了,应该将括号加在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()) ;
    }。

    字***

    2018-05-02 16:04:43

类似问题

换一换

相关推荐

正在加载...
最新问答 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 171-190
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):