scanf函数设定值

问题描述:

我写了一个简单的代码,我有一个问题,这里是我的代码:scanf函数设定值

#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

将来,*请正确格式化您的代码*(我只是为您做了这个)。正如最初发布的,这是不可能读的。 –

+2

另外 - 当它只有十几行代码时,可能最好不要将它称为“简单代码”,而且您无法弄清楚为什么它不起作用。 –

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

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

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

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

+0

谢谢你的解释,关于代码格式对不起,我在这里是新的,我认为这很好,我会在下次尝试更好 – rubhani

+0

@rubhani,如果你满意,这个答案充分解决你的问题,然后考虑点击旁边的复选标记将其标记为接受的答案。这是常规的和预期的,你会选择这样的答案之一(目前,没有其他人)。 –