【问题标题】:Why is the output not ASCII value of 1? [closed]为什么输出的 ASCII 值不是 1? [关闭]
【发布时间】:2020-02-27 07:03:34
【问题描述】:
#include<stdio.h>
void main()
{
   char cnt=0;
   for(cnt;cnt>2;cnt=cnt+1);
   printf("%d",cnt);
}

我认为代码的输出应该是 1 的 ASCII 值,因为 0 的值在循环后递增,实际输出应该是 0 还是 0 的 ASCII 值(因为初始化 0 时不在引号中)?

【问题讨论】:

  • 你的意思是cnt &lt; 2
  • 不,是cnt > 2.
  • 循环体(此处为;)和增量(cnt = cnt+1)仅在条件为真时才会执行,而事实并非如此。
  • 如果以cnt=0 开头,cnt&gt;2 为 false。在您的情况下,初始操作是无用的,因为 cnt 是一个没有任何副作用的表达式。
  • @JayeshKumpawat 如果你读过 C 教科书中处理printf 的章节,你就会知道%d 格式说明符简单地打印参数的值,所以如果@987654330 @ 包含 42 个 printf("%d",cnt) 将打印 42

标签: c loops ascii


【解决方案1】:

条件cnt &gt; 2 失败,因为cnt 的值为0,小于2

所以,循环的第三个表达式:

cnt = cnt + 1

不会被执行,这意味着cnt将保持在0

也许你的意思是写cnt &lt; 2

【讨论】:

    【解决方案2】:

    永远不会执行for 循环,因此永远不会到达指令cnt=cnt+1。这意味着当达到 printf 时,cnt 仍然是 0

    #include<stdio.h>
    void main()
    {
       char cnt=0;                         // cnt = 0
       for(cnt;cnt>2;cnt=cnt+1);           //loop is never executed cnt is still 0
       printf("%d",cnt);                   //print an int value (cnt), which means '0'
    }
    

    【讨论】:

    • 我在原始代码中添加了一些 cmets。我会解释...
    猜你喜欢
    • 1970-01-01
    • 2014-06-25
    • 1970-01-01
    • 2013-02-03
    • 1970-01-01
    • 2018-09-19
    • 2017-11-20
    • 1970-01-01
    相关资源
    最近更新 更多