28歳の俺にC言語を1から教えてじゃんけんゲームを完成させるスレ
カテゴリー: IT|タグ: 28歳, C言語, じゃんけんゲーム, スレ, プログラミング全般, 俺


1: 以下、名無しにかわりましてVIPがお送りします 2014/01/04 22:00:04 ID:kC+V2XeX0
GCCの準備できてます!頭くそだけどよろしくお願いします!
7: 以下、名無しにかわりましてVIPがお送りします 2014/01/04 22:01:13 ID:vKdW/2mf0
逆かと思って開いたのに…
44: 以下、名無しにかわりましてVIPがお送りします 2014/01/04 22:25:32 ID:nzCWAN6W0
俺も逆かと思って開いたのに
8: 以下、名無しにかわりましてVIPがお送りします 2014/01/04 22:01:29 ID:2FtGig1R0
まず、Hello worldをします
17: 以下、名無しにかわりましてVIPがお送りします 2014/01/04 22:06:46 ID:kC+V2XeX0
>>8
#include <stdio.h>
int main(void) {
printf "hello,world";
return 0;
}
各々の要素の意味をあんまり理解してません!
23: 以下、名無しにかわりましてVIPがお送りします 2014/01/04 22:09:18 ID:2FtGig1R0
>>17
じゃあそれをコンパイルして実行だ
32: 以下、名無しにかわりましてVIPがお送りします 2014/01/04 22:18:14 ID:kC+V2XeX0
33: 以下、名無しにかわりましてVIPがお送りします 2014/01/04 22:20:13 ID:aFAJM5M90
>>32
まず基礎覚えろ
なんでHello Worldが表示されるか理解しないと次に進まないぞ
36: 以下、名無しにかわりましてVIPがお送りします 2014/01/04 22:21:27 ID:kC+V2XeX0
>>33
はい教えてください!
あっVim使えるからといって「ネタだろ?wwww」とか思わないでくださいね
本当にプログラミングできません
39: 以下、名無しにかわりましてVIPがお送りします 2014/01/04 22:23:35 ID:kC+V2XeX0
昨日の深夜スレ立てたんですけど眠くて寝ちゃったんです!
だから今日から皆さんに教えてもらって頑張ろうかなと!
40: 以下、名無しにかわりましてVIPがお送りします 2014/01/04 22:23:52 ID:aFAJM5M90
あのさ…教えてくださいってなんで自分で調べようとは思わないの?
46: 以下、名無しにかわりましてVIPがお送りします 2014/01/04 22:27:42 ID:kC+V2XeX0
>>40
たぶん今まで僕が買ったプログラミングに関する本は50冊を超えてると思います!
IT系の本であれば200冊は超えるでしょう
毎日IT技術系の記事をクリップしてますが管理しきれないほど量があります
それでもプログラミング覚えられません><
51: 以下、名無しにかわりましてVIPがお送りします 2014/01/04 22:28:56 ID:2FtGig1R0
>>46
お前買うだけ買って読まないタイプだろ!
58: 以下、名無しにかわりましてVIPがお送りします 2014/01/04 22:31:55 ID:kC+V2XeX0
>>51
1/3くらいよんで集中力切れちゃいます・・・
61: 以下、名無しにかわりましてVIPがお送りします 2014/01/04 22:33:54 ID:kC+V2XeX0
厨二ハッカーに憧れて
http://blog.livedoor.jp/itsoku/archives/36172302.html
これが僕の全てです!
75: 以下、名無しにかわりましてVIPがお送りします 2014/01/04 22:47:00 ID:YkrVOnF40
僕はjavaで三ヶ月かかってやっとジャンケン程度のアプリしかつくれなかったよ
向いてないのきついわ
81: 以下、名無しにかわりましてVIPがお送りします 2014/01/04 22:51:56 ID:kC+V2XeX0
>>75
じゃんけんですかあ
3パターンの属性があり、それぞれ勝つものが決まってる
こちらが手を選択した瞬間にコンピュータに乱数で手を生成させればいけますかね?
101: 以下、名無しにかわりましてVIPがお送りします 2014/01/04 23:16:43 ID:kC+V2XeX0
今、手始めにC言語でじゃんけんを書いてます・・・
乱数の生成に行き詰まってます・・・
rand();を使えば乱数を呼び出せると言うのは理解しました
グー0、チョキ1、パー2とした場合、0から2の乱数を生成しなくてはなりません
rand()関数で生成した0から2の乱数を変数CPUに入れ、scanf関数でプレイヤーからの入力値を受け取り変数USERへ入れます
ってとこまで頭でまとめましたがrand();でどうやって最大値を指定するんですかね?
105: 以下、名無しにかわりましてVIPがお送りします 2014/01/04 23:18:11 ID:tE4PVyTm0
>>101
rand() % 3
113: 以下、名無しにかわりましてVIPがお送りします 2014/01/04 23:23:30 ID:kC+V2XeX0
>>105
あまりを出すんですか?
106: 以下、名無しにかわりましてVIPがお送りします 2014/01/04 23:18:17 ID:2FtGig1R0
>>101
最大値がRAND_MAXなので、((double)RAND_MAX)+1で割ってから3倍して小数部分を切り捨てる
113: 以下、名無しにかわりましてVIPがお送りします 2014/01/04 23:23:30 ID:kC+V2XeX0
>>106
RAND_MAXというのは決まった言葉なんですかね?
stdio.hがRAND_MAXという機能を提供してるんですか?
それとも便宜上、プログラムの慣例としてRAND_MAXという言葉が使われているんですか?
プログラムには慣例が多く、僕みたいな初心者からすると、それが機能か慣例なのか分かりにくいんですよ
117: 以下、名無しにかわりましてVIPがお送りします 2014/01/04 23:26:58 ID:bZPcLkQJ0
> stdio.hがRAND_MAXという機能を提供してるんですか?
はい
とりあえず書いてみてコンパイルエラーが出なければRAND_MAXが提供されてる、みたいに判断するといいんじゃないかな
137: 以下、名無しにかわりましてVIPがお送りします 2014/01/04 23:41:43 ID:UpuS1Bp+P
ヤダこの子ガチで頭悪い・・・///
140: 以下、名無しにかわりましてVIPがお送りします 2014/01/04 23:46:40 ID:kC+V2XeX0
142: 以下、名無しにかわりましてVIPがお送りします 2014/01/04 23:50:15 ID:tE4PVyTm0
>>140
すげ。vimでやってるのか。
147: 以下、名無しにかわりましてVIPがお送りします 2014/01/04 23:57:29 ID:vsdt+U1h0
Cってテキストエディタで書くやつも多いけど
コード以外に気を取られることを減らすためにIDE使えばいいと思うの
仕事にしないなら尚更
151: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 00:03:45 ID:8qEJyCaC0
154: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 00:06:30 ID:CiInVuQS0
>>151
user == 2 && cpu == 1
157: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 00:10:50 ID:8qEJyCaC0
>>154
ありがとございますっ!
やったー!!!!!!!!!
マジでうれしい!!!!!!!!!!!
>>154様アアアァァァァ!!!!!
がちでまともに簡単なものだけど始めてプログラム完成させたよぉぉぉぉ!!!!!!!
172: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 00:30:19 ID:u3+/OJkA0
>>157
いろいろ穴があるぞ。
- まず、2回目以降のifの前にelseを置かないといけない。
- cpu = 2, user = 2の場合、最初の2行のprintf実行される
- そうだとしても、正しくない。たとえば、2個目のifは
userがパーを出したときを意味するが、もしcpuがチョキを出すと
正しくない結果が表示される。
174: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 00:33:48 ID:8qEJyCaC0
>>172
はいやってみます!
155: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 00:08:26 ID:sHWfWAfH0
>>151
アイコはuserとcpuと比較してるけど、それ以外は定数と比較してるから、アイコ以外のときは結果が同じなんじゃないの。
161: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 00:14:41 ID:8qEJyCaC0
>>155
つまりじゃあ次は時間から乱数を生成するバージョンアップを行えばいいんですね!?
そうすることによって毎回違う手になるとっ!
168: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 00:23:01 ID:8qEJyCaC0
time.hを宣言してsrand((unsigned)time(NULL))を使うということは
int cpu;
cpu = srand((unsigned)time(NULL))
これで良いんでしょうか?
ん?これじゃ0から2の乱数は得られないですよね?
int cpu;
cpu = srand((unsigned)time(NULL)) % 3
こうかな?
Ecripsもセットアップします
169: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 00:24:57 ID:CiInVuQS0
>>168
本当にお前馬鹿だな
171: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 00:29:08 ID:8qEJyCaC0
>>169
??????
int cpu;
srand((unsigned)time(NULL));
cpu = rand() % 3;
こうってことですか?
うん?????
175: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 00:34:07 ID:CiInVuQS0
>>171
それでよい
ただし、もしも複数回rand()を呼ぶ事があったとしても、srand()は1回だけとすること
複数回rand()ってのはつまり、例えば「あいこである限り再度じゃんけんし続ける」みたいな機能を入れた場合な
177: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 00:37:59 ID:8qEJyCaC0
>>175
ありがとうございます!
srand((unsigned)time(NULL));はおまじない!
173: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 00:33:26 ID:B4mPXV/C0
printf ("手を入力してください グー0 チョキ1 パー2");
int user, cpu;
cpu rand() % 3;
scanf("312" , &user);
char kekka[5] = {"負け","勝ち","あいこ","負け","勝ち"};
printf("あなたの" + kekka[user-cpu+2])
178: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 00:42:19 ID:u3+/OJkA0
>>173 すごいな。これは思いつかなかった。
180: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 00:54:05 ID:8qEJyCaC0
183: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 01:01:04 ID:CiInVuQS0
>>180
else if
189: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 01:05:18 ID:u3+/OJkA0
>>180 とりあえず。else じゃくて else ifだが、部屋にあるはずの
はじめてのCかそういう本の条件分岐の項を読み直すべき。
182: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 00:59:57 ID:8qEJyCaC0
ifにしたら動いた!?
elseって「もしでなければ」じゃなかったっけ?
185: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 01:03:07 ID:sgrh9qdb0
条件式が書けるのはifだけ
だから複数書くなら
if(){ ... }
else if(){ ... }
else if(){ ... }
else{ ... }
って書く
187: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 01:03:50 ID:Vevgq6nt0
言語仕様読み直せカス
181: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 00:54:10 ID:sgrh9qdb0
CPUの手を出してないから本当にあってるかどうか確認できないのが原因よね
197: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 01:11:05 ID:rXtfB2hP0
cpuが出した手も表示させようぜ
205: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 01:27:34 ID:8qEJyCaC0
>>197
むむむ上手くできませんね・・・
printfがはじかれる・・・
手始めにprintf("176", &cpu);で数字だけだそうと思ったんですか・・・
219: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 01:39:12 ID:OazKSiXf0
警告読めよ
format はintをexpectしてるけど実際はint*になってるっていってるじゃん
213: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 01:34:33 ID:u3+/OJkA0
>>205 だから本を読むんだ。
&xxx は変数xxxが置かれているメモリ上の位置を表す。
(Cの用語では、この位置をポインタと呼ぶ)
xxxに格納されている値を取り出したければ単にxxxでいい。
「printfは受け取った値を表示する」だから、printf("", xxx)
「scanfは受け取った場所に値を書き込む」だから、scanf("", &xxx);
じゃなんで、代入のときは
&x = 2;
とか書かないことになっているかというと、そういう文法だと書くのが
めんどうだから。
221: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 01:41:18 ID:8qEJyCaC0
>>213
うおおおおぉっぉおぉおぉおぉぉぉぉぉおお!!!!!?
なんとまあ!ポインタ!よくわかんないけどメモリ上の位置!
printfは受け取った値を表示する!
scanfはそもそも書き込み!だから明示的にメモリの位置を指定する!だから&が必要!
198: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 01:12:00 ID:6AeFprib0
じゃんけんゲーム作りたいの?格ゲーとか上で見たけど
199: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 01:13:40 ID:rXtfB2hP0
じゃんけんを発展させると格ゲーになる
210: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 01:31:34 ID:HYdmER630
何か楽しそうやな。。。孤独にやってるわしと違って。。。
216: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 01:37:11 ID:8qEJyCaC0
>>210
皆さんのお陰で楽しいですっ!
独りが寂しいのなら僕に教えてください!
217: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 01:38:45 ID:Vevgq6nt0
>>216
随分堂々としたコジキだな
225: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 01:49:52 ID:8qEJyCaC0
>>217
すみません!
上にも書いたけど僕はVIP史上最弱底辺の技術者です。まっさらの素人じゃないんです!
次の言葉は純粋な気持ちで発した別に他意の無い言葉だと受け取ってください!
僕は皆さんのように頭良くない」です!皆さんはほんと頭が良い!僕なかなか覚えられないし!
僕は10年間自分で試行錯誤をし、挫折してもなお突っ走ってハッカーに憧れるバカです!
僕の頭の中には10年間蓄積された疑問で一杯です!初心者が10年間ずっとつまづいてきたと思ってください!
あらゆる「初心者つまづくポイント」を僕は知ってるわけです!
その疑問を皆さんへぶつけて僕は皆さんから吸収したい!
僕が理解したということは多くの初心者が理解するってことです!
このスレのログはおそらく強力な初心者の武器になることでしょう!
僕はそう信じてます!だから教えてください!!!!!
234: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 01:59:09 ID:8qEJyCaC0
252: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 02:24:59 ID:jYeDxDr/0
こーどがきたなくてはきそう
255: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 02:32:27 ID:8qEJyCaC0
// 2014年1月4日(夜)~1月5日(深夜)
// 28歳の俺にお前らがプログラミングを1から教えるスレ
// http://hayabusa.2ch.net/test/read.cgi/news4vip/1388840404/
/* おまじない*/
#include <stdio.h>
#include <time.h>
/* 関数宣言 */
int main(void)
{
/* 説明書き */
printf ("\n<<<手を入力してください>>>\n\n[グー 0][チョキ 1][パー 2]\n\n---> ");
/* プレイヤーとコンピュータの関数宣言 */
int user,cpu;
/* 時間の取得 */
srand((unsigned)time(NULL));
/* 乱数生成 , 変数CPUへ代入*/
cpu = rand() % 3;
/* 入力受付 */
scanf("%d",&user);
/* 手を表示 */
printf("\nプレイヤー『%d』 vs コンピュータ『%d』",user,cpu);
printf("\n\n結果は『");
/* 条件分岐 */
if (user == cpu) printf("あいこ\n\n");
else if (user == 0 && cpu == 1) printf("プレイヤの勝ち");
else if (user == 0 && cpu == 2) printf("コンピュータの勝ち");
else if (user == 1 && cpu == 0) printf("コンピュータの勝ち");
else if (user == 1 && cpu == 2) printf("プレイヤの勝ち");
else if (user == 2 && cpu == 0) printf("プレイヤの勝ち");
else if (user == 2 && cpu == 1) printf("コンピュータの勝ち");
printf("』\n");
/* 返り値なし */
return 0;
}
256: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 02:34:38 ID:jYeDxDr/0
変数宣言の前に関数書かんといて
260: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 02:36:37 ID:8qEJyCaC0
>>256
慣例とするならどうすると綺麗なんでしょうか?
僕そういうこともわかりません
出来れば並べ直していただけるとありがたいのですが
267: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 02:43:33 ID:tluWRbe1P
先頭にまとめてあるほうが読みやすいし間違いも起こりにくい
変数初期化も早めにオナシャス
271: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 02:47:34 ID:B4mPXV/C0
書き方とかマナーとかもいいけど、
そこらへんはそんなに突っ込まないでいいんじゃね?
ロジックとか考え方とかそっちのほうメインで
266: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 02:42:06 ID:P/5mkg9U0
わりと真面目スレでわろた
279: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 02:56:07 ID:8qEJyCaC0
299: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 03:20:54 ID:8qEJyCaC0
とりあえず今日の勉強はここで終わりとします
ただ皆さんが色々と別記述同一結果なコードを書いてくれたのでそれを解いて理解しようと思います
次回スレ立て時にその宿題を終えた結果を発表しつつ皆さんに採点して貰い、その後はFizzBuzz問題でもできたらなと考えてます
28歳から目指す厨二ハッカー、これからもよろしく!
300: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 03:22:36 ID:rXtfB2hP0
乙
趣味のプログラミングは面白いとおもう
301: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 03:25:40 ID:P/5mkg9U0
乙
学ぶ意欲があって素晴らしい!
302: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 03:30:48 ID:aQwKB+Pw0
>>1が少しでも成長するとは思わなかったよ
303: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 03:36:05 ID:iCtoMNde0
乙
また立ててくれ
304: 以下、名無しにかわりましてVIPがお送りします 2014/01/05 03:41:18 ID:4wXimRRX0
IT速報にまとめられそうだな
わろたww
元スレ:http://hayabusa.2ch.net/test/read.cgi/news4vip/1388840404/

Tweet


↑この記事をみんなに広めよう↑
↓ランキングクリックよろしくお願いします↓



最近のコメント