C++;字符串!=一串 我刚刚开始C++,有一些C语言的经验,所以我有一些编程经验。然而,我似乎马上就被击落了。我试着在谷歌上搜索,这样就不会浪费任何人的时间,但毫无效果 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; }

C++;字符串!=一串 我刚刚开始C++,有一些C语言的经验,所以我有一些编程经验。然而,我似乎马上就被击落了。我试着在谷歌上搜索,这样就不会浪费任何人的时间,但毫无效果 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; },c++,console,dev-c++,C++,Console,Dev C++,每当我运行此程序时,它都会让我输入密码,当我单击“输入”时,它会确认,然后崩溃,要求我调试或向Microsoft发送信息。这是在我添加while循环检查两个字符串时开始的。我是否正确地执行了此操作,还是遗漏了什么 以防万一还不清楚。我想让程序比较一个字符串和一个输入,如果它们都是相同的程序将结束 感谢您的关注。您根本无法使用读取std::string。这是因为scanf()是C API的一部分,它不支持非POD类型。在那里,%s格式说明符需要一个指向字符数组的指针,其大小足以容纳该值(这是您无法

每当我运行此程序时,它都会让我输入密码,当我单击“输入”时,它会确认,然后崩溃,要求我调试或向Microsoft发送信息。这是在我添加while循环检查两个字符串时开始的。我是否正确地执行了此操作,还是遗漏了什么

以防万一还不清楚。我想让程序比较一个字符串和一个输入,如果它们都是相同的程序将结束


感谢您的关注。

您根本无法使用读取
std::string
。这是因为
scanf()
是C API的一部分,它不支持非POD类型。在那里,
%s
格式说明符需要一个指向字符数组的指针,其大小足以容纳该值(这是您无法真正保证的,这就是为什么
scanf()
甚至被认为是有害的),而您向它传递一个指向类型对象的指针(这与普通数组相差甚远)。在这种情况下,一个好的编译器甚至会发出警告(如果不是错误,因为非POD类型不能通过
va_list
)。为什么不读入字符数组(C方式),或者使用类似于
std::cin>>h

<P>1/C++中的许多初学者,实际上是在编写C代码。 在C++中查找有关输入/输出的文档。
2/如何编译代码?您的错误应该已被编译器捕获

正如chris所建议的,此程序可以通过使用正确的函数来简化:

#include <iostream>
#include <string>

int main()
{
    std::string password = "pass", input;

    do
    {
        std::cout << "This computer is locked."
                  << "Enter the password to gain access: ";
        std::cin >> input;
    } while (input != password);

    std::cout << "Welcome!" << std::endl;
    system("PAUSE");

    return 0;
}
#包括
#包括
int main()
{
std::string password=“pass”,输入;
做
{
std::cout输入;
}while(输入!=密码);

std::不能对C字符串使用
scanf
,尤其不能对
std::string
使用
std::cin
(如果需要,与
std::getline
结合使用)谢谢你的反馈。有趣的是我从视频教程中得到了答案——只是证明了互联网是最坏的来源,也是最好的。“真的。看看。你可能会发现一些有用的东西。”马歇尔,好奇地说,哪一个教程?目前使用DEVC++——免费的C++ IDE和新闻F9来编译和运行程序。@文森tB编译器无法检测到错误类型的地址被传递到
scanf()
!程序将按照OP所述编译、运行和崩溃。感谢提醒。至少VS2010编译器警告我:警告C4996:“scanf”:此函数或变量可能不安全。