C言語なら俺に聞け 145
■ このスレッドは過去ログ倉庫に格納されています
テトリスとぷよはそんなに難しくなかったなぁ。
省メモリで作ると果てしなく大変だけど、富豪的に作れば大したことない。
オセロとかもそうやな。富豪的に作れば難易度は各段に下がる。 >>208
高校生というか中学生レベルかもしれんが、パソコン買ってBASICで最初に作る定番だな。懐かしい。
ヒット・アンド・ブロウ(マスターマインド)って簡単な割に意外と遊べるんだよな。
あとブラックボックスなんかも。 対戦マスターマインドとか簡単で面白いカモな。
伏せられた一つの答えを解きあう感じの。
敵作る経験にもなるし。 それぞれありがとうございます。ヒットアンドブロウって初めて聞きました。
確かに学校の勉強も大事ですね。数学検定準2も終わったので(多分合格)
中3・高1のメンバーですが。2級までの間、AO入試にプログラム使えないかと
思って(将来的にも使えるようにしたい)勉強し始めています。
(立命館のあいちゃれとか参加してみたいとか・・・)まあそんな感じ。 >>216
BASICで・・・30年以上前の話かな・・・ BASICか。。。
始めて作ったのは
敵がいないパックマンに
バック走行のレーシング
マシン語おぼえて任意方向のスクロールができるようになったら
ボスコニアンとかゼビウス
敵キャラはマシン語より難しい
完全にランダムな動きはすぐできるが
自機を狙ってくるやつの思考ルーチンは奥深い ハングマンはわりと簡単に作れてわりと楽しめるよ
英語の勉強にもなる(かもしれない) >>220
「バック走行のレーシング」て発想はなかった。
俺は「風船を背負って縦穴を落下する」という設定だった。
…そういや、今のプログラム初心者は「とりあえずスター・トレック」で
ゲーム作り始めないのね。
真面目な話、BASICでINPUT命令を使うのに比べると
Cでユーザーからのキーボード入力を受け取るのは面倒なんだよね。
そのせいで同じネタでもプログラム課題としての難度がいくらか上がる。 conio.hを発見して非標準に絶望するまでが一セット。
俺、発見するのに数年かかったんだぜ。
BASICで3日でできたことがなんでできんのじゃーって悶えたわ。 cursesライブラリの方が対応している端末が多くてほぼ標準なんじゃないかな 非標準ておまえら。。。
// basic_like.h
int inkey(void);
こんなん一発作っときゃ終わりだろうがよ 自分の使ってるコンパイラの枠組みの中だけで実装できればまだいいんだが…
めんどくさいので既存のものを探すことにになる マスターマインドは
正解にたどり着くまでの
最短最速最適な質問の仕方
を次の一手で出すアルゴリズム考えたな
4列だったら最大7手未満とかそんなやつ >>224
ウインドウズで開発してるから、VCはconioもってるんだよな。
ただ、布教できなくて悶える。ソース配布できない。
GCCも持ってない環境あるからなぁ。 マスターマインドのAIはダサいのは作ったことある。
正解にはたどりつけるけど、パーミテーションでグルグル回す奴だから回答がキモイ。
そして遅い・・・。 >>230
まあ、非標準だから仕方ない。そういうのは条件コンパイルとか、たくさんあるなら環境ごとに別のソースファイルにしてビルド時に選択とか。
そういうことをちゃんとやってるオープンソースソフトウェアが参考になるかも。 >>192
立てた。
C言語相談室(上級者専用)
https://mevius.5ch.net/test/read.cgi/tech/1519998483
老害が来てもウザイので「10,000行程度のソースを扱えない人は」と現在状態に変更した。
上級者には一朝一夕では成れない。
初心者は文法事項にばかりに目が行きがちだが、
今日覚えれば明日から使える文法事項で練度を測るのはナンセンスだ。
これを含めて、意見については新スレで受け付ける。
>>195
削除よろ >>234
UTF-8型というものはない。
wchar_tにウニコードかOSの文字コードが入ってることを期待しよう。
まぁ、stdinをgetchで読んで解析とかかな。またはfgetsで全部読むとか。
世知辛いのじゃー。 >>237
一定のchunk sizeでreadして1byteずつ解析やな あ、そうか。
UTF-8って生バイトfreadしないといけないのか。
失念してた。 >>236
削除依頼出して誘導の書き込みしておいた。 おまいらってすごいね
C検定の1級とか余裕なんだろね いやいや、これでもISO/IEC 9899:2011のつまみ食いをしてるだけですよ
昔のCと違い、今のCは付き合ってらんないところが結構あるんで 10,000行程度のプログラムで何ができるのか想像が出来ん。 10000行程度を書いた経験だろ
全体だと30万行とかだろ 一プロジェクトで1万行はないな。趣味だから。
トータルならそれ以上書いてるけど。 一万行ねえ。しかしあまりに行数が多くなるとするとC言語を使うこと自体が適切ではなかった可能性も出てくるよな。
あるいは何か設計がまずいか、書き方がまずいか。
何れにしてもプログラムが多くなればなるほど人間がバグを作り込んでしまう率が高くなり更に全体の把握が困難になってくる。 最高効率で1万行ってやりたくないなぁ。
ぜったゲシュタルト崩壊起こす。 普段から1万行程度書いてる上級プログラマが
今から模範演技を見せてくれそうな予感 int
MyFunc
(
int param
)
{
return param * param;
} 行数で評価とかいまだにあるのかcobolの習慣持ち込むな 生涯ではたぶん 書いた行数より消した行数の方が多い >>249
一万行の上級者様は上級者様専用スレに行ったみたいだから、実演はしてくれないだろう voidポインターの足し算は未定義なんだってね。
charのポインターみたいに1バイトずつ増えるからつかえると思ってた。 C言語初心者向けのスレって結局ここでいいんだろうか? フォルダ内の複数のエクセルシートの決まったシートをtext形式1つにまとめるのって出来ます? >>255
gccもそうなってて以前それ前提に書いてあるソースを見てビックリしたことがある。
特別扱いしているらしい。 プリプロセッサで
#define foo(n) foo_##__typeof__(n)(n)
double a;
foo(a);
って展開したら
foo_double(a)
になって欲しかったのに
foo___typeof__(n)(n)
になりました
良い方法はないでしょうか? >>261
型名の解釈は、プリプロセッサのレイヤーでは無理です。 __typeof__ って 演算子っぽいけど
(プリプロセッサ処理の段階では解釈されない:sizeof と同じで
リテラルの整数に展開されているわけではない) がーん
_Genericも二箇所に分けて書こうとするとredefineって言われて先に定義したほうが消えるし、ジェネリックは結構厳しいんですね……
ありがとうございます sizeof(void)って未定義?
未定義ならそのポインタの加算幅も未定義だな。
void* p = (((void*)(&i))++); 本当は void * に対しては足すことも引くこともできない。 今ならuintptr_tにキャストして足し算引き算した後でvoid*に戻すのかな。
uintptr_t以前はchar*へのキャストだったかも知れんけど。
しかし実際のところvoid*に対してポインタを進めたり戻したりしたいって、
どういう場面で必要になるんじゃろうか? char *でいいじゃん
構造がわからないものはバイト列って認識でしょ? そういやポインタ演算と言うと8086用のCコンパイラはfarとか拡張キーワード作ったりして面倒だったな。TurboCだったか。
ああいうなんとも言えないCPUコンパイラだと特殊な決まりがあったりするから要注意だ。
まあ、二度とあんなの市場に出ないような気はするけどな。 ハーバードアーキテクチャだとdmとかpm修飾なんてのも farはTurbo Cに限ったことじゃない
8086用である限り必要になる >>279
でもコード64KBの制限はどうしようもない 64KBしかいらないときに使うのがtiny
tiny使いながら64KBじゃきついとか発想が逆
だったら端っからlarge使えつーの >>281
それは根本的な間違い
誤解産むからやめれ >>272
charか符号付きかどうかは処理系とかによる
なので決めつけてるのはお前ってオチ char は、符号付き・符号なしの、どちらか分からないから使うな!
エラーに、-1 を使っていたら、0〜255 しか表現できない事もある 例外を範囲外の値で判定する様なインターフェースが悪い。
はっきり戻り値は動作結果、値は出力用の引数に入れる。
みたいな設計にすべき。
ちな、C#みたいに戻り値を構造体にするって手もあるぞ。 素人が、char型の-1 を、エラー値に使っていると、
OS・コンパイラが変わって、その環境では、char型が0〜255 になってる
char型は、符号付き・符号なしの、どちらか分からない >>288
言語内の話と環境(シェルやOS)の話を混同してはならない >>288
charの使い方が間違っていることが問題なのであって、charを使うこと自体が悪いのではない。 はいー。
1バイト整数を使いたかったら、stdintを使いましょう。
int8_tは内部がcharかもしれないけど便宜上charではありません。
ハイ、復唱。int8_tはcharではありません。
ちなみにC++でバイト表現専用のstd::byteが入りました。すごく使いにくいけど。 >>294
Windows用のコンパイラの話?
知らないけど、多分 size の s じゃない? 昔はpc-98DOS用に作ったソフトがハード依存コードが無ければ
DOS/V機やTOWNSでも動くって聞いて驚いた。 N5200 で LSI C-86 試食版を使ってた……ような気がする。昔のことだから記憶が曖昧だ。 secureじゃねーだろ。
暗号化だってされてねーんだからw
safetyくらいな感じじゃね? DOSのシステムコール(なんて言うんだっけ?DOSコール?忘れた)だけを呼び出しているプログラムならハードウェアが違っても動く。
しかしMS-DOSはCUIしかサボートしてないのでグラフィックスは使えない。
当時のプログラムはみんな勝手にOS無視してグラフィックスのVRAMに直接アクセスして絵を出していた。
すると当然他の機種に持っていくと意図した通りに動かない。 INT 21H なら ファンクションコールだったかの ■ このスレッドは過去ログ倉庫に格納されています