循环后为什么有分号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++] ^^^ ^^^
因此,循环的每次迭代都会增加i
和j
直到整个条件为止:
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循环体中的非操作,因此它实际上并没有做任何事情。