我在编译此源时遇到问题。 这是我的来源:
#include <iostream>
#include <string>
using namespace std;
char pass[7],d;
int v;
int isvalid(char pass);
int main(int argc, char** argv) {
cout<<"Enter Password :";
gets(pass);
cout<<endl;
v=isvalid (pass);
if(v==1){
cout<<"The Password is Correct . You can Come in"<<endl;
}
else{
cout<<"The Password in InCorrect ! You Can't Come In"<<endl;
}
system("PAUSE");
return 0;
}
/*-----------Functions--------------*/
int isvalid(char pass){
d="Pokerface";
if(pass==d){
return 1;
}
else{
return 0;
}
}
应该从用户那里获取密码并使用isvalid函数检查它并说它是否正确但是编译器(DEV C ++ 5)向我显示了这些错误:
In function 'int main(int, char**)':
14 17 [Error] invalid conversion from 'char*' to 'char' [-fpermissive]
8 5 [Note] initializing argument 1 of 'int isvalid(char)'
In function 'int isvalid(char)':
26 3 [Error] invalid conversion from 'const char*' to 'char' [-fpermissive]
28 recipe for target 'main.o' failed
有什么问题?请帮帮我。
答案 0 :(得分:2)
由于您已将C ++标记为此问题,我建议您使用std::string
#include <iostream>
#include <string>
using namespace std;
bool isvalid(const std::string & pass);
int main(int argc, char ** argv) {
string pass;
cout << "Enter Password" << endl;
cin >> pass;
if (isvalid(pass))
cout << "The Password is Correct. You can Come in" << endl;
else
cout << "The Password in InCorrect ! You Can't Come In" << endl;
return 0;
}
bool isvalid(const std::string & pass) {
return pass == "Pokerface";
}
答案 1 :(得分:1)
pass
是一个char(char *
)数组,您的isvalid
函数将char
作为第一个参数。我怀疑你想要改变你的isvalid
函数,以便它需要char*
作为参数,如下所示:
int isvalid(char* pass){
另外,请记住:执行此操作时:
if (pass==d)
你不是在比较字符串,而是指针。如果你想检查两个字符串是否相同,那就不行了
对于字符串比较,请使用strcmp(str1, str2)
中的string.h
。
答案 2 :(得分:0)
int isvalid(char pass)
你可能想在那里接受char*
,但你不应该这样做:改为使用std::string
。此外,您的函数应返回bool
而不是int
。
bool isvalid(const std::string& pass)
然后,您应该将pass
和d
更新为std::string
并使用std::cin
代替gets
来阅读stdin
。 pass
或d
没有理由成为全局变量,因此请将它们作为函数的本地变量。
如果你保持你的功能为char*
你的比较将无效,因为你只是比较指针。你需要strncmp
。