Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
输入错误时的scanf设置值_C - Fatal编程技术网

输入错误时的scanf设置值

输入错误时的scanf设置值,c,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);

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

#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;
}
#包括
#包括
内部主(空)
{
int first=0;
int秒=0;
printf(“请输入两个整数以确定它们的关系:\n”);
scanf(“%d%d”、&first和&second);
如果(第一个==第二个)
{
printf(“%d和%d相等\n”,第一,第二);
}
else if(第一个>第二个)
{
printf(“%d大于%d\n”,第一,第二);
}
否则(第一<秒)
{
printf(“%d小于%d\n”,第一,第二);
}
其他的
{
printf(“出现了问题”\n)`
}
系统(“暂停”)``
返回0;
}
现在当我输入一个字符时,我想我会得到一些错误,但是当我把它放进去后,它返回0等于0, 为什么?

现在当我输入一个字符时,我想我会得到一些错误,但是当我把它放进去后,它返回0等于0,为什么

您确实收到了一个错误,但您忽略了它。
scanf()
的返回值如果为非负,将告诉您有多少输入字段已成功转换和分配。如果输入无法与模式匹配,则匹配失败。如果在模式中至少一个输入字段指令之前的某个点发生,则会导致分配的字段少于格式中的字段。如果您费心检查的话,您可以通过scanf()的返回值检测到它

C是为系统编程而设计的。它不要求发出未经请求的运行时消息,也不假设程序在发生意外输入或其他错误时应该做什么。它给你所需要的信息来引导你选择的回应,或者,实际上,不引导任何明确的回应

在提供的程序中,您可以选择忽略错误。在发生如您所描述的匹配失败的情况下,
scanf()
未分配值的任何变量保留在调用
scanf()
之前的值,因此忽略错误会产生与用户输入“0”相同的行为

现在当我输入一个字符时,我想我会得到一些错误,但是当我把它放进去后,它返回0等于0,为什么

您确实收到了一个错误,但您忽略了它。
scanf()
的返回值如果为非负,将告诉您有多少输入字段已成功转换和分配。如果输入无法与模式匹配,则匹配失败。如果在模式中至少一个输入字段指令之前的某个点发生,则会导致分配的字段少于格式中的字段。如果您费心检查的话,您可以通过scanf()的返回值检测到它

C是为系统编程而设计的。它不要求发出未经请求的运行时消息,也不假设程序在发生意外输入或其他错误时应该做什么。它给你所需要的信息来引导你选择的回应,或者,实际上,不引导任何明确的回应


在提供的程序中,您可以选择忽略错误。如果出现如您所述的匹配失败,任何未被
scanf()
赋值的变量都会保留在
scanf()
调用之前的值,因此忽略错误会产生与用户输入“0 0”相同的行为。

我只是介于两行之间。以后,请正确格式化您的代码(我只是为你做的)。正如最初发布的那样,这是不可能阅读的。而且-可能最好不要称它为“简单代码”,因为它只有十几行代码,你无法理解它为什么不起作用。还有一件事:请编辑你的问题,以显示你实际输入的内容(我不知道你说你是什么意思)“输入一个字符”,尤其是因为您的程序要求输入两个值)。当输入一个不能解释为数值的字符时,该字符不被接受,并且该值未被设置。我只是介于两行之间。以后,请正确格式化您的代码(我只是为您这样做的)。正如最初发布的,这是不可能阅读的。此外-可能最好不要称之为“简单代码”,因为它只有十几行代码,您无法理解它为什么不起作用。还有一件事:请编辑您的问题,以显示您实际输入的内容(我不知道您说“输入了一个字符”是什么意思)“,尤其是因为您的程序要求两个值)。当输入一个不能解释为数值的字符时,该字符不被接受,并且该值未设置。感谢您的解释,关于代码格式对不起,我是新来的,我认为它很好,我将尝试更好的下一步time@rubhani,如果您认为此答案充分解决了您的问题,请考虑er单击旁边的复选标记将其标记为已接受的答案。这是一种惯例,并且期望您以这种方式选择其中一个答案(目前没有其他答案)。谢谢你的解释,关于代码格式对不起,我是新来的,我觉得还可以,我下一步会做得更好time@rubhani如果您满意地回答了这个问题,那么请考虑单击旁边的复选标记,将其标记为已接受的答案。您将以这种方式选择一个答案(目前没有其他答案)。