Mar*_*hal 2 c++ console dev-c++
我刚刚开始使用C++并且有一些C#的经验,所以我总体上有一些编程经验.然而,似乎马上就被击落了.我试过在Google上寻找,以免浪费任何人的时间无济于事.
int main(int argc, char *argv[])
{
HANDLE hConsole;
int k = 5;
string h;
string password = "pass";
hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hConsole, k);
SetConsoleTextAttribute( GetStdHandle( STD_INPUT_HANDLE ), 0x5B );
while (h != password)
{
printf("This PC is locked\nEnter the password to gain access\n");
scanf("%s", &h);
}
printf("\n");
system("PAUSE");
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
每当我运行它,它将让我输入密码,当我点击输入它将确认然后崩溃要求我调试或发送信息给微软.当我添加while循环检查两个字符串时,这开始了.我是否正确地执行了此操作或者我错过了什么?
以防万一不清楚.我希望程序将字符串与输入进行比较,如果它们都相同,则程序将结束.
谢谢你的期待.
小智 5
你根本无法scanf()用来读书std::string.这是因为它scanf()是C API的一部分,并且它不支持非POD类型.在那里,%s格式说明符需要一个指向字符数组的指针,其大小足以保存该值(这是你无法保证的,这就是为什么scanf()甚至被认为是有害的),而你传递一个指向类型对象的指针std::string(远远不同于普通阵列).在这种情况下,一个好的编译器甚至会发出警告(如果不是错误,因为非POD类型不能通过va_list).你为什么不读入一个字符数组(C方式),或者用它std::cin来代替std::cin >> h;?
| 归档时间: |
|
| 查看次数: |
204 次 |
| 最近记录: |