我有2个变量。一个应该是unsigned short array[10]
类型(我被要求这样做),另一个应该是来自scanf
的输入,方便成为字符串。
我正在逐个传递值,从字符串到带有for循环的unsigned short
程序运行正常,但我收到警告信息
"Warning passing argument of strcmp from incobatible pointer type"
和"expected const char * but argument is of type short unsigned int"
。
我似乎无法在没有警告的情况下找到如何从字符串传递到unsigned short
我的程序的简短版本在这里,以便您有一个更清晰的视图。
警告在第28,43行。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int i, j, numberofseats;
char phone[11];
char *p;
unsigned short tempphone[10];
typedef struct
{
char fullname[40];
unsigned short phonenr[10];
unsigned int seatnr;
} PASSENGERS;
int main()
{
PASSENGERS passenger[53];
printf("Enter Passenger's Phone Nr:");
scanf("%s", phone);
i = 0;
for (p = phone; *p != '\0'; p++)
{
(tempphone[i]) = *p - '0';
i++;
}
for (j = 0; j < numberofseats; j++)
{
if (strcmp(tempphone, passenger[j].phonenr) == 0)
printf("Passenger %s has Seat Nr %u already Booked", passenger[j].fullname, passenger[j].seatnr);
}
}
答案 0 :(得分:1)
您可以使用memcmp或者转换为char *并使用strcmp。 请记住,memcmp需要将内存大小作为第三个参数进行比较。
你可以像这样使用memcmp,
memcmp(tempphone, passenger[j].phonenr, sizeof(tempphone));
但是,如果比较的电话号码的大小不相同并且以数字0结尾,则可能导致错误的比较。 想一想,tempphone是12345,乘客[j] .phonenr是1234500000。 memcmp可以判断电话号码是否相同,如果你不忘记将varibables发送到0.你需要另一个变量来保持电话号码的长度,当然,如果电话号码不重要永远都是固定的。
我会将电话号码保留在字符数组而不是短裤数组中并使用strcmp。电话号码是数字,但它们不是数学运算的对象,如加法或除法。它们包含与名称类似的信息。