2016-04-21 111 views
-2
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

你可以发布struct sign_in的定义吗? 'iComparisson,flag = 1;','while(iComparisson == 1)'后面的' –

+0

'是未定义的行为,使用具有自动存储持续时间的对象的值而不确定。 – EOF

+0

添加了定义 – JMBTaylor

回答

2

你提出的代码是一个马虎的马屁精。编程时,这不是真的。

  • 你忘了struct sign_in定义和compare_names()函数定义
  • 你没有初始化iComparisson任何值右大括号。 flag已初始化,但iComparisson不是。另外,拼写错误!
  • 请勿使用printf(),并将用户输入作为格式字符串,其中可能有%。至少做printf("%s", pname)。你也可能想要一个\n
  • strcmp()可能返回-1var[i].name前平均pName排序(并不同于其当然的),所以while(iComparisson == 1)不会做你希望
  • 你需要知道var数组的长度,并在运行之前停止循环off end
  • strcmp()需要字符串,它们是指针。当你打电话给strcmp(*pName, ...)时,你将pName“指向char的指针”解除引用为“char”。这就像获取pName字符串中的第一个字符,然后将该字符值放在需要指向字符值的位置。不好。 var[i].name的情况稍微复杂一些,因为name是一个数组,但是除掉星号,它不是必需的。
  • 第二while()循环将永远循环下去,如果iPassCode不匹配,你可能想if()
  • 在你的问题说明你忽略*var[i].password后闭幕反引号后“的unaray无效的类型参数”右双引号,而且你明显也会损坏编译器错误信息。这使得你很难理解你写的和错误。
  • iPassCode == var[i].password实际上看起来不错。这似乎很可能,这不是你有问题的代码,因为你的示例中的所有其他荒谬问题...
+0

我想我做了大部分您推荐的更改并更新了我的代码。 – JMBTaylor

+0

在您的最新版本中,每个if()块中额外的'i ++'都没有意义,您应该删除它们。但是,如果有人使用其他用户的用户名和密码,则您认为它会成功登录。 – Pierce