首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C程序设计语言

C程序设计语言
EN

Stack Overflow用户
提问于 2015-11-25 20:29:27
回答 3查看 89关注 0票数 0

在我的第一个输入之后,Codeblock要求我输入一个额外的输入,它会提示我输入另一个输入,而没有为每个输入提示打印的print语句。

代码语言:javascript
复制
#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();
}
EN

回答 3

Stack Overflow用户

发布于 2015-11-25 21:21:22

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

已更正的代码:

代码语言:javascript
复制
#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;
}

正如规范所说的

转换规格的

编号、顺序和类型必须与列表中参数的编号、顺序和类型匹配

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

票数 2
EN

Stack Overflow用户

发布于 2015-11-25 21:35:33

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

代码语言:javascript
复制
#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;
}
票数 2
EN

Stack Overflow用户

发布于 2015-11-25 21:32:28

正如评论中所说,void main()不好:您应该使用int main(),并以return 0;结束您的程序

但这个问题只是由"%d "的输入格式中不必要的空格引起的。这就解决了这个问题:

代码语言:javascript
复制
    scanf("%d",&marks[i][j]);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33916595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档