从字符串传递到unsigned short

时间:2016-12-18 12:27:57

标签: c string unsigned

我有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);
  }
}

1 个答案:

答案 0 :(得分:1)

您可以使用memcmp或者转换为char *并使用strcmp。 请记住,memcmp需要将内存大小作为第三个参数进行比较。

你可以像这样使用memcmp,

memcmp(tempphone, passenger[j].phonenr, sizeof(tempphone));

但是,如果比较的电话号码的大小不相同并且以数字0结尾,则可能导致错误的比较。 想一想,tempphone是12345,乘客[j] .phonenr是1234500000。 memcmp可以判断电话号码是否相同,如果你不忘记将varibables发送到0.你需要另一个变量来保持电话号码的长度,当然,如果电话号码不重要永远都是固定的。

我会将电话号码保留在字符数组而不是短裤数组中并使用strcmp。电话号码是数字,但它们不是数学运算的对象,如加法或除法。它们包含与名称类似的信息。