输入格式错误垃圾值后如何使用scanf?

问题描述

我正在尝试一一获取两个整数输入。但是当我对第一个输入使用错误的输入格式(如字符/字符串/浮点数)时,程序结束时没有获得第二个输入的输入。

虽然有一些方法可以解决这个问题,比如使用 isdigit() 和 char 输入,但我想使用 scanf_s 和 "%d" 来解决这个问题。

#include <stdio.h>

int main() {

    unsigned int id = 0;

    printf("Enter ID\n");
    scanf_s("%d",&id);

    printf("%d\n",id);

    unsigned int id2 = 0;

    printf("Enter ID2\n");
    scanf_s("%d",&id2);

    printf("%d\n",id2);

    return 0;
}

解决方法

scanf 一样,scanf_s 返回成功分配的字段数。所以只需使用:

if(scanf_s("%d",&id) != 1) {
    // Handle error
}

你可以这样做:

int r;
do {
    printf("Enter ID\n");
    r = scanf_s("%d",&id);
} while(r!=1)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...