如何确保输入的数据一定是整数,当不是整数时停止执行代码并报错

比如
int a;
scanf(''%d'',&a);
a=-a;
printf(''%d'',a);
输入1j时不读取j只输出-1
输入开头是其他字符而非数字时输出一个固定值

怎么确保输入非法时使程序停止运行并执行printf(''error'');

基于Monster 组和GPT的调写:
用scanf()函数返回值来确保输入数据是否为整数。当输入非法时,scanf()函数将返回0,因此可以检查返回值是否为0来判断输入是否为整数。

以下是实现这个功能的代码:

#include <stdio.h>

int main() {
    int a;
    if (scanf("%d", &a) == 0) {  // 检查返回值是否为0
        printf("error");
        return 1;  // 停止程序运行
    }
    a = -a;
    printf("%d", a);
    return 0;
}


这里,如果scanf()函数返回值为0,表示输入非法,程序将输出error并停止运行。如果输入合法,程序将继续执行,输出取反后的整数值。

对于输入开头是其他字符而非数字时输出一个固定值的需求,可以使用scanf()函数的返回值和getchar()函数结合使用。具体实现如下:

#include <stdio.h>

int main() {
    int a;
    int result = scanf("%d", &a);  // 检查输入是否为整数
    if (result == 0) {  // 非法输入
        printf("error");
        return 1;
    }
    if (result == EOF || getchar() != '\n') {  // 检查输入是否以换行符结束
        printf("固定值");
        return 1;
    }
    a = -a;
    printf("%d", a);
    return 0;
}


这里,首先使用scanf()函数检查输入是否为整数,如果不是,则输出error并停止程序。如果是整数,则使用getchar()函数检查输入是否以换行符结束。如果输入没有以换行符结束,说明输入开头是其他字符而非数字,程序将输出固定值并停止运行。如果输入合法,则继续执行程序,输出取反后的整数值。