掲示板ランキング  インターネット・Web開発(通信・メール)


掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板1

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧

No.6627

2次元配列と文字列
投稿者---yura(2006/10/09 10:28:22)


いつもお世話になってます.
パソコンはWindows XP でC言語です.
今,2次元配列に2進数でできた文字列をコマンドプロンプトからscanfで読み取り代入させていこうと思っています.
以下のプログラムを見てください.

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

#define MAX_POP_SIZE 200 /* 最大個体数 */
#define MAX_GENE_SIZE 50 /* 想定する最大染色体長 */
unsigned char genotype[MAX_POP_SIZE][MAX_GENE_SIZE];

void main()
{
int i, j; /* ループ変数 */
int pop_size = 16;
int gene_size = 16;

printf("データを入力してください:");

scanf("%s",genotype[0]);

for ( i = 0; i < pop_size; i ++ ){
for ( j = 0; j < gene_size; j ++ ){
genotype[i][j] = genotype[0][j];
}
}
}

ここまでは自分で作ってみたのですがうまく動きません.
入力する文字列は例えば"1011001010101010"などの2進数16ビットです.
ここでprintfを使って genotype[0][1] は 0 と出力されるようにしたいです.よろしくお願いします.


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> 訂正です. 6628 yura 2006/10/09 11:15:58


No.6628

訂正です.
投稿者---yura(2006/10/09 11:15:58)


文字列ではなく普通に1と0の数字を読むようにしたいです.
つまりprintfのとき%dで出力されるようにしたいです.
誰かご教授ください!!



この投稿にコメントする

削除パスワード

No.6629

Re:訂正です.
投稿者---shu(2006/10/09 12:44:50)


訂正したことによって、情報として前に書いたプログラムが役に立たなくなりました。

>文字列ではなく普通に1と0の数字を読むようにしたいです.
>つまりprintfのとき%dで出力されるようにしたいです.

としたいことを書かれても、これといって参考にする情報がありません。
もう一度新しくプログラムを書きなおしてみてください。

一応、入力は2進数ということは解かります。
出力したいのは、2進数のある桁ですか?


この投稿にコメントする

削除パスワード

No.6632

Re:訂正です.
投稿者---yura(2006/10/09 13:10:29)


>もう一度新しくプログラムを書きなおしてみてください。

#include&lt;stdio.h&gt;
#include&lt;stdlib.h&gt;
#include&lt;math.h&gt;

#define MAX_POP_SIZE 200 /* 最大個体数 */
#define MAX_GENE_SIZE 50 /* 想定する最大染色体長 */
unsigned char genotype[MAX_POP_SIZE][MAX_GENE_SIZE];

/* 染色体を初期化する */
void main()
{
int i, j; /* ループ変数 */
int pop_size = 16;
int gene_size = 16;

printf(&quot;データを入力してください:&quot;);

/*データ読み込む,ここがよくわかりません*/
scanf(&quot;%d&quot;,&amp;genotype[0]);

/*全てi列に代入する*/
for ( i = 0; i &lt; pop_size; i ++ ){
for ( j = 0; j &lt; gene_size; j ++ ){
genotype[i][j] = genotype[0][j];
}
}

/*出力する,ここは絶対にこれであってます*/
for ( i = 0; i &lt; pop_size; i ++ ){
for ( j = 0; j &lt; gene_size; j ++ ){
printf(&quot;%d&quot;,genotype[i][j]);
}putchar('\n');
}
}

>出力したいのは、2進数のある桁ですか?
一応全ての2進数を出力したいのですが,出力方法が上記プログラムでやりたいのです.したがって,あるbit(桁)目の数字を出力すると同じことになります.


この投稿にコメントする

削除パスワード

No.6633

Re:訂正です.
投稿者---shu(2006/10/09 13:28:57)


数値で入力しようとすると、連続入力できない。
文字列で入力すると、上位に詰めるように桁がずれます。

入力は文字列で行い、
桁のずれを修正して、
あえて変えたくない出力方法を、

printf("%d", genotype[i][j] - '0');


と変更する。

という方法を提案します。


この投稿にコメントする

削除パスワード

No.6634

Re:訂正です.
投稿者---yura(2006/10/09 14:26:12)


printf("%d", genotype[i][j] - '0');

という手法を始めて見ました。勉強になりました。ありがとうございます。

この手法は使えば
genotype[i][j] = genotype[i][j] - '0';

とやって数値として代入することも可能ですよね?


この投稿にコメントする

削除パスワード

No.6635

Re:訂正です.
投稿者---επιστημη(2006/10/09 14:44:25)


> genotype[i][j] = genotype[i][j] - '0';
> とやって数値として代入することも可能ですよね?

訊くまでもない。やってみりゃわかる。



この投稿にコメントする

削除パスワード

No.6636

Re:訂正です.
投稿者---yura(2006/10/09 14:52:32)


shuさん、επιστημηさん
ありがとうございました!!


この投稿にコメントする

削除パスワード

No.6630

Re:訂正です.
投稿者---επιστημη(2006/10/09 12:51:32)


>つまりprintfのとき%dで出力されるようにしたいです.

printf("%d",...)によって一気に500桁、ですか?
それは無理というもの。



この投稿にコメントする

削除パスワード

No.6631

Re:訂正です.
投稿者---yura(2006/10/09 13:00:59)


>printf("%d",...)によって一気に500桁

いえ,実際にはfor文で出力します.
for ( i = 0; i &lt; pop_size; i ++ ){
for ( j = 0; j &lt; gene_size; j ++ ){
printf(&quot;%d&quot;,genotype[i][j]);
}putchar('\n');
}
って感じで,あるgenotype[i][j]で一つの数字0か1を出力するようにしたいのです.


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧





掲示板提供:(有)リアル・インテグリティ