昨天到今天做了一道有关结构体的题
根据示例,大体思路是使用结构体分别存储姓名和成绩
程序很快就写出来了,它长这样
#include#include struct ScoreStruct { unsigned char name[20]; unsigned int Score; }; //声明一个存储姓名和成绩的结构体 int main() { int n, t, i; scanf("%d", &n); struct ScoreStruct score[20], m; //声明一个结构体数组和临时变量m for (t = 0; t < n; t ++) { //循环读取数据 scanf("%s%d", &score[t].name, &score[t].Score); } while (t --) { //使用冒泡排序思路 for (i = 0; i < n; i ++) { //比较大小并交换 if (score[i + 1].Score < score[i].Score) { m = score[i + 1]; score[i + 1] = score[i]; score[i] = m; } } } for (t = n; t >= 0; t --) { //输出排名 printf("%s %dn", score[t].name, score[t].Score); } return 0; }
编译器的运行结果是这样
看似没什么问题,提交答案时却提示段错误
再次运行程序,发现返回值异常
在站内搜索,提示问题出在指针指向的地址有误
更换另一编译器,发现其输出如右图所示
那么问题应该出在最后的零上,经过检查,是输出出现了问题
//for (t = n; t >= 0; t --) {
//for (t = n; t > 0; t --) {
//for (t = n - 1; t > 0; t --) {
for (t = n - 1; t >= 0; t --) {
printf("%s %dn", score[t].name, score[t].Score);
}
调试过后再次提交,显示输出错误
在这里纠结了一个下午,后来偶然发现了一个问题
在冒泡排序中,我的判断条件是t


