Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.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 它没有输出预期的内容,我不确定这个问题_C_Printf - Fatal编程技术网

C 它没有输出预期的内容,我不确定这个问题

C 它没有输出预期的内容,我不确定这个问题,c,printf,C,Printf,我刚开始学习C语言,正在慢慢地学习,但是经过几个小时的复习和咨询,我似乎找不到问题所在。当我运行它时,我希望能够输入5个数字,然后返回它们是奇数还是偶数,然后有多少是奇数,有多少是偶数。尽管如此,它似乎不起作用,总是输出一些非常大的数字,我不知道为什么或者从哪里得到它。有人能帮忙吗 #include <stdio.h> #include <stdlib.h> int main() { int num1; int num2; int num3;

我刚开始学习C语言,正在慢慢地学习,但是经过几个小时的复习和咨询,我似乎找不到问题所在。当我运行它时,我希望能够输入5个数字,然后返回它们是奇数还是偶数,然后有多少是奇数,有多少是偶数。尽管如此,它似乎不起作用,总是输出一些非常大的数字,我不知道为什么或者从哪里得到它。有人能帮忙吗

#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。