通过结构进行比较

时间:2016-04-21 23:37:04

标签: c pointers struct comparison

struct sign_in
{
    char password[MAX_NAME_LEN+1];//The password for each player
    char name[MAX_NAME_LEN+1];//Name of the people who can sign in
}



//prototype
int compare_names(char*, char*, struct sign_in*);


int compare_names(char*pName,char*pPassCode,struct sign_in *var)
{
    int iComparison = 1;
    int flag = 1;
    int iComparison2 = 1;
    int i = 0;

    for (i=0;i<6;i++)
    {
        printf("%s \t %s ", var[0].name,pName );
        if(iComparison != 0)
        {
            iComparison = strcmp(pName,var[i].name);
            i++;
        }
        if(iComparison2 != 0)
        {
            iComparison2 = strcmp(pPassCode,var[i].password);
            i++;
        }

        printf("%d", iComparison);
        printf("%d", iComparison2);
    }
}

我已经更新了我的代码,并试图考虑到你们推荐的许多方面,好消息是它现在运行。坏消息是它仍然试图打印一些我不理解的随机行话,它通常只是一组符号。这个函数比较的结构有六个成员,这就是第一个for循环中参数的原因。

1 个答案:

答案 0 :(得分:2)

你提出的代码是草率的聚宝盆。编程时,那不是很好。

  • 您忘记了struct sign_in定义和compare_names()函数定义的结束花括号
  • 您没有将iComparisson初始化为任何值。 flag已初始化,但iComparisson未初始化。而且,拼错了!
  • 不要将printf()与用户输入一起用作格式字符串,其中可能有%。至少做printf("%s", pname)。你可能也想要\n
  • strcmp()可能会在-1之前返回pName表示var[i].name排序(当然与之不同),因此while(iComparisson == 1)无法执行您想要的操作
  • 您需要知道var数组的长度并在结束前停止该循环
  • strcmp()接受字符串,它们是指针。当你调用strcmp(*pName, ...)时,你将pName“指向char的指针”解引用为“char”。这就像从pName字符串中获取第一个字符,然后将该字符值放在期望指向字符的值的位置。不好。 var[i].name的情况有点复杂,因为名字是一个数组,但摆脱了明星,它也不需要。
  • 如果while ()不匹配,第二个iPassCode循环将永远循环,您可能需要if ()
  • 在您的问题描述中省略了*var[i].password之后的结束反引号和“unaray的无效类型参数”之后的结束双引号,并且您显然也损坏了编译器错误消息。这使得你更难理解你写的是什么以及出了什么问题。
  • iPassCode == var[i].password实际上看起来很好。由于你的样本中存在所有其他荒谬的问题,这似乎很可能不是你遇到问题的代码......