C言語を今日から始める僕に1から教えるスレ at TECH
[2ch|▼Menu]
1:デフォルトの名無しさん
06/01/22 21:39:32
ではお願いします

2:デフォルトの名無しさん
06/01/22 21:40:20
exit;

3:デフォルトの名無しさん
06/01/22 21:40:45 BE:158911294-
じゃあHello, world置いとくね

#include <stdio.h>

main(argc, argv)
int argc;
char *argv[];
{
printf("%s: Hello, world!¥n", argv[0]);
return 0;
}

4:デフォルトの名無しさん
06/01/22 21:42:09
>>3早速やってみます

5:デフォルトの名無しさん
06/01/22 21:43:27
上げてしまいました

6:教官A
06/01/22 21:43:41
>>1
まずは、自己紹介から始めてもらわんとな。

7:デフォルトの名無しさん
06/01/22 21:46:28
徳島県在住の学生です


8:デフォルトの名無しさん
06/01/22 22:31:06 BE:310569784-
>>1-3
c++でもいいだろ

9:デフォルトの名無しさん
06/01/22 22:52:16
>>1
ここまでに準備・用意したものを挙げろ。

10:デフォルトの名無しさん
06/01/23 01:26:20
>>8
最初はCでいいんじゃない?教える人がいればいいけど、
Cがわかっているのが前提、というC++の本ばかりだし。
窓アプリが作れるようになるまで、続くといいけどなぁ。

11:デフォルトの名無しさん
06/01/23 12:44:39
>>1
一人でやってろ

12:デフォルトの名無しさん
06/01/23 19:18:25 BE:155284782-
>>10
でもC++の方が簡単じゃね?

13:デフォルトの名無しさん
06/01/23 19:34:28
1の発想の転換力に激しく嫉妬。

14:デフォルトの名無しさん
06/01/23 21:36:47
>>12
better CとしてC++を使うと楽チンだけど、最初は範囲が広くて
困るんじゃないかなぁ。Cの基本を前提としないC++の本があれば
いいんだけどね。
Cをざっと早足で通してやって、C++からじっくりやるのがいいのかもね。
Cは知っていて損はないし。

15:デフォルトの名無しさん
06/01/30 02:56:22
どうやら、>>1はHello worldで挫折したらしいなw

16:ζ゚ ◆f3DF7bkpu2
06/02/01 20:30:08
暇だし俺が乗っ取ることにした。

おk、HelloWork理解した。次こい!

17:デフォルトの名無しさん
06/02/01 21:23:02
暇人に付き合う暇人。

18:ζ゚ ◆f3DF7bkpu2
06/02/01 21:25:40
まあ待て、落ち着け。
今トリビア見てるから。

19:ζ゚ ◆f3DF7bkpu2
06/02/01 21:45:01
浦和競馬場アツイなw

競馬予想プログラムとか組みたいぜ。

20:ζ゚ ◆f3DF7bkpu2
06/02/01 22:01:06
C++はキライです

#include <iostream>
int main(){
std::cout << "HelloWork" << std::endl;
return 0;
}

とか、ワケワカラナス
std::とか<<とか、いきなりこの仕打ちが挫折の原因と思う

21:デフォルトの名無しさん
06/02/01 22:48:53
【初心者】ベッキーと一緒にゲーム制作スレ【歓迎】
スレリンク(gamedev板)
【初心者】ステフと一緒にゲーム制作 Part3【歓迎】
スレリンク(gamedev板)
【初心者】スレを立てる前にココで質問を【Part11】
スレリンク(gamedev板)
超初心者だけどゲームの作り方教えてください
スレリンク(gamedev板)
ズブの初心者がゲーム作れるまで勉強するスレ
スレリンク(gamedev板)
初心者専用スレ「シミュレーションゲーム」を作らない?
スレリンク(gamedev板)
初心者たちが勉強しながらBattleCityを作るスレ
スレリンク(gamedev板)
【初心者】課題をクリアしていくスレ【講習会】
スレリンク(gamedev板)
初心者はC&Cで作れ(マターリ)
スレリンク(gamedev板)
PSソフト開発初心者質問スレッド
スレリンク(gamedev板)
初心者専用スレ「パックマン」風ゲーム作らない?
スレリンク(gamedev板)

22:ζ゚ ◆f3DF7bkpu2
06/02/01 22:51:36
>>21
そんな誘導キライです

23:デフォルトの名無しさん
06/02/01 23:33:29
>>20
いや、それむしろ便利なところだから。
printf("hogehoge %d",i);って書くより、
cout << "hogehoge " << i << endl;
って書いた方が楽じゃね?

24:ζ゚ ◆f3DF7bkpu2
06/02/02 00:30:30
慣れ?
見慣れれば大丈夫?

それはともかく、hogeってよく見かけるけど、何?
『 Hello,World! 』って?直訳すると「世界こんにちは」?
Hello,Welcome C(C++) language World! じゃね?

25:デフォルトの名無しさん
06/02/02 03:23:30
>>24
あんたおもろいね。hogeっていうのは、適当な言葉さ。
特定の言葉入れる必要ないから、適当にいれているだけ。
Welcome,いいねー。ついでにいうとWelcome toだな。
で、開発環境とかはなに使っている?

26:ζ゚ ◆f3DF7bkpu2
06/02/02 08:19:50
今沖田

>>25
おもしろいやつとは何だ失礼なプンスカ
毛唐の言葉なんて覚える気まるでないッスよ。

Windows2000+VisualStudio.NET
.NETのいちばん最初のやつ。VBもC#も作れるぜ。

27:デフォルトの名無しさん
06/02/02 08:29:07
hogeのほかに何か名前が必要になったらpiyoだよ。

28:ζ゚ ◆f3DF7bkpu2
06/02/02 13:23:54
積年の謎がひとつ解けた。これでまた野望に一歩近づいた。

前フリとは関係なく、てめえらのこと占ってやるから覚悟しやがれ。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
char *status[5]={"大吉","中吉","吉","末吉","凶"};
srand(time(NULL));
printf("今日の運勢は【%s】っぽ\n",status[rand()%5]);
return 0;
}

29:ζ゚ ◆f3DF7bkpu2
06/02/02 13:26:28
age忘れ。

どうせなら乱数の種つかわないで絶対【凶】になるようにするべきだったか

30:デフォルトの名無しさん
06/02/02 17:43:50
乱数にはメルセンヌツイスタ法を利用した方がより一様な疑似乱数を得られる。

31:デフォルトの名無しさん
06/02/02 18:03:46
をいをい、おみくじにずいぶん凝ったことするなw
しかしζ゚ ◆f3DF7bkpu2は、別にC初心者じゃないようだな。
このスレ、どう再利用する?

32:デフォルトの名無しさん
06/02/02 18:07:49
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
char *status[5]={"凶","大吉","中吉","吉","末吉"};
srand(time(NULL));
printf("今日の運勢は【%s】だお¥n",status[rand()%1]);
return 0;
}

33:デフォルトの名無しさん
06/02/02 18:19:01
char *status[5]={"凶","大吉","中吉","吉","末吉"};
人間は余計なことせずに、コンパイラに数えさせろ。

34:ζ゚ ◆f3DF7bkpu2
06/02/02 18:28:25
永遠の初心者ですが何か。
ウインドウに文字が書けないひとです。


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

int main()
{
char *status[7]={"女神","大吉","吉","末吉","ぴょん吉","凶","豚"};
printf("今日の運勢は【%s】かもね\n",status[rand()%7]);
return 0;
}

35:ζ゚ ◆f3DF7bkpu2
06/02/02 18:42:18
>>33
kwsk

36:デフォルトの名無しさん
06/02/02 18:43:14
char *status[]={"凶","大吉","中吉","吉","末吉"};

こうゆうことじゃない?

37:デフォルトの名無しさん
06/02/02 18:44:42
constつけろバカ

38:デフォルトの名無しさん
06/02/02 18:48:20
こんなもんかな。
#include <stdio.h>
#include <stdlib.h>

int main()
{
static char const * const status[]={"女神","大吉","吉","末吉","ぴょん吉","凶","豚"};
printf("今日の運勢は【%s】かもね\n",status[rand()%(sizeof(status) / sizeof(*status)]);
return 0;
}


39:ζ゚ ◆f3DF7bkpu2
06/02/02 18:48:24
配列はそれでいいとして、要素数は?

専ブラだとついsageてしまうぜ。

40:ζ゚ ◆f3DF7bkpu2
06/02/02 18:51:54
staticとconstの違いがわからねえぜ。ちょっくらぐぐってくる。
const * constとか、もう何がなんだか。

41:デフォルトの名無しさん
06/02/02 18:56:56
>>40
それはあれだ、
「静的な領域の」「変更不能な」「キャラ型の」「変更不能な」「ポインタの」「配列である」status
と言う意味だよ。

42:デフォルトの名無しさん
06/02/02 18:58:52
char const * const → キャラがコンスト、ポインタもコンスト、
const char * const → コンストなキャラのポインタもコンスト、

43:デフォルトの名無しさん
06/02/02 19:05:24
「constつける意味ってあるの?」と疑問におもう俺は初心者ですか?

44:ζ゚ ◆f3DF7bkpu2
06/02/02 19:06:00
ξ錯乱しておりますグザイ

「static」=性的な
「const」=不能

なんとなくおk

45:デフォルトの名無しさん
06/02/02 19:17:06
>>43
文字列リテラルは変更不能なので、const宣言しておくべきなのです。
例:
char * p = "abc";
p[0] = 'A';
constつければエラー処理してくれるのです。
も少し便利な例:
strcat("abc", "def");
と書くと、宣言が
char * strcat(char *, const char *);
なのでエラーにナルです。

46:デフォルトの名無しさん
06/02/02 19:25:34
ひらたく言うと、書き換えないものは、ミスを減らすためにも
constつけておけ、ということです。

47:ζ゚ ◆f3DF7bkpu2
06/02/02 21:26:00
ネタ切れの予感…

いかん、このままでは「名無しさん」に戻ってしまう

48:デフォルトの名無しさん
06/02/02 21:31:29
よっし、それじゃあネタ投下だ。
VS,コマンドラインから使っている?そのままIDEでやってる?

49:ζ゚ ◆f3DF7bkpu2
06/02/02 21:45:06
IDEだけど「空のプロジェクト」は厳守。
clでコンパイルできるようにはしてる。

50:デフォルトの名無しさん
06/02/02 21:54:18
なかなかやるね。コマンドラインからコンパイルすると
実際なにやってるかよくわかるしね。clでそのままコンパイルできるなら
小さいコードは、エディタとclでやると軽くていい感じ。
んじゃ、スタックとヒープってなんだかわかる?

51:ζ゚ ◆f3DF7bkpu2
06/02/02 22:37:59
以前、マジモンでまったくわからないときに

//TODO ここに目的のコードを書く

で挫折したからな。勝手にコード作られるのはうざい。


で、
「スタック」 FILOとか後入れ先出しとか。言葉だけでCの実装はシラネ
「ヒープ」  聞いたことあるけど不明。言われたら多分「あ、それ知ってる」と思

52:ζ゚ ◆f3DF7bkpu2
06/02/02 23:08:51
話を蒸し返すけど、今日やっとconstとstaticの違い理解した!と思
staticの「静的な」を実感するため、こんな感じで書いてみた。

#include <stdio.h>

int count(void)
{
static int a=0;
return(++a);
}

int main(void)
{
int i;
for(i=0;i<5;i++)printf("%d ",count());
printf("\n");
return 0;
}

53:デフォルトの名無しさん
06/02/02 23:16:09
いや、話蒸し返してないぞ。staticとか、mallocで作った領域(変数)は
ヒープってところに作られるんだ。んで、そういうのつけないで関数の
中で宣言したのは、スタックってところに作られるんだ。
だから、前の問題だしたのさ。
でも>>52はほっといても大丈夫っぽいな。燃料ないわw
なんかいいの思いついたらくるわ。んじゃ。

54:デフォルトの名無しさん
06/02/02 23:23:02
狂,凶,大凶の3つでおみくじを作りたまえ。
人間、良いことばかり気にしてちゃイカンよ。

55:ζ゚ ◆f3DF7bkpu2
06/02/02 23:27:44
きのうまでの俺ならstatic int a は間違いなくグローバルに置いてた。
関数呼び出しのたびに使い捨てとおもってたから。

ありがとう友よ
GJ俺

あしたの俺はもっとでっかいぜパンツからはみ出すぐらいに!

56:デフォルトの名無しさん
06/02/02 23:28:07
>>52
なんだかんだ言って、結構センスいいポイント突いてるね。
そのcount()関数みたいなやり方はシングルスレッド限定だけどよくある手法だよ。
そこで問題、
>52のcount()と次のコードの違いはなんでしょう。

static int a=0;
int count(void)
{
return(++a);
}

57:ζ゚ ◆f3DF7bkpu2
06/02/02 23:32:09
>>56
count関数の外でもaが触れる?

58:デフォルトの名無しさん
06/02/02 23:37:20
>>53
static変数の領域はヒープではない。

59:53
06/02/03 01:04:56
なんか変なこと書いたような気がして戻ってきた。
>>58指摘ありがとう。そう、staticはヒープではないね。
ヒープはmallocで動的に確保される領域だから。関数が抜けても
値が保持されるのは同じような性質だけど。

60:デフォルトの名無しさん
06/02/03 01:05:26
じゃ、1から教えるぞ。
まず

#

61:ζ゚ ◆f3DF7bkpu2
06/02/03 01:07:03
>>60
おk理解したwww

粘着してるわけじゃなくて今戻ってきたとこ。
ブログ更新してた。

62:デフォルトの名無しさん
06/02/03 01:26:53
#include <stdlib.h>
#include <stddef.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>


#ifndef B_SIZE
#define B_SIZE (8192)
#endif /* !B_SIZE */

#define HTTP_PORT 80
#define PROTO "tcp"

void err_exit(char *mes1, char *mes2);
int write1line(int fd, char *str);


char linebuf[B_SIZE]; /* Buffer for Readline */
int linebuf_start, linebuf_end;

void init_linebuf(void);

int read1line(int fd, char *buf, int max);
int readbuf(int fd, char *buf, int max);

63:デフォルトの名無しさん
06/02/03 01:27:50
main (int argc, char *argv[])
{
char *hostname, *path;
unsigned short port;
struct sockaddr_in sin;
struct hostent *hentp;
struct protoent *pentp;
int sock, len;
char buf[B_SIZE];

switch (argc) {
case 3:
port = HTTP_PORT;
path = argv[2];
break;
case 4:
port = atoi(argv[2]);
path = argv[3];
break;
default:
fprintf(stderr, "usage: %s hostname [port] path\n", argv[0]);
exit(EXIT_FAILURE);
}
hostname = argv[1];


64:デフォルトの名無しさん
06/02/03 01:28:37
/* Initialize Socket */
memset(&sin, 0, sizeof (sin));
sin.sin_family = AF_INET;



if ((hentp = gethostbyname(hostname)) == NULL) {
err_exit("gethostbyname", "can't get address");
}
memcpy(&sin.sin_addr, hentp->h_addr, hentp->h_length);
sin.sin_port = htons(port);
if ((pentp = getprotobyname(PROTO)) == NULL) {
err_exit("getprotobyname", "can't get protocol number");
}
if ((sock = socket(PF_INET, SOCK_STREAM, pentp->p_proto)) < 0) {
err_exit("socket", NULL);
}

/* Connect to a Server */
if (connect(sock, &sin, sizeof (sin)) < 0) {
err_exit("connect", NULL);
}

/* Send Request */
if (snprintf(buf, B_SIZE, "GET %s HTTP/1.0", path) < 0) {
err_exit("snprintf", NULL);
}
if (write1line(sock, buf) < 0) {
err_exit("write1line", NULL);
}



65:デフォルトの名無しさん
06/02/03 01:29:07
/* send host name */
if(snprintf(buf, B_SIZE, "Host: %s\r\n", hostname) < 0) {
err_exit("write1line", NULL);
}
if (write1line(sock, buf) < 0) {
err_exit("write1line", NULL);
}

if (write1line(sock, "") < 0) {
err_exit("write1line", NULL);
}
/* Receive Response */
init_linebuf();
/* Receive Status Line */
if ((len = read1line(sock, buf, B_SIZE)) < 0) {
err_exit("read1line", NULL);
}
fprintf(stderr, "Status-Line = %s", buf);
/* Receive Headers */

while ((len = read1line(sock, buf, B_SIZE)) > 0) {
if (!strcmp(buf, "\r\n")) break;
fprintf(stderr, "Header-Field = %s", buf);
}
if (len < 0) {
err_exit("read1line", NULL);
}

fprintf(stderr, "--------------------\n");

66:デフォルトの名無しさん
06/02/03 01:30:26
/* Receive Entity */

if (len < 0) {
err_exit("read", NULL);
}
fprintf(stderr, "--------------------\n");

/* Disconnect */

if (close(sock) < 0) {
err_exit("close", NULL);
}

}

void
err_exit (char *mes1, char *mes2)
{
if (mes2 == NULL) mes2 = strerror(errno);
fprintf(stderr, "%s: %s\n", mes1, mes2);
exit(EXIT_FAILURE);
}



67:デフォルトの名無しさん
06/02/03 01:31:54
write1line (int fd, char *str) /* Write 1-line to Socket */
{
int l;

l = strlen(str);
if (write(fd, str, l) < 0) return (-1);
if (write(fd, "\r\n", 2) < 0) return (-1); /* CR-LF */
return (0);
}

void
init_linebuf (void) /* Initialize Buffer */
{
linebuf_start = 0;
linebuf_end = 0;
return;
}


68:デフォルトの名無しさん
06/02/03 01:35:03
int
read1line (int fd, char *buf, int max) /* Read 1-line from Socket */
{
int i, j, st;

if (max <= 0) return (0);
j = 0; st = 0;
for (;;) {
if (linebuf_start >= linebuf_end) { /* Buffer is Empty */
if ((linebuf_end = read(fd, linebuf, B_SIZE)) < 0) return (-1);
if (linebuf_end == 0) { /* End of File */
buf[j] = '\0';
return (j);
}
linebuf_start = 0;
}
for (i = linebuf_start; i < linebuf_end; i++) {
if (j >= max - 1) { /* Buffer is Full */
linebuf_start = i;
buf[j] = '\0';
return (j);
}

69:デフォルトの名無しさん
06/02/03 01:36:13
buf[j++] = linebuf[i];
switch (linebuf[i]) {
case '\r': /* CR */
st = 1;break;
case '\n': /* LF */
if (st == 1) { /* End of Line */
linebuf_start = i + 1;
buf[j] = '\0';
return (j);
}
default:
st = 0;break;
}
}
linebuf_start = i;
}
}
int readbuf (int fd, char *buf, int max) /* Read from Buffer and Socket */
{
int l;
if (linebuf_start < linebuf_end) {
l = linebuf_end - linebuf_start;
if (l > max) l = max;
memcpy(buf, linebuf + linebuf_start, l);
linebuf_start += l;
return (l);
}
return (read(fd, buf, max));
}

70:デフォルトの名無しさん
06/02/03 01:38:05
終わり。
わかんないとこあったら聞け。
ブラウザの基本・・・でもないか。

71:デフォルトの名無しさん
06/02/03 02:44:15
>>70
横からだが・・・
UNIX系だね。ネットワークアプリは手を出したことがないから
興味あったけど、メインはWINだから残念。でも参考にさせて
もらうよ。サンクス

72:ζ゚ ◆f3DF7bkpu2
06/02/03 09:24:08
>>62-70 華麗にスルー
static char const * const status[]{...} の1行より興味を惹かないなあ。
あれだ。
「倉庫番」でいう、だだっ広い散らかった面よりちっちゃい面の方が好き。

今は>>54の要望に応えつつマニアックなアプローチを考えている。

73:デフォルトの名無しさん
06/02/04 15:27:20
#include "stdio.h"
void main()
{
printf ("string");
}
をプロンプトから実行しても文字が表示されないのは設定がいるんですか?winXPで。
borlandC++5.5.1

74:デフォルトの名無しさん
06/02/04 15:27:57
やっぱいいです、、、

75:デフォルトの名無しさん
06/02/04 16:00:38
設定はいらないけど。
printf("string\n");
に直してみれ。

76:デフォルトの名無しさん
06/02/04 16:35:34
>>73
ついでにint main()。
stdio.hは標準だから<stdio.h>とするのが普通。

77:ζ゚
06/02/04 21:38:44
過疎スーレ!!

78:ζ゚
06/02/05 17:30:00
(俺日記)o。..
         ζ゚

今日はウインウインでフラッシュ演算つくろうと頑張った。
表示までできました。問題点は多々あるが形だけは。
入力受け付ける方法がわからなかった。

79:ζ゚
06/02/05 17:35:40
(俺日記)o。..
         ζ゚

もうひとつ、コンソールで「石取りゲーム」作った。
「CPUが○個取りました」では味気ないので応答メッセージ出してたら
なんの神様が降臨したのか、気が付いたら関西系おにゃのこになってました。

めっちゃかわええ。結婚してくださいw

80:デフォルトの名無しさん
06/02/06 03:55:25
さようなら

81:よいしょ
06/02/06 03:56:33
クソスレBEST5 in ム板 (2006/2/5)

オマイラが俺様にプログラムを教えてあげれるスレ
スレリンク(tech板)l50

C言語を今日から始める僕に1から教えるスレ
スレリンク(tech板)l50

田中彰の応援歌を考えた。
スレリンク(tech板)l50

我こそはSE職人さん!集まって下さーい\(^o^)/
スレリンク(tech板)l50

エンディアン嘘つかない
スレリンク(tech板)l50

82:ζ゚
06/02/06 09:50:03
転載おつです

ちくしょう2位かよ!
でも1位の壁は厚いからなあ。DQNレベルが違いすぎる

83:ζ゚
06/02/06 10:25:48
教えてください
スレリンク(tech板)

84:デフォルトの名無しさん
06/02/07 13:18:59
配列ワカンネ。というよりfor文、putcharとかも怪しい。

85: ◆U8V9D2Qx0c
06/02/07 13:20:07
test

86:84
06/02/07 13:24:28
プロトタイプ宣言....?
知らんがな。

87:84
06/02/07 13:25:47
while文くらいしかできない

88:デフォルトの名無しさん
06/02/07 13:33:36
ググって見たけど分からなかった。

89:デフォルトの名無しさん
06/02/07 20:26:06
こうですか?わかりません!(><)

90:ζ゚
06/02/07 22:15:29
俺漏れも。for文ってかCムツカシス

#include<stdio.h>
int main(void){
int n,c,t;
for(c=0;c<11;++c,printf("\n"))
for(printf("%*s",(11-c)*2,""),n=0,t=1;n<=c;t*=c-++n+1,t/=n)printf("%3d ",t);
return 0;
}

91:ζ゚ ◆f3DF7bkpu2
06/02/08 10:04:19
>>81-83あたりのスレが一斉削除(´・ω・`)

92:デフォルトの名無しさん
06/02/08 12:07:02
↓されてほしいひとの書き込み↓

93:ζ゚
06/02/15 15:15:42
ここまでできました。

習作・国盗りSLGが作りたい!
URLリンク(gamdev.org)

マップ表示部分だけですが、案外よくできたので。
この先の、内政とか戦闘とかが構想まるで無しwww バロス

94:デフォルトの名無しさん
06/02/16 21:55:19
#include <stdio.h>

main(argc, argv)
int argc;
char *argv[];
{
printf("%s: Hello, world!¥n", argv[0]);
return 0;
}

95:携帯で書いた暇人
06/02/17 02:38:15
#include <stdio.h>
void flush(int n,FILE* fp){ if (n) putc(n-1,fp); }
void main(int ac,char *av[]){
FILE *fi,*fo;
int c=EOF,r=0,n;

if (ac==3){
fi=fopen(av[1],゙rb゙);
fo=fopen(av[2],゙wb゙);
if (fi && fo){
while ((n=getc(fi))!=EOF){
if (n==c){
if (!r) putc(c,fo);
if (++r==256){
flush(r,fo);
r=0,c=EOF;
}
}
else{
flush(r,fo);
r=0,c=n;
putc(c,fo);
}
}/* end while */
flush(r,fo);
}
if (fi) fclose(fi);
if (fo) fclose(fo);
}
}

96:デフォルトの名無しさん
06/02/17 10:56:20
static変数は関数外で宣言することで複数の関数が共有できます。
ただし、定義されたソースファイルの関数だけで、他のソースファイルの関数から参照することはできません。
なおstatic変数は静的にデータとして確保されますが、価を指定して宣言した場合のみデータ領域に配置され、初期値を指定しない場合はスタック領域の先頭に領域が確保されますよ。
コンパイラが領域確保のコードをリンクするので、そこらへんはあまり意識する必要もないかと。

constは値を指定した場合のみ、定数がデータ領域に確保されます。
ただし整数なら最適化の段階でmov ax,1234みたいにコード展開されることも有り得ます。
文字列ならデータ領域に配置されると考えていいでしょう。


ちなみにヒープは二分木のことで、スタック領域を二分木で管理してmalloc等が利用できるようにしていたため、動的に割当解放できるスタック上のデータ領域をヒープ領域と呼ぶようになったみたいです。

97:ζ゚
06/02/17 12:18:16
環境依存ってなんでしょ?

コンソールで素数を数えるプログラムを組んだとき、int型で20億ぐらいまでまわったんで
うちの環境じゃint=32bitで10進9桁は保証されてると思ってたんだけど
Windowsアプリ作ったら、どうも16bit臭い。32767以下しか出てないっぽい。

コンパイル時になにかやってるのかな?ζ゚ の脳が膿んでる?

それと。
実行ファイル配布したときにも、実行環境によってintが16bitだったり32bitだったりする?
ζ゚ の感覚では、型宣言はコンパイラに対してで、奴(コンパイラ)がint=32bitだと解釈して
exeファイル作ったら、どこに持っていっても32bitの領域確保すると思ってる。

98:デフォルトの名無しさん
06/02/17 14:43:03
int 型はコンパイラ依存だ。この型は本来そのCPUで最適な
ビット数になっている筈のものだ。但し Windows 関係は
歴史的な事情により過去の16ビットマシンだった時によく
使われた int が 16 ビットのコンパイラも現在のCPUで
動作させることが可能になっている。こういったコンパイラを
使った場合は int が最適なビット数にはなってないかも
知れない。


99:デフォルトの名無しさん
06/02/17 15:26:23
>>96
嘘だらけ。

>初期値を指定しない場合はスタック領域の先頭に領域が確保されますよ。
いいえ。

>コンパイラが領域確保のコードをリンクするので
いいえ。

>constは値を指定した場合のみ、定数がデータ領域に確保されます。
いいえ。

>ヒープは二分木のことで
いいえ。

>スタック領域を二分木で管理してmalloc等が利用できるようにしていたため
いいえ。

>動的に割当解放できるスタック上のデータ領域をヒープ領域と呼ぶようになったみたいです。
いいえ。

100:デフォルトの名無しさん
06/02/17 15:29:24
>>97
>32bitの領域確保すると
必ずしも領域が確保されるわけではないが、「コンパイラに対する指定」という点ではその通り。

>Windowsアプリ作ったら、どうも16bit臭い。
これは恐らく、「Windowsでアプリを作ったら」だと思うが。
例えばWindows上でも動作可能なLSI-Cは、intが16bitなのは>98も書いている通り。

101:ζ゚
06/02/17 17:54:24
解決しました。
<Windows.h>関係なかった。

ヒント:RAND_MAX (´・ω・)

102:デフォルトの名無しさん
06/02/17 20:21:25
俺にもC言語教えれ。

103:デフォルトの名無しさん
06/02/17 20:28:04
教えろっつってんだろ

104:デフォルトの名無しさん
06/02/17 21:30:43
Copyright (C) ←


105:デフォルトの名無しさん
06/02/17 21:35:00
日本共産党委員長

106:デフォルトの名無しさん
06/02/17 23:14:02
ふざけんなてめーら。一向に教える気配ねーじゃねーか。
いい加減にしろ

107:デフォルトの名無しさん
06/02/17 23:24:14
URLリンク(homepage3.nifty.com)

108:デフォルトの名無しさん
06/02/18 09:02:28
>>107
たった今やっと読破してきた。次は何をやればいい?

109:デフォルトの名無しさん
06/02/18 09:12:58
次何やればいいか聞いてんだろ!!苦C徹夜して読んだんだから次オシエレ

110:デフォルトの名無しさん
06/02/18 09:25:25
いい加減にしないと俺も怒るぞ(^ω^;)

111:ζ゚
06/02/18 09:47:30
じゃ、「数当て」ゲーム作ろうぜ。

112:ζ゚
06/02/18 10:16:52
/*つ[数当てゲーム]*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){
int r,s;

srand((unsigned)time(NULL));
r=rand()%9+1;
while(1){
puts("数(1〜9):");scanf("%d",&s);
if(r==s){puts("正解!");break;}
else if(r>s)puts("小さい!");
else puts("大きい!");
}
}


113:デフォルトの名無しさん
06/02/18 10:20:18
#include <stdio.h>

void main (void)

{

int tokuten[5],gokei=0,i;

printf("英語・国語・数学・理科・社会の順に得点を入力して下さい\n");

for(i=0;i<5;i++)

scanf("%d",&tokuten[i]);

for(i=0;i<5;i++)

gokei+=tokuten[i];

printf("5科目の合計点は%d点です\n",gokei);

}

なんでscanfの前にfor文が来るかわからない。

114:ζ゚
06/02/18 10:29:49
これを踏まえた上で「コードブレーカー」作れ>>110

ルール:
1.4桁の数字を用意。ただし、4桁の数字の中に、同じ数字は含まない。
   →「1111」「2233」とかは不可
2.ユーザーからの入力に対し、
 2.1. 数字と桁が合っていれば1hit
 2.2. 桁が合ってないけどその数字を使っていれば1blow
 2.3. 4桁すべて合えば(4hit)正解

例:問題「6514」

「1234」 → 1Hit 1Blow (「4」が桁も同じ、「1」は数字を使っているが桁が違う)
「5678」 → 0Hit 2Blow (「5」「6」が桁違い)

115:ζ゚
06/02/18 10:36:39
>>113
まじめだから。

っつか、scanfの前にforいるでしょフォ〜〜

116:96
06/02/18 10:54:16
>>99
嘘ではないぞ。

もっともコンパイラに依存する点だから、俺の書いた通りにならない環境もあるがな。
実際に某社のコンパイラを数種類調べた上での書き込みだ。

なお、二分木はヒープである。ヒープソートの語源を調べてみ?

117:デフォルトの名無しさん
06/02/18 11:15:13
>>116
たとえそうだとしてもスタック領域のうち動的メモリに使われる部分をヒープ領域と呼ぶというのは間違いだ。
ヒープはあくまでもヒープ。スタックとは全く関係ない。
あと、初期化子のない静的変数が置かれるのはBSSではないか?Cとは全く関係ないことだけど。

118:デフォルトの名無しさん
06/02/18 11:30:26
>>114
おっしゃ〜〜〜!!ガンガル!!(^ω^)

119:デフォルトの名無しさん
06/02/18 11:40:04
処理系に依存しすぎた説明をしてしまうのは,「C言語」をよく理解していないからだと思う

120:デフォルトの名無しさん
06/02/18 12:29:04
今来た
もの凄い勢いでスレ読んでるから仲間に入れろ
ちなみに授業で一回C言語やってるからすぐ追いつくはず

121:デフォルトの名無しさん
06/02/18 12:30:03
void Unko(char *code, char *user_code)
{
int i, j, hit, blow;

hit = blow = 0;

// hit
for(i = 0; i < KETA; i++){
if(code[i] == user_code[i]){
hit++;
}
}

// blow
for(i = 0; i < KETA; i++){
for(j = 0; j < KETA; j++){
if(i != j && code[i] == user_code[j]){
blow++;
}
}
}

printf("code:%s\nuser_code:%s\n", code, user_code);
printf("%dHit %dBlow", hit, blow);
}

122:デフォルトの名無しさん
06/02/18 12:31:03
int main()
{
int i, j, temp, flag;
char code[KETA + 1], user_code[KETA + 1], buff[KETA + 1];
randomize();
// ランダムコードの作成
code[0] = random(10);
for(i = 1; i < KETA; i++){
do{
flag = 0;
temp = random(10);
for(j = i - 1; j >= 0; j--){
if(code[j] == temp){
flag = 1;
break;
}
}
}while(flag);
code[i] = temp;
}
code[i] = '\0';
for(i = 0; i < KETA; i++){
code[i] += '0';
}
// ユーザコードの入力
printf("コードを入力しやがれ。\n>");
fgets(buff, KETA + 1, stdin);
sscanf(buff, "%d", &temp);
itoa(temp, user_code, 10);
Unko(code, user_code);
return 0;
}

123:むずかしいです><
06/02/18 12:31:34
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define KETA 4

124:デフォルトの名無しさん
06/02/18 12:34:14
>>21
なんかスゲーな
2ちゃんねるがこんなに教育熱心だと思わなかった

125:初心者
06/02/18 12:46:15
5つの数字を小さい順に並べ替えるにはどうしたらいいですか?

126:116
06/02/18 12:50:08
>>117
>あと、初期化子のない静的変数が置かれるのはBSSではないか?

正解。
後で読み返してみたら、俺も誤解を招くような書き方してたわ。
すまんかった。

127:デフォルトの名無しさん
06/02/18 12:50:15
ヒープ - Wikipedia
Wikipedia項目リンク

ちぃ、覚えた!

128:デフォルトの名無しさん
06/02/18 12:52:25
スレ読み終えた
ほとんど何もやってねーじゃんwww

129:デフォルトの名無しさん
06/02/18 12:54:23
>>112
randの下一桁は質の悪い乱数になるので使わないほうがよい

130:デフォルトの名無しさん
06/02/18 13:02:44
>>122
4桁の数字を生成するときに総当りで重複をチェックするのは効率が悪いね
もっと計算量を減らせるはずだ
ヒントはrandを使う回数は何回まで減らせるか

131:ζ゚
06/02/18 13:06:43
>>121-123
いいじゃん。

次は、なにしようか?
石取りゲーム(>>79)→3目並べ あたりまでしかネタ思いつかないス。

俺にもネタくれエロいひと

132:ζ゚
06/02/18 13:27:16
>>129
上質を知るオトコになるにはどうすればよかばってん?
どぎゃんしたらよかっと?

133:デフォルトの名無しさん
06/02/18 13:35:59
>>132
rand()*9/RAND_MAX+1

134:ζ゚
06/02/18 14:09:38
>>133
なるほろ。そいつぁいいや。
と思ったが、違いがわからない。

#include <stdio.h>
#define RMAX 32767
int main(void)
{
  int m[10]={0},n[10]={0};
  int a=0,b=0,i;
  for(i=0;i<RMAX;i++){
    a=i%9;m[a]++;
    b=i*9/RMAX;n[b]++;
  }
  for(i=0;i<9;i++)printf("%d: m[%d],n[%d]\n",i,m[i],n[i]);
}

結局、順番に分けていく(%)か、0〜*、*〜*と大きく切るかだけじゃねの?
rand()のストレスとかは詳しくシラネけど。

135:デフォルトの名無しさん
06/02/18 14:14:09
このスレ、まだあったんだ
>>131
>石取りゲーム(>>79)→3目並べ あたりまでしかネタ思いつかないス。
こいつが片付いたら、簡単なネタ出すよ

136:デフォルトの名無しさん
06/02/18 14:21:53
コードブレイカーと聞いてなぜかソウルテイカーを思い出した

137:デフォルトの名無しさん
06/02/18 14:30:26
インラインアセンブラ教えろ

138:デフォルトの名無しさん
06/02/18 14:50:06
>>137
__asm { a: jmp a }

139:デフォルトの名無しさん
06/02/18 14:52:35
ちょ・・・できね・・・教えてください。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 4

void irnd(void);
void judg(char *data, char *arry);
char data[N+1],arry[N+1];

void irnd(void)
{
int i;
srand((int unsigned)time(NULL));
for(i=0;i < N; i++) arry[i] = rand() % 9 + 1;
}
void judg(char *data,char *arry)
{
int i,n,agree,blow;
for(i=0; i < N;i++){
for(n=0; n < N;n++){
if(arry[i] == data[i]) agree++;
else if(arry[i] == data[n]) blow++;
}
}
printf("問題の数字>%s\n入力の数字>%s\n",arry,data);
printf("Hit数→%d\nBlow数→%d",agree,blow);
}

140:デフォルトの名無しさん
06/02/18 14:53:36
int main(void)
{
int i;
irnd();
printf("4桁の数字を入力\n");
for(i=0; i < N ;i++){
printf("%d桁目>",i+1); fgets(data,N+1,stdin);
}
judg(data,arry);
return 0;
}

141:デフォルトの名無しさん
06/02/18 14:54:34
>>134
例えば、rand()の最下位ビットが必ず交互にOn/Offを繰り返す実装があったとする。
rand()%2したら、必ず違う値が続くことが予測できてしまうから質が悪いと言うことになる。

142:デフォルトの名無しさん
06/02/18 14:57:28 BE:19969722-
>>129
いまどきのコンパイラなら問題ないだろ。

143:デフォルトの名無しさん
06/02/18 15:06:04 BE:279569478-
>>133
RAND_MAXがINT_MAXと同じ処理系なら、まずくね?

144:デフォルトの名無しさん
06/02/18 15:16:34
ライブラリではなく、コンパイラが乱数を生成しているのか。


145:デフォルトの名無しさん
06/02/18 15:22:19 BE:239630786-
いまだにrand()は上位ビットを見れッて言ってるヤツがいるのは、アレの影響だろうか。

146:ζ゚
06/02/18 15:28:38
ミニマムな話のほうは、RAND_MAXの余り部分での誤差。
>>134組んでみたのは、実際どうなるか分からなかったから。

予想では、rand()*9/RAND_MAX側の「9」の値が9-RAND_MAX%9低くなる、
つまり一方的に「9」だけが出にくくなると読んでたんだが。


あと>>141の話、乱数のストレスの件
例えば、コイントスで完全に50%の確率で裏表が決まるとした場合、
計算上は10回連続で表が出る確率は1/1024だけど
コンピューターは「10回のうち5回表、5回裏」に持っていきたいから
1/1024の確率どおりにならない、結果がどちらか一方に偏るとストレスが溜まるという仮定。

「表」「表」と来たときに、次が「表」になる確率は1/2じゃないんじゃない?って話のタネ。
実際どうなってるのかは知らない。

147:ζ゚
06/02/18 15:36:13
>>125がスルーされている件について



148:デフォルトの名無しさん
06/02/18 15:37:11
>>146
>141の実装だと、連続して表が出る確率は0になるね。

余りの問題に関しては、例えばrand()%9とした場合も均一ではなくなる。
仮にRAND_MAXが10の実装があったとすると、0の出る確率は2/10、1乃至8の出る確率は1/10になる。

149:デフォルトの名無しさん
06/02/18 15:38:41
>>147

>>125
スレリンク(tech板:390番)

150:デフォルトの名無しさん
06/02/18 15:41:22
今C言語やってて
#include<stdio.h>
sd(const char vc[])
{
int as=0;
while(vc[as])
as++;
return(as);
}
int main()
{
char ab[5];
printf("文字を入力してください:");
scanf("%s",ab);
     printf("あなたが入力した文字の数は%d個です",sd(ab));

return(0);
}

これを実行させた時普段はちゃんと動いてたのに
「mikomikonasu」と入力したらなぜかバグった感じになったんだけど
原因分かる人いますか?

151:デフォルトの名無しさん
06/02/18 15:43:08 BE:159754548-
>>148
RAND_MAXは最低でも0x7fffじゃなかった?

152:ζ゚
06/02/18 15:52:06
余り問題は

>ゲーム作りたいが今はマダマダ未熟で無理な奴の誓い
スレリンク(gamedev板:5-7番)

が頭にあったから、>>133で「なるほど。」→「ん?」ってなった。


>>151の突っ込みは無粋。
>>148の話はすごくよくわかる。「仮に」って言ってんじゃん。

153:ζ゚
06/02/18 16:03:12
>>150

>int main()
>{
>char ab[5];


入力は4文字以内でおながいします。

では、犬の散歩に行ってきます( ゚∀゚)ノシ

154:デフォルトの名無しさん
06/02/18 16:06:59
>>151
ならばRAND_MAXが0x7fffだとしてrand() % 7ffeの場合を考えろ。

155:デフォルトの名無しさん
06/02/18 16:12:32
itoaって何だよ

156:デフォルトの名無しさん
06/02/18 16:26:29
>>155
非標準関数。
大まかに言うとint型の数値を文字列にしてそこへのポインタを返す。
そのメモリの扱いなどから使うことはお勧めできない。

157:デフォルトの名無しさん
06/02/18 16:29:08
>>156
そうでしたか・・・。標準ライブラリ調べても無いからなぜ?と思ってた・・・。
非標準関数なんて存在を知らなかった。
解説ありがとうございます。

158:デフォルトの名無しさん
06/02/18 16:58:10
乱数の偏りが気になるなら、その処理系で調べてみるか
ソース見ればいいんじゃないかな。もしくは、独自で実装。
でもメルセンヌ・ツイスタなヒット&ブローって一体・・・って
気がするけど

159:デフォルトの名無しさん
06/02/18 17:23:34
>>158
ゲームにメルセンヌ・ツイスタを使うのは、厨房が一度は通る道。
麻疹みたいなものだ。
「うひょー、俺はこんなハイテク使っているze!!」ってやつ、な。

ま、生暖かい目で見守ってやれ。


160:ζ゚
06/02/18 18:11:56
おれは乱数の偏りとか、ある程度以上はどうでもいいけど
厨くさくなれるなら実装してみるか、メルセデス便器

161:デフォルトの名無しさん
06/02/18 18:16:06 BE:59908043-
昔、タクティクスオーガのソースを見たら、クヌースの本に載ってた乱数アルゴリズムを使ってたな。

162:デフォルトの名無しさん
06/02/18 21:53:18
>>130
><

int Set_Random_Code(char *code)
{
int i, j, temp;
char flag[10];

memset(flag, 0, sizeof(char) * 10);
code[0] = random(10);
flag[ code[0] ] = 1;

for(i = 1; i < KETA; i++){
temp = random(10);
// 使われていない数字を検索
while(flag[temp] == 1){
temp++;
if(temp > 9){
temp = 0;
}
}

code[i] = temp;
flag[temp] = 1;
}

// 文字列化
for(i = 0; i < KETA; i++) code[i] += '0';
code[i] = '\0';

return i + 1;
}

163:ζ゚
06/02/19 00:25:34
>>162
その方法だと、連続した数字が出やすくならないかい?

例えば3文字「867」と決まったあとで4文字目、
「0」〜「5」まで確率1/10、「6」「7」「8」は繰り上げ当選で「9」になるので
「9」の出る確率がなんと4割!

最悪の場合、こんなことになるかも。改悪しちゃった?



追伸:「コードブレーカー(暗号破壊)」は、女神転生シリーズで使われてた名称で
一般には「Hit&Blow」ですにゃ><
まあいいかなと思ってたけど、まさか他のスレに飛び火するとは・・・

164:デフォルトの名無しさん
06/02/19 01:38:57
こんなのでいいか?
結構適当だけど。。。

int main(void) {

char target[4];
int i, j;

srand((unsigned) time(NULL));
for (i = 0; i < 4; i++) {
target[i] = rand() % 10 + '0';
}

for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
if (i == j) continue;
if (target[i] == target[j]) {
target[i] = rand() % 10 + '0';
i = 0;
}
}
}

printf("%s\n", target);

return 0;
}

165:携帯で書いた暇人
06/02/19 01:45:37
/* これで桶? */
#include <stdio.h>
char* i_to_s(char* buf, int n)
{
char si[26],*di=buf;
int c=0;
while (n>=10){
si[c++]=(n % 10)+'0';
n = n / 10;
}
si[c++] = n + '0';
while (c){
*di++ = si[--c];
}
*di = '\0';
return buf;
}
void main()
{
char buf[24];
printf("%s\n",i_to_s(buf,32767));
}

166:デフォルトの名無しさん
06/02/19 01:46:37
>>163
本当の名前は、たしか「マスターマインド」だったとおもふ

167:165
06/02/19 01:48:19
しもーた、マイナスの処理を忘れてたわ。
すんまそん。

168:ζ゚
06/02/19 01:54:05
/*   ζ゚ コードブレーカー
       unko借りますた */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define KETA 4
void Mondai(char * code)
{
    char no[11]={"1234567890\0"};
    int l=9,i,s;
    for(i=0;i<KETA;i++){
        s=rand()%l;
        code[i]=no[s];
        if(i)l--;
        no[s]=no[l];
        no[l]='\0';
    }
    no[i]='\0';
}


169:デフォルトの名無しさん
06/02/19 01:55:50
int Unko(char *code, char *user_code)
{
    int i, j, hit, blow;

    hit = blow = 0;
    for(i = 0; i < KETA; i++)
        if(code[i] == user_code[i]) hit++;
        else
            for(j = 0; j < KETA; j++)
                if(code[i] == user_code[j]) blow++;

    printf("%dHit %dBlow\n", hit, blow);

    return hit;
}

170:ζ゚
06/02/19 01:57:23
void Kaitou(char * qcode)
{
    char ucode[KETA+1]={'\0'};
    int ans=0,s;
    while(1){
        ++ans;
        printf("\nコードを入力しやがれ。\n>");
        scanf("%d",&s);
        sprintf(ucode,"%d",s);
        if(Unko(qcode, ucode)==4)break;
    }
    printf("code:%s\nuser_code:%s\n", qcode, ucode);
    printf("%d回もかかってんじゃねえよプゲラ\n\n", ans);
}


171:ζ゚
06/02/19 01:58:22
int main(void)
{
    char question[KETA+1]={'\0'};
    srand((unsigned)time(NULL));

    Mondai(question);/*問題作成*/
    Kaitou(question);/*回答*/

    return 0;
}

172:ζ゚
06/02/19 02:01:26
>>168-171
どないでっしゃろ?
判定部分、相当「仕様」に甘えているが。

「1111」とか入力しても1Hit3Blowにならないけど、いいのかな?

173:デフォルトの名無しさん
06/02/19 02:02:49
>>171
> char no[11]={"1234567890\0"};
不必要ななる文字が追加されている。人間が数を数えるのもナンセンス。
char no[] = "1234567890";
で充分。

> if(Unko(qcode, ucode)==4)break;
折角KETAマクロが在るのだから使おう。

> sprintf(ucode,"%d",s);
数値の制限してないから、5桁入力されるとucodeが溢れる。

174:ζ゚
06/02/19 02:14:50
>>173
なるほろおっしゃるとおり。

>sprintf()のところは、溢れたらif(s>9999){...}とか覚悟してたけど
  不思議と落ちなかったもんで。

175:ζ゚
06/02/19 02:18:15
配列の要素数で、同じこと>>33でも言われてるな。

進歩ない俺_| ̄|○

176:ζ゚
06/02/19 12:05:20
どようびどようび〜〜
                         ハ_ハ    
                 ハ_ハ    (^( ゚∀゚)^)  にちようび〜〜
               ('(゚∀゚∩    )  /   
                ヽ  〈   (_ノ_ノ         
                 ヽヽ_)

てんさよんあげていくよ〜〜〜


>>168-171
qcode[],ucode[]無理して関数で渡さなくても
グローバルで書いてもいいと思うんだがどうか。

渡す側と渡される側で変数名が同じ(>>165)なのはなんとなくイヤだし、
かといって関数ごとにcode[],qcode[],question[]と
同じものなのにいろいろ名前がつくのがカコイイとは思えない。


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

5382日前に更新/131 KB
担当:undef