自然数が逆順に表示できません

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

自然数が逆順に表示できません

#1

投稿記事 by 桜並木 » 9年前

学校の宿題で入力した5ケタの自然数を逆順に表示する宿題が出ました。宿題の条件として、仮引き数を受け取らない関数を作らないといけません。自分で考えてみたのですが、うまく表示されません。どこが間違っているのかを指摘していただけないでしょうか?

コード:

#include <stdio.h>
int irekaeru(void) {
	int a,num, p, n = 0, b = 10000;
	printf("5桁の整数を入力してください。");
	scanf("%d", &num);

	for (int i = 0; i < 5; i++) {
		p = a % 10;
		n = n + p * b;
		a /= 10;
		b /= 10;
	}
	return 0;
}

int main(void) {
	int x = irekaeru();
	printf("%d", x);
	return 0;
}

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

Re: 自然数が逆順に表示できません

#2

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

少なくとも、
  • 未初期化の自動変数aの値を用い、未定義動作を起こしている
  • せっかく入力したnumを無視している
  • せっかくループで計算した値を無視している
のは明らかに間違っているでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

桜並木

Re: 自然数が逆順に表示できません

#3

投稿記事 by 桜並木 » 9年前

間違いを指摘していただきありがとうございました。
指摘していただいたところを直したら無事に表示することができました。

かずま

Re: 自然数が逆順に表示できません

#4

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

無事に解決したようなので、別解を。

コード:

#include <stdio.h>

int reverse(int a)
{
    int b = 0;
    do b = b * 10 + a % 10; while (a /= 10);
    return b;
}
 
int main(void)
{
    int a;
    while (printf("5桁の整数を入力してください。"), scanf("%d", &a) == 1)
        printf("%d\n", reverse(a));
    return 0;
}
もうひとつ

コード:

#include <stdio.h>

char *rev(char *s, char *t)
{
    char c = *t; return c ? t = rev(s, t+1), *t = c, t + 1 : s;
}

char *reverse(char *s) { return rev(s, s), s; }
 
int main(void)
{
    char s[100];
    while (printf("5桁の整数を入力してください。"), scanf("%99s", s) == 1)
        puts(reverse(s));
    return 0;
}

閉鎖

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