ページ 11

文字列にスペースを入れる方法

Posted: 2014年10月12日(日) 15:24
by 111
入力された変数を32bit表記の文字列にし、左にシフトしていくプログラムコードを作っています。
現在出力した時に
(例) 変数の値が5の場合
00000000000000000000000000000101
00000000000000000000000000001010

上記のような出力になりますがこれを

00000000 00000000 00000000 00000101
00000000 00000000 00000000 00001010

8bitずつに設定した出力方法にしたいです。

ループ処理の回数から9を割って出せばいいのかと考えていますが答えが出ません。教えて頂けないでしょうか?

#include<stdio.h>

void sub(unsigned int a, char *pbuf);

void main(void)

{


char a[33];
int c = 0;
int d = 0;

scanf_s("%d", &c);

sub(c, a);

printf("%s\n", a);

for (d = 0; d <= 31; d++)

{

c = (c << 1);

sub(c, a);

printf("%s\n", a);

}
}

void sub(unsigned int a, char *pbuf)

{

int amari = 0;
int i;

for (i = 32; i >= 0; i--)
{

if (a < 1)
{
pbuf = '0';
}

else
{

amari = a % 2;
a = a / 2;

}

if (amari == 1)

{

pbuf = '1';

}

else
{

pbuf = '0';

}



}
pbuf[33] = '\0';
}

Re: 文字列にスペースを入れる方法

Posted: 2014年10月12日(日) 16:00
by かずま
インデントを付けて投稿したプログラムが左詰めに
なっているのをおかしいとは思いませんか?

コード:

フォーラムルールはこちら  ※コードを貼り付ける場合は [code] と 
で囲って下さい。
[/code]というのが目に入りませんか?

コード:

#include <stdio.h>

void sub(unsigned int a, char *pbuf);

int main(void)
{
    char a[37];
    int c = 0;
    int d = 0;

    if (scanf("%d", &c) != 1) return 1;
    for (d = 0; d < 32; d++) {
        sub(c, a);
        printf("%s\n", a);
        c <<= 1;
    }
    return 0;
}

void sub(unsigned int a, char *pbuf)
{
    int i = 32;
    do {
        *pbuf++ = a >> --i & 1 | '0';
        if ((i & 7) == 0) *pbuf++ = ' ';
    } while (i);
    *pbuf = 0;
}

Re: 文字列にスペースを入れる方法

Posted: 2014年10月12日(日) 16:18
by かずま
ちょっと訂正。スペースが余計についていました。
main() の char a[37]; を char a[36]; に、
sub() の *pbuf = 0; を pbuf[-1] = 0; に修正してください。

Re: 文字列にスペースを入れる方法

Posted: 2014年10月12日(日) 17:21
by 111
過回答ありがとうございます。 c言語初心者で全然知識もありません。 codeと/codeで囲ってとはどのようにすれば良いでしょうか。 ルールを見ても分かりませんでした。 ちなみに回答頂いたプログラムコードを見ましたが、スペースキーをdo whileで条件処理を、しているのは分かりましたが、内容が分からなかったです。 少し詳しく教えて頂けないでしょう。 よろしくお願いいたします。

Re: 文字列にスペースを入れる方法

Posted: 2014年10月12日(日) 18:27
by かずま
111 さんが書きました:codeと/codeで囲ってとはどのようにすれば良いでしょうか。 ルールを見ても分かりませんでした。
投稿するときのページの右側に BBCode: ON というのがあります。
その BBCode をクリックしてそこの内容をよく読んでみてください。
111 さんが書きました: ちなみに回答頂いたプログラムコードを見ましたが、スペースキーをdo whileで条件処理を、しているのは分かりましたが、内容が分からなかったです。
do while は確かにわかりにくいですね。
for文に書き換えてみました。

コード:

void sub(unsigned int a, char *pbuf)
{
    int i;
    for (i = 31; i >= 0; i--) {
        *pbuf++ = (a >> i & 1) + '0';
        if (i % 8 == 0) *pbuf++ = ' ';
    }
    pbuf[-1] = 0;
}
また、ビット演算を減らして、| '0' を + '0' に、
(i & 7) == 0 を i % 8 == 0 に変更しました。
*pbuf++ = や (a >> i & 1) の意味は自分で
調べてみてください。それでも分からなければ、
何をどう調べたのをか書いてもらえれば、説明します。

Re: 文字列にスペースを入れる方法

Posted: 2014年10月13日(月) 10:43
by みけCAT
111 さんが書きました:codeと/codeで囲ってとはどのようにすれば良いでしょうか。 ルールを見ても分かりませんでした。
投稿された記事の右上にある「引用」というボタンを押すと、
投稿の「ソースコード」(に引用タグを追加したもの)が見られるので、参考にしてみてください。

テスト用

コード:

#include <stdio.h>

int main(void) {
    puts("Hello World");
    return 0;
}