You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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;
}

代码说明

  1. 引入string.h头文件才能使用strcmp()函数进行字符串比较
  2. 完善了输入逻辑,确保两位候选人的信息都能被正确读取
  3. 票数升序部分调整了输出顺序,保证小值在前
  4. 字母序部分通过strcmp()的返回值判断顺序,实现按姓名字母排序输出

内容的提问来源于stack exchange,提问作者Matty0055_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 08:50:23