Я пытаюсь обернуть голову вокруг струй и течений. Поэтому, как и всегда, я сделал из нее программу для входа. но каждый раз, когда я пытаюсь найти содержимое переменных имени пользователя и пароля, он возвращает адрес!
Назначение программы: создать смоделированный экран входа в систему с использованием входных и выходных потоков строк
код:
#include<iostream>
#include<string>
#include<conio.h>
#include<stdio.h>
#include<sstream>
using namespace std;
int main(int argv, char *argc[]){
char ch;
ostringstream username,
password;
ostringstream *uptr,
*pptr;
uptr = &username;
pptr = &password;
cout << "Welcome" << endl << endl;
cout << "Enter a username: ";
do{
ch = _getch();
*uptr << ch;
cout << ch;
}while(ch != '\r');cout << endl << "Enter a Password: ";
do{
ch = _getch();
*pptr << ch;
cout << "*";
}while(ch != '\r');
//if(username == "[email protected]" && password == "deadbeefcoffee10031995"){
cout << endl << "username: " << *username << endl << "password: " << *password << endl;
//} else {
//cout << endl << "ACCESS DENIED" << endl;
//}return 0;
}
Я пытался использовать * uptr и * pptr в последнюю очередь, но до этого я пытался просто писать и читать прямо из переменных.
ты должен использовать str
получить std::string
от ostringstream
так
cout << endl << "username: " << username.str() << endl << "password: " << password.str() << endl;
Стандартные потоки имеют операторы вывода для адресов: когда вы пытаетесь напечатать указатель, он просто распечатает адрес указателя. Кроме того, потоки имеют преобразование в указатель, который используется для указания того, находится ли поток в хорошем состоянии: когда он находится в хорошем состоянии, т.е. stream.fail() == false
, он преобразуется в подходящий ненулевой указатель, обычно просто this
, Когда он находится в состоянии отказа, он возвращается 0
(причина, по которой он не конвертируется в bool
должен избегать, например, std::cout >> i
быть действительным: если он будет преобразован в bool
этот код будет действительным).
Предполагая, что вы хотите напечатать содержимое потока строки, вы просто используете stream.str()
чтобы получить поток std::string
,