【问题标题】:comparing two strings ; 1 from a struct, one from user input [duplicate]比较两个字符串; 1个来自结构,1个来自用户输入[重复]
【发布时间】:2021-12-06 03:09:15
【问题描述】:

我想帮助我在 removeNameCard 函数下使用比较函数。即使打印显示相同的名称,也会跳过在 if 语句中比较它们。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 5

typedef struct
{
    int nameCardID;
    char personName[20];
    char companyName[20];
}NameCard;

NameCard inputRecord[MAX];
int I;
char* p;    

void removeNameCard()
{
    char* a;
    char* b;
    char value[20];
    NameCard temp[MAX];
    printf("Enter personName:\n");
    while ((getchar()) != '\n');
    fgets(value, 20, stdin);
    if (inputRecord[0].nameCardID != 0) {
        for (int x = 0; x < MAX; x++) {
            a = value;
            b = inputRecord[x].personName;
            printf(a);
            printf(b);
            if (value == inputRecord[x].personName) {
                for (int j = x; j < MAX; j++) {
                    inputRecord[j] = inputRecord[j + 1];
                }
                inputRecord[MAX - 1].nameCardID = 0;
                i -= 1;
                printf("The name card is removed\n");
                return;
            }
            else {
                printf("The target person name is not in the name card holder\n");
            }
        }
    }
    else {
        printf("The name card holder is empty\n");
    }   
}

我的问题是 a 和 b 的值不一样,因此当我在 if 语句上比较它时,它总是会跳过。有没有办法在没有地址的情况下只检索 a 和 b 的 char 值?

【问题讨论】:

  • 当您使用== 比较数组或指针时,您比较的是指针,而不是它们指向的内容。要比较以 null 结尾的字符串,请使用 strcmp。老实说,任何书籍、教程或课程都应该教给你。
  • 使用strcmp比较字符串,而不是==

标签: c struct


【解决方案1】:

您不应该使用 ==(等式运算符)来比较字符串,因为它们会比较字符串的引用,即两个 char 指针是否指向内存中的相同位置。另一方面,strcmp() 方法比较字符串的值是否相等..

【讨论】:

  • 如果a和b的值大小写不同怎么办。假设 a = sam 和 b = Sam,strcmp 仍然有效吗?
  • strcmp() 区分大小写,如果你想比较两个字符串不区分大小写,那么你可以使用 strcasecmp()...这些都包含在 #include
【解决方案2】:

您似乎在 if 条件中比较了两个字符串。 我的意思是你不能在 if 条件下将两个字符串等同起来, 我的建议是尝试

strcmp(value,inputRecord[x].personName)==0

而不是使用

value == inputRecord[x].personName 

在您的代码中。 即使字符串有大写和小写字母,只要包含 this(#include )

,strcmp() 函数仍然有效

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-11
    • 2019-10-08
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多