c - 如何比较结构中的两个字符串

标签 c

我有一个学校项目,我需要让用户选择按数字或字母顺序对两个学生进行排序。我已经设法完成了第一个(数字顺序),但我无法理解如何按字母顺序排列它们。

学生的姓名由用户提供,并存储在结构中。当我尝试使用时:

if (strcmp((number_name_surname[0].name), (number_name_surname[1].name) < 0));

我得到错误“bool”类型的参数与“const char*”类型的参数不兼容。

这是结构体

typedef struct
{
    int number;
    char name[10];
    char surname[10];
}num_nom_surname;
num_nom_surname *number_name_surname;

这是字母顺序

if(number_name_surname[0].number > number_name_surname[1].number)
        { 
            for (i = number_of_students - 1; i >= 0; i--)
            {
                printf("\n Student N%c %5d - ", 167, number_name_surname[i].number);
                printf("Name: %s %s", number_name_surname[i].name, number_name_surname[i].surname);
            }
        }   
        else
        {
            for (i = 0; i < number_of_students; i++)
            {
                printf("\n Student N%c %5d - ", 167, number_name_surname[i].number);
                printf("Name: %s %s", number_name_surname[i].name, number_name_surname[i].surname);
            }
        }

这就是我需要帮助的地方

if (strcmp((number_name_surname[0].name), (number_name_surname[1].name) < 0));
        {

        }

//编辑//

既然我已经完成了,我还有一个问题。 为了按字母顺序打印名字,我需要确保名字不同。 示例:

如果第一个名字是:Mark Adele,第二个是:Mark Boy,我如何按顺序打印它们?

代码如下:

if (strcmp((number_name_surname[0].name), (number_name_surname[1].name)) < 0) 
        {
            for (i = 0; i < number_of_students; i++)
            {
                printf("\n Student N%c %5d - ", 167, number_name_surname[i].number);
                printf("Name: %s %s", number_name_surname[i].name, number_name_surname[i].surname);
            }
        }
        else 
        {
            for (i = number_of_students - 1; i >= 0; i--)
            {
                printf("\n Student N%c %5d - ", 167, number_name_surname[i].number);
                printf("Name: %s %s", number_name_surname[i].name, number_name_surname[i].surname);
            }
        }
        printf("\n Value of strcmp: %d", strcmp((number_name_surname[0].name), (number_name_surname[1].name)));

最佳答案

你的括号没了,你有

if (strcmp((number_name_surname[0].name), (number_name_surname[1].name) < 0))

但你需要;

if (strcmp((number_name_surname[0].name), (number_name_surname[1].name)) < 0)

关于c - 如何比较结构中的两个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50454942/

相关文章:

c - 信号量值初始化为-1?

html - 服务器显示文本而不是 HTML

在 c 中创建精确的 atof() 实现

c - linux - 内核线程抢占

MacBook Pro、Windows XP、VS 2008 Express Edition 上原始 C 程序的损坏行为

c - 无法正确终止 "while"循环

c - strcat函数中 "\n"和 '\n'有什么区别?

c++ - 将 8 位数据转换为 3 位数据

c - 如何使用 C/C++ 对经过训练的神经网络进行推理?

带后台任务的 C shell