传递结构进行比较

passing a structure for 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 循环中参数的原因。

您提供的代码是草率的聚宝盆。编程的时候,那真的不行。

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