传递结构进行比较
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
表示 pName
在 var[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
实际上看起来不错。由于样本中的所有其他荒谬问题,这似乎不是您遇到问题的代码......
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
表示pName
在var[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
实际上看起来不错。由于样本中的所有其他荒谬问题,这似乎不是您遇到问题的代码......