【问题标题】:How is the array works while in a loop?数组在循环中如何工作?
【发布时间】:2019-09-16 15:01:56
【问题描述】:

我正在学习C,学习完数组后,我想尝试一些东西,但是困惑来了。

我尝试打印 a-z,但打印了更多(“{|”)。我对此感到困惑。

int count;
char ph[26];
char x;
for(count = 0, x= 'a'; count < 26 , ph[count] = x; count++ , x++)
    printf("%c",ph[count]);

我希望输出是 a-z,但实际输出是 a-|

谢谢你,我意识到重要的是逗号运算符。

【问题讨论】:

    标签: c arrays loops for-loop


    【解决方案1】:

    问题在于停止条件表达式

    count < 26, ph[count] = x
    

    具有 x 的值,即 count 可能超过 25。这就是 表达式分隔符运算符 , 的行为方式。

    如果这意味着您最终会越界读取 ph(您在 ASCII 编码平台上执行此操作),那么您的代码行为是未定义的。

    你编写循环的方式是不必要的混淆,但如果你想坚持类似的方式,那么编写

    count < 26 && ph[count] = x
    

    是解决方法。最后请注意,ASCII 不是 C 支持的唯一编码,因此即使您确实让程序在您的平台上运行,您也不是用可移植的 C 编写的。

    【讨论】:

    • 或者我可以交换“ph[count] = x”和“count
    • @Absolutelyrun:不,从那以后你可能会越界访问:边界检查来得太晚了。
    【解决方案2】:

    这个for循环

    for(count = 0, x= 'a'; count < 26 , ph[count] = x; count++ , x++)
        printf("%c",ph[count]);
    

    不正确。

    在循环的条件下

    count < 26 , ph[count] = x
    

    这里使用了逗号操作符。运算符的值是其第二个操作数的值,即赋值ph[count] = x 的值。第一个操作数count &lt; 26 被忽略。

    因此循环具有未定义的行为。

    按照以下方式重写循环

    for(count = 0; count < 26; count++ )
        printf( "%c", ph[count] = 'a' + count );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-05
      • 2016-02-14
      • 2014-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多