何度もすみません。ご指導お願いします。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
C言語初心者

何度もすみません。ご指導お願いします。

#1

投稿記事 by C言語初心者 » 14年前

以下の文に16進数で入力:__,__,__,__,__エンターキーを入力すると16進数の値が10進数の値に変換され、10進数の値の小さい順に表示されます。
これを表示結果を16進数で表示したいのですが教えて頂けますか?比較は今までどおり10進数の値の小さい順で比較します。
#include <stdio.h>

int main (void)
{
char data[256];
int val[100];
int i = 0;
int work;
int j;
int k;

printf("入力 = ");
scanf("%s",data);
for(i=0;i<100;i++){
val = 0;
}
k=0;
for(i = 0;i<100 ; i++){
if(data == 0x00){//dataがNULLだったら処理を抜ける
k++;
break;//enterキーでprintf出力
}
else if(data == ','){//カンマだったら

/*printf("%d\n",k);*/
k++;
}
else{
if(data >= 'A' && data <= 'Z'){//dataにAからZが入ったら
val[k] = val[k] *16 + data -'A'+10;
}
else if(data >= '0' && data <= '9'){//data[i]に0から9が入ったら
val[k] = val[k] *16 + data[i] -'0';
}
}
}
/*printf("k=%d\n",k);
for(i=0;i<k;i++){

printf("出力 = %d\n",val[i]);
}
*/
//バブルソート//
for(j=0;j<k-1;j++)
{
for(i=0; i<k-1-j; i++)
{
if(val[i] < val[i+1])
{
}
else{
work = val[i];
val[i] = val[i+1];
val[i+1] = work;
}
}
}
for(i=0;i<k;i++)
{

printf("出力 = %d\n",val[i]);
}

}

アバター
bitter_fox
記事: 607
登録日時: 15年前
住所: 大阪府

Re: 何度もすみません。ご指導お願いします。

#2

投稿記事 by bitter_fox » 14年前

C言語初心者 さんが書きました:以下の文に16進数で入力:__,__,__,__,__エンターキーを入力すると16進数の値が10進数の値に変換され、10進数の値の小さい順に表示されます。
これを表示結果を16進数で表示したいのですが教えて頂けますか?比較は今までどおり10進数の値の小さい順で比較します。
取りあえずこちらから・・・

printfへのフォーマット指示子に%x(もしくは%X)を用いることで16進数表示できます。

コード:


#include <stdio.h>

int main()
{
	int n = 222;

	printf("%x\n%X\n%8x", n, n, n);

	return 0;
}

コード:

de
DE
      de
[hr][追記]
フォーマット指定子について
http://www.k-cube.co.jp/wakaba/server/format.html
http://www.geocities.jp/ky_webid/c/040.html
http://www.tamasoft.co.jp/lc/hlp/F056.html
[修正]
一番下の出力に誤りがあったので修正。
最後に編集したユーザー bitter_fox on 2011年5月31日(火) 21:23 [ 編集 1 回目 ]

non
記事: 1097
登録日時: 15年前

Re: 何度もすみません。ご指導お願いします。

#3

投稿記事 by non » 14年前

あれ、こっちはできてる。同じ内容で、別スレッドを立てて欲しくないなぁ。
non

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 何度もすみません。ご指導お願いします。

#4

投稿記事 by softya(ソフト屋) » 14年前

マルチポストは色々と迷惑がかかりますから避けて頂けると助かります。
「C言語のプログラミングについて質問です。 | OKWave」
http://okwave.jp/qa/q6777009.html
詳しくはフォーラムルールをお読み頂けると幸いです。
http://dixq.net/board/board.html
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
bitter_fox
記事: 607
登録日時: 15年前
住所: 大阪府

Re: 何度もすみません。ご指導お願いします。

#5

投稿記事 by bitter_fox » 14年前

C言語初心者 さんが書きました:

コード:

else{
	if(data[i] >= 'A' && data[i] <= 'Z'){//data[i]にAからZが入ったら
		val[k] = val[k] *16 + data[i] -'A'+10;
	}
	else if(data[i] >= '0' && data[i] <= '9'){//data[i]に0から9が入ったら
		val[k] = val[k] *16 + data[i] -'0';
	}
}
Zまで許容していますがそれだと16進数ではないのではないでしょうか?

ちなみに次で簡単に入力を受けることができます。

コード:


#include <stdio.h>

int main()
{
	int n[100];
	int i, max;

	for (i = 0; i < 100; i++)
	{
		if (scanf("%d,", &n[i]) != 1)
		{
			break;
		}
	}

	max = i;

	for (i = 0; i < max; i++)
	{
		printf("%d\n", n[i]);
	}

	return 0;
}


閉鎖

“C言語何でも質問掲示板” へ戻る