漫漫C仔 发表于 2019-12-11 14:21:10

无法执行该程序,求解

不知道为什么运行不了,有大神帮我看看吗#include<stdio.h>

#define N 40//为下面的分数设置40个位置
int dqfs(int score[]);//统计输入的人数
int bjgrs(int n,int score[]);//统计不及格人数

int main()
{
        int score,n;

        n=dqfs(score);

        printf("总人数为%d",n);

        printf("不及格人数%d",bjgrs(n,score));

        return 0;
}

int dqrs(int score[])
{
        int i=-1;
               
       do{
                i++;
                printf("输入分数:");
                scanf("%d",&score);
       }while(score>=-1);
       
       return i;
}
int bjgrs(int n,int score[])
{
        int t=0,i;
        for(i=0;i<n;i++)
        {
                if(score<60)
                {
                        t+=1;       
               }
       }
       return t;
}

漫漫C仔 发表于 2019-12-11 14:27:59

这个程序是统计总人数(但是不超过40人),并统计其不及格人数用的

最后的魁拔 发表于 2019-12-11 14:33:30

一个是dqfs,一个是dqrs

最后的魁拔 发表于 2019-12-11 14:39:31

把28while条件改一下啊,改成i<=40

漫漫C仔 发表于 2019-12-11 23:57:56

最后的魁拔 发表于 2019-12-11 14:39
把28while条件改一下啊,改成i

改成咋样?看不懂你的意思

最后的魁拔 发表于 2019-12-12 12:17:03

漫漫C仔 发表于 2019-12-11 23:57
改成咋样?看不懂你的意思

不是要小于等于40吗

sunrise085 发表于 2019-12-12 17:01:06

首先,你的程序有输入错误,统计输入人数的函数在声明和调用时的书写与定义时书写不一样。
在这,有个大问题,,就是dqrs()函数中while循环条件不对。你的要求应该是输入不多于40个分数,你的循环判断条件并不能满足你的要求。你需要好好学习一下scanf的用法,scanf有返回值,返回值可能是1或者0或者-1,若读到符合要求的办理类型则返回值为1;若读到其他字符,则返回值为0;什么也没有读到,则返回值为-1。
帮你改了一下,不考虑输入错误的情况。
#include<stdio.h>

#define N 40//为下面的分数设置40个位置
int dqrs(int score[]);//统计输入的人数
int bjgrs(int n,int score[]);//统计不及格人数

int main()
{
      int score,n;
      n=dqrs(score);
      printf("总人数为%d",n);
      printf("不及格人数%d",bjgrs(n,score));
         return 0;
}
int dqrs(int score[])
{
         int i=-1,flag=-1;
         do{
               i++;
               printf("输入分数:");
               flag=scanf("%d",&score);
         }while(flag!=-1&&i<40);
         return i;
}
int bjgrs(int n,int score[])
{
         int t=0,i;
         for(i=0;i<n;i++)
         {
               if(score<60)
               {
                         t+=1;      
               }
         }
         return t;
}

一条金鱼 发表于 2019-12-12 19:21:44

#include<stdio.h>

#define N 40//为下面的分数设置40个位置
int dqfs(int score[]);//统计输入的人数
int bjgrs(int n,int score[]);//统计不及格人数
int main()
{
      int score,n;

      n=dqfs(score);

      printf("总人数为%d",n);

      printf("不及格人数%d",bjgrs(n,score));

      return 0;
}
int dqfs(int score[])
{
      int i=-1;
               
         do{
                i++;
                printf("输入分数:");
                scanf("%d",&score);
         }while(i>=-1&&i<40);
         
         return i;
}
int bjgrs(int n,int score[])
{
      int t=0,i;
      for(i=0;i<n;i++)
      {
                if(score<60)
                {
                        t+=1;      
               }
         }
         return t;
}

函数声明的和定义的不一样,编译器找不到
输入如果是直到40
应该while(i>=-1&&i<40);
我也是菜鸟,有什么不对的还请多多指点{:10_256:}

漫漫C仔 发表于 2019-12-13 16:52:40

sunrise085 发表于 2019-12-12 17:01
首先,你的程序有输入错误,统计输入人数的函数在声明和调用时的书写与定义时书写不一样。
在这,有个大问 ...

我是按着我上课的书本打的,它要求当我输入的分数小于-1时跳出循环,限制人数的话,我们这边是利用了数组来限制好了,就是前面写好的,而且就算按着你这么打我报错是
ld returned 1 exit status
页: [1]
查看完整版本: 无法执行该程序,求解