2011-01-27 19 views
0

16進アドレスとビット数の2つの入力を取得する必要があります。次に、インデックスのインデックスとアドレスのオフセットを出力する必要があります。基本的なCの入力と出力に必要なヘルプ

したがって、入力が20および0x0FF10100の場合、出力はインデックスの場合は0x0FF1、オフセットの場合は0100になります。

int bits, index, offset, count; 
short addr[10], addr2; 


printf("# of bits: "); 
scanf("%d", &bits); 

index = (bits/4) + 2; 
offset = 10 - index; 

printf("Integer (in hex): "); 
scanf("%hi", addr); 

それから出力するアドレスの最初の7つの文字を意味している指標(4分の20)+2 = 7を必要とします。残りは相殺されます。

私は何度も試したprintfを使用できませんでした。しかし、私は誰かが助けてくれることを願って修復できませんでした

ありがとうございました。私はそれが何をプリントアウトしていない

while (count < index) 
{ 
    printf("", addr[count], addr[count]); 
    count++; 
} 

を使用しようとした出力の場合

...

は、私はそれの多くのバリエーションを試してみましたが、私はエラーを得ました。私は

おかげ

+1

あなたはprintfを使用できなかったということを意味しますか?ソースコードがコンパイルされないことを意味しますか? – jwir3

+0

は意味がないことを意味することによってそれは明らかではありません..私は試みましたが、エラーが発生しました – bubdada

+0

@TipiTip:コンパイルエラー?投稿してください。 –

答えて

0

は、たぶん私は何かが欠けていますが、あなたのprintfの呼び出しではなく、フォーマット文字列の空の文字列を使用します。..出力に使用するかを知りません。様々な書式指定子hereを見ることができます。

0

入力を使用する場合は、常に戻り値scanfを確認してください。正常にスキャンされたアイテムの数が返されます。戻り値を無視すると、不確定な値を読み取る危険があります。これは、プログラムに未定義の動作があることを意味します。

また、scanfにあなたの2番目の呼び出しでは、あなたが進整数を求めていない、あなたは(hが短いこと、およびiは整数を意味する)短整数を求めています。 16進の短い整数をスキャンする場合はhxを使用する必要がありますが、これはのアドレスを提供する必要があることを意味します。shortではなく平文です。

int bits, index, offset, count; 
unsigned short addr[10], addr2; 

printf("# of bits: "); 
if (scanf("%d", &bits) != 1) 
{ 
    // could not scan 
    // handle scan error here. Exit, or try again, etc. 
} 

index = (bits/4) + 2; 
offset = 10 - index; 

printf("Integer (in hex): "); 
if (scanf("%hx", addr) != 1) 
{ 
    // could not scan 
    // do whatever makes sense on scan failure. 
} 

あなたaddr配列の連続した要素に読んでいる場合は、代わりに次のことがあります:

printf("Integer (in hex): "); 
if (scanf("%hx", &addr[count]) != 1) 
{ 
    // could not scan 
    // do whatever makes sense on scan failure. 
} 

最後にprintfの使用に関する:printfへの最初の引数はどのように印刷するよう指示します提供されたデータ空の文字列を指定しました。つまり、printfには何も印刷されません。おそらく、あなたは次のようなものを探しています:

printf("%d: %hx", count, addr[count]); 
関連する問題