2

ここで私を助けてくれることを願っています。過去 3 週間に私が行ってきたことは、3 つの変数 (「-」または「+」記号を含む 1 つの文字変数と、温度測定値を含む他の 2 つの整数変数) の内容を表示しようとすることです。 + 26.3 のような TEdit コントロールでこれらの変数の内容を表示するために id を実行しようとしています。そのような単純な。

いくつかの機能を試しましたが成功しませんでした。

(ここで、temp_txtBox_Cond は TEdit コントロールの名前です)

temp_txtBox_Cond->Text=(L"%c %i. %i",temp_sign,temp_temp_int,temp_temp_dec,test_buf,n);

temp_txtBox_Cond->Text.printf(L"%c %i. %i",temp_sign,temp_temp_int,temp_temp_dec);

sprintf(test_buf,"%c %i.%i",temp_sign,temp_temp_int,temp_temp_dec);
temp_txtBox_Cond ->Text.sprintf(L"%c %i.%i",temp_sign,temp_temp_int,temp_temp_dec,test_buf);

temp_txtBox_Cond->Text=("%c %i. %i",temp_sign,temp_temp_int,temp_temp_dec);

temp_txtBox_Cond->Text = AnsiString(temp_sign,temp_temp_int,temp_temp_dec);

temp_txtBox_Cond->Text = (AnsiString(temp_sign)+AnsiString(temp_temp_int)+AnsiString    (temp_temp_dec));

String s(temp_sign);
String d(temp_temp_dec);
String i(temp_temp_int);

temp_txtBox_Cond->Text = s+" "+i+"."+d;

成功なし。これは非常にイライラします。

みんなあなたの助けが必要です。ありがとうございます。


0上記の機能のほとんどで、+0.0またはhq3Pˆ15PPhå(これはメモリの問題のように聞こえます)になるため、ちょっと奇妙です。披露させて :

と :

temp_txtBox_Cond->Text = (L"%c %i.%i",temp_sign,temp_temp_int,temp_temp_dec,test_buf);

私は得る:hq3Pˆ15PPhå

と :

temp_txtBox_Cond->Text.printf(L"%c %i. %i",temp_sign,temp_temp_int,temp_temp_dec);

テキストボックスが空白です

と :

sprintf(test_buf,"%d. %d",temp_temp_int,temp_temp_dec);
temp_txtBox_Cond->Text =(test_buf,"%c %d. %d",temp_sign,temp_temp_int,temp_temp_dec);`

私は0を取得します。

と :

temp_txtBox_Cond->Text =("%c %d. %d",temp_sign,temp_temp_int,temp_temp_dec);`

私も0になります。

と:

temp_txtBox_Cond->Text = AnsiString(temp_sign,temp_temp_int,temp_temp_dec): I got +0.0

それらはエラーです。

こんにちはレミー、

もちろん問題ありません。これは、temp_sig、temp_temp_int、および temp_temp_dec を取得するために使用するコードです。

 WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
{    
ikor_msg_id = ikor_id_bld (app_priority, zone, dest_UCP, 0x20, 0x03);
wait_for_msg(h, 0x5200, 500, data);
if (data[0] == 1)
{
temp_sign = '+';
}
else if (data[0] == 0)
{
temp_sign = '-';
}
else
{
temp_sign = '?';
}

temp_temp_int = data[1];
temp_temp_int <<= 8;
temp_temp_int += data[2];
temp_temp_dec = temp_temp_int;
temp_temp_int /= 10;
temp_temp_dec -= (temp_temp_int * 10);
}

ここでデータを表示しようとしています:

void __fastcall TForm1::temp_txtBox_CondChange(TObject *Sender )
{
unsigned long ikor_msg_id = 0;
long ikor_id_bld( long p_temp, long z_temp, long d_temp, int m_temp, int s_temp);
int wait_for_msg(CANHANDLE handle,int id,int timeout,unsigned char *data);
CANHANDLE h;
unsigned char data [8];

/***Here is where i tried all the attempts that I posted ****/

}

そして、ヘッダーで宣言した変数:

#ifndef __Variables_Cond__
#define __Variables_Cond__

#ifdef __cplusplus
extern "C" {
#endif



unsigned int temp_temp_int;
unsigned int temp_temp_dec;
unsigned char temp_sign;


#ifdef __cplusplus

} #endif

#endif    
4

2 に答える 2

2

次のことをお勧めします。

    TCHAR temp_buf[256];
    wsprintf(temp_buf, _T("%c %d.%d"), temp_sign, temp_temp_int, temp_temp_dec);

    temp_txtBox_Cond->Text = temp_buf;
于 2012-06-25T13:35:40.070 に答える
0

あなたの試みはあなたが試みていることに対して間違っているので、あなたは間違った結果を得ています.そしてそれらのほとんどは同じ根本的な問題から生じています-あなたは,演算子を誤用しています. permeter リストではなく式では、,演算子は両側で演算を実行し、演算子の結果は右側の演算の結果です。式で複数の操作を連鎖,させて、実際にはそうではない結果になることを期待しています。

temp_txtBox_Cond->Text = (L"%c %i.%i",temp_sign,temp_temp_int,temp_temp_dec,test_buf);

これは実質的に次のものと同じです。

L"%c %i.%i"; // no-op
temp_sign; // no-op
temp_temp_int; // no-op
temp_temp_dec; // no-op
temp_txtBox_Cond->Text = test_buf;     

hq3Pˆ15PPhåの内容はtest_buf事前に初期化されていないため取得できません。

temp_txtBox_Cond->Text.printf(L"%c %i.%i",temp_sign,temp_temp_int,temp_temp_dec);

これは実質的に次のものと同じです。

String temp = temp_txtBox_Cond->Text;
L"%c %i. %i"; // no-op
temp_sign; // no-op
temp_temp_int; // no-op
temp_temp_dec; // no-op
temp.printf(temp_temp_dec);     

プロパティに何も割り当てていないため、空の結果が得られますText。プロパティを読み取ってから、返された一時をText呼び出していますが、後でそれをプロパティに割り当てていません。printf()StringStringText

sprintf(test_buf,"%d.%d",temp_temp_int,temp_temp_dec);
temp_txtBox_Cond->Text =(test_buf,"%c %d. %d",temp_sign,temp_temp_int,temp_temp_dec);

これは実質的に次のものと同じです。

sprintf(test_buf, "%d. %d", temp_temp_int, temp_temp_dec);     
test_buf; // no-op
"%c %d. %d"; // no-op
temp_sign; // no-op
temp_temp_int; // no-op
temp_txtBox_Cond->Text = temp_temp_dec;

なぜなら、そもそも 0"0"であるからです(デバッガーに表示されていると思われるにもかかわらず)。Texttemp_temp_dec

temp_txtBox_Cond->Text =("%c %d. %d",temp_sign,temp_temp_int,temp_temp_dec);`

これは実質的に次のものと同じです。

"%c %d. %d"; // no-op
temp_sign; // no-op
temp_temp_int; // no-op
temp_txtBox_Cond->Text = temp_temp_dec;

上記と同じ結果です。

temp_txtBox_Cond->Text = AnsiString(temp_sign,temp_temp_int,temp_temp_dec)

これは実質的に次のものと同じです。

temp_sign; // no-op
temp_temp_int; // no-op
temp_txtBox_Cond->Text = AnsiString(temp_temp_dec);

これは"0"再び発生します。そのコードで "+0.0"に入る方法はありません。Text

以上のことから、代わりに次のいずれかを使用してください。

Char temp_sign = L'+'; // note: upper 'C'har = "%c"
int temp_temp_int = 26;
int temp_temp_dec = 3;
temp_txtBox_Cond->Text = String().sprintf(L"%c %i.%i", temp_sign, temp_temp_int, temp_temp_dec); 

.

char temp_sign = '+'; // note: lower 'c'har = "%hc"
int temp_temp_int = 26;
int temp_temp_dec = 3;
temp_txtBox_Cond->Text = String().sprintf(L"%hc %i.%i", temp_sign, temp_temp_int, temp_temp_dec); 

.

Char temp_sign = L'+'; // or lower-case 'c'har, doesn't matter
int temp_temp_int = 26;
int temp_temp_dec = 3;
temp_txtBox_Cond->Text = Format(L"%s %i.%i", ARRAY_OF_CONST(( temp_sign, temp_temp_int, temp_temp_dec )) ); 

.

Char temp_sign = L'+'; // note: upper 'C'har = "%C"
int temp_temp_int = 26;
int temp_temp_dec = 3;
char test_buf[24];
sprintf(test_buf, "%C %i.%i", temp_sign, temp_temp_int, temp_temp_dec); 
temp_txtBox_Cond->Text = test_buf; 

.

char temp_sign = '+'; // note: lower 'c'har = "%c"
int temp_temp_int = 26;
int temp_temp_dec = 3;
char test_buf[24];
sprintf(test_buf, "%c %i.%i", temp_sign, temp_temp_int, temp_temp_dec); 
temp_txtBox_Cond->Text = test_buf; 

.

Char temp_sign = L'+'; // or lower 'c'char, doesn't matter
int temp_temp_int = 26;
int temp_temp_dec = 3;
temp_txtBox_Cond->Text = String(temp_sign) + L" " + String(temp_temp_int) + L"." + String(temp_temp_dec); 
于 2012-06-26T05:34:04.077 に答える