C错误,简单的scanf函数,结果是整数为0
我正在试验和训练一些C语言,我发现了一个我无法理解的非常奇怪的“错误” 我的代码是: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
#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()
是typeint
,因此应该返回一个值[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()
是typeint
,因此应该返回一个值[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}/