使用 getchar() 时条件未正确执行

Condition not executed properly when using getchar()

当我在此代码中使用 getchar 时,输出没有 运行 正确且连续!

#include <stdio.h>
#include <conio.h>

int main()
{
    int i, sum=0, num;
    float ave;
    const int n = 5;
    clrscr();

    for(i = 0 ; i < n; i++) {
        printf ("Enter number %d: ", i+1);
        num = getchar();
        sum += num;
    }

    ave = (float) sum / n;
    printf("\nThe average is: %6.2f", ave);
    getch();
    return 0;
}
Output:

Enter number 1: 1
Enter number 2: Enter number 3: 2
Enter number 4: Enter number 5: 3
The average is: 34.00

getchar 是一个缓冲函数,它将换行符保存在缓冲区中。正确的代码是:

#include <stdio.h>

int main()
{
    int i, sum=0, num;
    float ave;
    const int n = 5;
    for(i = 0 ; i < n; i++) {
        printf ("Enter number %d: ", i+1);
        num = getchar();
        getchar(); // Eat the buffered input
        sum += num;
    }
    ave = (float) sum / n;
    printf("\nThe average is: %6.2f", ave);
    getchar();
    return 0;
}

(我没有Windows和conio.h),但应该是一样的。对 getchar 的额外调用用于 'eating' 缓冲的换行符。