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

时间:2014-03-03 19:12:46

标签: c

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

#include <stdio.h>
#include <conio.h>

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", i-j);
    }
    getch();
}

为什么我们可以在while循环后放置;,任何人都可以提供帮助?

4 个答案:

答案 0 :(得分:8)

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

  

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

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

  

while(表达式)语句

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

while循环的主要作用是:

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

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

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

评估为false

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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++]);

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

答案 3 :(得分:0)

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