我正在阅读我朋友的代码,我看到了:
#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循环后放置;
,任何人都可以提供帮助?
答案 0 :(得分:8)
;
只是一个空语句,它是一个无操作但它是while循环的主体。从草案C99标准部分6.8.3
表达式和空语句:
null语句(仅由分号组成)不执行任何操作。
和 while语句的定义如下6.8.5
迭代语句:
while(表达式)语句
所以在这种情况下, while循环的语句是;
。
while循环的主要作用是:
string1[i++] == string2[j++]
^^^ ^^^
因此循环的每次迭代都会增加i
和j
直到整个条件:
string1[i++] == string2[j++] &&string1[i-1] != 0 && string2[j-1] != 0
评估为false
。
答案 1 :(得分:1)
答案 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循环体中的非操作,因此它实际上并没有做任何事情。