不同的輸出據我所知for
環和while
循環之間的差別看起來是這樣的:WHILE循環顯示出比FOR循環
爲:
拳頭初始化時則條件表達式檢查如果結果爲TRUE
那麼只有語句部分得到執行,這個循環是連續的,直到條件表達式結果爲FALSE
。
當:
條件表達式首先檢查,如果結果TRUE
然後聲明部分被執行,否則不,這個循環是連續的,直到條件表達式的結果FALSE
。
今天,我寫了檢查,如果string
有重複的算法,如果是隻打印那些沒有:
#include<stdio.h>
#include<string.h>
int main(void){
const char *str = "Mississippi";
char tmp[15] = {0};
size_t i=0,j=0,k=1;
int found=0;
tmp[0] = str[0];
printf("Before = %s\n",str);
while(str[i] != '\0'){
for(j=0;tmp[j] != '\0';j++){
if(tmp[j] == str[i]){
found++;
}
}
if(found==0){
tmp[k]=str[i];
k++;
}
found=0;
i++;
}
tmp[strlen(tmp)] = '\0';
printf("After = %s\n",tmp);
return 0;
}
輸出:
Before = Mississippi
After = Misp
現在看如果替換for
循環會發生什麼情況:
for(j=0;tmp[j] != '\0';j++){
if(tmp[j] == str[i]){
found++;
}
}
以`while循環:
while(tmp[j] != '\0'){
if(tmp[j] == str[i]){
found++;
}
j++;
}
我得到:
#include<stdio.h>
#include<string.h>
int main(void){
const char *str = "Mississippi";
char tmp[15] = {0};
size_t i=0,j=0,k=1;
int found=0;
tmp[0] = str[0];
printf("Before = %s\n",str);
while(str[i] != '\0'){
while(tmp[j] != '\0'){
if(tmp[j] == str[i]){
found++;
}
j++;
}
if(found==0){
tmp[k]=str[i];
k++;
}
found=0;
i++;
}
tmp[strlen(tmp)] = '\0';
printf("After = %s\n",tmp);
return 0;
}
但產量並不如預期:
Before = Mississippi
After = Misp
但是:
Before = Mississippi
After = Misisipi
爲什麼會發生這種情況?
TLDR;請提供一個簡短而親切的[MCVE](http://stackoverflow.com/help/mcve)來說明問題。不要發佈有效的代碼。 –
@WeatherVane對不起,用示例去掉了部件。 – Michi
Down Voter請解釋一下,爲什麼?有沒有機會看到誰投下了我的票? – Michi