【问题标题】:c program ignores all scanfs after wrong variable type inputc程序在错误的变量类型输入后忽略所有scanfs
【发布时间】:2015-11-06 18:28:43
【问题描述】:
#include <stdio.h>
#include <stdlib.h>

int main(void) {

   int a, b, checka, checkb;

   printf ("enter a: ");
   checka = scanf ("%d", &a);

   printf ("enter b: ");
   checkb = scanf ("%d", &b);

   printf ("checka = %d\n", checka);
   printf ("checkb = %d", checkb);



   return EXIT_SUCCESS;
}

我在一个较大的程序中遇到了这个问题,但我写了一个快速测试来看看我是否可以解决它,但我不能。

基本上,当为 scanf 输入除整数以外的任何内容时,程序会立即跳过并忽略所有其他 scanf,并仅打印它看到的程序的其余部分,这意味着我无法使用 while 循环进行检查,或者我只是得到一个无限循环,因为循环中用于修复变量的 scanf 被跳过了。

显然,如果输入整数,这个特定的程序将只为最后两个 printfs 返回 1,这是预期的。 我做错了什么?

谢谢!

【问题讨论】:

  • 这是检查返回值 od scanf 的原因。这是有原因的。
  • 这不是我正在做的事情吗?
  • 不,我在这里看不到任何检查,您只是在打印结果
  • 啊,在阅读下面的答案后,我明白现在尤金是什么支票了,谢谢。
  • 观察scanf()结果的新程序员! +1

标签: c validation scanf


【解决方案1】:

我们应该检查 scanf 的错误是有原因的,试试这个:

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

int main(void) {

    int a, b, checka, checkb;

    printf ("enter a: ");
    if((scanf ("%d", &a)) == 1){
        checka = a;
    }else{
        printf("Error(1)!");
        exit(EXIT_FAILURE);
    }


    printf ("enter b: ");
    if((scanf ("%d", &b)) == 1){
        checkb = b;
    }else{
        printf("Error(2)!");
        exit(EXIT_FAILURE);
    }

    printf ("checka = %d\n", checka);
    printf ("checkb = %d", checkb);

    return EXIT_SUCCESS;
}

【讨论】:

  • 谢谢!我不知道最初的 scanf 必须是 if 语句的条件,干杯!
  • @Lewiss 始终检查 scanf(及其系列)是否有错误。
猜你喜欢
  • 2017-04-03
  • 1970-01-01
  • 2012-11-19
  • 1970-01-01
  • 2023-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-04
相关资源
最近更新 更多