- 1 名前:自称プロ名無ぴ [2009/08/29(土) 17:58:39]
- 講師: メ
環境: http://codepad.org/
- 2 名前:メ [2009/08/29(土) 18:31:15]
- 勉強したいなら自分で努力しろボケが
- 3 名前:自称プロ名無ぴ [2009/08/29(土) 18:33:54]
- C言語演習1
unsigned int の値を10進数の文字列に変換する関数を作成しなさい。
- 4 名前:メ [2009/08/29(土) 18:37:24]
- itoa使え
- 5 名前:自称プロ名無ぴ [2009/08/29(土) 19:13:35]
- >>3
#include <stdio.h>
char* ul2dec(char* buf, unsigned int val)
{
unsigned int keta = 1000000000;
unsigned int temp;
int i;
int j = 0;
int flag = 0;
for (i = 0; i < 10; ++i) {
temp = val / keta;
val -= (temp * keta);
keta /= 10;
if (temp) {
flag = 1;
}
if (flag) {
buf[j] = temp + '0';
//printf("[%c]", buf[j]);
++j;
}
}
buf[i] = '\0';
return buf;
}
int main(void)
{
char buf[32];
unsigned int val;
val = (unsigned int )-1;
printf("[%u]\n", val);
printf("[%s]\n\n", ul2dec(buf, val));
val = 1234567890;
printf("[%u]\n", val);
printf("[%s]\n\n", ul2dec(buf, val));
val = 9;
printf("[%u]\n", val);
printf("[%s]\n\n", ul2dec(buf, val));
val = 0;
printf("[%u]\n", val);
printf("[%s]\n\n", ul2dec(buf, val));
return 0;
}
- 6 名前:自称プロ名無ぴ [2009/08/29(土) 19:15:59]
- >>3
#include <stdio.h>
char* ul2dec(char* buf, unsigned int val)
{
unsigned int keta = 1000000000;
unsigned int temp;
int i;
int j = 0;
int flag = 0;
for (i = 0; i < 10; ++i) {
temp = val / keta;
val -= (temp * keta);
keta /= 10;
if (temp) {
flag = 1;
}
if (flag) {
buf[j] = temp + '0';
//printf("[%c]", buf[j]);
++j;
}
}
buf[i] = '\0';
return buf;
}
int main(void)
{
char buf[32];
unsigned int val;
val = (unsigned int )-1;
printf("[%u]\n", val);
printf("[%s]\n\n", ul2dec(buf, val));
val = 1234567890;
printf("[%u]\n", val);
printf("[%s]\n\n", ul2dec(buf, val));
val = 9;
printf("[%u]\n", val);
printf("[%s]\n\n", ul2dec(buf, val));
val = 0;
printf("[%u]\n", val);
printf("[%s]\n\n", ul2dec(buf, val));
return 0;
}
- 7 名前:メ [2009/08/29(土) 19:16:56]
- 新人がこんな関数作ったらレビューで1時間は説教する
- 8 名前:自称プロ名無ぴ [2009/08/29(土) 19:22:33]
- CADって知ってる?
なんか使えるようになって欲しいみたいなんだけど
- 9 名前:自称プロ名無ぴ [2009/08/29(土) 19:23:16]
- メキシコならどんな関数つくるん?
ライブラリつかうのはなしで
- 10 名前:自称プロ名無ぴ [2009/08/29(土) 19:25:42]
- >>8
OrCadならしってる
- 11 名前:メ [2009/08/29(土) 19:47:54]
- >>9
引数ポインタを戻り値にしない
ketaとかtempとか変な変数名は使わない
unsigned intが10進数で10桁に収まるからこう書いているとコメントに記述する
意味がないflagは使わない
iとjを使い間違えてバグっていない
という関数を書く
- 12 名前:メ [2009/08/29(土) 19:49:16]
- あと関数名とか引数の順番もよく考えた関数を書く
- 13 名前:メ [2009/08/29(土) 19:56:28]
- あとバッファオーバーフロー防ぐためにバッファのサイズを引数に追加する
- 14 名前:自称プロ名無ぴ [2009/08/29(土) 20:03:57]
- >>6
% とか/ を使わずにかけたら神なのにな
- 15 名前:自称プロ名無ぴ [2009/08/29(土) 20:25:03]
- それはさすがに無理だろ
シンプルじゃなくなる
- 16 名前:自称プロ名無ぴ [2009/08/29(土) 20:25:49]
- >>11
>iとjを使い間違えてバグっていない
さすがメキシコ様
- 17 名前:自称プロ名無ぴ [2009/08/29(土) 23:55:34]
- >意味がないflagは使わない
意味あるやんけ
- 18 名前:自称プロ名無ぴ [2009/08/30(日) 02:59:16]
- Cとかよくわかんないんだけど
flagの値1以外になるのこれ
あと
if (temp) {
buf[j] = temp + '0';
//printf("[%c]", buf[j]);
++j;
}
じゃだめなの
- 19 名前:自称プロ名無ぴ [2009/08/30(日) 07:44:37]
- http://codepad.org/
で実行してみるとわかるけど駄目
- 20 名前:自称プロ名無ぴ [2009/08/30(日) 08:51:46]
- if (temp) {
flag = 1;
}
if (flag) {
buf[j] = temp + '0';
:
がよくて
if (temp) {
buf[j] = temp + '0';
:
がだめとかC難解過ぎる・・・
- 21 名前:自称プロ名無ぴ [2009/08/30(日) 09:04:02]
- >>20はゆとりだな
- 22 名前:自称プロ名無ぴ [2009/08/30(日) 09:06:04]
- え、なんで?
- 23 名前:自称プロ名無ぴ [2009/08/30(日) 14:24:30]
- 1000と言う値がどのように表示されるか考えてみようよ
- 24 名前:ハトダンナ ◆CHADANur5o [2009/08/31(月) 15:37:50]
- 仕事の合間に。
#include <stdio.h>
#define BUFFER_SIZE 32
char *ultos_recur(char *buf, unsigned int num, char *bufend)
{
if (num >= 10) {
buf = ultos_recur(buf, num / 10, bufend);
}
if (buf != bufend) {
*buf++ = num % 10 + '0';
}
return buf;
}
void ultos(char *buf, unsigned int num, int buffer_size)
{
*ultos_recur(buf, num, buf + buffer_size - 1) = '\0';
}
int main()
{
char buf[BUFFER_SIZE];
unsigned int val;
val = (unsigned int)-1;
ultos(buf, val, BUFFER_SIZE);
printf("[%u] -> [%s]\n\n", val, buf);
val = 1234567890;
ultos(buf, val, BUFFER_SIZE);
printf("[%u] -> [%s]\n\n", val, buf);
val = 9;
ultos(buf, val, BUFFER_SIZE);
printf("[%u] -> [%s]\n\n", val, buf);
val = 0;
ultos(buf, val, BUFFER_SIZE);
printf("[%u] -> [%s]\n\n", val, buf);
val = (unsigned int)-1;
ultos(buf, val, 4);
printf("[%u] -> [%s]\n\n", val, buf);
return 0;
}
- 25 名前:メ [2009/08/31(月) 15:43:03]
- おおスゲー
- 26 名前:自称プロ名無ぴ [2009/08/31(月) 16:12:28]
- メキシコがスゲーって言ってるからすげえんだろうな
- 27 名前:人狼教諭 ◆doomsroUk. [2009/08/31(月) 16:38:43]
- こう言うの見るといっつも「なんでいちいち{で改行するの」って思う。
- 28 名前:人狼教諭 ◆doomsroUk. [2009/08/31(月) 16:39:59]
- { *ultos_recur(buf, num, buf + buffer_size - 1) = '\0';}
じゃ何でダメなん?
いや全然意味分かってないけど。
- 29 名前:自称プロ名無ぴ [2009/08/31(月) 16:45:30]
- さすがチャダはNHKで講師してるだけあるな
- 30 名前:自称プロ名無ぴ [2009/08/31(月) 16:46:35]
- #include <stdio.h>
#define BUFFER_SIZE 32
char *ultos_recur(char *buf, unsigned int num, char *bufend)
{if (num >= 10) {buf = ultos_recur(buf, num / 10, bufend);}
if (buf != bufend) {*buf++ = num % 10 + '0';}
return buf;}
void ultos(char *buf, unsigned int num, int buffer_size)
{*ultos_recur(buf, num, buf + buffer_size - 1) = '\0';}
int main()
{char buf[BUFFER_SIZE];unsigned int val;
val = (unsigned int)-1;ultos(buf, val, BUFFER_SIZE);printf("[%u] -> [%s]\n\n", val, buf);
val = 1234567890;ultos(buf, val, BUFFER_SIZE);printf("[%u] -> [%s]\n\n", val, buf);
val = 9;ultos(buf, val, BUFFER_SIZE);printf("[%u] -> [%s]\n\n", val, buf);
val = 0;ultos(buf, val, BUFFER_SIZE);printf("[%u] -> [%s]\n\n", val, buf);
val = (unsigned int)-1;ultos(buf, val, 4);printf("[%u] -> [%s]\n\n", val, buf);
return 0;}
- 31 名前:メ [2009/08/31(月) 16:55:01]
- ;}で改行したら;で終わる行と;}で終わる行が混在して見づらいやんけ
- 32 名前:自称プロ名無ぴ [2009/08/31(月) 16:55:44]
- 問題ないけど見にくいから
- 33 名前:人狼教諭 ◆doomsroUk. [2009/08/31(月) 17:03:22]
- あー、;で終わる行と終わらない行は凄く意味が違うのね、、、
;は「この処理は次の行まで続いてますよ〜」って意味なのかな、、、
TrackBackURL :: http://chadan.org/test/tback.cgi/talk/1251536319/