[英]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.