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循环中参数的原因。
答案 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
实际上看起来很好。由于你的样本中存在所有其他荒谬的问题,这似乎很可能不是你遇到问题的代码......