试图在vs代码中使用C中的if-else语句查找输入的数字是偶数还是奇数,但有一些问题[关闭]

dgsult0t  于 2023-03-28  发布在  其他
关注(0)|答案(3)|浏览(119)

**已关闭。**此问题为not reproducible or was caused by typos。当前不接受答案。

这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
1小时前关闭。
Improve this question
下面是我的代码:

#include <stdio.h>

int main()
{
    int num;
    printf("Enter a number:");
    scanf("%d", num);
    if (num % 2 == 0)
    {
        printf("%d is even.", num);
    }
    else
    {
        printf("%d is odd.", num);
    }
    return 0;
}

它应该给予如下输出:

Enter a number: 7
7 is odd.

但它显示:

Enter a number:7
PS C:\Users\abhin\OneDrive\Desktop\cprograming\c c++>

它没有显示任何错误。

hkmswyz6

hkmswyz61#

在你的代码中

scanf("%d",num);

问题是,你错过了&- address of operator。根据scanf definition,你需要传递你想要存储值的变量的地址。

lfapxunr

lfapxunr2#

问题是,你没有按照scanf的要求将num作为指针传递,而是必须使用&操作符获取num的指针,如下所示:

#include<stdio.h>

int main()
{
    int num;
    printf("Enter a number:");
    scanf("%d", &num);

    if(num % 2 == 0)
    {
        printf("%d is even.", num);
    }
    else
    {
        printf("%d is odd.", num);
    }
    
    return 0;
}
xzlaal3s

xzlaal3s3#

存在多个问题:

  • scanf("%d",num)有未定义的行为,因为你传递了一个int,其中scanf()需要一个指向int的指针。程序可能会安静地崩溃,将控制权返回给shell。改为写scanf("%d", &num)
  • 编译器可能已发出有关此错误的警告,但默认设置可能太宽松。请在启用所有警告的情况下编译并更正错误代码。对于Visual C,请使用/W4;对于gccclang,请使用-Wall -Wextra -Werror
  • 你还应该检查scanf("%d", &num)是否返回了1,以检测无效或丢失的输入。
  • 你应该在消息后面输出一个尾随的换行符:
printf("%d is even.\n", num);

在一些较旧的系统上,缺少的换行符可能会导致输出丢失或在程序退出后与shell提示符混在一起。

相关问题