Я пытаюсь обернуть голову вокруг ostringstream и istringstream. Поэтому, как я всегда это делаю, я сделал из него входную программу. но каждый раз, когда я пытаюсь отключить содержимое переменных имени пользователя и пароля, он возвращает адрес!
Назначение программы: создание имитируемого экрана входа в систему с использованием входных и выходных строк
код:
#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 last, но до этого я пробовал просто писать и читать прямо из переменных.
вы должны использовать 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
.
username.str()