ページ 1 / 1
実行できません
Posted: 2019年5月03日(金) 02:14
by Riko
こちらのプログラム、実行ができず文字化けしてしまいます。
正解ではなくヒントをいただけたらと思います。(課題です)
C言語は超初心者です、初めて自分で書いたものです。
問題:999以下の自然数を入力するとその数の百、十、一のけたを分離して表示するプログラムを作成せよ。
自分の回答:
コード:
#include <stdio.h>
int main(void)
{
int y; /* 999以下の自然数*/
int a; /* 100の位 */
int b; /* 10の位 */
int c; /* 1の位 */
a=y/100;
b=(y%100)/10;
c=y%10;
scanf("Input a three-digit number : %d &n" , &y);
printf("Hundreds digit = %d &n" ,a);
printf("Tens digit = %d &n" , b);
printf("Ones digit = %d &n" , c);
return 0;
}
Re: 実行できません
Posted: 2019年5月03日(金) 07:19
by box
コード:
a=y/100;
b=(y%100)/10;
c=y%10;
scanf("Input a three-digit number : %d &n" , &y);[/code
yの値を入力する「前に」計算しているのがおかしい。
&nという謎の記述はなくてよいはず。
Re: 実行できません
Posted: 2019年5月03日(金) 07:19
by box
コード:
a=y/100;
b=(y%100)/10;
c=y%10;
scanf("Input a three-digit number : %d &n" , &y);
yの値を入力する「前に」計算しているのがおかしい。
&nという謎の記述はなくてよいはず。
Re: 実行できません
Posted: 2019年5月03日(金) 08:54
by Riko
ご指摘ありがとうございます。
yの値入力を前に持ってきて&nを消去しました(\nと間違えていました)。
まだ実行できないのですが誤りありますでしょうか?
コード:
#include <stdio.h>
int main(void)
{
int y; /* 999以下の自然数*/
printf("Input a three-digit number : ");
scanf("%d" , &y);
int a; /* 100の位 */
int b; /* 10の位 */
int c; /* 1の位 */
a=y/100;
printf("Hundreds digit = %d" ,a);
b=(y%100)/10;
printf("Tens digit = %d" , b);
c=y%10;
printf("Ones digit = %d" , c);
return 0;
}
Re: 実行できません
Posted: 2019年5月03日(金) 10:09
by littlestream
任意の10進数の桁を取り出す場合一般的かどうかは分からないですが、それぞれの桁が10の累乗
であることを利用します。以下の式でもとまります。
Ketanumは求めたい桁の変数、Nは任意の元の変数として、
桁が1の桁を0として10の桁を1、100の桁を2してKetaという変数にします。
Ketanum=(N/(10のKetaの累乗))%10;
ちなみに、この応用で2進数や16進数に変換することが出来ます。
Re: 実行できません
Posted: 2019年5月03日(金) 12:54
by みけCAT
Wandboxでは正常に実行できるので、環境が不適切な可能性が考えられます。
Re: 実行できません
Posted: 2019年5月03日(金) 12:57
by みけCAT
もしくは、「まだ実行できない」という認識が「誤り」である可能性が考えられます。
Re: 実行できません
Posted: 2019年5月03日(金) 14:13
by Riko
みけCAT さんが書きました: ↑5年前
もしくは、「まだ実行できない」という認識が「誤り」である可能性が考えられます。
実行できないという認識の誤りでした。
実行できました。
お力添えくださった皆さんありがとうございました!
Re: 実行できません
Posted: 2019年5月03日(金) 17:15
by かずま
次のコードは、999以下の自然数という制限に反するので
解答ではありませんが、参考にはなるでしょう。
コード:
#include <stdio.h>
int main(void)
{
static char *s[] = {
"One", "Ten", "Hundred", "Thousand",
"Ten thousand", "Hundred thousand", "Million",
"Ten million", "Hundred million", "Billion"
};
char d[10];
int y, i = 0;
printf("Input a positive number: ");
if (scanf("%d", &y) != 1 || y < 0) return 1;
do d[i++] = y % 10 + '0'; while (y /= 10);
while (--i >= 0) printf(" %s's digit: %c\n", s[i], d[i]);
}
実行例
コード:
Input a positive number: 2147483647
Billion's digit: 2
Hundred million's digit: 1
Ten million's digit: 4
Million's digit: 7
Hundred thousand's digit: 4
Ten thousand's digit: 8
Thousand's digit: 3
Hundred's digit: 6
Ten's digit: 4
One's digit: 7