2017-03-02 26 views
0

これは私の最初の投稿であり、C++の初心者です。私は、C++でデータを収集し、いくつかのデータを構造体に格納するフォームを表示する簡単なプログラムを作成しようとしています。この構造体は、構造体の配列を保持します。これはすべての学習のステップなので、私は批評に門を開いています。私はフォームを稼働していますが、いつでも私の構造体に何が含まれているかを確認することもできます。C++初心者、文字列を構造体に入れよう

は、ここに私の構造体

struct student 
{ 
    char firstName[30]; 
    char secondName[30]; 
    char addr1[30]; 
    char addr2[30]; 
    char postcode[30]; 
    int testScore; 
    int average; 
}; 

されており、ここで私はに苦しんでいスニペットコードです。

int gwtstat = 0; /* Get Window Status from "getwindowtext" function*/ 
student submit; 

gwtstat = GetWindowText(firstName, &submit.firstName[0], 30), 
gwtstat = GetWindowText(secondName, &submit.secondName[0], 30); 

//gwtstat = GetWindowText(addrLine1, &addrLine1Txt[0], 30); 
//gwtstat = GetWindowText(addrLine2, &addrLine2Txt[0], 30); 
//gwtstat = GetWindowText(addrLine3, &addrLine3Txt[0], 30); 
//gwtstat = GetWindowText(postcode, &postcodeTxt[0], 30); 
//gwtstat = GetWindowText(landlineNumber, &landlineTxt[0], 30); 
//gwtstat = GetWindowText(mobileNumber, &mobileTxt[0], 30); 

// This is what I am having problems with 
::MessageBox(hwnd, submit.firstName submit.secondName, "Submitted Structure", MB_OK); 
//cout << "First Name " << firstNameTxt << endl; /* Doesnt work in a Win32 application?*/ 

直接構造体にTextFieldを取得しても、デバッグログやメッセージボックスのいくつかの並べ替えで私の構造体に配置されたデータを観察する直接的な方法はありますか?

質問が間接的である場合は、私は完全にこれを達成するための最良の方法は何か、または可能であるかどうかはわかりません。

ありがとうございます!

+0

[OutputDebugString](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363362.aspx)。 – IInspectable

+0

['MessageBox'](https://msdn.microsoft.com/en-us/library/windows/desktop/ms645505(v = vs.85).aspx)のドキュメントをお読みになりましたか? –

+0

ブレークポイントを置き、デバッガを使用します。 –

答えて

0

実際には、フォームと構造体の情報を取得するためのより良い方法はありません。値を表示するために試してみてください。

char name[100]; 
sprintf_s(name, 100, "%s %s", submit.firstName, submit.secondName); 
::MessageBox(hwnd, name, "Submitted Structure", MB_OK); 

はまた、あなたが本当にあなたのGetWindowText()の呼び出しで[0]を必要としません。ポインタは文字列の最初の文字を指します。

編集:前述のように、submit.firstName&submit.firstName[0]のように動作するので、&も不要です。

+0

「&」を必要としないことを明示的に述べることもできます。つまり、 'submit.firstName'は'&submit.firstName [0] 'のように動作します。 – user888379

+0

質問はtagged [tag:C++]です。任意の配列境界を作る理由はなく、 'sprint'のような安全でない呼び出しを使用する理由もありません(私の知識では存在しません)。代わりに 'istringstream'を使い、' OutputDebugString'を使って情報をダンプしてください。侵入的なメッセージボックススタイルの「デバッグ」の必要はありません。 – IInspectable

+0

私は上記を編集して&についての示唆を含んでいます。あまりにもC#をやって、それを見落とした。@linspectable私はコードがより現代的なC + +を使用する必要があることに同意します。 sprintf_s()を使用するように私の応答を編集します。 –

関連する問題