繁体   English   中英

C语言

[英]C programming language

Codeblocks在我第一次输入后要求我提供超出要求的额外输入,它提示您进行另一次输入而没有为每个输入提示打印的打印语句。

#include <stdio.h>
//Computing marks and average of students using 2D arrays
void main()
{
    int i,j,sum,marks[3][5];
    float avg;
    printf("Program to compute average marks of 3 students.\n");
    for(i=0;i<3;i++)
    {   for(j=0;j<5;j++)
    {
        printf("Enter marks for student %d in subject %d:\t",i+1,j+1);
        scanf("%d ",&marks[i][j]);
    }
    }
    for(i=0;i<3;i++)
    {
        for(j=0;j<5;j++)
        {
            sum=sum+marks[i][j];
        }
        avg= sum/5.0;
        printf("The average marks of student %d is %f:\n",i+1,avg);
         }
    getch();
}

代码中的问题:您的格式字符串,如scanf("%d ",&marks[i][j]); 输入后需要空格,这会导致异常。

更正的代码:

#include <stdio.h>
//Computing marks and average of students using 2D arrays
int main()
{
    int i,j,sum = 0,marks[3][5];
    float avg;

    printf("Program to compute average marks of 3 students.\n");
    for(i=0;i<3;i++)
    {
        for(j=0;j<5;j++)
        {
            printf("Enter marks for student %d in subject %d:\t",i+1,j+1);
            scanf("%d",&marks[i][j]);
        }
    }
    for(i=0;i<3;i++)
    {
        for(j=0;j<5;j++)
        {
            sum=sum+marks[i][j];
        }
        avg= sum/5.0;
        printf("The average marks of student %d is %f:\n",i+1,avg);
    }
    return 0;
}

如规格所述

转换规范的数量,顺序和类型必须与列表中参数的数量,顺序和类型相匹配

否则,结果将不可预测,并可能终止输入/输出功能。

scanf中的格式字符串应为"%d" (无空格)。 您还忘记了初始化sum变量。 下面是代码的更正版本,包括一个方便的数组长度宏。 希望这可以帮助。

#include <stdio.h>
#include <stdlib.h>

#define LEN(arr) (sizeof (arr) / sizeof (arr)[0])

/*Computing marks and average of students using 2D arrays*/

int main()
{
    int i, j, sum, marks[3][5], count;
    float avg;

    printf("Program to compute average marks of 3 students.\n");
    for (i = 0; i < LEN(marks); i++) {
        for (j = 0; j < LEN(marks[0]); j++) {
            printf("Enter marks for student %d in subject %d:\t", i + 1, j + 1);
            count = scanf("%d", &marks[i][j]);
            if (count != 1) {
                fprintf(stderr, "invalid input\n");
                exit(EXIT_FAILURE);
            }
        }
    }
    for (i = 0; i < LEN(marks); i++) {
        sum = 0;
        for (j = 0; j < LEN(marks[0]); j++) {
            sum = sum + marks[i][j];
        }
        avg = ((float) sum) / ((float) LEN(marks[0]));
        printf("The average marks of student %d is %f:\n", i + 1, avg);
    }

    return 0;
}

如注释中所述, void main()是不好的:您应该使用int main()并以return 0;结束程序return 0;

但是问题仅是由于输入格式"%d "不必要的空格引起的。 这消除了问题:

    scanf("%d",&marks[i][j]);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM