c - 试图让这个 if 语句起作用,但我似乎无法将变量与数组中的另一个变量进行比较

标签 c

这里我只是制作一个简单的小数据库。

当前编写的代码vv。

#include <stdio.h>
struct Customer{
 char firstName[30];
 char lastName[30];
 char street[35];
 char city[20];
 char state[3];
 int zip;
 char phone[15];
 int accountId;
};

int main()
{
    int size=1;// this number can be changed though would recommend leaving on 3 or something like that for quick testing
    struct Customer s[size];
    {
        int Count;
        for(Count=0; Count < size;Count++)
        {
            printf("Enter Data for Customer %i\n",Count);
            printf("Enter First Last Phone: ");
            scanf("%s   %s  %s",s[Count].firstName,s[Count].lastName,s[Count].phone);
            printf("Enter Address (Street City State ZIP): ");
            scanf("%s   %s  %s  %d",s[Count].street,s[Count].city,s[Count].state,&s[Count].zip);
            printf("\n");
        }
    }
    char locstate[3];
    int fail=0;
    char checkstate[3];
    int check;
    int check2;
    printf("which state would you like to locate customers in:");
    scanf("%s",locstate);
    for(check=0;check < size;check++)
    {
        {
            checkstate=s[check].state;
            //printf("%s",checkstate);
            if(locstate==checkstate)
            {
                printf("data for Customer %i",check);
                printf("Account: %i",check);
                printf("name: %s %s",s[check].firstName,s[check].lastName);
                printf("addr: %s %s %s %d",s[check].street,s[check].city,s[check].state,s[check].zip);
            }
            else
            {
               fail=fail+1; 
            }
        }
    }
    if(fail==size)
    {
        printf("there was no one in that state.");
    }
    else
    {
        return(0);    
    }
    
}

如果我删除检查状态代码并尝试直接比较locate和s.[check].state,则if语句总是失败,无论locstate和s.[check].state是否从用户。

最佳答案

您在处理字符串时犯了几个错误。

看起来您希望此语句将 state 的值复制到 checkstate

checkstate=s[check].state

执行此操作的方法是使用 strcpy

strcpy(checkstate, s[check].state);

看起来您希望此语句比较两个字符串。

if(locstate==checkstate)

执行此操作的方法是使用 strcmp

if(strcmp(locstate, checkstate) == 0)

顺便说一句,在代码中使用魔数(Magic Number)并不是一个好习惯,例如定义字符数组 state 大小的 3 >locstatecheckstate。处理这个问题的一种方法是使用定义的常量。

#define STATE_LEN 3
...
char state[STATE_LEN];
...
char locstate[STATE_LEN];
char checkstate[STATE_LEN];

此外,您的代码无法防止 scanf 将太多字符读取到用于结构体字段的各种 char 数组中。您可以防止读取超出数组可以容纳的内容,如下所示:

scanf("%2s", s[Count].state);

关于c - 试图让这个 if 语句起作用,但我似乎无法将变量与数组中的另一个变量进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66501506/

相关文章:

c - 如何解析/proc/meminfo

c++ - OpenCV - 坚持解决练习

c - 使用双指针返回指针的值

C、运行时测试 PATH 中是否存在可执行文件

c - 在 C 中表示抽象语法树

c - C 中的 Salted sha512,无法与 Symfony2 的 FOSUserBundle 同步

c - float 值(value)突然变得巨大

c - 删除文件的权限? C编程

c - 如何防止控制台应用程序在 C 中按 "Ctrl+C"时终止?

C - 或两个位图的最快方法