我正在编写一个关于将学生/学生编号(KAS)/学生姓名插入数组的代码
然后,未知数量的输入将它们打印在最后
问题:我的项目问题在于打印效果 印刷中的一些缺陷元素。
我尝试检查输入后输入的每个元素(printf(...)
)
一切似乎都很好。
但仍然在输出中有些错误。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int grade[100] , KAS[100] ,x,spots = 0; // KAS = student number
char name[spots][14], answer;
printf("Please insert a grade : ");
scanf("%d", &grade[spots]);
getchar();
printf("Please add a KAS : ");
scanf("%d",&KAS[spots]);
getchar();
printf("Please enter a name : ");
scanf("%s",&name[spots]);
getchar();
printf("\nDo you want to add another value? y/n : ");
scanf("%c",&answer);
puts("");
getchar();
while(answer == 'y')
{
spots++;
printf("Please insert another grade : ");
scanf("%d", &grade[spots]);
getchar();
printf("Please add another KAS : ");
scanf("%d",&KAS[spots]);
getchar();
printf("Please enter another name : ");
scanf("%s",&name[spots]);
getchar();
printf("\nDo you want to add another value? y/n : ");
scanf("%c\n",&answer);
puts("");
getchar();
if(answer == 'n')
{
break;
}
}
puts("*****************************");
for(x = 0; x < spots; x++)
{
puts("");
printf("%d. Student's great : %d\n",x,grade[x]);
printf("%d. Student's KAS : %d\n",x,KAS[x]);
printf("%d. Student's name : %s\n",x,name[x]);
}
puts("\n*****************************\n");
}
答案 0 :(得分:2)
char name[spots][14]; //as spots is 0 , it would be name[0][14]
/* you would end up access invalid memory and cause UB */
您需要将其更改为 -
char name[100][14];
同时在循环内部和循环之前的两个语句中输入 -
scanf("%s",&name[spots]);
^ you don't need to use &
并且在for
循环中使用x <= spots
作为循环条件。
答案 1 :(得分:0)
你的守则没问题。那里只有一些错误。
1.通过编写static int grade[ ]
初始化数组...
2.在getchar
陈述之前删除if(answer == 'n')
。
3. for循环中的条件应为x <= spots
。这就是为什么如果您输入2个学生姓名,它只打印一个学生的姓名/记录。
希望它有所帮助:)