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

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

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

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

Q&A

解決済

2回答

1114閲覧

10進数mからn進数への変換

tikuno

総合スコア18

C

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

0グッド

0クリップ

投稿2020/06/15 01:10

「 キーボードから 10 進数 m と,基数 n を入力すると,m を n 進数に変換して表示するプログラムを作れ. ただし,mの範囲は10進数で0~65535,nは2~16とし,この範囲でない値が入力された場合には,再 度入力を促すようにせよ.また,表示する値が 10 以上の値の場合には英小文字の a~f を用いよ。」という問題で自分なりに調べプログラムを書いてみました。
しかし例えば16進数の場合365と入力すると 16d を出したいのですが 1613 と出てしまいます。どうすれば変換できるのでしょうか?
またm,nの範囲を指定して指定外ならば再度入力を促す方法も教えていただければと思います。

#include <stdio.h> #include <string.h> int main() { int m=-1, n=1; char buf[1024]; char ss[1024]; while(m<0) { scanf("%d", &m); } while(n<2) { scanf("%d", &n); } sprintf(ss, " (%d)", n); while(m > 0) { int amarm; amarm=m % n; sprintf(buf, " %d%s", amarm, ss); strcpy(ss, buf); m=m/n; } puts(ss); return 0; }

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

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

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

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

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

y_waiwai

2020/06/15 01:19

提示のコードではどういう出力がされるんでしょうか。 入力/出力をそのままコピペして提示してください
guest

回答2

0

16d を出したいのですが 1613 と出てしまいます。

%dで出力しているからです。

またm,nの範囲を指定して指定外ならば再度入力を促す方法も教えていただければと思います。

whileで無限ループにして、ifの条件が満たされたらbreakします。

投稿2020/06/15 01:16

otn

総合スコア84798

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

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

otn

2020/06/15 02:25

あと、scanf の返り値は必ず確認しましょう。
guest

0

ベストアンサー

またm,nの範囲を指定して指定外ならば再度入力を促す方法も教えていただければと思います。

C

1#include <stdio.h> 2 3int main(void) 4{ 5 int m, n; 6 while (1) { 7 printf("m (0~65535): "); 8 if (scanf("%d", &m) == 1 && m >= 0 && m <= 65535) break; 9 scanf("%*[^\n]"); 10 } 11 while (1) { 12 printf("n (2~16): "); 13 if (scanf("%d", &n) == 1 && n >= 2 && n <= 16) break; 14 scanf("%*[^\n]"); 15 } 16 char s[20]; 17 int i = sizeof s; 18 s[--i] = '\0'; 19 do s[--i] = "0123456789abcdef"[m % n]; while (m /= n); 20 puts(s + i); 21}

範囲外の数値以外に不正な文字でも再入力になります。

投稿2020/06/15 11:44

kazuma-s

総合スコア8224

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問