变量指针做函数参数提问
题目:有三个同学的4门成绩,查找有一门以上课程不合格的学生,并输出其全部成绩score={{65,57,70,60},{58,87,90,81},{90,99,100,98}}
应该只有第1,2位成绩,但所有的同学成绩都输入,如图
不知道问题出在了哪里?
代码如下:
#include<stdio.h>
int main()
{
void search(float (* p),int n);
float score={{65,57,70,60},{58,87,90,81},{90,99,100,98}};
search(score,3);
return 0;
}
void search(float (* p),int n)
{
int i,j,flag;
for(j=0;j<n;j++)
{
flag=0;
for(i=0;i<4;i++)
if(*(*(p+j)+i)<60) flag=1;
if (flag==1);
{
printf("第%d的成绩:",j+1);
for(i=0;i<4;i++)
printf("%5.1f ",*(*(p+j)+i));
printf("\n");
}
}
}
#include<stdio.h>
int main()
{
void search(float (* p),int n);
float score={{65,57,70,60},{58,87,90,81},{90,99,100,98}};
search(score,3);
return 0;
}
void search(float (* p),int n)
{
int i,j,flag;
for(j=0;j<n;j++)
{
flag=0;
for(i=0;i<4;i++)
if(*(*(p+j)+i)<60)
{
flag=1;
if (flag==1);
{
printf("第%d的成绩:",j+1);
for(i=0;i<4;i++)
printf("%5.1f ",*(*(p+j)+i));
printf("\n");
}
}
}
}
本帖最后由 major_lyu 于 2020-2-21 21:33 编辑
if(flag==1)后面的;去掉试试。
这个分号使得if语句结束了。后面大括号的代码与if(flag == 1)没关系了。
另外帮你优化了一下:
#include<stdio.h>
int main()
{
void search(float (* p),int n);
float score={{65,57,70,60},{58,87,90,81},{90,99,100,98}};
search(score,3);
return 0;
}
void search(float (* p),int n)
{
int i,j,flag;
for(j=0;j<n;j++)
{
flag=0;
for(i=0;i<4;i++)
if(*(*(p+j)+i)<60)
{
flag=1;
break; //只要找到一个低于60分的成绩就可以跳出循环,不用接着把所有的成绩检查一遍
}
if (flag==1) //;
{
printf("第%d的成绩:",j+1);
for(i=0;i<4;i++)
printf("%5.1f ",*(*(p+j)+i));
printf("\n");
}
}
}
major_lyu 发表于 2020-2-21 21:26
if(flag==1)后面的;去掉试试。
这个分号使得if语句结束了。后面大括号的代码与if(flag == 1)没关系了。
...
说的太对了,这个才是最佳答案。 王盛帅 发表于 2020-2-21 22:28
说的太对了,这个才是最佳答案。
哈哈哈,可是你还是把最佳给了别人!{:10_312:} major_lyu 发表于 2020-2-21 22:30
哈哈哈,可是你还是把最佳给了别人!
https://fishc.com.cn/forum.php?mod=viewthread&tid=157392&page=1#pid4388399
帮我看一下这个问题,这次不会手抖了。
页:
[1]