入力された変数を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: 文字列にスペースを入れる方法
インデントを付けて投稿したプログラムが左詰めに
なっているのをおかしいとは思いませんか?
で囲って下さい。
[/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: 文字列にスペースを入れる方法
ちょっと訂正。スペースが余計についていました。
main() の char a[37]; を char a[36]; に、
sub() の *pbuf = 0; を pbuf[-1] = 0; に修正してください。
main() の char a[37]; を char a[36]; に、
sub() の *pbuf = 0; を pbuf[-1] = 0; に修正してください。
Re: 文字列にスペースを入れる方法
過回答ありがとうございます。 c言語初心者で全然知識もありません。 codeと/codeで囲ってとはどのようにすれば良いでしょうか。 ルールを見ても分かりませんでした。 ちなみに回答頂いたプログラムコードを見ましたが、スペースキーをdo whileで条件処理を、しているのは分かりましたが、内容が分からなかったです。 少し詳しく教えて頂けないでしょう。 よろしくお願いいたします。
Re: 文字列にスペースを入れる方法
投稿するときのページの右側に BBCode: ON というのがあります。111 さんが書きました:codeと/codeで囲ってとはどのようにすれば良いでしょうか。 ルールを見ても分かりませんでした。
その BBCode をクリックしてそこの内容をよく読んでみてください。
do while は確かにわかりにくいですね。111 さんが書きました: ちなみに回答頂いたプログラムコードを見ましたが、スペースキーを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;
}
(i & 7) == 0 を i % 8 == 0 に変更しました。
*pbuf++ = や (a >> i & 1) の意味は自分で
調べてみてください。それでも分からなければ、
何をどう調べたのをか書いてもらえれば、説明します。
Re: 文字列にスペースを入れる方法
投稿された記事の右上にある「引用」というボタンを押すと、111 さんが書きました:codeと/codeで囲ってとはどのようにすれば良いでしょうか。 ルールを見ても分かりませんでした。
投稿の「ソースコード」(に引用タグを追加したもの)が見られるので、参考にしてみてください。
テスト用
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)