在我的第一个输入之后,Codeblock要求我输入一个额外的输入,它会提示我输入另一个输入,而没有为每个输入提示打印的print语句。
#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();
}发布于 2015-11-25 21:21:22
代码中的问题:像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;
}正如规范所说的
转换规格的
编号、顺序和类型必须与列表中参数的编号、顺序和类型匹配
。否则,结果将是不可预测的,并可能终止输入/输出功能。
发布于 2015-11-25 21:35:33
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;
}发布于 2015-11-25 21:32:28
正如评论中所说,void main()不好:您应该使用int main(),并以return 0;结束您的程序
但这个问题只是由"%d "的输入格式中不必要的空格引起的。这就解决了这个问题:
scanf("%d",&marks[i][j]);https://stackoverflow.com/questions/33916595
复制相似问题