C语言中的循环问题,程序在没有输入的情况下执行

C语言中的循环问题,程序在没有输入的情况下执行,c,loops,while-loop,C,Loops,While Loop,我正在用C写一个简单的程序,但我有一个问题。正如您从下面的代码中看到的,我只有一个while循环,但是程序在某些选择之后执行,而不进行选择 #include <stdio.h> #include <stdlib.h> #include <math.h> #include <windows.h> double area_of_triangle(double, double, double); int main(){ SetConsole

我正在用C写一个简单的程序,但我有一个问题。正如您从下面的代码中看到的,我只有一个while循环,但是程序在某些选择之后执行,而不进行选择

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <windows.h>


double area_of_triangle(double, double, double);

int main(){
    SetConsoleTitle("Calculate Triangle Area");

    char pilihan;
    double a, b, c, area2;

    while(1)
    {
        printf("\n\n\t1. Triangle Area\n");
        printf("\t2. Out");

        printf("\n\nSelect your choice:");
        scanf("%c", &pilihan);

        switch(pilihan){
        case '1':
            printf("\t\t\tFind The Area Of A Triangle\n");
            printf("\tArea Of A Triangle:\n\n");
            printf("\tFirst:");
            scanf("%lf", &a);
            printf("\tSecond:");
            scanf("%lf", &b);
            printf("\tThird:");
            scanf("%lf", &c);

            area2 = area_of_triangle(a, b, c);
            printf("\n\n\tTriangle Area = %.2lf\n\n", area2);
            break;
        case '2':
            exit(0);
            break;
        default:
            printf("\n\n\t\t\tINVALID!!! 1 OR 2 ONLY\n");
            break;
        }
    }

    return 0;
}

double area_of_triangle(double a, double b, double c){

  double s, area2;

  s = (a+b+c)/2;

  area2 = sqrt(s*(s-a)*(s-b)*(s-c));

  return area2;
}
如您所见,程序执行并选择默认值本身,
无效!!!仅1或2个
,无需任何输入,然后按enter键。如果你能帮我解决这个问题,我将不胜感激。谢谢您……

当您使用
scanf()
读取字符时,它会将换行符保留在缓冲区中,因此下次遇到
scanf()
时,它会使用换行符并将得到的无效结果留给您

为了避免此问题,可以格式化
scanf()
以使用换行符,如下所示:

        printf("\n\nSelect your choice:");
        scanf("%c\n", &pilihan);
当您使用
scanf()
读取字符时,它会将换行符保留在缓冲区中,因此下次遇到
scanf()
时,它会使用换行符并将得到的无效结果留给您

为了避免此问题,可以格式化
scanf()
以使用换行符,如下所示:

        printf("\n\nSelect your choice:");
        scanf("%c\n", &pilihan);