2401_84401465 2024-06-13 18:23 采纳率: 71.4%
浏览 1
已结题

为什么我的代码运行到第62行之后黑窗就停止了?


#include<stdio.h>
void grade(int score[],int n);
void exchange(int a[],int b[],int k);
void change(int a[],int n,int add,int number);
int main()
{      int i,n;
    int chinese[n],english[n],math[n];
    grade(chinese,n);grade(english,n);grade(math,n);
    printf("请输入学生人数\n");
    scanf("%d",&n);
    printf("请输入学生学号\n");
    int num[n]; 
    int j=1;
    for(i=0;i<n;i++,j++){
        printf("请输入第%d个学生的学号\n",j);
        scanf("%d",&num[i]);
    }
    
    printf("请输入学生的成绩\n");
    for(i=0,j=1;i<n;i++,j++){
        printf("请输入第%d个学生的语文成绩:\n",j);
        scanf("%d",&chinese[i]);
        printf("请输入第%d个学生的英语成绩:\n",j);
        scanf("%d",&english[i]);
        printf("请输入第%d个学生的数学成绩:\n",j);
        scanf("%d",&math[i]); 
    }
      printf("请输入学生学号以查询该生成绩\n");
      infor(i=0;i<n+add;i++){
                printf("%d",fnum[i]);
            }t number;
      scanf("%d",&number);
      for(i=0;i<n;i++){
          if(number==num[i]){
              printf("学号为%d的成绩如下:\n",num[i]);
            printf("语文成绩为: %d\n",chinese[i]);
            printf("英语成绩为: %d\n",english[i]);
            printf("数学成绩为: %d\n",math[i]);
            printf("三科平均分为%d\n",
            (chinese[i]+english[i]+math[i])/3); 
          }
      }
    printf("若想要修改学生成绩请输入学号,否则输入0\n");
    int k;
    scanf("%d",&k);
    int control=1;
    if(k!=0){
        while(control!=0){
            for(i=0;i<n;i++){
                if(k==num[i]){
                printf("输入0以修改该生学号,否则输入任意数");
                int detm1,detm2;
                scanf("%d",&detm1);
                if(detm1==0){
                    int change;
                    printf("输入修改后的学号");
                    scanf("%d",&change);
                    num[i]=change;}
                printf("输入0以修改该生成绩,否则输入任意数");
                scanf("%d",&detm2);
                if(detm2==0){
                    printf("输入修改后的语文、英语、数学成绩\n"); 
                    int c,e,m;
                    scanf("%d%d%d",&c,&e,&m);
                    chinese[i]=c;english[i]=e;math[i]=m;
                } 
            }
        }
    } 
    printf("继续修改请输入学号,否则输入0\n");

    scanf("%d",&k);
    if(k==0){
        control=0;
    }
}
    printf("输入1以添加新的学生,否则输入0\n");
    int x;
    scanf("%d",&x);
    if(x){
        printf("请输入添加学生个数\n");
        int add;
        scanf("%d",&add);
        int fnum[n+add],fchinese[n+add],fenglish[n+add]
        ,fmath[n+add];
        exchange(num,fnum,n);
        exchange(chinese,fchinese,n);
        exchange(english,fenglish,n);
        exchange(math,fmath,n);
               printf("请输入新增同学学号和各科成绩\n");
        int number1,chinese1,english1,math1;
        for(i=n;i<n+add;i++);{
            printf("请输入第%d位同学的学号\n",i); 
            scanf("%d",&number1);
            change(fnum,n,add,number1);
            printf("请输入第%d位同学的语、英、数成绩",i);
            scanf("%d%d%d",&chinese1,&english1,&math1);
            change(fchinese,n,add,chinese1);
            change(fenglish,n,add,english1);
            change(fmath,n,add,math1);
            
            }
    for(i=0;i<n+add;i++){
                printf("%d",fnum[i]);}    
    }
        
return 0;
} 
    
void grade(int score[],int n)
{
    int i;
    for(i=0;i<n;i++){
        scanf("%d",&score[i]);}
}
void exchange(int a[],int b[],int k)
{
    int i;
    for(i=0;i<k;i++){
        b[i]=a[i];
    }
}
void change(int a[],int n,int add,int number)
{
    int i;
    for(i=n;i<n+add;i++){
        a[i]=number; 
    }
}

img

  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2024-06-13 18:23
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    你的C语言程序在运行到第62行之后停止,可能是因为存在一些语法和逻辑错误。根据你提供的代码和图片,我将尝试指出一些可能的问题并提供解决方案。

    1. 未定义数组大小: 在main函数中,你声明了三个数组chinese[n], english[n], math[n],但是没有在声明之前定义n的值。这将导致编译错误。

      解决方案:在声明数组之前,先定义并初始化n的值。

    2. 错误的数组索引: 在for循环中,你使用了ij两个变量,但是在循环中j的值没有被使用,而i被用来索引数组。这可能会导致数组越界。

      解决方案:确保使用正确的索引变量。

    3. 错误的printfscanf调用: 在查询学生成绩的部分,你使用了printfscanf,但是scanf的格式字符串中缺少了&符号。

      解决方案:在scanf调用中,确保每个变量前都有&符号。

    4. 错误的循环条件: 在infor(i=0;i<n+add;i++){这一行,infor应该是for,并且括号内缺少了循环体。

      解决方案:更正为for(i=0; i<n+add; i++){

    5. 未使用的变量: 在printf调用中,fnum数组被打印,但是这个数组在之前的代码中没有定义。

      解决方案:确保fnum数组在使用前被正确定义和初始化。

    6. 循环中的分号错误: 在for(i=n;i<n+add;i++);{这一行,循环声明后面不应该有分号。

      解决方案:删除分号。

    7. 逻辑错误: 在修改学生成绩的逻辑中,control变量的使用似乎是有问题的,它没有正确地控制循环的结束。

      解决方案:重新检查循环逻辑,确保control变量能够正确地控制循环。

    8. 数组交换逻辑错误: 在exchange函数中,你试图复制数组,但是没有考虑到数组的大小可能会改变。

      解决方案:确保exchange函数能够处理不同大小的数组。

    9. change函数的逻辑错误change函数中的循环逻辑似乎是错误的,它应该在指定的位置插入新元素,而不是替换现有元素。

      解决方案:重新设计change函数的逻辑,以正确地插入新元素。

    10. 图片中的信息: 图片中显示的信息表明程序在处理输入时可能存在问题。这可能是由于上述提到的scanf调用错误。

      解决方案:根据上述建议修正scanf调用。

    请注意,这些只是根据你提供的代码片段和图片信息推测出的问题。实际的问题可能需要更详细的调试来确定。你可以使用调试工具逐步执行代码,观察程序的行为,并检查变量的值以帮助诊断问题。

    至于参考资料,你可以查看C语言的官方文档或在线教程来了解更多关于数组、循环和输入输出的知识。这里是一个C语言基础教程的链接,它可能会对你有所帮助:C Programming - Wikibooks, open books for an open world

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月23日
  • 已采纳回答 6月15日
  • 创建了问题 6月13日