Почему это возвращает адрес в консоли?

Я пытаюсь обернуть голову вокруг струй и течений. Поэтому, как и всегда, я сделал из нее программу для входа. но каждый раз, когда я пытаюсь найти содержимое переменных имени пользователя и пароля, он возвращает адрес!

Назначение программы: создать смоделированный экран входа в систему с использованием входных и выходных потоков строк

код:

#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 == "graywolfmedia25@gmail.com" && password == "deadbeefcoffee10031995"){
    cout << endl << "username: " << *username << endl << "password: " << *password << endl;
//} else {
    //cout << endl << "ACCESS DENIED" << endl;
//}



return 0;
}

Я пытался использовать * uptr и * pptr в последнюю очередь, но до этого я пытался просто писать и читать прямо из переменных.

2 ответа

Решение

Ты должен использовать 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,

Другие вопросы по тегам