C语言新手求助:如何实现两位候选人姓名的字母顺序排序?
C语言候选人姓名字母序排序实现及代码修正
先修正原代码的几个错误
- 缺少第二位候选人姓名与票数的输入逻辑
- 读取字符串时,数组名本身就是地址,无需加
&符号 - 读取整数票数应该用
%d格式符,而非%s - 表头打印语句多了多余的逗号,格式参数传递有误
姓名按字母顺序排序的核心方法
C语言中比较字符串的字母顺序,需要使用string.h头文件提供的strcmp()函数:
strcmp(str1, str2)返回值 < 0:str1的字母顺序在str2之前strcmp(str1, str2)返回值 = 0:两个字符串完全相同strcmp(str1, str2)返回值 > 0:str1的字母顺序在str2之后
完整修正后的代码
#include <stdio.h> #include <string.h> // 引入strcmp函数所需的头文件 int main () { char candidato1[50], candidato2[50]; int voti1, voti2; // 正确读取两位候选人的姓名与票数 printf("请输入第一位候选人姓名:"); scanf("%s", candidato1); printf("请输入第一位候选人票数:"); scanf("%d", &voti1); printf("请输入第二位候选人姓名:"); scanf("%s", candidato2); printf("请输入第二位候选人票数:"); scanf("%d", &voti2); // 按票数升序输出 printf("\nOrdine basato sul numero di voti in verso cresciente\n"); printf("%-10s %-10s\n", "Nome", "Numero di voti"); if (voti1 > voti2) { printf("%-10s %-10d\n", candidato2, voti2); printf("%-10s %-10d\n", candidato1, voti1); } else { printf("%-10s %-10d\n", candidato1, voti1); printf("%-10s %-10d\n", candidato2, voti2); } // 按姓名字母顺序输出 printf("\nOrdine alfabetico\n"); printf("%-10s %-10s\n", "Nome", "Numero di voti"); if (strcmp(candidato1, candidato2) < 0) { printf("%-10s %-10d\n", candidato1, voti1); printf("%-10s %-10d\n", candidato2, voti2); } else { printf("%-10s %-10d\n", candidato2, voti2); printf("%-10s %-10d\n", candidato1, voti1); } return 0; }
代码说明
- 引入
string.h头文件才能使用strcmp()函数进行字符串比较 - 完善了输入逻辑,确保两位候选人的信息都能被正确读取
- 票数升序部分调整了输出顺序,保证小值在前
- 字母序部分通过
strcmp()的返回值判断顺序,实现按姓名字母排序输出
内容的提问来源于stack exchange,提问作者Matty0055_
相关产品推荐
相关产品推荐

