実行できません

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Riko

実行できません

#1

投稿記事 by Riko » 4年前

こちらのプログラム、実行ができず文字化けしてしまいます。
正解ではなくヒントをいただけたらと思います。(課題です)
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;
}

box
記事: 2002
登録日時: 13年前

Re: 実行できません

#2

投稿記事 by box » 4年前

コード:


	a=y/100;
	b=(y%100)/10;
	c=y%10;

	scanf("Input a three-digit number : %d &n" , &y);[/code
yの値を入力する「前に」計算しているのがおかしい。
&nという謎の記述はなくてよいはず。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

box
記事: 2002
登録日時: 13年前

Re: 実行できません

#3

投稿記事 by box » 4年前

コード:


	a=y/100;
	b=(y%100)/10;
	c=y%10;

	scanf("Input a three-digit number : %d &n" , &y);
yの値を入力する「前に」計算しているのがおかしい。
&nという謎の記述はなくてよいはず。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

Riko

Re: 実行できません

#4

投稿記事 by Riko » 4年前

ご指摘ありがとうございます。
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;
}

littlestream
記事: 48
登録日時: 7年前

Re: 実行できません

#5

投稿記事 by littlestream » 4年前

任意の10進数の桁を取り出す場合一般的かどうかは分からないですが、それぞれの桁が10の累乗
であることを利用します。以下の式でもとまります。
Ketanumは求めたい桁の変数、Nは任意の元の変数として、
桁が1の桁を0として10の桁を1、100の桁を2してKetaという変数にします。

Ketanum=(N/(10のKetaの累乗))%10;

ちなみに、この応用で2進数や16進数に変換することが出来ます。

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 実行できません

#6

投稿記事 by みけCAT » 4年前

Wandboxでは正常に実行できるので、環境が不適切な可能性が考えられます。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 実行できません

#7

投稿記事 by みけCAT » 4年前

もしくは、「まだ実行できない」という認識が「誤り」である可能性が考えられます。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Riko

Re: 実行できません

#8

投稿記事 by Riko » 4年前

みけCAT さんが書きました:
4年前
もしくは、「まだ実行できない」という認識が「誤り」である可能性が考えられます。
実行できないという認識の誤りでした。
実行できました。

お力添えくださった皆さんありがとうございました!

かずま

Re: 実行できません

#9

投稿記事 by かずま » 4年前

次のコードは、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

返信

“C言語何でも質問掲示板” へ戻る