Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.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
C错误,简单的scanf函数,结果是整数为0_C_Integer_Printf_Scanf - Fatal编程技术网

C错误,简单的scanf函数,结果是整数为0

C错误,简单的scanf函数,结果是整数为0,c,integer,printf,scanf,C,Integer,Printf,Scanf,我正在试验和训练一些C语言,我发现了一个我无法理解的非常奇怪的“错误” 我的代码是: #include <stdio.h> int main() { int num1, num2; int num3 = num1 * num2; printf("Enter a number: "); scanf("%d", &num1); printf("Enter one more number: "); scanf("%d", &am

我正在试验和训练一些C语言,我发现了一个我无法理解的非常奇怪的“错误”

我的代码是:

#include <stdio.h>

int main() {

    int num1, num2;
    int num3 = num1 * num2;

    printf("Enter a number: ");
    scanf("%d", &num1);
    printf("Enter one more number: ");
    scanf("%d", &num2);
    printf("The result of %d * %d is %d\n", num1, num2, num3);
}
数字
8
7
是我输入的随机数


为什么是
0
?即使在从命令行读入num1和num2之前,计算num3的时间应该是
56

。假设num1和num2被初始化为零num3在计算时为零

您正在计算num3,甚至在从命令行读入num1和num2之前。假设num1和num2被初始化为零num3在计算时为零

您还可以将num3添加到第一个init中,然后在提示用户输入数字后,使用行num3=num1*num2

您还可以将num3添加到第一个init中,然后在提示用户输入数字后,使用行num3=num1*num2

菲利佩,你必须把马放在马车前面。在将变量相乘之前,必须使用值初始化变量。(事实上,试图访问未初始化变量中的值会调用未定义的行为(这很糟糕……)

您希望在下面的代码中发生什么

int num1, num2;
int num3 = num1 * num2;
num1
num2
中包含哪些值?您认为在
num3
中会包含哪些值?在这种情况下,看到鸭子并与之交谈确实是一个好主意……真的,这很有帮助
:)

接下来是未经验证的用户输入,例如

如果用户输入
“一”
(或键盘上的cat步数),会发生什么情况?始终,始终验证用户输入
scanf
返回发生的成功转换次数。在
%d”
的情况下——如果命令成功地将整数值放入
num1
,则为
1
。一个简单的测试可以省去很多悲伤

    printf ("Enter a number: ");
    if (scanf ("%d", &num1) != 1) { /* validate ALL user input */
        fprintf (stderr, "error: invalid input or user canceled.\n");
        return 1;
    }
通过检查
scanf
的返回值是否为
1
,可以防止匹配和输入失败(请参阅:
man scanf

只有在成功地将值放入
num1
num2
之后,才能将
num1
num2
有效地相乘,例如

    num3 = num1 * num2; /* num1 & num2 must have values first */
把所有的部分放在一起,马在车之前,注意
main()
是type
int
,因此应该
返回一个值[1],您可以执行以下类似操作:

#include <stdio.h>

int main (void) {

    int num1, num2, num3;

    printf ("Enter a number: ");
    if (scanf ("%d", &num1) != 1) { /* validate ALL user input */
        fprintf (stderr, "error: invalid input or user canceled.\n");
        return 1;
    }

    printf ("Enter one more number: ");
    if (scanf ("%d", &num2) != 1) { /* Ditto */
        fprintf (stderr, "error: invalid input or user canceled.\n");
        return 1;
    }

    num3 = num1 * num2; /* num1 & num2 must have values first */

    printf ("The result of %d * %d is %d\n", num1, num2, num3);

    return 0;   /* main() is type int and returns a value. */
}
仔细检查一下,如果你还有其他问题,请告诉我

脚注[1]见:。另请参见:

菲利佩,你必须把马放在马车之前。在将变量相乘之前,必须使用值初始化变量。(事实上,试图访问未初始化变量中的值会调用未定义的行为(这很糟糕……)

您希望在下面的代码中发生什么

int num1, num2;
int num3 = num1 * num2;
num1
num2
中包含哪些值?您认为在
num3
中会包含哪些值?在这种情况下,看到鸭子并与之交谈确实是一个好主意……真的,这很有帮助
:)

接下来是未经验证的用户输入,例如

如果用户输入
“一”
(或键盘上的cat步数),会发生什么情况?始终,始终验证用户输入
scanf
返回发生的成功转换次数。在
%d”
的情况下——如果命令成功地将整数值放入
num1
,则为
1
。一个简单的测试可以省去很多悲伤

    printf ("Enter a number: ");
    if (scanf ("%d", &num1) != 1) { /* validate ALL user input */
        fprintf (stderr, "error: invalid input or user canceled.\n");
        return 1;
    }
通过检查
scanf
的返回值是否为
1
,可以防止匹配和输入失败(请参阅:
man scanf

只有在成功地将值放入
num1
num2
之后,才能将
num1
num2
有效地相乘,例如

    num3 = num1 * num2; /* num1 & num2 must have values first */
把所有的部分放在一起,马在车之前,注意
main()
是type
int
,因此应该
返回一个值[1],您可以执行以下类似操作:

#include <stdio.h>

int main (void) {

    int num1, num2, num3;

    printf ("Enter a number: ");
    if (scanf ("%d", &num1) != 1) { /* validate ALL user input */
        fprintf (stderr, "error: invalid input or user canceled.\n");
        return 1;
    }

    printf ("Enter one more number: ");
    if (scanf ("%d", &num2) != 1) { /* Ditto */
        fprintf (stderr, "error: invalid input or user canceled.\n");
        return 1;
    }

    num3 = num1 * num2; /* num1 & num2 must have values first */

    printf ("The result of %d * %d is %d\n", num1, num2, num3);

    return 0;   /* main() is type int and returns a value. */
}
仔细检查一下,如果你还有其他问题,请告诉我


脚注[1]见:。另请参见:

将这一行放入
int num3=num1*num2在第二次
scanf()
之后。非常感谢!它起作用了!把这行放在
int num3=num1*num2在第二次
scanf()
之后。非常感谢!它起作用了!我明白了,我不知道这会造成问题。非常感谢。C语言属于一般的一类语言,称为“命令式”语言。在这些语言中,计算是按照语句的写入顺序执行的——也就是程序顺序。Ty表示信息!我明白了,我不知道这会造成问题。非常感谢。C语言属于一般的一类语言,称为“命令式”语言。在这些语言中,计算是按照语句的写入顺序执行的——也就是程序顺序。Ty表示信息!伙计。。。非常感谢。我说不出话来。。还有一个问题,当有人给出负年龄时,我如何更改年龄中“如果”部分的代码以给出错误?我的意思是,我可以使用和无符号变量,但这不会改变,因为它会给我一个奇怪的值。
if(scanf(“%d”,&age)!=1 | | age<0)/*{handle error}*/
Dude。。。非常感谢。我说不出话来。。还有一个问题,当有人给出负年龄时,我如何更改年龄中“如果”部分的代码以给出错误?我的意思是,我可以使用和无符号变量,但这不会改变,因为它会给我一个奇怪的值。
if(scanf(“%d”,&age)!=1 | | age<0)/*{handle error}/