【问题标题】:while loop with relational operators带有关系运算符的while循环
【发布时间】:2018-01-07 23:04:58
【问题描述】:
int I;
I=0;
while ((CH1[I]=CH2[I]) != '\0')
      I++;
puts(CH1);

这个程序是把CH2复制到CH1里但是我没看懂循环条件(CH1[I]=CH2[I]) != '\0')?

【问题讨论】:

  • 考虑 ===
  • 这看起来像是 Kernighan strcpy 的过于复杂的形式:while (*dst++ = *src++) {;}
  • CH1[I]=CH2[I]CH2 元素中的值复制到CH1 元素,如果为0,则(nul 字符串终止符)退出。
  • 赋值= 返回分配的值。然后将其与'\0' 进行比较。
  • 空间很便宜;使用它们。所有大写字母(加上数字和下划线)的名称通常用于宏和枚举常量,而不是变量名。 (for (int i = 0; (ch1[i] = ch2[i]) != '\0'; i++) ; 会更习惯 C,假设你不能简单地写 strcpy(ch1, ch2);

标签: c while-loop boolean


【解决方案1】:

while 循环条件包含两部分:

CH1[I]=CH2[I] // this is an assignment that copies character at Ith position in array CH2 into array's CH1 Ith position
(...something...) != '\0' // checks if 'something' is not equal to '\0', the string termination character.

因此,while((CH1[I]=CH2[I]) != '\0') 每次将字符从 CH2 复制到 CH1 并在复制到 '\0' 时立即中断,这意味着已到达字符串末尾并且没有更多字符要复制。

【讨论】:

  • 但这不是while循环的语法吗:while(条件){statments}对不起,我是C编程的新手:p
  • @Elliot95,最后,声明具有副作用的条件。
猜你喜欢
  • 2021-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-06
  • 1970-01-01
  • 2018-07-12
  • 1970-01-01
  • 2022-01-04
相关资源
最近更新 更多