簡體   English   中英

For循環與While循環以顯示“一個”值(CS50)

[英]For Loop vs While Loop for Displaying “One” Value (CS50)

看着周CS50講座(此處的2 https://video.cs50.net/2016/fall/lectures/2?t=84m33s ),在那里他重新器具strlen通過運行while在字符串中的字符循環,與此循環(已編輯其他代碼):

string s = get_string();
int n = 0;
while (s[n] != '\0')
{
    n++;
}
printf("%i",n);

我的問題是:以上內容可以在for循環中說明嗎?

我嘗試創建一個,但是由於for循環的格式化方式,它似乎在每次迭代后強制輸出,這與while循環不同,后者是在滿足特定條件后才允許循環的一個輸出。

我對於這樣的情況下for循環是否可以實現相同的“一次性的,有條件的”輸出感到好奇。 如果我沒記錯的話, while是C lang獨有的, while Python之類的其他獨有的for循環(如果我錯了,請告訴我!)。

可以使用for循環編寫相同的內容。 例如

string s = get_string();
int n = 0;
for ( ; s[n] != '\0'; n++ );
printf("%i",n);

但是,帶有空子語句的for循環可能會使代碼的閱讀者感到困惑,即使它寫成類似

for ( ; s[n] != '\0'; n++ ) /* empty body */;

要么

for ( ; s[n] != '\0'; n++ ) { / *empty body */ }

通常,同一件事可以通過多種方式完成。 您應該選擇更具表現力的結構。 對於此任務,最好使用while循環。

請注意,對於變量n使用size_t類型而不是int類型會更正確。

例如

string s = get_string();
size_t n = 0;
for ( ; s[n] != '\0'; n++ );
printf("%zu",n);

此代碼在這種情況下也將起作用:

int n=0;
for(;s[n];n++);
printf("%d ",n);

工作原理:

字符串元素具有ASCII值,因此,直到字符串中包含字符為止,for循環的條件部分為true。 當它到達字符串的末尾,即“ \\ 0”(“ \\ 0”的整數值為零)時,條件失敗,循環退出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM