C言語なら俺に聞け(入門編)Part 76at TECH
C言語なら俺に聞け(入門編)Part 76 - 暇つぶし2ch114:デフォルトの名無しさん
11/01/09 20:24:17
ほっほっ

115:デフォルトの名無しさん
11/01/09 20:25:15
ふっほっ

116:デフォルトの名無しさん
11/01/09 20:51:47
>>109
>>111
サドルマン、ロシヒカリ  何のたとえなの 教えて
 自分が屑でないと思っているならみんなにわかるように教えて

117:デフォルトの名無しさん
11/01/09 21:09:35
mysql.hが存在しないっつーんなら存在しないんだろ
mysqlのライブラリを持ってきてないんだろ

118:デフォルトの名無しさん
11/01/09 21:17:06
パスが通ってないんだろ

119:デフォルトの名無しさん
11/01/09 21:53:02
>>116の精神はもう長くはもたないな

120:デフォルトの名無しさん
11/01/09 21:58:45
お前らよりゆっくり実況の方が分かりやすいなwwwwwww

121:デフォルトの名無しさん
11/01/09 22:01:55
>>120
ニホンゴでオーケー

122:デフォルトの名無しさん
11/01/09 22:02:33
URLリンク(www9.plala.or.jp)
↑ネットでC言語の解説しているページ

strcmp(ABC, ABC) の結果:0
strcmp(ABC, ABD) の結果:-1
strcmp(ABC, B) の結果:-1    ← 文字数によらず、文字の大小関係で結果が決まる
strcmp(ABC, AAAA) の結果:1   ←

↑この実行結果だけでもわかりますがstrcmp(ABC, B)はなんでBのほうが大きいんですか?

123:デフォルトの名無しさん
11/01/09 22:07:58
ABCの先頭のAとBを比べてるから

124:デフォルトの名無しさん
11/01/09 22:13:06
strcmp(ABC, AAAA) の結果:1 これは>?

125:デフォルトの名無しさん
11/01/09 22:18:34
少しは自分で考えろよ

一文字づつ比べていって、同じなら次の文字
違ってたら大小比較した結果が返るだけだろ

126:デフォルトの名無しさん
11/01/09 22:20:13
先頭から1文字づつ取りだして異なった瞬間の大小を戻してるだけ

c1) c2)
A  A 一致
B  A c1 > c2 → 1 で戻り
C  A
\0  A
   \0

127:デフォルトの名無しさん
11/01/09 22:24:47
辞書引いたことの無い人?

128:デフォルトの名無しさん
11/01/09 22:36:57
Windows XP 以降のエクスプローラーのファイル名ソートと等価な比較が難しい…
単純な辞書順じゃないんだよね

129:デフォルトの名無しさん
11/01/09 22:37:20
gcc で、

1ull << 65
の結果が 0 ではなく、
1ull << (65 % 64)
と解釈されて、結果が 2になります。

64bit以上のシフトは環境依存なのでしょうか?

130:デフォルトの名無しさん
11/01/09 22:52:31
その型のビット幅以上のシフト量や負のシフト量は未定義です

131:129
11/01/09 23:02:10
>>130
ありがとうございます。

132:デフォルトの名無しさん
11/01/09 23:56:05
ファイルの中から
指定した行を出力するプログラムがほしいのですが
サンプル書いてくれないですかね


133:デフォルトの名無しさん
11/01/10 00:00:25
void test(int *p)
{
p = (int *)malloc(sizeof(int));
}

int main()
{
int *p;
test(p);
free(p);
}

として実行すると、メモリを二重解放していると怒られました。
友人にアドバイスをもらって、

void test(int **p)
{
*p = (int *)malloc(sizeof(int));
}

int main()
{
int *p;
test(&p);
free(p);
}

としたらエラーが出なかったのですが、理由がよくわからないです…。
ご教示の程よろしくお願いいたします。

134:デフォルトの名無しさん
11/01/10 00:08:04
それは2重開放じゃないな。mainのpはメモリ確保してねえんだよ。メモリリークするの。

135:デフォルトの名無しさん
11/01/10 00:10:00
これは配列だが。初心者はこのようにメモリ確保すべき。new、mallocはよほどのことで無い限り使うこと無い。

int main()
{
vector<int> p(100);
}

136:デフォルトの名無しさん
11/01/10 00:21:54
>>135
スレタイを5百万回確認しろ。

137:デフォルトの名無しさん
11/01/10 00:25:42
初心者はまずSTLをやったほうがいい。C言語のメモリ確保や文字列は不便。

138:デフォルトの名無しさん
11/01/10 00:29:12
void test(int *p)
{
p = (int *)malloc(sizeof(int));
}

これは、新規に生成したint*型に対してメモリ確保してるんだ。呼び出し元とは関係なし。

もしC++の参照使えれば。こうすれば期待する動作になる。

void test(int* &p)
{
p = (int *)malloc(sizeof(int));
}

139:デフォルトの名無しさん
11/01/10 00:31:54
配列だけは例外で、C言語は値渡ししか出来ない思った。ポインタも値渡しになってしまう。
なんとか回避するためにポインタのポインタという技が開発される。

140:デフォルトの名無しさん
11/01/10 00:56:09
CのスレにC++のコード書いて得意気になってる奴何なの

141:デフォルトの名無しさん
11/01/10 00:57:37
きっとC++が好きなのさ
スレ違いも甚だしいけど

142:デフォルトの名無しさん
11/01/10 01:23:08
URLリンク(codepad.org)
エラーなってしまう たすけて

143:デフォルトの名無しさん
11/01/10 01:29:11
エラーを読んでくれ…

144:デフォルトの名無しさん
11/01/10 01:43:56
質問です。
URLリンク(wwww.vis.ne.jp)
上記ページの使い方以降にあるソースのmain関数で、二次元配列をstaticで宣言してるんですけど、
これはどういった理由からなんでしょうか。
実際にstatic抜きで、ただのdoubleとして二次元配列を宣言してプログラムを走らせてみるとcoreを吐いてしまうんですね。
staticありだと確かに正常に動きます。
staticについて検索して調べたんですが、何処を調べてもmain関数を例に取ってるサイトが見つからなく、
関数を呼び出すごとに値が記憶されている、みたいな例しかないんですね。

#include<stdio.h>

void fn();

main()
{
int i;
for(i=0;i<10;i++)fn();
}

void fn()
{
auto int a=0;
static int b=0;

a++; b++;

printf("a=%d, b=%d\n",a,b);
}

↑こんな感じでstaticありとなしとで比べてるだけで、確かにこれだとなんとなくはわかるんですが、
上記サイトの二次元配列でstaticをどういう風に使用しているのかよくわかりません。よろしければご教授お願いしたいです
また、もしstaticなしで動くのであれば、それを試してみたいんですが何か方法はありますか?

145:デフォルトの名無しさん
11/01/10 01:49:01
static付けると、スタック領域とは別にメモリ確保できるからでは。
つけないとメモリ不足に陥るケースあり。
初心者はヒープからこうとれよ。
vector< vector<double> > x;

146:デフォルトの名無しさん
11/01/10 01:53:47
>>144
staticなしで動かしたいなら、コンパイラにスタックサイズを指定するオプションがあると思うから、
それでスタックのサイズをでかくしてみたら?


147:144
11/01/10 02:04:35
なるほど。メモリ不足が原因だったんですね。ありがとうございました。

>>145 ,146
ヒープやスタックサイズについても検索して調べてみますね。

あと気になったことがありまして、
>>144では二次元配列を用いてますけど、ポインタで宣言してあげて、mallocなどを用いて動的にメモリを確保すれば、
ひょっとしてスタックサイズらを気にする必要はなくなります?

148:デフォルトの名無しさん
11/01/10 02:07:26
気にする必要はなくなります

149:デフォルトの名無しさん
11/01/10 02:11:44
わかりました。ありがとうございました。

150:デフォルトの名無しさん
11/01/10 02:48:33
URLリンク(codepad.org)
エラーでちゃう たすけて

151:デフォルトの名無しさん
11/01/10 03:01:09
URLリンク(codepad.org) (サブ2
URLリンク(codepad.org) (メイン
URLリンク(codepad.org)  (サブ1

ちなみにソースファイルは3つある


152:デフォルトの名無しさん
11/01/10 03:03:10
URLリンク(codepad.org)

153:デフォルトの名無しさん
11/01/10 04:46:44
テキストの中身
abcd
efgh
ijkl

結果
出力させたい行を入力
2
efgh
こんなプログラムがほしいのですが
書いてくれませんか

154:デフォルトの名無しさん
11/01/10 04:59:30
宿題は宿題スレにどうぞ
ソフトが欲しいってだけならソフトウェア板で聞けカス

155:デフォルトの名無しさん
11/01/10 07:07:54
>>133

void test(int *p)
{
*p = (int)malloc(sizeof(int));
}

void main()
{
int p;
test(&p);
free(p);
}


156:デフォルトの名無しさん
11/01/10 07:22:52
voidmainw

157:デフォルトの名無しさん
11/01/10 07:29:44
>>133
こうしたら分かるだろうか
URLリンク(codepad.org)
test関数内で扱うのはmain関数内にあるint *pの値をコピーしたものなので
testでmallocの結果を代入してもmain側のpには反映されないの


158:デフォルトの名無しさん
11/01/10 10:31:27
>>133
>>157 と同じことですが、
C言語での関数呼び出しは特別なオプションをつけていなければ
スタックに実引数と戻りアドレス(次の実行コードのアドレス)を
積んで実行フローが呼び出し先の関数になります。
 スタックに積む実引数は、プログラムテキストが示す式(変数等)
を評価した値のコピーです。呼び出し先の関数で、その引数に
代入すると、スタックに積まれたコピーの方が更新されます。
>>133 の上の例では、不定なmain()のp のポインタの値のコピーにtest()で
代入していて、元のmain() のp は更新されませんので、free()
のp はmalloc() したp とは無関係となります。

159:デフォルトの名無しさん
11/01/10 10:51:05
その説明で>>133が理解できるとは思えないw

160:デフォルトの名無しさん
11/01/10 10:53:54
初心者が理解出来ない返しをして悦に入るアホの典型

161:デフォルトの名無しさん
11/01/10 11:10:09
>>158は一見わけわからんプログラム組みたがるタイプ

162:デフォルトの名無しさん
11/01/10 11:15:34
>>161
まだ>>158はプログラミング歴が短いんじゃないかな
俺も昔は>>158みたいだった

163:デフォルトの名無しさん
11/01/10 11:37:36
サドルマンか

164:デフォルトの名無しさん
11/01/10 11:38:55
void t1(int a) { a = 5; }
void t2(int *a) { *a = 5; }
void main() { int a=0; t1(a); printf("%d ",a); t2(&a); printf("%d",a); }
→実行結果は 0 5

関数の引数変数への代入操作は、呼び出し元の変数の値を変えない
ポインタの指してる先の内容を変えることはできるが、
ポインタそのものを変えても呼び出し元に伝わらない

165:デフォルトの名無しさん
11/01/10 11:44:04
ゆっくり実況見るといいよ

166:デフォルトの名無しさん
11/01/10 11:57:23
   __   いいえ。わたしです
  ヽ(・‐・(ノ
   )   )
     | | 

167:デフォルトの名無しさん
11/01/10 11:59:22
はっきり言ってニコニコ技術部の方が上

168:デフォルトの名無しさん
11/01/10 12:08:42
確かに

169:デフォルトの名無しさん
11/01/10 12:32:57
ロシヒカリってなんですか?

170:デフォルトの名無しさん
11/01/10 12:41:44
人名

171:デフォルトの名無しさん
11/01/10 13:17:51


172:デフォルトの名無しさん
11/01/10 13:24:36
サドルマンになりたいな

173:デフォルトの名無しさん
11/01/10 14:01:44
ほっほっ

174:デフォルトの名無しさん
11/01/10 14:06:32
>>133
別に問題なくね?ポインタ変数渡してるから参照渡しにあたるだろ。
その友人はなんで怒ったんだ?

175:デフォルトの名無しさん
11/01/10 14:07:40
>>174
スレを読め

176:デフォルトの名無しさん
11/01/10 14:10:37
URLリンク(codepad.org) (サブ2
URLリンク(codepad.org) (メイン
URLリンク(codepad.org)  (サブ1

これcygwinでコンパイルするとき
gcc メイン サブ1 サブ2 ←このようにすると

/cygdrive/c/Users/mituru/AppData/Local/Temp/cc69kqsO.o:c.c:(.text+0x5e): undefin
ed reference to `_i_print'
/cygdrive/c/Users/mituru/AppData/Local/Temp/cc69kqsO.o:c.c:(.text+0xaa): undefin
ed reference to `_i_print'
collect2: ld returned 1 exit status
こうなっちゃうんですが解消法はないですか

177:デフォルトの名無しさん
11/01/10 14:13:40
C++でmallocなんか使うかよww

178:デフォルトの名無しさん
11/01/10 14:34:29
ふっほっ

179:デフォルトの名無しさん
11/01/10 14:44:05
RAND_MAX厨はいないのか?ww

180:デフォルトの名無しさん
11/01/10 15:20:55
>>176
i_print() の定義がない。 i_printf() はあるけど


181:デフォルトの名無しさん
11/01/10 15:59:35
>>180
糞乙

182:デフォルトの名無しさん
11/01/10 16:28:29
C言語でWebプログラムって出来ますか

183:デフォルトの名無しさん
11/01/10 16:38:44
>>182
できるかできないかで言うとできない
C言語は組み込み用の言語だからWindowdやUNIxなどの組み込み高度機器限定のソリューションだ

184:デフォルトの名無しさん
11/01/10 16:42:49
CGI・Cはできる。

185:デフォルトの名無しさん
11/01/10 16:43:55
C言語単体では無理だが。ネットワーク機能などを追加して、スクリプト動作させたらいい。

186:デフォルトの名無しさん
11/01/10 16:54:41
いまどきCでwebアプリ作るやつはいないと思うけど、やればできる。
標準入出力と環境変数の読み込みができる言語ならなんでもOK
むかし公開された2chのソースはCだった。

187:デフォルトの名無しさん
11/01/10 17:09:43
>>186
>>いまどきCでwebアプリ作るやつはいない

いまVCで作ってる真っ最中なんだけどw

188:187
11/01/10 17:11:06
なんだウェブアプリってCGIか
間違えた

189:デフォルトの名無しさん
11/01/10 17:11:26
webアプリというより、ボトルネックの部分をネイティブに置き換えるとかそういう利用では?
全部、Cで作ったら生産性が悪い。

190:デフォルトの名無しさん
11/01/10 17:17:08
な?すぐ>>187みたいなのが釣れるだろ?

191:デフォルトの名無しさん
11/01/10 17:27:05
動画サイトでオセロを打つプロウラムを作ってる人の動画があったんだけど、
まずはインターフェイスから作りましょうかとかいってたんだけど
インターフェイスって何ですか?盤や白黒のコマの事でしょうか?

192:デフォルトの名無しさん
11/01/10 17:29:39
インターフェイスは入出力では。キーボード、マウスとか。あとテキスト出力とか。

193:デフォルトの名無しさん
11/01/10 17:30:12
┏━━━━━━━━━┓
┃┌─┬─┬─┬─┬─┬─┬─┬─┐┃
┃│  │  │  │  │  │  │  │  │┃
┃├─┼─┼─┼─┼─┼─┼─┼─┤┃
┃│  │  │  │  │  │  │  │  │┃
┃├─┼─┼─┼─┼─┼─┼─┼─┤┃
┃│  │  │  │  │  │  │  │  │┃
┃├─┼─┼─┼─┼─┼─┼─┼─┤┃
┃│  │  │  │○│●│  │  │  │┃
┃├─┼─┼─┼─┼─┼─┼─┼─┤┃
┃│  │  │  │●│○│  │  │  │┃
┃├─┼─┼─┼─┼─┼─┼─┼─┤┃
┃│  │  │  │  │  │  │  │  │┃
┃├─┼─┼─┼─┼─┼─┼─┼─┤┃
┃│  │  │  │  │  │  │  │  │┃
┃├─┼─┼─┼─┼─┼─┼─┼─┤┃
┃│  │  │  │  │  │  │  │  │┃
┃└─┴─┴─┴─┴─┴─┴─┴─┘┃
┗━━━━━━━━━┛

194:デフォルトの名無しさん
11/01/10 17:37:33
>>192
入出力って何ですか?電源とか?
>>193
そうそう、そんな感じのプログラム作る動画が
ニコニコにあがってたんですよ、インターフェイスって何かなぁと思って。


195:デフォルトの名無しさん
11/01/10 17:38:31
┏━━━━━━━━━┓
┃┌─┬─┬─┬─┬─┬─┬─┬─┐┃
┃│  │  │  │  │  │  │  │  │┃
┃├─┼─┼─┼─┼─┼─┼─┼─┤┃
┃│  │  │  │  │  │  │  │  │┃
┃├─┼─┼─┼─┼─┼─┼─┼─┤┃
┃│  │  │  │  │  │  │  │  │┃
┃├─┼─┼─┼─┼─┼─┼─┼─┤┃
┃│  │  │●│●│●│  │  │  │┃
┃├─┼─┼─┼─┼─┼─┼─┼─┤┃
┃│  │  │  │●│●│●│  │  │┃
┃├─┼─┼─┼─┼─┼─┼─┼─┤┃
┃│  │  │  │  │  │  │  │  │┃
┃├─┼─┼─┼─┼─┼─┼─┼─┤┃
┃│  │  │  │  │  │  │  │  │┃
┃├─┼─┼─┼─┼─┼─┼─┼─┤┃
┃│  │  │  │  │  │  │  │  │┃
┃└─┴─┴─┴─┴─┴─┴─┴─┘┃
┗━━━━━━━━━┛

終わり

196:デフォルトの名無しさん
11/01/10 17:47:27
インタフェース(英語:interface)は、ものごとの境界となる部分と、その境界でのプロトコルを指す。主に情報技術関連で用いられる用語で、「ハードウェアインタフェース」、「ソフトウェアインタフェース」、「ユーザインタフェース」の三つに大別される。
インタフェース (情報技術) - Wikipedia


197:デフォルトの名無しさん
11/01/10 17:53:23
int fnc(int, int);とかの型指定するのもインターフェイスだろ。中身は無視した他とのやりとり部分。

198:デフォルトの名無しさん
11/01/10 17:57:21
それはそうだけど、普通にオセロの外枠から作ろうってことだろ
インターフェースが何かとかじゃなくて文脈読み取れよ。どうせプログラムのプの字も分かってないんだから

199:デフォルトの名無しさん
11/01/10 18:01:15
>>197
もう何でもかんでもインターフェイスじゃないですかww

いくらプログラミング作っても出力が理解できないと意味できないから
プログラミング組む前に、盤面、コマの形、場所、大きさを決めるって
意味だったんですね。


200:デフォルトの名無しさん
11/01/10 18:07:20
そういうことだな。人間と思考エンジンのインターフェイス。

201:デフォルトの名無しさん
11/01/10 18:07:46
型指定が何でインターフェイスなの

202:デフォルトの名無しさん
11/01/10 18:09:11
エヴァンゲリオンのインターフェイスはどういう意味なんだろ

203:デフォルトの名無しさん
11/01/10 18:12:25
関数にアクセスするためのインターフェース公開した事になるだろ。
集大成としてこんなのもそう。

Windows API (Windows Application Programming Interface)
Windows上で動作するアプリケーションにとって、Windows APIはWindowsの各機能にアクセスするための接点である。
Windows APIに属する各APIは主にDLLからの関数またはCOMインタフェースとして機能を公開している。
関数の呼出規約はstdcallを採用するなど統一されたインタフェースで多数のプログラミング言語からの使用を容易なものとしている。

204:デフォルトの名無しさん
11/01/10 18:13:39
ああなんだ、結合テストのことを言ってるのかと思った

205:デフォルトの名無しさん
11/01/10 18:14:04

インターフェイス・ヘッドセット
エヴァとの神経接続の為、パイロットが頭に着けるもの。

206: ◆QZaw55cn4c
11/01/10 18:26:40
>>150
まず4行目の最後にセミコロン (;) が抜けているのを正してみてはどうでしょうか?

207:デフォルトの名無しさん
11/01/10 18:41:52
┏━━━━━━━━━┓
┃┌─┬─┬─┬─┬─┬─┬─┬─┐┃
┃│  │  │  │  │  │  │  │  │┃
┃├─┼─┼─┼─┼─┼─┼─┼─┤┃
┃│  │  │  │  │  │  │  │  │┃
┃├─┼─┼─┼─┼─┼─┼─┼─┤┃
┃│  │  │  │  │  │  │  │  │┃
┃├─┼─┼─┼─┼─┼─┼─┼─┤┃
┃│  │  │  │○│  │  │  │  │┃
┃├─┼─┼─┼─┼─┼─┼─┼─┤┃
┃│  │  │  │  │  │  │  │  │┃
┃├─┼─┼─┼─┼─┼─┼─┼─┤┃
┃│  │  │  │  │  │  │  │  │┃
┃├─┼─┼─┼─┼─┼─┼─┼─┤┃
┃│  │  │  │  │  │  │  │  │┃
┃├─┼─┼─┼─┼─┼─┼─┼─┤┃
┃│  │  │  │  │  │  │  │  │┃
┃└─┴─┴─┴─┴─┴─┴─┴─┘┃
┗━━━━━━━━━┛

208:デフォルトの名無しさん
11/01/10 18:48:26
ロシヒカリとビットシフトはあな痔でしょうか

209:デフォルトの名無しさん
11/01/10 18:55:02
┏━━━━━━━━━┓
┃┌─┬─┬─┬─┬─┬─┬─┬─┐┃
┃│  │  │  │  │  │  │  │  │┃
┃├─┼─┼─┼─┼─┼─┼─┼─┤┃
┃│  │  │  │  │  │  │  │  │┃
┃├─┼─┼─┼─┼─┼─┼─┼─┤┃
┃│  │  │  │  │  │  │  │  │┃
┃├─┼─┼─┼─┼─┼─┼─┼─┤┃
┃│  │  │  │●│  │  │  │  │┃
┃├─┼─┼─┼─┼─┼─┼─┼─┤┃
┃│  │  │  │  │  │  │  │  │┃
┃├─┼─┼─┼─┼─┼─┼─┼─┤┃
┃│  │  │  │  │  │  │  │  │┃
┃├─┼─┼─┼─┼─┼─┼─┼─┤┃
┃│  │  │  │  │  │  │  │  │┃
┃├─┼─┼─┼─┼─┼─┼─┼─┤┃
┃│  │  │  │  │  │  │  │  │┃
┃└─┴─┴─┴─┴─┴─┴─┴─┘┃
┗━━━━━━━━━┛

210:デフォルトの名無しさん
11/01/10 19:14:45
結局1時間でテトリス作る奴ってすごかったの?

211:デフォルトの名無しさん
11/01/10 19:21:42
質問です。
y.txtというアルファベットしか含まれていない単純なテキストファイルを用意します。
それをC言語にて読み込んでランレングス圧縮します。
そしてそれを圧縮したz.txtを新たに作り出します。
という問題なのですがうまく動きませんでした。
よかったらご指摘をよろしくお願いします。
#include <stdio.h>
#include <stdlib.h>
void func(FILE *fp1, FILE *fp2)
{
int c1, c2, l = 0;
for(c1 = c2 = fgetc(fp2); c1 != EOF; c2 = fgetc(fp2)){
if(c1 != c2){
fprintf(fp1, "%c%d", c1, l);
l = 1;
c1 = c2;
}
else ++ l;
}
}
int main(void)
{
FILE *fp1 = fopen("y.txt", "w"), *fp2 = fopen("z.txt", "r");
if(!fp1 || !fp2) exit(EXIT_FAILURE);
func(fp1, fp2);
fclose(fp1);
fclose(fp2);
return 0;
}


212:デフォルトの名無しさん
11/01/10 19:27:10
>>211
y.txtから読み込んでz.txtに出力するってことだけど、
処理をみると、zから読み込んでyに書き込んでる。

213:デフォルトの名無しさん
11/01/10 19:50:40
書き込んでるね。

214:デフォルトの名無しさん
11/01/10 19:52:04
書き込んでるな。

215:デフォルトの名無しさん
11/01/10 19:57:16
>>210
プログラムできる奴なら、下準備してれば誰でもできるよ。

216:デフォルトの名無しさん
11/01/10 20:09:49
>>215
おれには1時間じゃ無理だわ。
前にテトリス作ったときは1、2週間くらいかかったよ。

217:デフォルトの名無しさん
11/01/10 20:25:27
C言語で、日本語に対応した文字列処理ライブラリの定番って何かありますか?
例えば、C言語じゃないんですけど、
URLリンク(www.ruby-lang.org)
くらいの機能が一通り揃ってるのが欲しいです。

218:デフォルトの名無しさん
11/01/10 20:47:46
定番というようなものはありません

219:デフォルトの名無しさん
11/01/10 20:58:53
>>216
だから下準備=既につくってある+何回も同じ手順を踏む。
誰でもできるだろ

220:デフォルトの名無しさん
11/01/10 21:08:04
一度もテトリス作ったこともない人間が即興でコーディングしてるとか思っちゃったのかw

221:デフォルトの名無しさん
11/01/10 21:41:36
そんなのテンポが悪すぎて見てられんだろうな

222:デフォルトの名無しさん
11/01/10 22:02:25
以下のプログラムをコンパイルしようとすると、undefined reference to 'sqrt'と出てしまうのですが、それはなぜでしょうか。
よろしくお願いします。


#include<stdio.h>
#include<math.h>
struct point{double x,y;};

double distance(struct point a, struct point b)
{double dis;
dis = sqrt((a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y));
return(dis);
}

int main()
{double d;
struct point p1={4.5,7.9},p2;

printf("Input p2 zahyou (x,y)!");
scanf("%lf%lf",&p2.x,&p2.y);

d=distance(p1,p2);
printf("distance=%lf\n",d);
return(0);
}

223:デフォルトの名無しさん
11/01/10 22:04:27
URLリンク(codepad.org)
テキストの中の文字と入力した文字があっているかの判定をするプログラムを
つくっているのですが
判定が合いません・・・
どうすればいいのでしょうか・・・

224:デフォルトの名無しさん
11/01/10 22:18:05
>>223
fgets()で読み込むと最後に改行コードがつくけど、scanf()だとつかないから、
それで39-40行の判定が失敗してる。
bufの後ろについてる改行コードを0でつぶすとかすればいい。

225:デフォルトの名無しさん
11/01/10 22:44:12
>>222
gcc -o test test.c -lm

226:デフォルトの名無しさん
11/01/10 22:45:51
>222

とりあえずgcc on cygwinではコンパイルできて、実行もできた。
環境はどうなっていますか?mathライブラリを明示的にリンクする
必要があったりしませんか?(-lm でリンクする。)

227:デフォルトの名無しさん
11/01/10 22:49:33
>>210
元々作っておいたソースコードを打ち込んでいくだけだぞ

228:デフォルトの名無しさん
11/01/10 22:55:22
ニコニコの連中はちょっとプログラミングを見せれば「神!技術部認定!才能の無駄遣い!」とか騒ぐからね

229:デフォルトの名無しさん
11/01/10 22:59:03
>>224さん
無事にできました
ありがとうございます

230:デフォルトの名無しさん
11/01/10 23:06:34
fgets使っても末尾に改行がつかないケースもあるが
改行コードは1バイトの場合と2バイトの場合とがあるが

231:デフォルトの名無しさん
11/01/10 23:09:16
>>225,226

授業でプログラミングをとってるだけのにわかなので、環境という話はよく分かりませんが、とりあえずコンパイルの最後に-lmと付けたらうまくいきました。
ありがとうございました!!

232:デフォルトの名無しさん
11/01/10 23:09:54
>>230
>fgets使っても末尾に改行がつかないケースもあるが
fgets()は末尾に改行が付くとニコ動でも言われている

>改行コードは1バイトの場合と2バイトの場合とがあるが
ニコ動の解説動画によると、改行コードは1バイト(¥n)だよ

もうちょっと勉強してから書き込めや


233:デフォルトの名無しさん
11/01/10 23:20:22
>>230
入力ファイルの最終行が改行で終わっていなければ、改行コードは付かないよね

234:デフォルトの名無しさん
11/01/10 23:29:28
int型の整数を文字列にキャストする方法ってありますか?

235:デフォルトの名無しさん
11/01/10 23:34:13
>>233
fgetsで指定したサイズ以上の入力を受けた場合、分割された文字列に改行はつかない

236:デフォルトの名無しさん
11/01/10 23:36:26
>>234
sprintf

237:234
11/01/10 23:37:02
>>236
それはキャストではないと思いますが・・・

238: ◆QZaw55cn4c
11/01/10 23:41:14
>>232
>>fgets使っても末尾に改行がつかないケースもあるが
>fgets()は末尾に改行が付くとニコ動でも言われている
いや、つかない場合もある。fgets() の第二引数分だけ読み込んでも改行があらわれなかったとき。

>もうちょっと勉強してから書き込めや
あんたも足りんのとちゃうか?

239:デフォルトの名無しさん
11/01/10 23:44:53
>>237
unsigned int i = 0x00434241;
char *s = (char*)&i;
printf("%s\n",s);
こういう事?でもなかったら意味が分かんないのでヒントお願い



240:デフォルトの名無しさん
11/01/10 23:47:42
str()

241:234
11/01/10 23:55:18
>>237は質問者じゃないのですが・・・

例えば
int型の「a = 12345」という数字をchar型のmoji[10]に「12345」のまま格納できれば
いいのですが、sprintf を使えばよいのでしょうか?




242:デフォルトの名無しさん
11/01/10 23:58:14
>>241
使わなくてもできるけど、まぁ使うと簡単。

243:デフォルトの名無しさん
11/01/10 23:59:13
◆QZaw55cn4c
↑これがロシヒカリ?

244:デフォルトの名無しさん
11/01/11 00:00:53
ただの荒らしだよ

245:◇QZaw55cn4c
11/01/11 00:13:45
おしっこぺろぺろ~wwwwwwwwwwwwwwwwwwwwwww

246:デフォルトの名無しさん
11/01/11 00:14:29
main()を実行しているファイルにある関数のプロトタイプ宣言がなくても
一緒にコンパイルしているファイルにその関数が定義されていた場合
(たとえば、gcc main.c sub.cのsub.cにその関数が定義されている場合、main()
では未宣言,未定義)
コンパイルはとおりましたが変じゃないですか?

言っていることわかるかな?


247:デフォルトの名無しさん
11/01/11 00:19:55
>>246
別に普通だけど
とりあえずコンパイルとリンクが別ってのを分かってもらわないと詳しく説明できない

248:デフォルトの名無しさん
11/01/11 00:25:46
>>247 実行もできたんですよ

249:デフォルトの名無しさん
11/01/11 00:29:25
>>248
いや、だからそれが普通だって
gccに必要なファイル全部指定してるんだから
・それぞれコンパイル(ここで関数の定義が見えてなくてもコンパイル可能)
・できたそれぞれのオブジェクトファイルをリンク(ここでsub.cの関数定義とくっつく)
で実行ファイルができる。
「gcc -c main.c」はエラーなし、「gcc main.c」はエラーはくから、試してみなよ

250:デフォルトの名無しさん
11/01/11 00:30:48
関数の勉強をしているんですが、スコープとは具体的にどういうことをいうのでしょうか?

サイトでは寿命や有効範囲の事を言っていました。いまいちぱっとしません。

251:デフォルトの名無しさん
11/01/11 00:32:35
>>250
{
        int i;
        i = 0; /* OK */
}
i = 1; /* NG */

252:デフォルトの名無しさん
11/01/11 00:42:08
>>251 つまりどういうことですか?><。

253:デフォルトの名無しさん
11/01/11 00:45:16
>>252
つまりね、何が分からないのか分からない。

254:デフォルトの名無しさん
11/01/11 00:48:51
スコープは有効範囲であって寿命は別な話
多くの書籍が2ついっぺんに話そうとするから初心者にはつらくなる

あとで関係はしてくるが有効範囲の話がわかるまでいったん寿命の話は無視しろ

255:デフォルトの名無しさん
11/01/11 00:48:57
>>241
a=12345の固定ならそのまま
sprintf(moji,"%d",a);
でいいよ。
でも、固定で無い場合は
int型数値を10進文字列で表すのに
最長で -2147483648 に 終端0を加えた12バイトになるから
moji[12]にしたほうがいい。

256:デフォルトの名無しさん
11/01/11 00:51:00
222はコンパイルするファイルを間違えてないか確認するのと
中間ファイルを削除して再試行すれば解決しないか試せ。


257:デフォルトの名無しさん
11/01/11 00:53:44
配列より難しいですよね関数・・・

これからポインタも出てくるし、これからもお世話になると思います。


258:デフォルトの名無しさん
11/01/11 00:53:49
>>256
>>231

259:デフォルトの名無しさん
11/01/11 00:55:07
関数が難しい場合、大抵関数そのもの以外の部分でつまづいている。

260:デフォルトの名無しさん
11/01/11 00:56:49
といいますと?

261:デフォルトの名無しさん
11/01/11 00:59:59
ポインタとかスコープとか戻り値とか変数の寿命とか

262:デフォルトの名無しさん
11/01/11 01:01:13
関数のスコープの話とか初めて勉強した時でも当たり前のように感じてすんなり呑み込めたけどな。ポインタは知らん

263:デフォルトの名無しさん
11/01/11 01:02:45
return "test";が動いちゃうもんだから、勘違いして死んでるポインタ返して詰まるのはよくある話

264:デフォルトの名無しさん
11/01/11 01:06:11
そう…そのまま飲み込んで。僕のエクスカリバー…

265:デフォルトの名無しさん
11/01/11 01:07:45
「関数そのもの」ってのがわからん

266:デフォルトの名無しさん
11/01/11 01:08:40
それは中学からやり直せ

267:デフォルトの名無しさん
11/01/11 01:22:26
ポインタ変数が引数・戻り値の場合に混乱しやすいと思う

268:デフォルトの名無しさん
11/01/11 01:23:42
関数の後にポインタじゃないんですか?私は関数を先にやってます




関数の章にsizeof演算子とmenmcpy関数が出てきたんですけど、これってわりと頻繁に使いますか?

269:デフォルトの名無しさん
11/01/11 01:25:32
はい

270:デフォルトの名無しさん
11/01/11 01:27:26
これでどうだ

#include <stdio.h>

void func(void)
{
int i = 1;
// funcの内部変数iの範囲ここから

printf("%d\n", i);

// funcの内部変数iの範囲ここまで
}

int main(void)
{
int i = 0;
// mainの内部変数iの範囲ここから

func();

printf("%d\n", i);

return 0;

// mainの内部変数iの範囲ここまで
}

271:デフォルトの名無しさん
11/01/11 01:41:10
よくもまぁ、具体的に疑問点が挙げられていないレスに自己満レスできるね

272:デフォルトの名無しさん
11/01/11 01:44:36
公開オナニーですから

273:デフォルトの名無しさん
11/01/11 01:50:44
いやいや助かりました!
どうもありがとう>>270さん(^-^)/

274:デフォルトの名無しさん
11/01/11 01:55:28
>>270さんほど分かりやすい解説はなかったです(^-^)/

275:デフォルトの名無しさん
11/01/11 01:56:29
どういたしまして(^-^)/

276:デフォルトの名無しさん
11/01/11 01:58:07
うるせー(^-^)/

277:デフォルトの名無しさん
11/01/11 01:59:59
以下のプログラムはコンパイルできるのですが、本当ならば実行結果がbubble→#u##leとなってほしいのに、bubble→bubbleになってしまいます。
何が問題なのでしょうか。

#include<stdio.h>

void str_change(char *st,char c,char d)
{while(*st){if(*st=='c')*st='d';
st++;};
}

int main()
{char st[]="bubble";
char c1='b',c2='#';

printf("%s ->",st);
str_change(st,c1,c2);
printf("%s\n",st);
return(0);
}

278:デフォルトの名無しさん
11/01/11 02:00:08
>>270は神ですね(^-^)/

279:デフォルトの名無しさん
11/01/11 02:01:09
>>277
スレ違い

280:デフォルトの名無しさん
11/01/11 02:04:53
>>277
c,dは変数だから''で囲む必要なし

281:277
11/01/11 02:10:11
>>280
助かりました!!本当にありがとうございます。

282:デフォルトの名無しさん
11/01/11 02:15:08
助かりました>>212
>>211
これを伸張、つまり復号化は可能ですか?

283:デフォルトの名無しさん
11/01/11 06:16:04
復活

284:デフォルトの名無しさん
11/01/11 08:10:07
二つの二次元配列の要素を全て交換する方法って二重ループを回す以外に何か方法はありますか?
二重ループだとすっきりしないので、ポインタなどを使って実現したいのですが・・・

285:デフォルトの名無しさん
11/01/11 09:36:08
>>284
一次元配列相当のポインタにキャストしちゃえば?


286:デフォルトの名無しさん
11/01/11 10:08:31
>>284
#include<stdio.h>
typedef int ELEM_T;
void swap_array(ELEM_T *a, ELEM_T *b, int elems){
ELEM_T t;
while(elems-- >0){
t = *a;
*a++ = *b;
*b++ = t;
}
}
int main(){
// A, B のサイズ, 要素の型は同じ
ELEM_T A[][3] = {1,2,3,4,5,6};
ELEM_T B[][3] = {11,12,13,14,15,16};
//int i;
//int *p = &A[0][0];
//int *q = &B[0][0];
swap_array((ELEM_T*)A,(ELEM_T*)B, sizeof A/ sizeof A[0][0]);
//for(i = 0; i < sizeof A/ sizeof A[0][0]; ++i){
// printf("%d ", p[i]);
//}
//printf("\n");
//for(i = 0; i < sizeof B/ sizeof B[0][0]; ++i){
// printf("%d ", q[i]);
//}

return 0;
}


287:デフォルトの名無しさん
11/01/11 13:53:16
ださっ

288:デフォルトの名無しさん
11/01/11 17:08:21
手本(というほどでもないか)見せてやってよ

289:デフォルトの名無しさん
11/01/11 18:12:14
URLリンク(codepad.org)

389,471,476行目にエラーが起きるんですけどなぜでしょうか?

よろしくお願いします。

290:デフォルトの名無しさん
11/01/11 18:16:28
勉強し始めて3日程度なのですがFizzBuzzというのを見つけたのでやってみました。
まだ1冊目の本も途中なのですがどうにも気になってしまって20分程度考えて書いたのですが
これに対する突っ込みはどのようなものがあるでしょうか。

#include <stdio.h>
int main(){int i,f;for(i=1;i<101;i++){f=0;if(i%3==0){printf("Fizz");f=1;}if(i%5==0){printf("Buzz\n");f=2;}if(f<2){if(f<1){printf("%d",i);}printf("\n");}}return 0;}


291:デフォルトの名無しさん
11/01/11 18:19:59
>>290
なんだそのコードは。他人に読んでもらう気ねーだろ。そういう突っ込み待ちか?

292:デフォルトの名無しさん
11/01/11 18:23:03
すみません短縮しまくったのをそのまんま貼ってしまいました
元はこんなんです。

#include <stdio.h>
int main()
{
int i,f;

for (i=1;i<101;i++)
{
f=0;
if (i%3==0){printf ("Fizz");f=1;}
if (i%5==0){printf ("Buzz\n");f=2;}
if (f<2){if (f<1){printf ("%d",i);}printf ("\n");}
}
return 0;
}


293:デフォルトの名無しさん
11/01/11 18:36:12
>>289
389,471 Clone(); の 引数は Node* である必要があるが static Node な a を渡している
 (Clone(&a) の typo か?)
476 非ブロックで型宣言&初期化はできない
 (else { ... } で囲うべし)

-----続予測されるエラー
471 の Node *copy1 = は if から抜けるとなくなる
そのため 476 の引数 copy1 は未宣言変数に

294:デフォルトの名無しさん
11/01/11 18:39:39
>>293
早い回答ありがとうございます!
copy1を未宣言変数にするとはどういうことですか?

素人なものですみません・・・

295:デフォルトの名無しさん
11/01/11 18:40:33
>>294
する じゃなくて 宣言されてない変数を参照してるよ ってこと

296:デフォルトの名無しさん
11/01/11 18:42:23
>>295
なるほど・・・
解決法はなにかありますか?

297:デフォルトの名無しさん
11/01/11 18:46:04
>>292
ゴルフがしたいなら専用スレがあるのでそちらへどうぞ。

298:デフォルトの名無しさん
11/01/11 19:10:16
>>296
コンパイルエラーをなくすだけなら 390 に Node* copy1 = NULL; とでも

意図したように動くかどうかは(意図がわからないので)別の話

299:デフォルトの名無しさん
11/01/11 19:12:47
あ ごめん 389 に copy1 居るじゃん。

× 471 Node *copy1 = Clone(a);
○ 471 copy1 = Clone(&a);

300:デフォルトの名無しさん
11/01/11 19:13:12
>>298
それをやると2回定義されているとエラーが出ちゃいます・・・

301:デフォルトの名無しさん
11/01/11 19:16:09
>>299
できました!
ありがとうございます!!

またなにかあったら質問させていただきます><

302:デフォルトの名無しさん
11/01/11 21:01:00
>>297
ゴルフが何なのかわからなかったですが・・・なるほど、そういうことですか
しかし自分が聞きたいのはそうではなくてここの動作は普通はこう書くよ、見たいな指摘が欲しいのです。
まあ動けば何でもいい、というのがプログラミングであるというのであればそれもそうなんですが。

303:デフォルトの名無しさん
11/01/11 21:22:43
for(i = 1; i <= 100; i++) {
f = 0;
if(i % 3 == 0) { printf("fizz"); f = 1;}
if(i % 5 == 0) { printf("buzz"); f = 1; }
if(f == 0) printf("%d", i); //if(!f)でも可
printf("\n");
}

304:デフォルトの名無しさん
11/01/11 21:49:47
ありがとうございます
たしかにそうですね、なんでf=2にしてたんだろう・・・そしてif(!f)で真か偽かの判別ができたと・・・
本の通りにやっているのと自分で考えながら書くのでは違うものですね。

そしてやはりi<=100のほうが一般的だったりわかりやすかったりするのでしょうか

305:デフォルトの名無しさん
11/01/11 22:02:24
2ch用語はナベアツ3、5バージョンより難しい

306:デフォルトの名無しさん
11/01/11 22:18:01
>>304
状況による

100までというなら
for(i=start;i<=end;i++)
の方が分かりやすいが

100回ならば
for(i=start;i<start+reps;i++)
の方がいいでしょ

307:デフォルトの名無しさん
11/01/11 22:21:31
>>306
なるほどです
とりあえずまずは慣れですね。
ありがとうございました。

308:デフォルトの名無しさん
11/01/11 22:31:03
>>307
いえいえ、どういたしまして

309:デフォルトの名無しさん
11/01/11 22:36:46
>>308 どうもどうも(^-^)/

310:デフォルトの名無しさん
11/01/11 23:37:42
ある文字列が十進数として扱えるか調べるには
文字列をisdigitで回す他にやりかたありやすか?

311:デフォルトの名無しさん
11/01/11 23:45:37
役不足ですね

312:デフォルトの名無しさん
11/01/11 23:47:04
米不足

313:デフォルトの名無しさん
11/01/12 00:04:26
ロシヒカリの出番だな

314:デフォルトの名無しさん
11/01/12 00:39:10
うはwwwwwwwwwwwwwwww誰が上手いこと言えとwwwwwwwwwwww

315:デフォルトの名無しさん
11/01/12 00:48:16
(^-^)/

316:デフォルトの名無しさん
11/01/12 01:07:14
// テトリス
// linux依存部分(たぶんwindowsだと、書き方違う部分)

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

// キーボードからの一文字入力(待ち無し)
#include <termios.h>
int gc(){
struct termios t0,t1;tcgetattr(fileno(stdin), &t0);t1=t0;
t1.c_lflag &= ~ICANON;t1.c_cc[VMIN]=0;tcsetattr(fileno(stdin),TCSANOW,&t1);
int r = getchar();tcsetattr(fileno(stdin), TCSANOW, &t0);return r;
}

// 1/60秒間、処理を停止する(ウエイト処理)
#include <time.h>
s6(){static struct timespec req={0,16*1000*1000},rem;nanosleep(&req,&rem);}

// 画面の文字をすべてクリアーする関数
cl(){printf("%c[2J",0x1B );}

// カーソル位置をセットする関数
sc(int x, int y){printf("%c[%d;%dH",0x1b, y+1, x+1 );}


317:316
11/01/12 01:09:38
// テトリス本体部分(libcのみ)
unsigned short V[32],B[32],M,*p,*q,m,a,t[]={0x72,0x132,0x462,0x223,0x226,0x2222,0x33},N=0xE007,F=0xFFFF;
int i,j,k,x,y,r,c,_t[]={2,5,8,11,-3,0,3,6,-8,-5,-2,1,-9,-6,-3,16};
iB(){p=B;i=24;while(i-->0){*p++=N;}*p=F;}dB(){p=B+4;j=20;while(j-->0){if(*p==F){*p=N;}p++;}}
sB(){p=q=B+4+20-1;i=j=20;while(j-->0){if(*p!=N){*q--=*p|N;i--;}p--;}j=i;while(j-->0){*q--=N;}}
rrM(){int* t=_t;a=M;M=0;m=1;i=16;while(i-->0){M|=(*t>0)?(a&(m))<<*t++:(a&(m))>>-*t++;m<<=1;}}
lrM(){rrM();rrM();rrM();}nM(){x=4;y=-2;M=t[rand()%7];}_p(char* s){fputs(s,stdout);}p0(){_p(" ");}p1(){_p("回");}pn(){_p("\n");}
eV(){m=0;p=B;q=V;i=32;while(i-->0){if((*q&*p)!=*p){return 1;}p++;q++;}return 0;}
nV(){p=B;q=V;i=32;while(i-->0){*q++=*p++;}m=M;q=V+4+(y-1);i=4;while(i-->0){*q^=(m&0xF)<<(3+x);m>>=4;q++;}r=0;if(eV()){r=1;}return r;}
pV(){sc(0,0);pn();p=V;j=25;while(j-->0){m=1;i=16;while(i-->0){if(*p&m){p1();}else{p0();}m<<=1;}pn();p++;}}
cT(){k=gc();if(k=='n'){y++;}else if(k==' '){while(!nV()){y++;}}else{if(c++>60){y++; c=0;}}if(k=='j'){x--;if(nV()){x++;}}
if(k=='k'){x++;if(nV()){x--;}}if(k=='f'){rrM();if(nV()){lrM();}}if(k=='d'){lrM();if(nV()){rrM();}}}
main(){cl();iB();nM();while(1){cT();if(nV()){y--;nV();memcpy(B,V,2*32);dB();sB();nM();}pV();s6();}}

// 操作方法:
// j,k 左右の移動   d,f 左右の回転   n 下移動   スペース ハードドロップ   Ctrl+c 終了


318:デフォルトの名無しさん
11/01/12 01:11:09
消えろ

319:デフォルトの名無しさん
11/01/12 01:15:38
これがテトリス荒らしである。

320:デフォルトの名無しさん
11/01/12 01:19:18
ニコに感化された糞ガキか。ロシヒカリでも食ってろ。

321:デフォルトの名無しさん
11/01/12 01:24:58
ほっほっ

322:デフォルトの名無しさん
11/01/12 01:26:46
ふっほっ

323:デフォルトの名無しさん
11/01/12 01:35:15
どぴゅっどぴゅっ

324:デフォルトの名無しさん
11/01/12 07:47:59
んほぉぉぉぉ!!!!!!!

325:デフォルトの名無しさん
11/01/12 07:55:18
サドルマン

326:デフォルトの名無しさん
11/01/12 08:00:25
perlにあるcrypt関数ってcでは何に当たりますか?

327:デフォルトの名無しさん
11/01/12 08:14:34
標準にはないのでライブラリを当たってください
Linuxやら使ってるのであれば多分何も入れなくてもcryptが使えます

328:デフォルトの名無しさん
11/01/12 08:33:11
>>327
使えねーな、次

329:デフォルトの名無しさん
11/01/12 08:34:48
>>327
もうちょっとまともな回答よこせよカス

330:デフォルトの名無しさん
11/01/12 08:47:49
>>327


331:デフォルトの名無しさん
11/01/12 09:11:07
>>327
くず

332:デフォルトの名無しさん
11/01/12 09:22:11
eval_pv("print(crypt('foo','bar'));",TRUE);

333:デフォルトの名無しさん
11/01/12 18:51:53
URLリンク(codepad.org)

↑この二重ポインタのsizeof()演算子が思っているような値と違うんですが
これなんでこういう実行結果になるか教えてください

334:デフォルトの名無しさん
11/01/12 18:53:19
お断りします

335:デフォルトの名無しさん
11/01/12 18:58:45
>>333
9 "tdy"
10 "PEOl",

で "tdyPEOl", 相当

11 "ddfd"
12 "dfcvh"

で "ddfddfcvh" 相当

要素数的には 20要素だよん

336:デフォルトの名無しさん
11/01/12 19:00:24
>>333
data の型は char*[20] なので 80 バイト
*data の型は char* なので 4 バイト
特に不思議なようには見えませんが

337:デフォルトの名無しさん
11/01/12 19:15:21
>>333
sizeof(data) が 88 を想定してたんなら 9 と 11 の末尾に ','(カンマ) が抜けてる

338:デフォルトの名無しさん
11/01/12 20:38:21
ゲーム作ってるんだが、2Dアクションゲーム作りたいんだけど
アクションはどうやってプログラミングするの?

339:デフォルトの名無しさん
11/01/12 20:41:32
キャラクターの座標を動かすの

340:デフォルトの名無しさん
11/01/12 20:47:53
>>339
単純すぎないですかw?

腕とか足とか動かしたい

341:デフォルトの名無しさん
11/01/12 20:50:06
>>340
腕とか足のの座標を動かすの

342:デフォルトの名無しさん
11/01/12 20:50:14
A) 股-脛-足の結節点を動かすの
B) 動きの表現の数だけ絵を用意して差し替えるの

343:デフォルトの名無しさん
11/01/12 20:52:12
まぁどうせ納得はいかないんだろうが
これでもかなりちゃんと答えてると知ってほしいな

344:デフォルトの名無しさん
11/01/12 20:53:19
ゲ製行けよ

345:デフォルトの名無しさん
11/01/12 20:56:56
>>340
パラパラ漫画しってるか?2Dならあれといっしょだ

346:デフォルトの名無しさん
11/01/12 21:02:33
なんか最近ゲーム制作ブームなのかその手の本をよく見るな。
いたいけな少年少女を悪の道にすすめるなと

347:デフォルトの名無しさん
11/01/12 21:14:50
少し知能があったらあんなところ目指さない

348:デフォルトの名無しさん
11/01/12 21:16:33
>>341
スーパードンキーコングシリーズみたいな高グラフィックの2Dスクロール
が作りたい、やっぱり言語よりアニメーションソフトのほうがいいですかね?


349:デフォルトの名無しさん
11/01/12 21:26:39
スーファミのドンキーコングってアニメーション綺麗すぎだろ。
どうやって作ったんだろ。

350:デフォルトの名無しさん
11/01/12 21:47:58
あれはプリレンダリング

351:デフォルトの名無しさん
11/01/12 22:16:00
型は変数のサイズを示す意外に役割があるのでしょうか?
たとえば、自分の環境ではintとfloatは同じ4バイトの領域を確保しますが、
int a;
float b;
scanf("%f %d",&a,&b);
のようにintとfloatの各4バイトの領域に逆のフォーマットで値を代入してみましたが、
内容をそれぞれのフォーマットで出力してみるとデタラメな内容が帰って来ました。
printf("%f %d\n",a,b);
型はその環境が定義したサイズ意外に何か役割があるのでしょうか?

352:デフォルトの名無しさん
11/01/12 22:26:20
>351

データの内部フォーマットを示している。
浮動小数については「IEEE 754」をググってみてください。

353:デフォルトの名無しさん
11/01/12 22:28:13
せっかく型つけて使いやすくしてんのに、なんで無駄なことしたがるんだろうなw

354:デフォルトの名無しさん
11/01/12 23:04:16
フォーマットは入力関数のフォーマットにしたがっているものかと思っていました。
入力関数のフォーマットはあくまで、入力されると期待できる形式を表しているんですね。
charとintだとうまくいってたのはint内部フォーマットが単純だからですね。
ありがとうございました。

355:デフォルトの名無しさん
11/01/12 23:14:07
>>352
IEEE754に準拠した32ビットの数値をint型変数に入れるとIEEE754ではなくなるのですか

356:デフォルトの名無しさん
11/01/12 23:19:52
printf("%f %d\n",a,b);

後半の b の値を詰む時に float → double の格上げがおきてるから表示値がくずれてる

357:デフォルトの名無しさん
11/01/12 23:22:55
そんなの分かった上でやってるんだけど

358:デフォルトの名無しさん
11/01/12 23:29:05
>>355
暗黙の型変換

359:デフォルトの名無しさん
11/01/12 23:40:13
>>355
>>352はいろいろと中途半端だから間に受けない方がいいよ
マジレスすると、IEEE形式のビット列をint型変数に格納することももちろん可能

360:デフォルトの名無しさん
11/01/12 23:42:45
>>356
そして printf の %f は float ではなく double が詰まれることを期待し、解釈してる
URLリンク(codepad.org)

361:デフォルトの名無しさん
11/01/12 23:44:22
>>358
違います

>>359
ですよね、ありがとう

362:デフォルトの名無しさん
11/01/12 23:53:07
>>360のドヤ顔が想像できてしまうwwwwwwwwwwww

363:デフォルトの名無しさん
11/01/12 23:58:19
#include <stdio.h>
#include <string.h>
void dispval(const char* name, void* var, size_t len){
int i;
printf("%s [", name);
for (i=0; i<len; i++) {
printf("%02x", ((unsigned char*)var)[i]);
}
printf("]\n");
}
int main(){
int a, d;
float b, c;
int i;

printf("sizeof a=%d\n", sizeof a);
printf("sizeof b=%d\n", sizeof b);
sscanf("1.0 5", "%f %d", &a, &b);
dispval("a", &a, sizeof(a));
dispval("b", &b, sizeof(b));
sscanf("1.0 5", "%f %d", &c, &d);
dispval("c", &c, sizeof(c));
dispval("d", &d, sizeof(d));
printf("%f %d\n", a, b);
printf("%f %d\n", *(float*)&a, *(int*)&b);
return 0;
}

364:デフォルトの名無しさん
11/01/13 00:05:41
>>363
丁寧なテストコードありがとうございます。
最後のprintf文すごいですね。
一度それぞれの型を修正するんですね。
便利な方法を知ることができました。

365:デフォルトの名無しさん
11/01/13 00:09:07
#include<time.h>
したんだけど、
localtime()ってすごく変な仕様だな。
なんで返り値がtm構造体じゃないの? なんでポインタなの?
結果の struct tm ってどこに保存されてるの?
何度もlocaltime()を呼んでたらメモリオーバーフローしないの?
毎回free()してやれば無問題?

って疑問を持ったんだけど、解説してる日本語サイトが全くみつからん。
すっげー気になるところなんだが。

366:デフォルトの名無しさん
11/01/13 00:19:06
URLリンク(www.cppll.jp)

367:デフォルトの名無しさん
11/01/13 00:24:26
#include<time.h>
したんだけど、
localtime()ってすごく変な仕様だな。
なんで返り値がtm構造体じゃないの? なんでポインタなの?
結果の struct tm ってどこに保存されてるの?
何度もlocaltime()を呼んでたらメモリオーバーフローしないの?
毎回free()してやれば無問題?

って疑問を持ったんだけど、解説してる日本語サイトが全くみつからん。
すっげー気になるところなんだが。

368:デフォルトの名無しさん
11/01/13 00:28:01
>>367
free してみれば分かるかもなw

369:デフォルトの名無しさん
11/01/13 00:28:48
>>368
freeしてもどうにもならなかったが・・・

370:デフォルトの名無しさん
11/01/13 00:32:59
URLリンク(codepad.org)
確かに

371:デフォルトの名無しさん
11/01/13 00:35:54
・・・、
いや、何も言うまい。

372:デフォルトの名無しさん
11/01/13 00:36:32
初心者です。
ライフゲーム作ってて、初期の配列を別の配列に移して処理を行い
元の配列に移す操作がわかりません・・
もしよかったらソースコードを教えていただけるとうれしいです

373:デフォルトの名無しさん
11/01/13 00:41:26
>>367
何度localtimeしても同じアドレスが返ってくるよ
freeしちゃダメ

374:デフォルトの名無しさん
11/01/13 00:42:07
>>372
まったく同じ大きさの配列なら memcpy

375:デフォルトの名無しさん
11/01/13 00:43:25
>>372
メモリ系関数に慣れてないなら普通にforとかでなでこればいいじゃん

376:デフォルトの名無しさん
11/01/13 00:43:47
>>327
#define SIZE 100
typedef struct life_tag{
 char p[SIZE][SIZE];
}life;

life a,b;

main(){
 init(a);
 while(1){
  b=a;
  b.p[0][0]=shori;
  b.p[SIZE-1][SIZE-1]=shori_shori;
a=b;
 }
}

377:デフォルトの名無しさん
11/01/13 00:45:19
>>376
構造体タグ名と型定義名は別の名前空間なので、life_tagとする必要はないです。

378:372
11/01/13 00:47:29
みなさんありがとうございます
習いたてで、多分for文だけで書ければいいのですが、頭がごちゃごちゃしてしまって・・
for文のみで書くとどんな感じのソースになりますかね?
本当にすいません

379:デフォルトの名無しさん
11/01/13 00:47:30
なんで配列の代入はできないの?

380:デフォルトの名無しさん
11/01/13 00:47:31
>>377
変な持論いらない

381:デフォルトの名無しさん
11/01/13 00:48:20
>>380

382:デフォルトの名無しさん
11/01/13 00:50:53
持論(笑)

383:デフォルトの名無しさん
11/01/13 00:50:58
>>379
配列の大きさを覚えてないから無理っす。

384:デフォルトの名無しさん
11/01/13 00:56:55
>>379
余裕っす。
URLリンク(www-cms.phys.s.u-tokyo.ac.jp)

385:デフォルトの名無しさん
11/01/13 00:59:05
>367

localtimeは静的領域を内部に持っていて、それのポインタを返す。
よってリエントラントではない。

リエントラント版のlocaltime_rがある。

man on WWW
URLリンク(linuxjm.sourceforge.jp)



386:デフォルトの名無しさん
11/01/13 01:00:45
>379
配列は代入可能な左辺値では無いため。

387:デフォルトの名無しさん
11/01/13 01:04:29
>>385
パーフェクトな回答をありがとっす。
localtime_r()か。
リエントラントとかはどうでもいいけど、手元で用意した構造体にさくっと入るとこが最高。
返値は捨てちゃっていいよね。

388:デフォルトの名無しさん
11/01/13 01:08:45
>>386
消えろ

389:デフォルトの名無しさん
11/01/13 01:36:29
qsort で float データのソートの使い方がいまいちわからん・・・
試行錯誤でなんとかちゃんと動くようになったが・・

390:デフォルトの名無しさん
11/01/13 01:40:37
どの辺が分からないというのだね

391:デフォルトの名無しさん
11/01/13 01:59:05
幾つも条件と処理があって、最終的には二手に分かれるコードがある。
func(){
 do{
  if(isA){
   break;
  }
  途中処理;
  if(isB){
   break;
  }
  成功処理;
  return 1;
 }while(0);
 失敗処理;
 return 0;
}
こんな制御構造にするの初めてなんだけど、意外と見通しも良いし便利。
局所変数を全部引きずれる割りにダブるコードもないし、
fopenとfclose、malocとfreeなんかも対応させ易い。
ifのネストが無くなり、変なフラグも要らない。
何で今まで使ってなかったんだろ。

疲れて変な事してるかな?

392:デフォルトの名無しさん
11/01/13 02:08:41
perlにあるcrypt関数ってcでは何に当たりますか?

393:デフォルトの名無しさん
11/01/13 02:17:12
>>391
すごい今更なんだけど

394:デフォルトの名無しさん
11/01/13 02:18:53
Cにもあるよ

395:デフォルトの名無しさん
11/01/13 02:21:37
do{}while(0);の中でbreak;を使うのは今更か。
なら良かった。
やってることはgotoと変わらん気がしてきたけど。

396:デフォルトの名無しさん
11/01/13 02:24:57
>>395
そう。だからそんな小手先の細工するより、分かりやすく書け。

397:デフォルトの名無しさん
11/01/13 02:32:24
なるほどね。↓の2番目に紹介されてた。
URLリンク(php.net)
優れたCプログラマだってさ。やったー!

398:デフォルトの名無しさん
11/01/13 02:34:14
まぁ、学生や底辺プログラマはこういう小さい小細工ばかりに目が行きがちなのは分からなくもない

399:デフォルトの名無しさん
11/01/13 02:40:48
優れたCプログラマだってさ。やったー!

400:デフォルトの名無しさん
11/01/13 02:41:51
まあ、学生だろうね

401:デフォルトの名無しさん
11/01/13 02:50:25
for( i=0; i<=10; i++)
というfor文でiを1msごとに1プラスされるようにしたいのですがどうすればよいですか?

402:デフォルトの名無しさん
11/01/13 02:59:17
勉強するのにオススメの
C言語の本教えてください

403:デフォルトの名無しさん
11/01/13 02:59:31
>>401
スレ違い

404:デフォルトの名無しさん
11/01/13 03:03:15
ほかでききます

405:デフォルトの名無しさん
11/01/13 03:11:51
>>401
ループ内にカウンタ変数で管理すれば?

406:デフォルトの名無しさん
11/01/13 05:00:24
リアルタイムOSでないwindowsだと、まず1msを出すのが難しいだろ


407:デフォルトの名無しさん
11/01/13 07:09:37
CUIアプリケーションの作成を行っています。
コマンドプロンプトからコマンドAを次のように実行するとき、
複数のファイルも同時に処理するためにはどうすればいいでしょうか?

A file1 file2 file3 file4 .....

よろしくお願いします。


408:デフォルトの名無しさん
11/01/13 07:19:49
>>401
平均して1msならできるが
DWORD start, i;
start = GetTickCount();
for (i=0; i<1000; i++){
while (GetTickCount() - start <= i) Sleep(0);
}

409:デフォルトの名無しさん
11/01/13 07:32:48
>>407
main(){
if(argc>0){
const char *fname = (const char*)argv[1];
<処理>
}
}
としていたら
thread(void* p){
const char *fname = (const char*)p;
<処理>
}

main(){
int i;
for(i=1;i<argc;i++){
<スレッド生成>
}
<終了待ち>
}
とかにする

410:デフォルトの名無しさん
11/01/13 07:55:27
すみません。スレッドが何か分からないのですが、普通にargc回だけ
処理を繰り返すとかではだめなのでしょうか?
また引数の数が幾つかるかは解るのでしょうか?

411:デフォルトの名無しさん
11/01/13 07:58:20
C言語にもスレッドなんてあるんですか。私はC++の話かと思いました。

412:デフォルトの名無しさん
11/01/13 08:29:54
>>410
> すみません。スレッドが何か分からないのですが、普通にargc回だけ
> 処理を繰り返すとかではだめなのでしょうか?
だめ。
"複数のファイルを順番に処理する" 事は出来ても
"複数のファイルも同時に処理する" 事が出来ない。

> また引数の数が幾つかるかは解るのでしょうか?
409では省略したけど、main関数の引数で分かる
int main(int argc,char **argv){}

413:デフォルトの名無しさん
11/01/13 08:41:18
自分のPCはAthlonXP2800なんですけど、スレッド処理ができるのでしょうか?


414:デフォルトの名無しさん
11/01/13 09:44:44
   ∩___∩         |
   | ノ\     ヽ        |
  /  ●゛  ● |        |
  | ∪  ( _●_) ミ       j
 彡、   |∪|   |        J
/     ∩ノ ⊃  ヽ
(  \ / _ノ |  |
.\ “  /__|  |
  \ /___ /


415:デフォルトの名無しさん
11/01/13 10:24:21
できる

416:デフォルトの名無しさん
11/01/13 10:25:51
釣り針がでか過ぎて口に入りきらない

417:デフォルトの名無しさん
11/01/13 11:34:05
>>413
シングルコアなのでできない

418:デフォルトの名無しさん
11/01/13 11:36:10
>>417
そーなのかー

419:デフォルトの名無しさん
11/01/13 12:07:40
高度情報を教えてください

420:デフォルトの名無しさん
11/01/13 12:57:40
ここは試験対策スレではありませんので、他を当たってください

421:デフォルトの名無しさん
11/01/13 13:00:35
同時にの意味が皆さん厳格に解釈なさっているようですが、この場合の
「同時に」は一つのコマンドラインで複数のファイルを処理できるという意味です。

422:デフォルトの名無しさん
11/01/13 13:09:49
もちろんみんなわかってるさ
揚げ足を取って面白おかしく解釈して楽しんでるだけだよ

423:デフォルトの名無しさん
11/01/13 13:43:49
>>422
いいからさっさと正解書けよ無能!!

424:デフォルトの名無しさん
11/01/13 13:44:59
>>422
糞人

425:デフォルトの名無しさん
11/01/13 13:49:53
>>422は糞の代表的糞味噌だな

426:デフォルトの名無しさん
11/01/13 14:04:18
>>422
糞で無能とかマジ笑えるwww

427:デフォルトの名無しさん
11/01/13 14:06:05
街で>>422を見かけたから顔面ぶん殴ってやったら涙目でなんかブツブツ言いながら顔真っ赤にしていたなwwwwwww

428:デフォルトの名無しさん
11/01/13 15:17:37
バスに乗って駅まで行く
駅に何時何分までに到着したいかを入力すると何時何分発のバスに乗れば良いのかを表示する
っていうプログラムを作りたいんですけど、どういうふうに考えればいいのか分からないのでアドバイスください。

429:デフォルトの名無しさん
11/01/13 15:21:31
>>428
着時間から発時間を決定する

430:デフォルトの名無しさん
11/01/13 15:26:30
バスは分単位で正確に運行できない
おわり

431:デフォルトの名無しさん
11/01/13 15:28:52
グーグルマップ使う

432:デフォルトの名無しさん
11/01/13 15:34:01
>>428
↓こういう感じの時刻表を使って、
URLリンク(railway.jr-central.co.jp)
着駅を横に見て何時何分までに着く便を探し、縦に見てそれが何時何分に出発するかを探す

433:デフォルトの名無しさん
11/01/13 15:52:58
各駅に、他の各駅までの所要時間情報を持たせる。
A B C の駅があった場合、
AはBまでの時間、Cまでの時間の情報を持ち
BはA、C
CはA、Bへの所要時間の情報をもつ。

あとは、各駅が、バスの到着する時間の情報を持つ。
AはB行きがa1時 a2時、C行きがa3時 a4時
BはA行きがb1時 b2時、C行きがb3時 b4時
CはA行きがc1時 c2時、B行きがc3時 c4時 だとする。

この2つの情報から、答えを得る。
たとえば、スタート地点がA駅で、ゴールがB駅なら、
まずA駅の持ってる、各駅への所要時間から、C駅までかかる時間Tを得て
次にA駅の持ってる時刻表情報からC行きの時間 a3 と a4 からそれぞれ Tを引いて、値が0以上で最も小さい時間になる ax が、
乗るべきバスの時間になる。


434:デフォルトの名無しさん
11/01/13 15:55:33
>>422まじ糞だな

435:デフォルトの名無しさん
11/01/13 16:00:46
計画妊娠させてやりたい

436:デフォルトの名無しさん
11/01/13 16:16:18
出産日を入力したら、何月何日にセックスすればいいか表示するプログラムを作りたいのですが、
どうすればいいのかわかりません。

437:デフォルトの名無しさん
11/01/13 16:23:10
俺にもわかりません

438:デフォルトの名無しさん
11/01/13 16:28:04
>>436
遅延評価を利用すれば、出産日を遅くすることが可能

439:デフォルトの名無しさん
11/01/13 16:48:42
>>422
おい無能で糞で低脳、何か言えよwwwwwwww
俺は高脳だからなwwwwwwwwwwwwwwwwwwwww

440:デフォルトの名無しさん
11/01/13 18:00:08
リエントラント(笑)

441:デフォルトの名無しさん
11/01/13 18:31:07
リエントラントとやらを説明できる奴なんてこのスレにいるわけがないw

442:デフォルトの名無しさん
11/01/13 19:47:58
基本情報技術者レベルの話だろ

443:デフォルトの名無しさん
11/01/13 19:58:31
>>442
基本情報技術者レベルの話すら説明できないお前って(笑)

444:デフォルトの名無しさん
11/01/13 20:00:42
    /\___/ヽ
   //~    ~\:::::\
  . |  (・)   (・)   .:|
  |   ,,ノ(、_, )ヽ、,, .::::|   は?
.   |   `-=ニ=- ' .:::::::|
   \  `ニニ´  .:::::/
   /`ー‐--‐‐―´\

445:デフォルトの名無しさん
11/01/13 20:00:48
>>422=>>442
糞の役にも立たないw

446:442
11/01/13 20:03:38
422の時間は大学で授業受けてたっつーの。お前なんか幸せそうだな

447:デフォルトの名無しさん
11/01/13 20:05:55
446 :442:2011/01/13(木) 20:03:38
422の時間は大学で授業受けてたっつーの。お前なんか幸せそうだな

448:デフォルトの名無しさん
11/01/13 20:06:05
つーか流れ読んでなかったが>>422にレスしてるのってどうやら同一人物みたいだな
一人が悔しくて騒いでただけか

449:デフォルトの名無しさん
11/01/13 20:07:16
(1)とりあえず自演ということにする
(2)「一人で悔しかったのか」というテンプレレスで勝った気になる

450:デフォルトの名無しさん
11/01/13 20:08:47
「糞」って連呼してる奴が何人もいるのか、語彙少なっw

451:デフォルトの名無しさん
11/01/13 20:08:57
422の時間は大学で授業受けてたっつーの(笑)

452:デフォルトの名無しさん
11/01/13 20:10:00
(3)とりあえず語彙の少なさに突っ込めば優位に立てると信じている

453:デフォルトの名無しさん
11/01/13 20:10:03
規制くらったから方針変更しただけじゃねーの

454:デフォルトの名無しさん
11/01/13 20:11:46
釣れたw

455:デフォルトの名無しさん
11/01/13 20:12:45
今年の春に基本情報受けますが何か?

456:デフォルトの名無しさん
11/01/13 20:25:59
受かってから言えよ
まあ基本情報は合格率は低いが専門学校の奴が落ちまくってるだけだな
大学では周りにそんな資格に興味のある奴は少ないし、試しに受けてみたら2週間くらいの対策で受かったわ
Cの問題の過去問は問題設定は置いといてもコードはK&Rの練習問題くらいだと思った
それで俺が受けた回はCというよりただの文章読解の知能テストだったから焦った
選択問題だからC回避のためにJavaか表計算もやっといた方が良いかもな。俺は面倒だからC一択だったけど

457:316
11/01/13 20:47:50
改造してスペーストルネードテトリスに改造した
URLリンク(codepad.org)

ちなみにボクのハイスコアです。すごいでしょ
[Scr: 5980] [Line: 99] [Lv: 5]
必勝法はきれいにブロックを積んでくこと。あと瞬時の判断力です(^_^v


458:デフォルトの名無しさん
11/01/13 21:04:07
>>456
お前の受けた回だけでも基本情報だけでもなくて、どの試験もいつもそんな感じ
国語力必須

459:デフォルトの名無しさん
11/01/13 21:05:27
>>458
過去問と比較して相対的にそうだったって言ってるのが分からないかな

460:デフォルトの名無しさん
11/01/13 21:09:38
そうか、すまんかった、許せ

461:デフォルトの名無しさん
11/01/13 21:14:26
仲良く!

462:316
11/01/13 21:21:04
これが有名なレベル9の壁だ。
[Scr: 12180] [Line:178] [Lv: 9]
名人くらいになると、ときどきレベル9まで行けちゃうのさ♪ でもその先は・・・さすがの名人でもお手上げさ(>_・「

<コロコロ読者のみんなに、名人から特別アドバイス>
    一本づつ消しても点数低いから、まとめて消すと点数高いよ。
    でも、欲張りすぎると画面が埋まっちゃうから、そこは注意がひつようだ!

    あと、内部的な透明ブロックがどこまで下がってるのかを感ぢる”野性のカン”も大切。
    それと、ゲームは一日一時間(>う<v


463:デフォルトの名無しさん
11/01/13 21:28:04
初期化子ってなんなんでしょうか…?(-_-;
どなたか教えて下されませんか?

464:デフォルトの名無しさん
11/01/13 21:31:28
こんなスレに誤爆とは珍しいな

465:デフォルトの名無しさん
11/01/13 21:38:50
ここじゃだめですか?
どこで聞けばいいんだ?

466:デフォルトの名無しさん
11/01/13 21:39:45
ごめん。それっぽいとこありました。byebye.

467:デフォルトの名無しさん
11/01/14 01:37:50
ここよりニコニコの方がスゴイしwwwwwww

468:デフォルトの名無しさん
11/01/14 02:41:36
C言語で文字列を逆順にするプログラムを書いています。
なるべくメモリ使用量を減らすことを念頭に置き、以下のような感じで作りました。
これだと、オリジナルの文字列がどんなに長くても、+1文字分しかメモリを使わないと思いました。
これはポインタを使っていないのですが、ポインタを使うように書き換えるにはどうしたらいいでしょうか?

#include <stdio.h>
#include <string.h>
int main() {
 char orig[32] = "abcdef";
 char tmp[1]; // 作業用
 int i = 0;

 printf("origの内容 = %s\n", orig); printf("origのアドレス = %p\n", orig);
 for (i = 0; i < strlen(orig); i++) {
  printf("%c\n", orig[i]);
  printf("%p\n", &orig[i]);
 }
 
 int from = 0;
 int to = strlen(orig) - 1;
 char result[strlen(orig)];
 for (i = 0; i < strlen(orig); i++) {
  tmp[0] = orig[from];
  orig[from] = orig[to];
  orig[to] = tmp[0];
  from++;
  to--;
  if (from > to || from == to) { // from が to と逆転したら終了
   break;
  }
 }
// 続く

469:468
11/01/14 02:41:56
// 続き

 printf("origの内容 = %s\n", orig); printf("origのアドレス = %p\n", orig);
 for (i = 0; i < strlen(orig); i++) {
  printf("%c\n", orig[i]);
  printf("%p\n", &orig[i]);
 }
}


470: ◆QZaw55cn4c
11/01/14 03:10:45
>>468
URLリンク(codepad.org)

471: ◆QZaw55cn4c
11/01/14 03:13:53
>>468
訂正します。
URLリンク(codepad.org)

472:デフォルトの名無しさん
11/01/14 03:21:10
pを文字列の最後まで動かしてんのにそれを再利用しないでstrlen()使うとか、
ほんとに無駄なことが大好きなんだなw

473:デフォルトの名無しさん
11/01/14 03:26:38
メモリ減らすなら最初の文字列格納しているところを再利用しろ

474:468
11/01/14 03:28:27
>>471
どうもありがとうございます。
ポインタ形式でも、 >>471 の5行目で char tmp として定義しているように、
詰め替え作業のための1文字は必要なのですね。

1点質問なのですが、4行目を
char *orig = "abcdef";
に書き換えると、
16行目の
*p = *q;
で segmentation fault で落ちるようになります。
これはどうしてでしょうか?


475: ◆QZaw55cn4c
11/01/14 03:31:07
>>472
なるほどねえ。

476:468
11/01/14 03:32:44
>>471 のソースを、 >>472 の指摘の通り修正してみました。
URLリンク(codepad.org)

477: ◆QZaw55cn4c
11/01/14 03:35:09
>>474
お使いの環境では、char *p = "abcdef"; としたときに、p の指す領域が、書き込み不可能として扱われているのだと思います。
私の環境 cygwin/Windows XP, gcc4 では問題ありませんでした。

478:468
11/01/14 03:38:00
>>477
レスどうもありがとうございます。

こちらの環境を書いていなくて申し訳ありませんでした。
Win Xp SP2、cygwin 1.5.21 、 gcc 3.4.4 (4年ぐらい前にインストールした環境)
で行いました。

$ uname -a
CYGWIN_NT-5.1 ***** 1.5.21(0.156/4/2) 2006-07-30 14:21 i686 Cygwin

479:デフォルトの名無しさん
11/01/14 03:40:45
URLリンク(www.geocities.jp)

480:デフォルトの名無しさん
11/01/14 03:42:05
>>474
>char *orig = "abcdef";
"abcdef"のアドレスをorigにおぼえさしてるだけでバッファは無い

481:468
11/01/14 03:48:21
>>480
レスどうもありがとうございます。

char orig[] = "abcdef";

char *orig = "abcdef";
は同じものだと思っていたけど、

前者はちゃんとメモリを確保しているのに対し、
後者はあくまでも "abcdef" の先頭アドレスが、*orig というポインタ変数に入っているだけということか。

482: ◆QZaw55cn4c
11/01/14 03:48:31
>>478
それは変ですね?環境は私とほぼ同じ。なんででしょう?
$ gcc-3 -v
Reading specs from /usr/lib/gcc/i686-pc-cygwin/3.4.4/specs
Configured with: /managed/gcc-build/final-v3-bootstrap/gcc-3.4.4-999/configure -
-verbose --program-suffix=-3 --prefix=/usr --exec-prefix=/usr --sysconfdir=/etc
--libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/s
hare/info --enable-languages=c,ada,c++,d,f77,pascal,java,objc --enable-nls --wit
hout-included-gettext --enable-version-specific-runtime-libs --without-x --enabl
e-libgcj --disable-java-awt --with-system-zlib --enable-interpreter --disable-li
bgcj-debug --enable-threads=posix --enable-java-gc=boehm --disable-win32-registr
y --enable-sjlj-exceptions --enable-hash-synchronization --enable-libstdcxx-debu
g
Thread model: posix
gcc version 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)

$ uname -a
CYGWIN_NT-5.1 ***** 1.7.5(0.225/5/3) 2010-04-12 19:07 i686 Cygwin

483:468
11/01/14 03:53:25
>>482
こちらではこんな感じになりました。(改行は手作業でやっています)

$ gcc -v
Reading specs from /usr/lib/gcc/i686-pc-cygwin/3.4.4/specs
Configured with: /gcc/gcc-3.4.4/gcc-3.4.4-1/configure --verbose --prefix=/usr --exec-prefix=/usr
--sysconfdir=/etc --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info
--enable-languages=c,ada,c++,d,f77,java,objc --enable-nls --without-included-gettext
--enable-version-specific-runtime-libs --without-x --enable-libgcj --disable-java-awt --with-system-zlib
--enable-interpreter --disable-libgcj-debug --enable-threads=posix --enable-java-gc=boehm
--disable-win32-registry --enable-sjlj-exceptions --enable-hash-synchronization --enable-libstdcxx-debug : (reconfigured)
Thread model: posix
gcc version 3.4.4 (cygming special) (gdc 0.12, using dmd 0.125)

484:デフォルトの名無しさん
11/01/14 05:17:16
URLリンク(www.geocities.jp)


485:デフォルトの名無しさん
11/01/14 07:47:39
レジスタを使えば余分なメモリは1バイトも必要ないよ

486:デフォルトの名無しさん
11/01/14 11:57:22
低級言語と聞きましたがハッカー御用達言語ですか。

487:デフォルトの名無しさん
11/01/14 13:08:08
環境変数とAPIの違いが分からない、どちらもインターフェイスですよね?


488:デフォルトの名無しさん
11/01/14 15:22:52
へーそうなんだ

489:デフォルトの名無しさん
11/01/14 16:20:04
>>487
環境変数はメモリだよ。メモリに変数名と値がずらずら書かれてる。
環境変数をインターフェースとはあまり言わないと思うが、
まぁ実行環境とアプリケーション間のインターフェースなのかなぁ…んー。

490:デフォルトの名無しさん
11/01/14 16:35:54
余計な感動詞付けんな

491:デフォルトの名無しさん
11/01/15 07:02:59
C言語をはじめたばかりであまりわからないのですが、
ビットシフトはなんの役に立つのでしょうか?

492: [―{}@{}@{}-] デフォルトの名無しさん
11/01/15 07:13:01
1バイトずつrgb値が格納された変数からr値だけを取り出すときとか

493:Perl忍者 ◆M5ZWRnXOj6
11/01/15 11:57:00
画像から色がわかるやつ教えてください

494:Perl忍者 ◆M5ZWRnXOj6
11/01/15 12:27:05
色からその色の画像がわかるやつおしえてください

495:デフォルトの名無しさん
11/01/15 13:19:37
日本語で

496:Perl忍者 ◆M5ZWRnXOj6
11/01/15 14:28:06
日本語ですよどうみても

あなたバカですか?

497:Perl忍者 ◆M5ZWRnXOj6
11/01/15 14:29:13
ひらがなと漢字を使ってますよ
文がおかしいといいたいのですか?

日本語でってなんかかっこつけていうんじゃねえよしね
死ねよかす
死ね

498:デフォルトの名無しさん
11/01/15 14:44:21
日本語でお願いします

499:Perl忍者 ◆M5ZWRnXOj6
11/01/15 15:31:22
だめだこりゃ

500:デフォルトの名無しさん
11/01/15 15:43:22
>>491
ビット演算をしたい時。
主に組み込み系。
デスクトップアプリやWEBアプリではほとんど使い道がない。

>>493
画像が格納されているVRAMのアドレスを調べてそのアドレスの値を取得。
画面モードによって画像データが何バイトずつ格納されているのか変わるので注意。

>>494
画像のVRAMのアドレスを調べて目的の色と同じ値をもつアドレスを走査。

501:Perl忍者 ◆M5ZWRnXOj6
11/01/15 16:00:07
そんなことしってんだよ!!

502:Perl忍者 ◆M5ZWRnXOj6
11/01/15 16:03:42
>>500
おう

503:デフォルトの名無しさん
11/01/15 16:04:10
>>501
解決してよかったな

504:Perl忍者 ◆M5ZWRnXOj6
11/01/15 17:06:11
画像ってCで読み込むとバイナリで読み込まれるよな

VRAM領域に読み込ませるにはどうやんの

Windows7とLinux用に教えて
APIとかあんの?

505:デフォルトの名無しさん
11/01/15 17:19:47
直接VRAMに読み込ませるAPIは無い。一般的にはRAMに読み込んでから転送。

506:Perl忍者 ◆M5ZWRnXOj6
11/01/15 17:29:15
Googleの色検索みたいなの

もういいです

507:Perl忍者 ◆M5ZWRnXOj6
11/01/15 17:30:42
>>504

はい

508:デフォルトの名無しさん
11/01/15 17:52:05
>>507
一般的にはRAMに読み込んでから転送
これをするPerlコード教えてください

509:Perl忍者 ◆M5ZWRnXOj6
11/01/15 18:31:28
URLリンク(d.hatena.ne.jp)
これがあったからお前らいらね

カエレしね

510:デフォルトの名無しさん
11/01/15 18:41:47
ランレグス圧縮についてここまでできたのですが、
#include<stdio.h>
int main(void){
char x1=0, x2=0;
int x, count=0;
while((x=getchar())!=EOF){
x2=x1;
x1=x;
if(x1==x2){
count++;
}else{
if(count>1) printf("%d", count);
printf("%c", x1);
count=1;
}
}
if(count>1) printf("%d", count);
return 0;
}
これだと手入力でaaabbbだとa3b3と表示されます。
これをtxtファイルからaaabbbを読み込んでtxtファイルに出力してa3b3と表示できますか?


511:デフォルトの名無しさん
11/01/15 18:50:57
標準入出力へリダイレクトする

hoge <in.txt >out.txt

512:デフォルトの名無しさん
11/01/15 19:06:56
スレリンク(pc2nanmin板)
でも質問してるじゃねぇか。
せっかくコード書いたのに・・・・。

513:デフォルトの名無しさん
11/01/15 19:10:02
ホモ

514:デフォルトの名無しさん
11/01/15 19:24:35
宿題スレにも沸いた奴だろ

515:デフォルトの名無しさん
11/01/15 19:26:54
答えたくなきゃ答えるな、アホ

516:デフォルトの名無しさん
11/01/15 19:36:05
ありがとうございます。
すいません。いろんな方の意見を聞きたかったので。

517:デフォルトの名無しさん
11/01/15 19:39:24
人の善意をぶちこわす最低な奴だな

518:デフォルトの名無しさん
11/01/15 19:43:40
ホモ

519:デフォルトの名無しさん
11/01/15 19:55:37
==main.c==
#include <stdio.h>
#include "struct.h"
#include "sub.h"
struct FOO g_foo;
int main(){
printf("%d\n",g_foo.nNum1);
Bar();
return 0;
}
==sub.h==
#include <stdio.h>
#include "struct.h"
void Bar(void);
==sub.c==
#include "sub.h"
void Bar(void){
printf("%d\n",g_foo.nNum2);
}
=struct.h=
struct FOO{
int nNum1;
int nNum2;
};
extern struct FOO g_foo;
上記の様に、グローバルな構造体FOOをmain.cとsub.cで利用しようと試みているのですが、
redefinition of 'struct FOO'等のエラーが出てしまいます。
何方か解決方法を教えていただけないでしょうか。

520:デフォルトの名無しさん
11/01/15 19:59:55
>>519
main.c から
#include "struct.h"
#include "sub.h" → #include "struct.h"
でstruct.hが合計2回読まれてるので、struct FOOが2回定義されるから、エラーになる
インクルードガードでぐぐるとよい

521:519
11/01/15 20:16:21
>>520
回答有難うございます。
==struct.h==
#ifndef STRUCT_H
#define STRUCT_H
struct FOO{
int nNum1;
int nNum2;
};
extern struct FOO g_foo;
#endif //STRUCT_H
で動いてくれました。


522:デフォルトの名無しさん
11/01/15 22:27:13
すみません関数の
返す値とか返り値とか
関数名()の()の中身とか
がわかりません
なにがわからないのかわからないかもしれませんがorz



523:デフォルトの名無しさん
11/01/15 22:32:11
関数fに対して、f(x, y)のx, yが引数、関数fに引数x,yを渡して処理した結果が戻り値。
C言語ではf(x, y)と書くことで関数fに引数x, yを渡す。

a = f(x, y);
とすれば、変数aにf(x, y)の戻り値が代入される。

524:デフォルトの名無しさん
11/01/15 22:35:31
ホモ

525:デフォルトの名無しさん
11/01/15 23:02:38
()には関数にあげるもの、返り値ではなく戻り値は関数がくれるもの

526:デフォルトの名無しさん
11/01/15 23:08:33
戻り値のほうが多数派とはいえ、返り値もreturn value の訳語としては十分通用するレベル

527:デフォルトの名無しさん
11/01/15 23:42:29
返り値は素人臭くて恥ずかしい

528:デフォルトの名無しさん
11/01/15 23:44:15
別にどっちでもいいんだけどね

529:369
11/01/15 23:46:19
ASP.NETから起動したexeの結果をhtml側に受け渡すためには
return
を使うのでしょうか?

530:デフォルトの名無しさん
11/01/16 00:18:45
ポインタって何の役に立つんですか?プログラムを作る上でどういった利点が
あるのでしょうか??

531:デフォルトの名無しさん
11/01/16 00:19:06
ちょっと確認したいんですが
fgets(t,100,fp)で標準入力から100バイトとってtに入れるんだけど
\0で文字の終わりですよね
で \0以降は何も入らないというか入ってないんでしょうか?

532:デフォルトの名無しさん
11/01/16 00:20:01
>>530
printf に文字列を渡すことができる

533:デフォルトの名無しさん
11/01/16 00:20:31
>>531
ゴミが入ってる

534:Perl忍者 ◆M5ZWRnXOj6
11/01/16 00:38:20
画像をメモリ上に読み込む関数をおしえてくれ

535:デフォルトの名無しさん
11/01/16 00:39:33
loadimg()

536:デフォルトの名無しさん
11/01/16 01:06:03
EOFって何ですか?
良くわかりません。

編集エディタの上左端に[EOF]とよくありますよね?
プログラミング組む時も良く使うのですがEOF=-1??
良く分かりません。教えてください。

537:デフォルトの名無しさん
11/01/16 01:12:11
End of File

538:デフォルトの名無しさん
11/01/16 01:13:53
>>537
つまりreturn0;=EOFですか?
このプログラムは正常終了したよって知らせるものですか?
良く分からなくて頭がおかしくなりそうです。


539:デフォルトの名無しさん
11/01/16 01:20:43
ファイルの中のデータの羅列の最後に来ましたよ~
っていうのをお知らせするもの…
とでも思ってくれればよい

540:デフォルトの名無しさん
11/01/16 01:21:12
ファイルの終端記号
ファイルを最後まで読み込んだ時に返される。
実体は-1

541:デフォルトの名無しさん
11/01/16 01:22:58
>>538

編集エディタのEOFは文章の最後という意味。
開業したらEOFは一行下がるでしょ?

542:デフォルトの名無しさん
11/01/16 01:23:18
>>540
return0とは違うのですか?

543:デフォルトの名無しさん
11/01/16 01:26:06
>>541
最後の行が変わっていいのですか?一行下がると
それは最後じゃないじゃないですか。

544:デフォルトの名無しさん
11/01/16 01:27:52
return 0; はプログラムの最後の戻り値。
エディタのEOFは編集中の文章の最後という意味。

何のエディタ使ってるか知らないがエディタはC言語専用のものではない。
手紙を書こうがJAVA言語書こうが自作言語書こうがエディタで書いている文章の最後
を表す。

もう来るな!

545:デフォルトの名無しさん
11/01/16 01:28:12
これはちょっと勉強し直せとしか言えない

546:デフォルトの名無しさん
11/01/16 01:30:16
文章の最後がEOFってどういう意味ですか?
例えば100行目=EOFだとして、改行して101行目になるならば
EOF=100行目に矛盾しませんか?

547:デフォルトの名無しさん
11/01/16 01:32:29
文章の最後の戻り値ということは

#include<stdio.h> EOF
int main()EOF
{EOF
int i;EOF
i=1;EOF
printf("%d\n",1);EOF
return 0;EOF
}EOF

こうするのですか?


548:デフォルトの名無しさん
11/01/16 01:32:58
あ~
プログラム中に書いてあるEOFは
ファイルオープンしてデータの最後を表す。

エディタについている消したくても消せないEOFというのはエディタのもの。
別物と思っとけ。

549:デフォルトの名無しさん
11/01/16 01:34:09
>>547
ジュース吹き出した。
これはひどいw

550:デフォルトの名無しさん
11/01/16 01:35:10
>>547
そのプログラムコードではEOFはすべて消せ。

551:デフォルトの名無しさん
11/01/16 01:35:36
さすがにネタだろww



552:デフォルトの名無しさん
11/01/16 01:35:44
\0とごっちゃになってる。それは文字列の終端

553:デフォルトの名無しさん
11/01/16 01:36:55
>>541のレスでおかしくなってんぞw

554:デフォルトの名無しさん
11/01/16 01:37:32
たとえばプログラムやる人ならわかると思うけど、0には特別な意味を持たせることがある。
たとえば配列に文字を入れていき、最後に0を入れたところを終わりとする決まり。その最後の印として0を使ったりする。
でも、べつに実際は0でなくてもいい。1でもいいし、2でもいいし、'A'でも'B'でも何でもいい。その配列を読む仕組みを自分で決めて、たとえば
文字列の最後を示す印に'A'をつかったって良い。 ただ、実際は0が都合がいいから0が使われてるだけ。 もちろん0の後ろに文字を続けたっていい。

EOFも同じで、ただの印。テキストファイルの終端を表す。
べつにEOFとしてどんな数字を使ってもいい。ただ、実際は1111111111..... が都合がいいから、11111111111....がEOFとして使われてるだけ。
(-1は、全部のビットが1の状態。11111111......)
(int型が32bitだとしたら、EOFはint型なので、実際はビットは 11111111111111111111111111111111)

たとえば、ファイルの最後にEOFが無くてもいいし、文字列の最後に0が無くてもいい。
'A'をEOFとして扱ってもいいし、文字列の最後を'A'として扱ってもいい。自分でデータを読む関数を書くときに、それがわかってれば実は何を使っても書ける。
ただ、一般的にEOFは-1だし、文字列の最後は0にするのが普通だから、他の人はテキストデータを読むときに、そういう形で記録されてることを期待してデータを読む。
だから一般的な0やEOFに合わせた方が他人にも使いやすいデータになるだろうし、他人の作った関数で処理するときも上手く動くだろうってだけの理由。
だから文字列の最後を意味する数字や、テキストファイルの最後を意味する数字がほぼ固定されてる。でも実際は何でもいい。関数を書く本人がわかってれば何を使っても動く。


555:デフォルトの名無しさん
11/01/16 01:51:00
ナルホドやっと分かりました。
つまりこういうことですね。[EOF]



556:デフォルトの名無しさん
11/01/16 01:51:10
>>554
人がよすぎワロタww

557:デフォルトの名無しさん
11/01/16 01:52:08
マジでこういう釣りはいいから…

558:デフォルトの名無しさん
11/01/16 01:54:25
>>554
ありがとうございます、じっくり読んでまたレスします。
本当に分からない事が次々に壁になって意識が飛びそうです。

559:デフォルトの名無しさん
11/01/16 01:58:30
俺の予想では

C言語初めて+エディタというものも初めて。
サクラエディタあたりを使っているためエディタのEOFと
ファイルからのデータ読み込みのEOFがごっちゃになってる

と見た。

560:デフォルトの名無しさん
11/01/16 01:58:49
>>557
たまにはこういう息抜きがあっても良いw

561:デフォルトの名無しさん
11/01/16 02:00:03
釣り針がでかすぎて飲めねーよ

562:デフォルトの名無しさん
11/01/16 08:42:57
URLリンク(codepad.org)
ランダムにテキストの中の文字を出力するプログラムを書いているのですが5行目しか出力されません
どうすれば改善されるでしょうか

563:デフォルトの名無しさん
11/01/16 08:51:50
乱数初期化したら?

564:デフォルトの名無しさん
11/01/16 09:02:58
n = rand() % 6;
の前に
srand((unsigned) time(NULL));
を追加

565:デフォルトの名無しさん
11/01/16 12:09:42
C言語の入門書はスレッドとか画像処理も教えるべき

566:デフォルトの名無しさん
11/01/16 13:23:20
mainから関数呼び出してfor文を1回目実行させ
mainにもどり、また1回目で呼び出した関数でfor文を実行した場合
2回目のfor文では初期化((for(n=0;fgets(t,10,fp)!=NULL;n++)の場合n=0)
は実行されるんですか?


567:デフォルトの名無しさん
11/01/16 13:29:53
(ホモ);

568:デフォルトの名無しさん
11/01/16 13:30:31
*

569: [―{}@{}@{}-] デフォルトの名無しさん
11/01/16 13:34:12
for文の中でnの値をprintfしてみればいいじゃない

570:デフォルトの名無しさん
11/01/16 13:34:40
>>566
なんで実行されない可能性があると思うの?

571:デフォルトの名無しさん
11/01/16 13:43:23
自分で勉強用に ubuntu10.10で、画像メモリにデータを書き込む方法。のテストを書いてみました。
特別なライブラリは、一切使ってません。(使ったライブラリーは stdio.h と stdlib.h だけです。)
よかったら参考にどうぞ。

ダウンロード方法;
1.
    適当なディレクトリに移動します。

2.
    ソースをダウンロードします。
    git clone git://git.pf.sourceforge.jp/gitroot/k/ke/kemeco/io_fb.git

コンパイル方法:
3.
    ソースディレクトリに移動します。
    cd io_fb

4.
    コンパイルします
    make

実行方法:
5.
    (Alt + Ctrl + F1) ~ F6 のどれかのキーを押して、tty画面に移動し、ログインします。(gnomu上のコンソールでは動かないです)

6.
    管理者権限でプログラムを実行します。(ユーザー権限だと、フレームバッファに直接書いたりできません)
    sudo ./io_fb_test

7.
    うまく動けば、画面にフェドラっぽい青いグラデーションが表示されるはずです。
    gnome 画面に戻るには (Alt + F7) ~ F8 のどれかのキーを押せば戻れます。

572:デフォルトの名無しさん
11/01/16 14:13:18
URLリンク(codepad.org)
このプログラムのコンパイル結果が
$ gcc x.c
x.c: In function ‘sort’:
x.c:84: warning: passing argument 4 of ‘qsort’ from incompatible pointer type
/cygdrive/c/Users/mituru/AppData/Local/Temp/ccH37fKt.o:x.c:(.text+0x1b1): undefi
ned reference to `_fptintf'
collect2: ld returned 1 exit status
こうなって実行できません><

573:デフォルトの名無しさん
11/01/16 14:17:37
>>572
間違い探し。 以下の2つの違うところはどこでしょう?
fptintf
fprintf

574:デフォルトの名無しさん
11/01/16 14:22:41
>>572
84行目の引数の型が間違ってる。というかmycompに引数を与えてない

575:デフォルトの名無しさん
11/01/16 16:16:48
■質問
hello.c というソースコードから
hello.obj, hello.exe ができるまでの流れについて確認させて下さい。

自分なりの考えを以下に書きましたので、
合っているかどうかコメントいただけるととても嬉しいです。よろしくお願いします

-----------------------------------------------------------------------------

※ hello.c は「hello」という文字列を出力するソースコードとする。
文字列を出力するには printf というライブラリ関数を使うが、
使うには宣言をする必要がある。それが #include <stdio.h> という命令である。

printf というライブラリ関数はライブラリ内で定義されているため、
hello.c の実行可能プログラムを実行するにはライブラリもメモリ上にロードする必要がある。
そして、メモリ上にロードされたライブラリにある printf のアドレスを
実行可能プログラムが参照する必要がある。

ソースコードをコンパイルして生成するオブジェクトファイルには、
printf のアドレスは仮のアドレスとなっている。
リンカを実行した時に仮のアドレスが確定し、実行可能プログラムが作られる

以上


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch