C言語で困っています

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

C言語で困っています

#1

投稿記事 by ネロ » 14年前

#include<stdio.h>
#include<stdlib.h>

char *printIntWc(int n, char *d,int col);

int main(int argc,char *argv[])
{
int n;
char buf[BUFSIZ];
if(argc == 2){
n = atoi(argv[1]);
printIntWc(n,buf,0);
printf("%d ->%s\n",n,buf);
}else{
fprintf(stderr,"Usage: %s n\n",argv[0]);
}

return 0;
}
char *printIntWc(int n, char *d,int col)
{
if(10 <= n){
d = printIntWc(n/10,d,col++);
}
printf("%d\n",col);
*d++ = n%10+'0';
if((col% 3)== 0){
*d++ = ',';
}
*d = '\0';
return d;
}

3桁ごとに,(カンマ)を挿入してascii変換したいんですがうまく行きません
どうしたら3桁ごとに(カンマ)を入れられますか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: C言語で困っています

#2

投稿記事 by softya(ソフト屋) » 14年前

まず、フォーラムルールをご覧ください。codeタグの利用と宿題の場合は明記をお願いします。
http://dixq.net/board/board.html

codeタグで掲載しました。

コード:

#include<stdio.h>
#include<stdlib.h>
 
char *printIntWc(int n, char *d,int col);
 
int main(int argc,char *argv[])
{
    int n;
    char buf[BUFSIZ];
    if(argc == 2){
        n = atoi(argv[1]);
        printIntWc(n,buf,0);
        printf("%d ->%s\n",n,buf);
    }else{
        fprintf(stderr,"Usage: %s n\n",argv[0]);
    }
    
    return 0;
}
char *printIntWc(int n, char *d,int col)
{
    if(10 <= n){
        d = printIntWc(n/10,d,col++);
    }
    printf("%d\n",col);
    *d++ = n%10+'0';
    if((col% 3)== 0){
        *d++ = ',';
    }
    *d = '\0';
    return d;
}
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

へにっくす

Re: C言語で困っています

#3

投稿記事 by へにっくす » 14年前

ある手続き中で再びその手続き自身を呼び出すことを再帰呼出しと言いますが、なぜそれを?
#課題でそうせよと言われた?

と、いうのも普通再帰呼出しして作るものでもない気がしたからですが、、
どうなんでしょう。。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: C言語で困っています

#4

投稿記事 by softya(ソフト屋) » 14年前

d = printIntWc(n/10,d,col++);
じゃなく
d = printIntWc(n/10,d,col+1);
だと思います。
col++だと後置インクリメントなので再帰呼び出しされるのはcolの元の値のままです。

ただ、これでも問題あるので後は自分で考えて。
※ そこを理解しないと意味が無いと思いますので。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

初級者
記事: 200
登録日時: 15年前

Re: C言語で困っています

#5

投稿記事 by 初級者 » 14年前

こんな感じ

コード:

#include <stdio.h>

void f(int n, int c)
{
    if (n) {
        f(n / 10, c + 1);
        printf("%s%d", ((n / 10) && (c % 3 == 2)) ? "," : "", n % 10);
    }
}

int main(void)
{
    f(1, 0), putchar('\n');
    f(12, 0), putchar('\n');
    f(123, 0), putchar('\n');
    f(1234, 0), putchar('\n');
    f(12345, 0), putchar('\n');
    f(123456, 0), putchar('\n');
    f(1234567, 0), putchar('\n');
    f(12345678, 0), putchar('\n');
    f(123456789, 0), putchar('\n');
    f(1234567890, 0), putchar('\n');
    return 0;
}

かずま

Re: C言語で困っています

#6

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

ゼロや負の値も表示されるようにしてみました。
良い子は真似をしてはいけない邪悪なプログラムですが。

コード:

#include <stdio.h>
 
void g(unsigned int n)
{
	n>999 ? g(n/1000), printf(",%03u", n%1000) : printf("%u", n);
}

void f(int n) { n<0 ? putchar('-'), g(-n) : g(n); }
 
int main(void)
{
    f(-2147483648), putchar('\n');
    f(-1234), putchar('\n');
    f(-123), putchar('\n');
    f(-12), putchar('\n');
    f(-1), putchar('\n');
    f(0), putchar('\n');
    f(1), putchar('\n');
    f(12), putchar('\n');
    f(123), putchar('\n');
    f(1234), putchar('\n');
    f(12345), putchar('\n');
    f(123456), putchar('\n');
    f(1234567), putchar('\n');
    f(12345678), putchar('\n');
    f(123456789), putchar('\n');
    f(1234567890), putchar('\n');
    f(2147483647), putchar('\n');
    return 0;
}

かずま

Re: C言語で困っています

#7

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

失礼しました。直接出力するのではなく、文字列に変換するんですね。

コード:

#include <stdio.h>
 
char *g(unsigned int n, char *s)
{
    return n>999 ? s = g(n/1000, s), s + sprintf(s, ",%03u", n%1000)
                 : s + sprintf(s, "%u", n);
}

char *f(int n, char *s)
{
    return n<0 ? *s++ = '-', g(-n, s) : g(n, s);
}
 
int main(int argc, char *argv[])
{
    if (argc != 2)
        fprintf(stderr, "usage: %s n\n", argv[0]);
    else {
        char buf[20];
        int n = atoi(argv[1]);
        f(n, buf);
        printf("%d -> %s\n", n, buf);
    }
    return 0;
}

閉鎖

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