【发布时间】:2018-07-21 18:29:46
【问题描述】:
该程序应该接受学生的姓氏 (LN)、名字 (FN)、中间名首字母 (MI)、地址 (ADD)、第一、第二、第三和第四季度的成绩(FIR、SEC、THR , FTH),计算四个输入成绩的平均值,并按字母顺序(姓氏)或降序(平均值)显示所有信息。
它应该是这样的:
.
. Last name: First name: Middle Intial: Address:
.
. First Quarter grades:
. Second Quarter grades:
. Third Quarter grades:
. Fourth Quarter grades:
. Average:
.
. Which way do you want to arrange the names? Enter A to alphabetize or B to arrange in descending order by grade.
之后,它应该清除屏幕并只显示名称。
.
. List:
.
. Apple, Johnny K. from Kansas 89 91 89 91 90.0
. Graham, Crackers L. from N.Y. 79 81 79 81 80.0
.
实际上应该招收 90 名学生,但我设置了 3 作为测试人数。
输入所有数据后,会提示“segmentation fault”。
谁能告诉我我做错了什么?我应该在最后一部分使用 puts 而不是 printf 吗?如果是这样,我该怎么做?
#include <stdio.h>
#include <string.h>
#include <conio.h>
int main()
{
int a=0, SW=1, x, y, i, j, FIR[100], SEC[100], THR[100], FTH[100], AVE[100], sum=0, temp2[100];
char LN[15][90], FN[15][90], MI[5][90], ADD[50][90], OPT, temp1[50];
while(SW)
{
clrscr();
sum=0;
gotoxy(10,2);
printf("Family name: ");
gotoxy(35,2);
printf("First name: ");
gotoxy(60,2);
printf("Middle initial: ");
gotoxy(80,2);
printf("Address: ");
gotoxy(25,4);
printf("1st Quarter Grade: ");
gotoxy(25,5);
printf("2nd Quarter Grade: ");
gotoxy(25,6);
printf("3rd Quarter Grade: ");
gotoxy(25,7);
printf("4th Quarter Grade: ");
gotoxy(25,8);
printf("Average: ");
gotoxy(23,2);
fgets(LN[a],15,stdin);
gotoxy(47,2);
fgets(FN[a],15,stdin);
gotoxy(76,2);
fgets(MI[a],15,stdin);
gotoxy(89,2);
fgets(ADD[a],15,stdin);
gotoxy(44,4);
scanf("%d",&FIR[a]);
sum+=FIR[a];
gotoxy(44,5);
scanf("%d",&SEC[a]);
sum+=SEC[a];
gotoxy(44,6);
scanf("%d",&THR[a]);
sum+=THR[a];
gotoxy(44,7);
scanf("%d",&FTH[a]);
sum+=FTH[a];
AVE[a]=(float)sum/4;
gotoxy(34,8);
printf("%d",AVE[a]);
a++;
if(a==3)
SW=0;
getch();
}
gotoxy(10,10);
printf("Which way do you want to arrange the names? Enter A to alphabetize or B to arrange in descending order by grade. ");
gotoxy(10,11);
scanf("%c",&OPT);
if(OPT=='A' || OPT=='a')
{
for(x=0;x<=2;x++){
for(y=x+1;y<=2;y++){
if(strcmp(LN[x],LN[y])>0){
strcpy(temp1, LN[x]);
strcpy(LN[x], LN[y]);
strcpy(LN[y], temp1);
strcpy(temp1, FN[x]);
strcpy(FN[x], FN[y]);
strcpy(FN[y], temp1);
strcpy(temp1, MI[x]);
strcpy(MI[x], MI[y]);
strcpy(MI[y], temp1);
strcpy(temp1, ADD[x]);
strcpy(ADD[x], ADD[y]);
strcpy(ADD[y], temp1);
strcpy(temp2, FIR[x]);
strcpy(FIR[x], FIR[y]);
strcpy(FIR[y], temp2);
strcpy(temp2, SEC[x]);
strcpy(SEC[x], SEC[y]);
strcpy(SEC[y], temp2);
strcpy(temp2, THR[x]);
strcpy(THR[x], THR[y]);
strcpy(THR[y], temp2);
strcpy(temp2, FTH[x]);
strcpy(FTH[x], FTH[y]);
strcpy(FTH[y], temp2);
strcpy(temp2, AVE[x]);
strcpy(AVE[x], AVE[y]);
strcpy(AVE[y], temp2);
}
}
}
}
else
{
for(x=0;x<=2;x++){
for(y=x+1;x<=2;x++){
if(AVE[x]<AVE[y]){
strcpy(temp1, LN[x]);
strcpy(LN[x], LN[y]);
strcpy(LN[y], temp1);
strcpy(temp1, FN[x]);
strcpy(FN[x], FN[y]);
strcpy(FN[y], temp1);
strcpy(temp1, MI[x]);
strcpy(MI[x], MI[y]);
strcpy(MI[y], temp1);
strcpy(temp1, ADD[x]);
strcpy(ADD[x], ADD[y]);
strcpy(ADD[y], temp1);
strcpy(temp2, FIR[x]);
strcpy(FIR[x], FIR[y]);
strcpy(FIR[y], temp2);
strcpy(temp2, SEC[x]);
strcpy(SEC[x], SEC[y]);
strcpy(SEC[y], temp2);
strcpy(temp2, THR[x]);
strcpy(THR[x], THR[y]);
strcpy(THR[y], temp2);
strcpy(temp2, FTH[x]);
strcpy(FTH[x], FTH[y]);
strcpy(FTH[y], temp2);
strcpy(temp2, AVE[x]);
strcpy(AVE[x], AVE[y]);
strcpy(AVE[y], temp2);
}
}
}
}
gotoxy(10,15);
printf("List: ");
for(j=17;j<=19;j++){
for(x=0;x<=2;x++){
i=10;
gotoxy(i,j);
printf("%s,%s %s",LN[x],FN[x],MI[x]);
i+=40;
gotoxy(i,j);
printf("%f",FIR[x]);
i+=5;
gotoxy(i,j);
printf("%f",SEC[x]);
i+=5;
gotoxy(i,j);
printf("%f",THR[x]);
i+=5;
gotoxy(i,j);
printf("%f",FTH[x]);
i+=5;
gotoxy(i,j);
printf("%f",AVE[x]);
i+=5;
gotoxy(i,j);
printf("from %s",ADD[x]);
}
}
}
编辑:我不知道我在做什么。我只是想通过 8 年级的计算机科学。
【问题讨论】:
-
我看到 strcpy 应用于一个整数数组(多次),这可能是不正确的。
-
注意到了。我该如何纠正呢?
-
FIR[x] = FIR[y]. -
第 1 步遇到任何用户输入问题:检查来自用户输入函数的返回值,例如
fgets()、scanf()。 -
作为风格说明,除非是常量或宏,否则不要写全大写变量名
标签: c arrays sorting multidimensional-array alphabetical