#include<stdio.h> int func(int *a,int *b,int num){ int temp; if(num==1){ if(*a>*b){ temp=*a; } else temp=*b; } else if(num==2){ int temp; if(*a<*b){ temp=*a; } else temp=*b; } else if(num==3) temp=*a+*b; } int main(){ int a,b,num; int *p,*q; p=&a; q=&b; scanf("%d %d",&a,&b); scanf("%d",num); int result=func(p,q,num); printf("%d",result); return 0; }
时间: 2024-04-08 09:35:25 浏览: 16
这段代码存在一些问题。首先,在`scanf("%d", num);`这行代码中,应该是`scanf("%d", &num);`,因为`num`是一个整型变量的地址。其次,在函数`func`中,当`num`的值为3时,没有返回值。你可以将其改为如下代码:
```c
int func(int *a, int *b, int num) {
int temp;
if (num == 1) {
if (*a > *b) {
temp = *a;
} else {
temp = *b;
}
} else if (num == 2) {
if (*a < *b) {
temp = *a;
} else {
temp = *b;
}
} else if (num == 3) {
temp = *a + *b;
}
return temp;
}
```
此外,你还需要在主函数中将`scanf("%d", num);`改为`scanf("%d", &num);`。这样就能正确地接收输入,并且将函数的返回值打印出来。
相关问题
#include <stdio.h> void func(int num) { *(int*)num = 6666; } int main() { int num = 1234; func((int)&num); printf("%d\n",num); }
这段代码存在一个问题。在函数 `func` 中,`num` 是作为指针传递给函数的。但是在函数中,它被强制转换为 `int*` 类型并尝试修改其值。然而,`num` 本身是一个整数值,而不是一个有效的内存地址。
这样的操作是非法的,并且可能导致程序崩溃或产生未定义的行为。如果您想要修改 `num` 的值,您可以将 `num` 声明为指针类型,并传递其地址给 `func` 函数。以下是修正后的代码:
```c
#include <stdio.h>
void func(int* num)
{
*num = 6666;
}
int main()
{
int num = 1234;
func(&num);
printf("%d\n", num);
return 0;
}
```
这样修改后,函数 `func` 中的参数 `num` 将接收到 `num` 的地址,然后通过解引用指针来修改 `num` 的值。在主函数中,我们将 `num` 的地址传递给 `func` 函数以实现修改。
#include<stdio.h> #include<math.h> int main(); { int a=sqrt(2); int b=0; while(b<=1000); { printf(); b=b**b; } }这段代码是什么意思
这段代码存在几个语法错误,可能无法编译通过。以下是修正后的代码:
```c
#include <stdio.h>
#include <math.h>
int main() {
int a = sqrt(2);
int b = 0;
while (b <= 1000) {
printf("%d\n", b);
b = b * b;
}
return 0;
}
```
这段代码的意思是:先计算 2 的平方根并赋值给变量 a,然后将变量 b 初始化为 0。接下来进入一个 while 循环,当 b 小于等于 1000 时,输出 b 的值并将 b 的平方赋值给 b,直到 b 大于 1000 时退出循环。输出的值将是 0、1、2、4、16、256,因为每次都将 b 的平方赋值给 b,使得 b 的值不断增长。