質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

3回答

2621閲覧

十進数から二進数、二進数から十進数にするプログラム

haigasu

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2020/05/28 13:02

編集2020/05/28 13:34

進数変換でまず、十進数か二進数かを選んだ後、十進数の場合は二進数へ、二進数の場合は十進数へ変換するプログラムを作りたいと思っています。数値は入力します。

./a.out
2進数?10進数?(数字のみ)→2
10進数にしたい数字を入力してね
1010
10進数→ 0
10進数→ 10
10進数→ 10
10進数→ 10
10進数→ 10010
10進数→ 110010
10進数→ 1110010
10進数→ 11110010
10進数→ 111110010
10進数→ 1111110010

よろしければどこがダメなのか教えていただきたいです。よろしくお願いいたします。

発生している問題・エラーメッセージ

./a.out 2進数?10進数?(数字のみ)→2 10進数にしたい数字を入力してね → ### 該当のソースコード ```ここに言語名を入力 ソースコード

#include <stdio.h>

int main(void)
{
int no;
int decimal;
int binary = 0;
int base = 1;
int binary1;
int decimal1 = 0;
int base1 = 1;

/二進数か十進数かの入力/
printf("2進数?10進数?(数字のみ)→");
scanf("%d",&no);

/二進数だった場合/
if(no == 2){
printf("10進数にしたい数字を入力してね\n");
printf("→\n");
scanf("%d", &decimal);

/*二進数を十進数に変換*/ while(decimal>0){ binary = binary + ( decimal % 2 ) * base; decimal = decimal / 2; base = base * 10; /*変換した十進数の出力*/ printf("10進数→ %d\n",binary); } } /*十進数だった場合*/ else if(no == 10){ printf("2進数にしたい数字を入力してね\n"); printf("→\n"); scanf("%d",&decimal1); /*十進数を二進数に変換*/ while(binary1>0){ decimal1 = decimal1 + ( binary1 % 10 ) * base1; binary1 = binary1 / 10; base1 = base1 * 2; /* 変換した2進数の出力 */ printf("2進数 → %d\n", decimal1); }

}
/十進数と二進数以外の数字が入力された場合/
else {
printf("10進数か2進数で答えてください\n");
}
return 0;
}

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2020/05/28 13:05

うまくいかないとはどういう動作になるんでしょうか
haigasu

2020/05/28 13:11

./a.out 2進数?10進数?(数字のみ)→2 10進数にしたい数字を入力してね → 1010 10進数→ 0 10進数→ 10 10進数→ 10 10進数→ 10 10進数→ 10010 10進数→ 110010 10進数→ 1110010 10進数→ 11110010 10進数→ 111110010 10進数→ 1111110010 このように表示されてしまいます。 二進数から’1010’を十進数にした場合、10と表示されるようにしたいのですが、どこを訂正すればよろしいでしょうか?お願いいたします。
guest

回答3

0

10進数の 1010 が 2進数の 1111110010 になっています。
1010 の代わりに、1、2、3、4 や 15 などを入れてみてください。

scanf("%d",&decimal1); を scanf("%d", binary1); に変更してみてください。
2進数?10進数?(数字のみ)→ に 10 を入れた後、
1、10、11、100 などを入れてみてください。
2進数が 10進数に変換されます。

投稿2020/05/29 00:25

kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

/二進数を十進数に変換/

...

binary = binary + ( decimal % 2 ) * base;

見た目、10進数で入力されているので、% 2 じゃなくて % 10でしょう。
ただし、0/1以外の入力チェックも必要と思うけど。
decimal / 2も同様。

[追記]

base = base * 10;

こちらは、base = base * 2;

投稿2020/05/28 13:26

編集2020/05/28 13:47
pepperleaf

総合スコア6385

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

haigasu

2020/05/28 13:36

回答ありがとうございます。 上記の部分を%10にした場合、結果 2進数?10進数?(数字のみ)→2 10進数にしたい数字を入力してね → 1010 10進数→ 0 10進数→ 50 10進数→ 250 10進数→ 6250 10進数→ 36250 10進数→ 136250 10進数→ 5136250 10進数→ 75136250 10進数→ 375136250 10進数→ 1375136250 このようになりました。
haigasu

2020/05/28 13:42

10進数から2進数の方に関しては結果すら出てきませんでした。 2進数?10進数?(数字のみ)→10 2進数にしたい数字を入力してね → 1010
pepperleaf

2020/05/28 13:48

追記しました。 base = base * 10; の 10 → 2 もですね。
haigasu

2020/05/28 13:52

base = base* 2にした場合 ./a.out 2進数?10進数?(数字のみ)→2 10進数にしたい数字を入力してね → 1010 10進数→ 0 10進数→ 10 10進数→ 18 10進数→ 66 10進数→ 114 10進数→ 146 10進数→ 466 10進数→ 1362 10進数→ 2130 10進数→ 2642 という結果になりました。
pepperleaf

2020/05/29 12:33

> decimal / 2も同様。 こちらは ? 何をしているか考えてみましょう。
guest

0

strtol関数という便利なものがあります。

投稿2020/05/28 13:17

HogeAnimalLover

総合スコア4830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

haigasu

2020/05/28 13:35

回答ありがとうございます。勉強不足のため少々調べて参ります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問