错误输入的scanf设置值

时间:2017-09-26 18:20:56

标签: c

我写了一个简单的代码,我有一个问题,这是我的代码:

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

int main(void)
{
  int first = 0;   
  int second = 0;

  printf("please enter two integers to determine their relation:  \n");
  scanf("%d %d",&first , &second);
  if ( first == second)
  {
    printf("%d and %d are equal\n", first ,second);
  }

  else if (first > second) 
  {
    printf("%d is bigger than %d \n" ,first ,second);
  }
  else if (first < second)
  {
    printf("%d is smaller than %d \n" ,first ,second);   
  }
  else
  {
    printf("something is wrong \n");`
  }
  system("pause");``
  return 0;
}

现在,当我输入一个角色时,我以为我会得到一些错误,但是在我把它放入之后,返回0等于0, 为什么?

1 个答案:

答案 0 :(得分:5)

  

现在,当我输入一个角色时,我认为我会得到一些错误,但是在我把它放入之后返回0等于0,为什么?

发生错误,但您忽略了它。 scanf()的返回值(如果为非负数)告诉您已成功转换和分配了多少输入字段。如果输入无法与模式匹配,则会出现匹配失败。假设在至少一个输入字段指令之前的模式中的某个点处发生,那将导致分配的字段少于格式中的字段。如果您不愿意检查它,您可能会通过scanf()的返回值检测到这一点。

C专为系统编程而设计。它不会要求发出未经请求的运行时消息,也不会假设在发生意外输入或其他错误时应该执行哪些程序。它为您提供了指导您所选择的响应所需的信息,或者实际上,无需指示任何明确的响应。

在提供的程序中,您的选择是忽略错误。如果您描述匹配失败,则scanf()未分配值的任何变量将保留scanf()调用之前的值,因此忽略该错误会产生与用户相同的行为输入&#34; 0 0&#34;。