You simply cannot use scanf()
to read into std::string
. This is because scanf()
is part of C API and it does not support non-POD types. There, %s
format specifier expects a pointer to character array with size enough to hold the value (which you cannot really guarantee and that's why scanf()
is even considered harmful) whereas you pass it a pointer to object of type std::string
(which is far, far different from a plain array). A good compiler would even issue a warning in this case (if not an error, because non-POD types cannot be passed through va_list
). Why don't you read into a character array (the C way), or use std::cin
instead like std::cin >> h;
?
Question
I have just started C++ and have some experience with C# so I have some programming experience in general. However, seems like straight away I have been shot down. I have tried looking on Google so not to waste anyone's time to no avail.
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;
}
Whenever I run this it will get me to enter the password and when I click enter it will acknowledge and then crash asking me to either debug or send information to Microsoft. This started when I added the while loop checking two strings. Have I executed this correctly or have I missed something?
Just in case its not clear. I want the program to compare a string with an input and if they are both the same the program will end.
Thanks for looking.
Solution
OTHER TIPS
As chris suggested, this program can be simplified by using the correct functions:
#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;
}
1/ As many beginners in C++, you are actually writing C code. Look for documentation about input/ouput in C++.
2/ How do you compile your code? Your error should have been caught by the compiler