#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而没有其他。在此之前,它给了我一个窗口错误,我正在处理的项目崩溃。
我几乎被迫使用指针,所以我做错了什么?
感谢您的帮助!
答案 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}}