2011-09-12 8 views
0

C++でこれを行うことはできますか?C++のSscanf(値を読み込み、同時に割り当てる)

//int i,Data[]; 
//malloc Data[]; 

$sscanf(line,"Data[%d]=0x%d",i,Data[i]); 

Data []はint配列であり、私は1つのショットで読み込まれた 'i'の値に従ってランダムなインデックスを読み込もうとしています。

+0

関数に渡されるすべてのパラメータは、関数が呼び出される前に '完全に '評価されます。 –

答えて

4

あなたは、このようにそれを行うことができます。

int index, value; 
sscanf(line, "Data[%d]=%d", &index, &value); 
// Check if index is within bounds of the array here 
Data[index] = value; 

sscanf関数は、引数としてポインタを取るので、あなたが「&」を必要とします。

+0

ええ、それは私が最後に頼りにしたものです。一時変数を使用する。しかし、あなたは知っている...私は一時変数の大きなファンではない。 – Jean

-1

自分で試してみませんか?

sscanf(line, "Data[%d]=0x%d", &i, &Data[i]); 
それが動作するかどうか

すなわち(記録のために、それを、そうでない)あなたは自分の価値観へのポインタを渡す必要があることを忘れないでください、それはやってはるかに読みやすい/安全なコードになり別のコールで割り当て(iが配列の末尾よりも大きい場合はどうなるか?):

const int maxData = 10; 
int Data[maxData]; 

int i; 
int tmp; 
sscanf(line, "Data[%d]=0x%d", &i, &tmp); 

if(i >= maxData) 
{ 
    printf("Error! index was too big"); 
} 
else 
{ 
    Data[i] = tmp; 
} 

[編集]ダウン有権者@:私はそれは私がしようとしていた動作しません知っています営業担当者が自分のために試すように奨励する

+4

'sscanf'を呼び出す前に' Data [i] 'を評価しなければならないので、これはうまくいかないでしょう。 – ildjarn

関連する問題