簡體   English   中英

在 C 中使用 for 循環來測試函數的返回值

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

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