簡體   English   中英

為什么我的if語句會創建一個無限循環?

[英]Why does my if statement create an infinite loop?

該代碼適用於每個if語句,但第一個語句(如果該語句為true)除外,它將繼續創建“輸入學生分數[0.00,100,00]:”和“不接受輸入!”的無限循環。

#include <stdio.h>

#define MIN 0
#define MAX 100

int getMark(void) {
    int mark;
    char ch;
    int repeat = 1;

    printf("Enter a student mark [0, 100] :  ");
    int r = scanf("%i%c", &mark, &ch);

    if (r == 0) {
        printf("**No input accepted!**\n");           
    }
    else if (ch != '\n') {
         printf("**Trailing characters!**\n");
    }
    else if (mark < MIN || mark > MAX) {
        printf("**Out of range!**\n");
    }
    return mark;
}

int main() {
    int mark;
    do {
        mark = getMark();
    } while (mark != 0);
}

是什么導致其循環以及如何解決?

1)如果輸入字符串或只是char值,則必須在使用前將其從輸入流中刪除。

#include <stdio.h>

#define MIN 0
#define MAX 100

int getMark(void) //Funtion for marks input
{
    int mark;
    char ch;
    //int repeat = 1;
    char c;

    printf("Enter a student mark [0.00, 100,00] :  ");
    int r = scanf("%d %c", &mark, &ch);

    if (r == 0) //Input begins with a letter
    {
        printf("**No input accepted!**\n");
    }

    else if(ch == '\n') //Input ends with a letter
    {
       printf("**Trailing characters!**\n");
    }

    else if( mark < MIN ||  mark > MAX) //Range
    {
        printf("**Out of range!**\n");
    }

    //Remove the previous string from the input stream
    while ( (c = getchar()) != '\n' && c != EOF );

    return mark;
}


int main()
{
    int mark;

    do
    {
        mark = getMark();
    }while (mark != 0);
    return 0;
}

產量

Enter a student mark [0.00, 100,00] :  -10 c
**Out of range!**
Enter a student mark [0.00, 100,00] :  101 b
**Out of range!**
Enter a student mark [0.00, 100,00] :  50 a
Enter a student mark [0.00, 100,00] :  abcd
**No input accepted!**
Enter a student mark [0.00, 100,00] :  0 q

問題在於沒有接受任何輸入,變量標記將被初始化,並且可能是其他零。然后,您的while循環將永遠繼續,而不會更新標記。

暫無
暫無

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

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