C 它没有输出预期的内容,我不确定这个问题
我刚开始学习C语言,正在慢慢地学习,但是经过几个小时的复习和咨询,我似乎找不到问题所在。当我运行它时,我希望能够输入5个数字,然后返回它们是奇数还是偶数,然后有多少是奇数,有多少是偶数。尽管如此,它似乎不起作用,总是输出一些非常大的数字,我不知道为什么或者从哪里得到它。有人能帮忙吗C 它没有输出预期的内容,我不确定这个问题,c,printf,C,Printf,我刚开始学习C语言,正在慢慢地学习,但是经过几个小时的复习和咨询,我似乎找不到问题所在。当我运行它时,我希望能够输入5个数字,然后返回它们是奇数还是偶数,然后有多少是奇数,有多少是偶数。尽管如此,它似乎不起作用,总是输出一些非常大的数字,我不知道为什么或者从哪里得到它。有人能帮忙吗 #include <stdio.h> #include <stdlib.h> int main() { int num1; int num2; int num3;
#include <stdio.h>
#include <stdlib.h>
int main()
{
int num1;
int num2;
int num3;
int num4;
int num5;
int odd = 0;
int even = 0;
printf("Input the first integer.\n");
scanf("%i", &num1);
printf("Input the second integer.\n");
scanf("%i", &num2);
printf("Input the third integer.\n");
scanf("%i", &num3);
printf("Input the fourth integer.\n");
scanf("%i", &num4);
printf("Input the fifth integer.\n");
scanf("%i", &num5);
if (num1/2 == 0)
{
printf("%i is even.\n", &num1);
even++;
}
else
{
printf("%i is odd.\n", &num1);
odd++;
}
if (num2/2 == 0)
{
printf("%i is even.\n", &num2);
even++;
}
else
{
odd++;
printf("%i is odd.\n", &num2);
}
if (num3/2 == 0)
{
printf("%i is even.\n", &num3);
even++;
}
else
{
odd++;
printf("%i is odd.\n", &num3);
}
if (num4/2 == 0)
{
printf("%i is even.\n", &num4);
even++;
}
else
{
odd++;
printf("%i is odd.\n", &num4);
}
if (num5/2 == 0)
{
printf("%i is even.\n", &num5);
even++;
}
else
{
odd++;
printf("%i is odd.\n", &num5);
}
printf("%i numbers are even.\n", &even);
printf("%i numbers are odd.\n", &odd);
}
#包括
#包括
int main()
{
int num1;
int num2;
int num3;
int num4;
int num5;
int奇数=0;
int偶数=0;
printf(“输入第一个整数。\n”);
scanf(“%i”&num1);
printf(“输入第二个整数。\n”);
scanf(“%i”&num2);
printf(“输入第三个整数。\n”);
scanf(“%i”&num3);
printf(“输入第四个整数。\n”);
scanf(“%i”&num4);
printf(“输入第五个整数。\n”);
scanf(“%i”&num5);
如果(num1/2==0)
{
printf(“%i为偶数。\n”、&num1);
偶数++;
}
其他的
{
printf(“%i为奇数。\n”、&num1);
奇数++;
}
如果(num2/2==0)
{
printf(“%i为偶数。\n”、&num2);
偶数++;
}
其他的
{
奇数++;
printf(“%i为奇数。\n”、&num2);
}
如果(num3/2==0)
{
printf(“%i为偶数。\n”,&num3);
偶数++;
}
其他的
{
奇数++;
printf(“%i为奇数。\n”、&num3);
}
如果(num4/2==0)
{
printf(“%i为偶数。\n”,&num4);
偶数++;
}
其他的
{
奇数++;
printf(“%i为奇数。\n”、&num4);
}
如果(num5/2==0)
{
printf(“%i为偶数。\n”、&num5);
偶数++;
}
其他的
{
奇数++;
printf(“%i为奇数。\n”,&num5);
}
printf(“%i个数字为偶数。\n”、&偶数);
printf(“%i个数字为奇数。\n”、&odd);
}
如果打印语句有问题,则传递要打印的变量的地址。这实际上会调用,因为转换说明符(
%d
)和提供的参数类型(int*
)不匹配
改变
printf("%i is even.\n", &num1);
到
同样地
也就是说
%
来检查余数,而不是除法运算符print语句有问题,您正在传递要打印的变量的地址。这实际上会调用,因为转换说明符(
%d
)和提供的参数类型(int*
)不匹配
改变
printf("%i is even.\n", &num1);
到
同样地
也就是说
%
来检查余数,而不是除法运算符您正在打印变量内存地址,而不是变量值本身。这就是符号(
&
)的作用,它给你一个地址。这就是为什么您需要在scanf
中使用它,scanf
需要知道内存中变量的位置,以便能够将用户输入放入其中。但在打印时,需要打印值本身。因此,在这种情况下不要使用&
代码中还有一个逻辑错误。当您检查数字是偶数还是奇数时,您希望检查余数值,而不是除法值。因此,使用
%
而不是/
打印的是变量内存地址,而不是变量值本身。这就是符号(&
)的作用,它给你一个地址。这就是为什么您需要在scanf
中使用它,scanf
需要知道内存中变量的位置,以便能够将用户输入放入其中。但在打印时,需要打印值本身。因此,在这种情况下不要使用&
代码中还有一个逻辑错误。当您检查数字是偶数还是奇数时,您希望检查余数值,而不是除法值。所以用
%
代替/
好吧,它去掉了可怕的数字,但并不是说任何数字都是偶数。我认为未定义的行为描述是不准确的。定义该行为是为了获取变量在内存中的地址。我认为更准确的说法是,确切的输出是未定义的。@Youssef13不,这是未定义的行为。如果您真的需要打印地址,您必须使用%p
并将参数强制转换为(void*)
。好的,我修复了它,非常感谢,这与if中的操作有关。我把这个数字除以2,只有当它=0时,它才是偶数,但它必须是%而不是/,余数才是0。好吧,它去掉了可怕的数字,但没有说任何数字是偶数。我认为未定义的行为描述是不准确的。定义该行为是为了获取变量在内存中的地址。我认为更准确的说法是,确切的输出是未定义的。@Youssef13不,这是未定义的行为。如果您真的需要打印地址,您必须使用%p
并将参数强制转换为(void*)
。好的,我修复了它,非常感谢,这与if中的操作有关。我把这个数除以2,只有当它=0时,它才是偶数,但它必须是%,而不是/才能使余数为0。