这里我只是制作一个简单的小数据库。
当前编写的代码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
, >locstate
和 checkstate
。处理这个问题的一种方法是使用定义的常量。
#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/