0
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
func (int x, int apple);
int main()

{int x,apple;

 scanf("%d",x);
 func (x,apple);

 if (apple==0)
    printf("Yes");
    else if (apple==1)
        printf("no!");
}

func (int x,int apple )

{

 if ((x%7)==0||(x%11)==0||(x%13)==0)
    apple=0;
 else
    apple=1;

}

整个事情的想法是该函数测试输入的值 x 是 7,11 还是 13 的倍数,并给出结果。

该函数工作得很好(就编译器没有检测到错误并且启动得很好)但是我在编译器窗口上得到的(在我输入任何值之后)是该进程返回 1 而没有别的。在此之前,它给了我一个 Windows 错误,并且我正在处理的项目崩溃了。

我几乎被迫使用指针,所以我做错了什么?

感谢帮助!

4

1 回答 1

1
  • 格式说明符"%d"和提供给 的参数类型不匹配scanf()int当它必须是 an 时指定 an int*:这是未定义的行为。传递 to 的地址并通过检查返回成功分配次数的返回值来确保分配了一个值:xscanf()xscanf()

    if (scanf("%d",&x) == 1)
    {
    }
    
  • voidfor 的状态返回类型func()

  • 传递to的地址(并将参数更改为),以便调用者可以看到对 inside 所做的任何更改:applefunc()int* appleapplefunc()

    void func (int x, int* apple)
    {
        /* Dereference 'apple' for assignment. */
        *apple = 0;
    }
    
于 2013-04-07T20:44:10.870 回答