我有一个c语言的三角形程序

#include <stdio.h>

// A function which decides the type of the triangle and prints it
void checkTriangle(int s1, int s2,int s3)
{
    // Check the values whether it is triangle or not.
    if ((s1 + s2 > s3 && s1 +  s3 > s2 && s2 + s3 > s1) && (s1 > 0 && s2 > 0 && s3 > 0))
    {
        // Deciding type of triangle according to given input.
        if (s1 == s2 && s2 == s3)
            printf("EQUILATERAL TRIANGLE");
        else if (s1 == s2 || s2 == s3 || s1 == s3)
            printf("ISOSCELES TRIANGLE\n");
        else
            printf("SCALENE TRIANGLE \n");
    }
    else
        printf("\nTriangle could not be formed.");
}

int main(void)
{
    // Initializing variables
    int a,b,c;

    // Getting input from user
    printf("Please enter the sides of triangle");

    printf("\nPlease enter side 1:");
    scanf("%d",&a);

    printf("Please enter side 2:");
    scanf("%d",&b);

    printf("Please enter side 3:");
    scanf("%d",&c);

    // Calling function in order to print type of the triangle.
    checkTriangle(a,b,c);
}

当输入为:
7b

它给出了一个错误,这正是我想要的,但是当我像这样输入数据时:
7
7
7b

它忽略“b”并将7作为整数-但为什么?我怎样才能防止这种情况?
我要做的是给出一个错误
7
7
7b

最佳答案

如果希望能够检测到用户输入的错误,例如行不是有效的十进制整数,则可以执行以下操作:
使用fgets(buffer, size, stdin)
使用strtoul(buffer, &endptr, 10)将缓冲区解析为十进制整数(以10为基数),其中endptr是一个char*
endptr将指向buffer中的第一个无效字符,即成功解析的最后一个字符之后的字符
现在,如果*endptr == '\0',即endptr指向buffer的结尾,则整个字符串被解析为有效的十进制整数

10-08 18:42