C 如何";“复兴”;输入错误类型后的标准输入

C 如何";“复兴”;输入错误类型后的标准输入,c,exception,stdin,C,Exception,Stdin,如果用户只输入整数,下面的代码与预期的一样工作 #include <stdio.h> int main() { int input1, input2; int error; error = scanf("%d", &input1); if( !error) printf("Error: Your input was wrong\n"); else printf("Your input was: %d\

如果用户只输入整数,下面的代码与预期的一样工作

#include <stdio.h>

int main()
{
    int input1, input2;
    int error;

    error = scanf("%d", &input1);
    if( !error)
        printf("Error: Your input was wrong\n");
    else
        printf("Your input was: %d\n", input1);

    error = scanf("%d", &input2);
    if( !error)
        printf("Error: Your input was wrong");
    else
        printf("Your input was: %d\n", input2);

}
跳过第二个
scanf()


一旦输入失败,我如何“恢复”
stdin
,以便可以重用它?

这个方法有效。你能给我解释一下它是如何工作的以及它是在哪里被记录的吗?@Machtl
“%*[^n]”
它将使用新行的输入。第二次扫描导致相同的故障,因为输入剩余。这一次有效。你能给我解释一下它是如何工作的以及它是在哪里被记录的吗?@Machtl
“%*[^n]”
它将使用新行的输入。第二次扫描导致相同的故障,因为输入剩余。这一次有效。你能给我解释一下它是如何工作的以及它是在哪里被记录的吗?@Machtl
“%*[^n]”
它将使用新行的输入。第二次扫描导致相同的故障,因为输入剩余。这一次有效。你能给我解释一下它是如何工作的以及它是在哪里被记录的吗?@Machtl
“%*[^n]”
它将使用新行的输入。第二次扫描导致相同的故障,因为输入剩余。
if(!error){
    printf("Error: Your input was wrong\n");
    scanf("%*[^\n]");
} else
    printf("Your input was: %d\n", input1);
if(!error){
    printf("Error: Your input was wrong\n");
    scanf("%*[^\n]");
} else
    printf("Your input was: %d\n", input1);