[英]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.