[英]Using a for-loop in C to test the return value of a function
我對編碼尤其是 C 很陌生,所以我決定將 CS50 課程作為該語言的介紹。 我剛看完關於 C 的第一堂課,為了測試我對這個主題的知識,我嘗試編寫一個簡短的小程序。 此外,我將課程的庫用於get_int()
函數。
目標是測試用戶的輸入並檢查它是否小於或等於十。 如果匹配參數,程序應該打印“成功!” 消息並退出; 否則,它應該再次要求輸入。 如果輸入值超過 10,程序會按預期響應,但如果您輸入的值小於或等於 10,它最終會在實際退出之前再次要求您輸入。 我認為這可能與“for”循環有關,但我無法弄清楚。
我的代碼:
#include <stdio.h>
#include <cs50.h>
#include <stdlib.h>
int check_for_value();
int main()
{
for(check_for_value(); check_for_value() != 1; check_for_value())
{
printf("Failed!\n");
}
exit(0);
}
int check_for_value()
{
int i = get_int("Your value: \n");
if(i <= 10)
{
printf("Success!\n");
return 1;
}
else
{
printf("Try again!\n");
return 0;
}
}
for 循環看起來非常簡單
for ( ; !check_for_value(); )
{
printf("Failed!\n");
}
在這種情況下,最好使用 while 循環
while ( !check_for_value() )
{
printf("Failed!\n");
}
至於你的 for 循環
for(check_for_value(); check_for_value() != 1; check_for_value())
^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^
然后不測試函數的帶下划線的調用。
還要記住,for 循環的這種定義
for(int ret = check_for_value(); ret != 1; ret = check_for_value()) {
printf("Failed\n");
}
是一種非常糟糕的編程風格。 有多余的函數調用記錄。 循環體中不使用中間變量ret
。 所以它的聲明也是多余的。 永遠不要使用這種編程風格。
請注意,根據 C 標准,沒有參數的函數 main 應聲明為
int main( void )
和聲明
exit( 0 );
是多余的。
這並沒有完全按照你的想法去做。 在 for 循環中,每次編寫 check_for_value() 時,它都會調用該函數。 所以它會第一次調用它,返回值無關緊要。 它會在中間語句中再次調用它,然后該值會很重要,因為您將輸出與不等於 1 進行比較。然后它會再次調用第三個語句中的函數,這里再次無關緊要。 通常對於這樣的事情,您會改用 while 循環。 下面是一個例子:
int ret = check_for_value();
while(ret != 1) {
printf("Failed\n");
ret = check_for_value();
}
printf("Success\n");
從技術上講,for 循環也可以如下工作:
for(int ret = check_for_value(); ret != 1; ret = check_for_value()) {
printf("Failed\n");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.