循环后为什么有分号while();

我正在阅读我朋友的代码,我看到了这个:

#include  #include  void main() { char string1[125], string2 [10]; int i, j; printf("\nstring 1: "); gets(string1); printf("\nNstring2 : "); gets(string2); i = 0; while (string1[i] != 0) { j = 0; while (string1[i++] == string2[j++] &&string1[i-1] != 0 && string2[j-1] != 0) ;//i dont know what it mean and why we can put ;after while loop if (string1[i-1] != 0 && string2[j-1] == 0) printf("\nfound at position %d", ij); } getch(); } 

为什么我们可以把; 在while循环之后,任何人都可以帮忙?

; 只是一个空语句,它是一个没有操作,但它是while循环的主体。 从草案C99标准部分6.8.3 表达式和空语句

null语句(仅由分号组成)不执行任何操作。

while语句定义如下6.8.5迭代语句

而(表达)陈述

所以在这种情况下, while循环语句;

while循环的主要作用是:

 string1[i++] == string2[j++] ^^^ ^^^ 

因此,循环的每次迭代都会增加ij直到整个条件为止:

 string1[i++] == string2[j++] &&string1[i-1] != 0 && string2[j-1] != 0 

评估为false

分号就像空指令。 如果我们之后没有放任何指令或者在使用{}时使用循环,我们必须使用分号告诉编译器我们想从while循环执行此空指令。

通常,在while循环中,您有初始化,比较检查,循环体(某些处理)和迭代器(通常是添加索引,或指针遍历,例如下一个),如下所示:

 index = 0 // initialization while(index < 4) { // comparison, loop termination check printf('%c\n', mystring[index]); // Some processing index += 1; // iterate to next loop } 

如果没有至少最后一项,您将永远不会退出循环,所以通常循环体中有多个语句。 在这种情况下,他们使用这样的后增量:

 while (string1[i++] == string2[j++]); 

这在比较语句本身中进行比较(==)和迭代(后增量++),并且没有正文,因此没有理由添加任何其他语句。 空白循环体只能用分号表示。

这称为分号。 在编程标准中, ; 表示语句结束,或者在这种情况下表示它是空语句。 它实际上是while循环体中的非操作,因此它实际上并没有做任何事情。