ページ 11

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

Posted: 2016年6月14日(火) 23:06
by 桜並木
学校の宿題で入力した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;
}

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

Posted: 2016年6月14日(火) 23:09
by みけCAT
少なくとも、
  • 未初期化の自動変数aの値を用い、未定義動作を起こしている
  • せっかく入力したnumを無視している
  • せっかくループで計算した値を無視している
のは明らかに間違っているでしょう。

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

Posted: 2016年6月14日(火) 23:16
by 桜並木
間違いを指摘していただきありがとうございました。
指摘していただいたところを直したら無事に表示することができました。

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

Posted: 2016年6月15日(水) 02:06
by かずま
無事に解決したようなので、別解を。

コード:

#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;
}