#1
by orngmate » 4年前
初めての質問で至らない点が多々あると思いますが、宜しくお願い致します。
c言語初心者です。
プログラムは高校専用のサイトを用いて作成しています。
課題の提出期限が迫ってきているため、このサイトで質問させていただきます。
↓以下問題
【c言語 エラー出力について】
下記の問題、
コマンドライン引数に与えられる数値 x といくつかの基数 bi ( 0<i<n, n≧0 ) に対して、その数値 x と、 指定された各基数 bi に対しての xの b
i 進表現を書き出すプログラムを作れ。
x が負であったら、「error」と標準出力に1行として書き出して、直ちにプログラムの実行を終了すること。
2≦bi≦64 となっていない bi に対しては、 その値の十進表現を必要最小限の桁数で1行として標準エラー出力に書き出せ。
上記の問題について、
入力された数値と、その進数を出力するまではプログラムを作れたのですが、2≦bi≦64 となっていない bi に対しては、 その値の十進表現を必要最小限の桁数で1行として標準エラー出力に書き出すというところが作成できません。
出力結果としては、コマンドラインに
12345 -3 4 0 36
と入力された場合、
標準出力に
12345 3000321[4]9IX[36]
と出力され、
(※12345を4進で表現すると300321
12345を36進で表現すると9IX)
標準エラー出力に
-3
0
つまり2進未満、64より上の数値(進数)を与えられた場合、その数値を標準エラー出力に出力したいです。
下記のプログラムに加え、標準エラー出力を書き出すにはどうプログラムを書き換えたら良いのでしょうか?
#include <stdio.h>
#include <stdlib.h>
int show(int value, int base);
int main(int argc, char *argv[]){
if( argc==1 ) return 0;
int x= atoi(argv[1]);
if( x<0 ){ printf("error\n");exit(-1);}
printf("%d", x);
int i;
for(i=2; i!=argc; i++){
int b= atoi(argv);
if( b<2 || b>64 ) continue;
printf(" ");
show(x,b);
printf("[%d]",b);
}
printf("\n");
return 0;
}
void show_(int v,int b,int *n){
char *digit= "0123456789"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz"
"+/";
(*n)++;
if( v>=b )show_(v/b,b,n);
putchar(digit[v%b]);
}
int show(int value,int base){
int count=0;
show_(value,base,&count);
return count;
}
初めての質問で至らない点が多々あると思いますが、宜しくお願い致します。
c言語初心者です。
プログラムは高校専用のサイトを用いて作成しています。
課題の提出期限が迫ってきているため、このサイトで質問させていただきます。
↓以下問題
【c言語 エラー出力について】
下記の問題、
コマンドライン引数に与えられる数値 x といくつかの基数 bi ( 0<i<n, n≧0 ) に対して、その数値 x と、 指定された各基数 bi に対しての xの b
i 進表現を書き出すプログラムを作れ。
x が負であったら、「error」と標準出力に1行として書き出して、直ちにプログラムの実行を終了すること。
2≦bi≦64 となっていない bi に対しては、 その値の十進表現を必要最小限の桁数で1行として標準エラー出力に書き出せ。
上記の問題について、
入力された数値と、その進数を出力するまではプログラムを作れたのですが、2≦bi≦64 となっていない bi に対しては、 その値の十進表現を必要最小限の桁数で1行として標準エラー出力に書き出すというところが作成できません。
出力結果としては、コマンドラインに
12345 -3 4 0 36
と入力された場合、
標準出力に
12345 3000321[4]9IX[36]
と出力され、
(※12345を4進で表現すると300321
12345を36進で表現すると9IX)
標準エラー出力に
-3
0
つまり2進未満、64より上の数値(進数)を与えられた場合、その数値を標準エラー出力に出力したいです。
下記のプログラムに加え、標準エラー出力を書き出すにはどうプログラムを書き換えたら良いのでしょうか?
#include <stdio.h>
#include <stdlib.h>
int show(int value, int base);
int main(int argc, char *argv[]){
if( argc==1 ) return 0;
int x= atoi(argv[1]);
if( x<0 ){ printf("error\n");exit(-1);}
printf("%d", x);
int i;
for(i=2; i!=argc; i++){
int b= atoi(argv[i]);
if( b<2 || b>64 ) continue;
printf(" ");
show(x,b);
printf("[%d]",b);
}
printf("\n");
return 0;
}
void show_(int v,int b,int *n){
char *digit= "0123456789"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz"
"+/";
(*n)++;
if( v>=b )show_(v/b,b,n);
putchar(digit[v%b]);
}
int show(int value,int base){
int count=0;
show_(value,base,&count);
return count;
}