模块功能没有返回答案

时间:2013-04-07 20:42:43

标签: c function pointers crash

#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而没有其他。在此之前,它给了我一个窗口错误,我正在处理的项目崩溃。

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

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

  • 格式说明符"%d"与提供给scanf()的参数类型不匹配,int必须为int*时才会指定:这是未定义的行为。将x地址传递给scanf(),并通过检查x的返回值来确保为scanf()分配值,该值返回成功分配的数量:

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

  • apple地址传递给func()(并将参数更改为int* apple),以便对apple内的func()进行任何更改调用者可以看到void func (int x, int* apple) { /* Dereference 'apple' for assignment. */ *apple = 0; }

    {{1}}