0

私は ostringstreams と istringstreams に頭を悩ませようとしています。というわけで、いつものようにログインプログラムを作ってみました。しかし、ユーザー名とパスワードの変数の内容を計算しようとするたびに、アドレスが返されます!

プログラムの目的: 入力および出力文字列ストリームを使用してシミュレートされたログイン画面を作成する

コード:

#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 を使用してみましたが、その前に、変数から直接書き込みと読み取りを試みました。

4

2 に答える 2

2

からstr取得するために使用する必要がありますstd::stringostringstream

それで

cout << endl << "username: " << username.str() << endl << "password: " << password.str() << endl;
于 2013-11-28T23:39:23.923 に答える
1

標準ストリームには、アドレスの出力演算子があります。ポインターを出力しようとすると、ポインターのアドレスだけが出力されます。さらに、ストリームには、ストリームが良好な状態にあるかどうかを示すために使用されるポインターへの変換があります。つまり、ストリームが良好な状態にある場合stream.fail() == false、適切な非 null ポインターに変換されます。通常はthis. 失敗状態にある場合は戻ります0(変換されない理由はbool、たとえば、有効であることを回避するためです。このコードにstd::cout >> i変換される場合は有効です)。bool

文字列ストリームのコンテンツを出力したいと仮定するとstream.str()、ストリームのstd::string.

于 2013-11-28T23:08:39.387 に答える