C言語を今日から始める僕に1から教えるスレ

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
ではお願いします
2デフォルトの名無しさん:2006/01/22(日) 21:40:20
exit;
3デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/01/22(日) 21:42:09
>>3早速やってみます
5デフォルトの名無しさん:2006/01/22(日) 21:43:27
上げてしまいました
6教官A:2006/01/22(日) 21:43:41
>>1
まずは、自己紹介から始めてもらわんとな。
7デフォルトの名無しさん:2006/01/22(日) 21:46:28
徳島県在住の学生です
8デフォルトの名無しさん:2006/01/22(日) 22:31:06 BE:310569784-
>>1-3
c++でもいいだろ
9デフォルトの名無しさん:2006/01/22(日) 22:52:16
>>1
ここまでに準備・用意したものを挙げろ。
10デフォルトの名無しさん:2006/01/23(月) 01:26:20
>>8
最初はCでいいんじゃない?教える人がいればいいけど、
Cがわかっているのが前提、というC++の本ばかりだし。
窓アプリが作れるようになるまで、続くといいけどなぁ。
11デフォルトの名無しさん:2006/01/23(月) 12:44:39
>>1
一人でやってろ
12デフォルトの名無しさん:2006/01/23(月) 19:18:25 BE:155284782-
>>10
でもC++の方が簡単じゃね?
13デフォルトの名無しさん:2006/01/23(月) 19:34:28
1の発想の転換力に激しく嫉妬。
14デフォルトの名無しさん:2006/01/23(月) 21:36:47
>>12
better CとしてC++を使うと楽チンだけど、最初は範囲が広くて
困るんじゃないかなぁ。Cの基本を前提としないC++の本があれば
いいんだけどね。
Cをざっと早足で通してやって、C++からじっくりやるのがいいのかもね。
Cは知っていて損はないし。
15デフォルトの名無しさん:2006/01/30(月) 02:56:22
どうやら、>>1はHello worldで挫折したらしいなw
16ζ゚ ◆f3DF7bkpu2 :2006/02/01(水) 20:30:08
暇だし俺が乗っ取ることにした。

おk、HelloWork理解した。次こい!
17デフォルトの名無しさん:2006/02/01(水) 21:23:02
暇人に付き合う暇人。
18ζ゚ ◆f3DF7bkpu2 :2006/02/01(水) 21:25:40
まあ待て、落ち着け。
今トリビア見てるから。
19ζ゚ ◆f3DF7bkpu2 :2006/02/01(水) 21:45:01
浦和競馬場アツイなw

競馬予想プログラムとか組みたいぜ。
20ζ゚ ◆f3DF7bkpu2 :2006/02/01(水) 22:01:06
C++はキライです

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

とか、ワケワカラナス
std::とか<<とか、いきなりこの仕打ちが挫折の原因と思う
21デフォルトの名無しさん:2006/02/01(水) 22:48:53
【初心者】ベッキーと一緒にゲーム制作スレ【歓迎】
http://pc8.2ch.net/test/read.cgi/gamedev/1138703742/
【初心者】ステフと一緒にゲーム制作 Part3【歓迎】
http://pc8.2ch.net/test/read.cgi/gamedev/1137775298/
【初心者】スレを立てる前にココで質問を【Part11】
http://pc8.2ch.net/test/read.cgi/gamedev/1137730564/
超初心者だけどゲームの作り方教えてください
http://pc8.2ch.net/test/read.cgi/gamedev/1106056261/
ズブの初心者がゲーム作れるまで勉強するスレ
http://pc8.2ch.net/test/read.cgi/gamedev/1005132370/
初心者専用スレ「シミュレーションゲーム」を作らない?
http://pc8.2ch.net/test/read.cgi/gamedev/1079745509/
初心者たちが勉強しながらBattleCityを作るスレ
http://pc8.2ch.net/test/read.cgi/gamedev/1086075386/
【初心者】課題をクリアしていくスレ【講習会】
http://pc8.2ch.net/test/read.cgi/gamedev/1086858349/
初心者はC&Cで作れ(マターリ)
http://pc8.2ch.net/test/read.cgi/gamedev/1014973518/
PSソフト開発初心者質問スレッド
http://pc8.2ch.net/test/read.cgi/gamedev/1016821100/
初心者専用スレ「パックマン」風ゲーム作らない?
http://pc8.2ch.net/test/read.cgi/gamedev/1014326802/
22ζ゚ ◆f3DF7bkpu2 :2006/02/01(水) 22:51:36
>>21
そんな誘導キライです
23デフォルトの名無しさん:2006/02/01(水) 23:33:29
>>20
いや、それむしろ便利なところだから。
printf("hogehoge %d",i);って書くより、
cout << "hogehoge " << i << endl;
って書いた方が楽じゃね?
24ζ゚ ◆f3DF7bkpu2 :2006/02/02(木) 00:30:30
慣れ?
見慣れれば大丈夫?

それはともかく、hogeってよく見かけるけど、何?
『 Hello,World! 』って?直訳すると「世界こんにちは」?
Hello,Welcome C(C++) language World! じゃね?
25デフォルトの名無しさん:2006/02/02(木) 03:23:30
>>24
あんたおもろいね。hogeっていうのは、適当な言葉さ。
特定の言葉入れる必要ないから、適当にいれているだけ。
Welcome,いいねー。ついでにいうとWelcome toだな。
で、開発環境とかはなに使っている?
26ζ゚ ◆f3DF7bkpu2 :2006/02/02(木) 08:19:50
今沖田

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

Windows2000+VisualStudio.NET
.NETのいちばん最初のやつ。VBもC#も作れるぜ。
27デフォルトの名無しさん:2006/02/02(木) 08:29:07
hogeのほかに何か名前が必要になったらpiyoだよ。
28ζ゚ ◆f3DF7bkpu2 :2006/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 :2006/02/02(木) 13:26:28
age忘れ。

どうせなら乱数の種つかわないで絶対【凶】になるようにするべきだったか
30デフォルトの名無しさん:2006/02/02(木) 17:43:50
乱数にはメルセンヌツイスタ法を利用した方がより一様な疑似乱数を得られる。
31デフォルトの名無しさん:2006/02/02(木) 18:03:46
をいをい、おみくじにずいぶん凝ったことするなw
しかしζ゚ ◆f3DF7bkpu2は、別にC初心者じゃないようだな。
このスレ、どう再利用する?
32デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/02/02(木) 18:19:01
char *status[5]={"凶","大吉","中吉","吉","末吉"};
人間は余計なことせずに、コンパイラに数えさせろ。
34ζ゚ ◆f3DF7bkpu2 :2006/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 :2006/02/02(木) 18:42:18
>>33
kwsk
36デフォルトの名無しさん:2006/02/02(木) 18:43:14
char *status[]={"凶","大吉","中吉","吉","末吉"};

こうゆうことじゃない?
37デフォルトの名無しさん:2006/02/02(木) 18:44:42
constつけろバカ
38デフォルトの名無しさん:2006/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 :2006/02/02(木) 18:48:24
配列はそれでいいとして、要素数は?

専ブラだとついsageてしまうぜ。
40ζ゚ ◆f3DF7bkpu2 :2006/02/02(木) 18:51:54
staticとconstの違いがわからねえぜ。ちょっくらぐぐってくる。
const * constとか、もう何がなんだか。
41デフォルトの名無しさん:2006/02/02(木) 18:56:56
>>40
それはあれだ、
「静的な領域の」「変更不能な」「キャラ型の」「変更不能な」「ポインタの」「配列である」status
と言う意味だよ。
42デフォルトの名無しさん:2006/02/02(木) 18:58:52
char const * const → キャラがコンスト、ポインタもコンスト、
const char * const → コンストなキャラのポインタもコンスト、
43デフォルトの名無しさん:2006/02/02(木) 19:05:24
「constつける意味ってあるの?」と疑問におもう俺は初心者ですか?
44ζ゚ ◆f3DF7bkpu2 :2006/02/02(木) 19:06:00
ξ錯乱しておりますグザイ

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

なんとなくおk
45デフォルトの名無しさん:2006/02/02(木) 19:17:06
>>43
文字列リテラルは変更不能なので、const宣言しておくべきなのです。
例:
char * p = "abc";
p[0] = 'A';
constつければエラー処理してくれるのです。
も少し便利な例:
strcat("abc", "def");
と書くと、宣言が
char * strcat(char *, const char *);
なのでエラーにナルです。
46デフォルトの名無しさん:2006/02/02(木) 19:25:34
ひらたく言うと、書き換えないものは、ミスを減らすためにも
constつけておけ、ということです。
47ζ゚ ◆f3DF7bkpu2 :2006/02/02(木) 21:26:00
ネタ切れの予感…

いかん、このままでは「名無しさん」に戻ってしまう
48デフォルトの名無しさん:2006/02/02(木) 21:31:29
よっし、それじゃあネタ投下だ。
VS,コマンドラインから使っている?そのままIDEでやってる?
49ζ゚ ◆f3DF7bkpu2 :2006/02/02(木) 21:45:06
IDEだけど「空のプロジェクト」は厳守。
clでコンパイルできるようにはしてる。
50デフォルトの名無しさん:2006/02/02(木) 21:54:18
なかなかやるね。コマンドラインからコンパイルすると
実際なにやってるかよくわかるしね。clでそのままコンパイルできるなら
小さいコードは、エディタとclでやると軽くていい感じ。
んじゃ、スタックとヒープってなんだかわかる?
51ζ゚ ◆f3DF7bkpu2 :2006/02/02(木) 22:37:59
以前、マジモンでまったくわからないときに

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

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


で、
「スタック」 FILOとか後入れ先出しとか。言葉だけでCの実装はシラネ
「ヒープ」  聞いたことあるけど不明。言われたら多分「あ、それ知ってる」と思
52ζ゚ ◆f3DF7bkpu2 :2006/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デフォルトの名無しさん:2006/02/02(木) 23:16:09
いや、話蒸し返してないぞ。staticとか、mallocで作った領域(変数)は
ヒープってところに作られるんだ。んで、そういうのつけないで関数の
中で宣言したのは、スタックってところに作られるんだ。
だから、前の問題だしたのさ。
でも>>52はほっといても大丈夫っぽいな。燃料ないわw
なんかいいの思いついたらくるわ。んじゃ。
54デフォルトの名無しさん:2006/02/02(木) 23:23:02
狂,凶,大凶の3つでおみくじを作りたまえ。
人間、良いことばかり気にしてちゃイカンよ。
55ζ゚ ◆f3DF7bkpu2 :2006/02/02(木) 23:27:44
きのうまでの俺ならstatic int a は間違いなくグローバルに置いてた。
関数呼び出しのたびに使い捨てとおもってたから。

ありがとう友よ
GJ俺

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

static int a=0;
int count(void)
{
return(++a);
}
57ζ゚ ◆f3DF7bkpu2 :2006/02/02(木) 23:32:09
>>56
count関数の外でもaが触れる?
58デフォルトの名無しさん:2006/02/02(木) 23:37:20
>>53
static変数の領域はヒープではない。
5953:2006/02/03(金) 01:04:56
なんか変なこと書いたような気がして戻ってきた。
>>58指摘ありがとう。そう、staticはヒープではないね。
ヒープはmallocで動的に確保される領域だから。関数が抜けても
値が保持されるのは同じような性質だけど。
60デフォルトの名無しさん:2006/02/03(金) 01:05:26
じゃ、1から教えるぞ。
まず

#
61ζ゚ ◆f3DF7bkpu2 :2006/02/03(金) 01:07:03
>>60
おk理解したwww

粘着してるわけじゃなくて今戻ってきたとこ。
ブログ更新してた。
62デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/02/03(金) 01:38:05
終わり。
わかんないとこあったら聞け。
ブラウザの基本・・・でもないか。
71デフォルトの名無しさん:2006/02/03(金) 02:44:15
>>70
横からだが・・・
UNIX系だね。ネットワークアプリは手を出したことがないから
興味あったけど、メインはWINだから残念。でも参考にさせて
もらうよ。サンクス
72ζ゚ ◆f3DF7bkpu2 :2006/02/03(金) 09:24:08
>>62-70 華麗にスルー
static char const * const status[]{...} の1行より興味を惹かないなあ。
あれだ。
「倉庫番」でいう、だだっ広い散らかった面よりちっちゃい面の方が好き。

今は>>54の要望に応えつつマニアックなアプローチを考えている。
73デフォルトの名無しさん:2006/02/04(土) 15:27:20
#include "stdio.h"
void main()
{
printf ("string");
}
をプロンプトから実行しても文字が表示されないのは設定がいるんですか?winXPで。
borlandC++5.5.1
74デフォルトの名無しさん:2006/02/04(土) 15:27:57
やっぱいいです、、、
75デフォルトの名無しさん:2006/02/04(土) 16:00:38
設定はいらないけど。
printf("string\n");
に直してみれ。
76デフォルトの名無しさん:2006/02/04(土) 16:35:34
>>73
ついでにint main()。
stdio.hは標準だから<stdio.h>とするのが普通。
77ζ゚ :2006/02/04(土) 21:38:44
過疎スーレ!!
78ζ゚ :2006/02/05(日) 17:30:00
(俺日記)o。..
         ζ゚

今日はウインウインでフラッシュ演算つくろうと頑張った。
表示までできました。問題点は多々あるが形だけは。
入力受け付ける方法がわからなかった。
79ζ゚ :2006/02/05(日) 17:35:40
(俺日記)o。..
         ζ゚

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

めっちゃかわええ。結婚してくださいw
80デフォルトの名無しさん:2006/02/06(月) 03:55:25
さようなら
81よいしょ:2006/02/06(月) 03:56:33
クソスレBEST5 in ム板 (2006/2/5)

オマイラが俺様にプログラムを教えてあげれるスレ
http://pc8.2ch.net/test/read.cgi/tech/1139074310/l50

C言語を今日から始める僕に1から教えるスレ
http://pc8.2ch.net/test/read.cgi/tech/1137933572/l50

田中彰の応援歌を考えた。
http://pc8.2ch.net/test/read.cgi/tech/1139002576/l50

我こそはSE職人さん!集まって下さーい\(^o^)/
http://pc8.2ch.net/test/read.cgi/tech/1138765471/l50

エンディアン嘘つかない
http://pc8.2ch.net/test/read.cgi/tech/1138500749/l50
82ζ゚ :2006/02/06(月) 09:50:03
転載おつです

ちくしょう2位かよ!
でも1位の壁は厚いからなあ。DQNレベルが違いすぎる
83ζ゚ :2006/02/06(月) 10:25:48
84デフォルトの名無しさん:2006/02/07(火) 13:18:59
配列ワカンネ。というよりfor文、putcharとかも怪しい。
85 ◆U8V9D2Qx0c :2006/02/07(火) 13:20:07
test
8684:2006/02/07(火) 13:24:28
プロトタイプ宣言....?
知らんがな。
8784:2006/02/07(火) 13:25:47
while文くらいしかできない
88デフォルトの名無しさん:2006/02/07(火) 13:33:36
ググって見たけど分からなかった。
89デフォルトの名無しさん:2006/02/07(火) 20:26:06
こうですか?わかりません!(><)
90ζ゚ :2006/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 :2006/02/08(水) 10:04:19
>>81-83あたりのスレが一斉削除(´・ω・`)
92デフォルトの名無しさん:2006/02/08(水) 12:07:02
↓されてほしいひとの書き込み↓
93ζ゚ :2006/02/15(水) 15:15:42
ここまでできました。

習作・国盗りSLGが作りたい!
ttp://gamdev.org/up/img/4660.zip

マップ表示部分だけですが、案外よくできたので。
この先の、内政とか戦闘とかが構想まるで無しwww バロス
94デフォルトの名無しさん:2006/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携帯で書いた暇人:2006/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デフォルトの名無しさん:2006/02/17(金) 10:56:20
static変数は関数外で宣言することで複数の関数が共有できます。
ただし、定義されたソースファイルの関数だけで、他のソースファイルの関数から参照することはできません。
なおstatic変数は静的にデータとして確保されますが、価を指定して宣言した場合のみデータ領域に配置され、初期値を指定しない場合はスタック領域の先頭に領域が確保されますよ。
コンパイラが領域確保のコードをリンクするので、そこらへんはあまり意識する必要もないかと。

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


ちなみにヒープは二分木のことで、スタック領域を二分木で管理してmalloc等が利用できるようにしていたため、動的に割当解放できるスタック上のデータ領域をヒープ領域と呼ぶようになったみたいです。
97ζ゚ :2006/02/17(金) 12:18:16
環境依存ってなんでしょ?

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

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

それと。
実行ファイル配布したときにも、実行環境によってintが16bitだったり32bitだったりする?
ζ゚ の感覚では、型宣言はコンパイラに対してで、奴(コンパイラ)がint=32bitだと解釈して
exeファイル作ったら、どこに持っていっても32bitの領域確保すると思ってる。
98デフォルトの名無しさん:2006/02/17(金) 14:43:03
int 型はコンパイラ依存だ。この型は本来そのCPUで最適な
ビット数になっている筈のものだ。但し Windows 関係は
歴史的な事情により過去の16ビットマシンだった時によく
使われた int が 16 ビットのコンパイラも現在のCPUで
動作させることが可能になっている。こういったコンパイラを
使った場合は int が最適なビット数にはなってないかも
知れない。
99デフォルトの名無しさん:2006/02/17(金) 15:26:23
>>96
嘘だらけ。

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

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

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

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

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

>動的に割当解放できるスタック上のデータ領域をヒープ領域と呼ぶようになったみたいです。
いいえ。
100デフォルトの名無しさん:2006/02/17(金) 15:29:24
>>97
>32bitの領域確保すると
必ずしも領域が確保されるわけではないが、「コンパイラに対する指定」という点ではその通り。

>Windowsアプリ作ったら、どうも16bit臭い。
これは恐らく、「Windowsでアプリを作ったら」だと思うが。
例えばWindows上でも動作可能なLSI-Cは、intが16bitなのは>98も書いている通り。
101ζ゚ :2006/02/17(金) 17:54:24
解決しました。
<Windows.h>関係なかった。

ヒント:RAND_MAX (´・ω・)
102デフォルトの名無しさん:2006/02/17(金) 20:21:25
俺にもC言語教えれ。
103デフォルトの名無しさん:2006/02/17(金) 20:28:04
教えろっつってんだろ
104デフォルトの名無しさん:2006/02/17(金) 21:30:43
Copyright (C) ←
105デフォルトの名無しさん:2006/02/17(金) 21:35:00
日本共産党委員長
106デフォルトの名無しさん:2006/02/17(金) 23:14:02
ふざけんなてめーら。一向に教える気配ねーじゃねーか。
いい加減にしろ
107デフォルトの名無しさん:2006/02/17(金) 23:24:14
108デフォルトの名無しさん:2006/02/18(土) 09:02:28
>>107
たった今やっと読破してきた。次は何をやればいい?
109デフォルトの名無しさん:2006/02/18(土) 09:12:58
次何やればいいか聞いてんだろ!!苦C徹夜して読んだんだから次オシエレ
110デフォルトの名無しさん:2006/02/18(土) 09:25:25
いい加減にしないと俺も怒るぞ(^ω^;)
111ζ゚ :2006/02/18(土) 09:47:30
じゃ、「数当て」ゲーム作ろうぜ。
112ζ゚ :2006/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デフォルトの名無しさん:2006/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ζ゚ :2006/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ζ゚ :2006/02/18(土) 10:36:39
>>113
まじめだから。

っつか、scanfの前にforいるでしょフォ〜〜
11696:2006/02/18(土) 10:54:16
>>99
嘘ではないぞ。

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

なお、二分木はヒープである。ヒープソートの語源を調べてみ?
117デフォルトの名無しさん:2006/02/18(土) 11:15:13
>>116
たとえそうだとしてもスタック領域のうち動的メモリに使われる部分をヒープ領域と呼ぶというのは間違いだ。
ヒープはあくまでもヒープ。スタックとは全く関係ない。
あと、初期化子のない静的変数が置かれるのはBSSではないか?Cとは全く関係ないことだけど。
118デフォルトの名無しさん:2006/02/18(土) 11:30:26
>>114
おっしゃ〜〜〜!!ガンガル!!(^ω^)
119デフォルトの名無しさん:2006/02/18(土) 11:40:04
処理系に依存しすぎた説明をしてしまうのは,「C言語」をよく理解していないからだと思う
120デフォルトの名無しさん:2006/02/18(土) 12:29:04
今来た
もの凄い勢いでスレ読んでるから仲間に入れろ
ちなみに授業で一回C言語やってるからすぐ追いつくはず
121デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/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むずかしいです><:2006/02/18(土) 12:31:34
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define KETA 4
124デフォルトの名無しさん:2006/02/18(土) 12:34:14
>>21
なんかスゲーな
2ちゃんねるがこんなに教育熱心だと思わなかった
125初心者:2006/02/18(土) 12:46:15
5つの数字を小さい順に並べ替えるにはどうしたらいいですか?
126116:2006/02/18(土) 12:50:08
>>117
>あと、初期化子のない静的変数が置かれるのはBSSではないか?

正解。
後で読み返してみたら、俺も誤解を招くような書き方してたわ。
すまんかった。
127デフォルトの名無しさん:2006/02/18(土) 12:50:15
ヒープ - Wikipedia
http://ja.wikipedia.org/wiki/%E3%83%92%E3%83%BC%E3%83%97

ちぃ、覚えた!
128デフォルトの名無しさん:2006/02/18(土) 12:52:25
スレ読み終えた
ほとんど何もやってねーじゃんwww
129デフォルトの名無しさん:2006/02/18(土) 12:54:23
>>112
randの下一桁は質の悪い乱数になるので使わないほうがよい
130デフォルトの名無しさん:2006/02/18(土) 13:02:44
>>122
4桁の数字を生成するときに総当りで重複をチェックするのは効率が悪いね
もっと計算量を減らせるはずだ
ヒントはrandを使う回数は何回まで減らせるか
131ζ゚ :2006/02/18(土) 13:06:43
>>121-123
いいじゃん。

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

俺にもネタくれエロいひと
132ζ゚ :2006/02/18(土) 13:27:16
>>129
上質を知るオトコになるにはどうすればよかばってん?
どぎゃんしたらよかっと?
133デフォルトの名無しさん:2006/02/18(土) 13:35:59
>>132
rand()*9/RAND_MAX+1
134ζ゚ :2006/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デフォルトの名無しさん:2006/02/18(土) 14:14:09
このスレ、まだあったんだ
>>131
>石取りゲーム(>>79)→3目並べ あたりまでしかネタ思いつかないス。
こいつが片付いたら、簡単なネタ出すよ
136デフォルトの名無しさん:2006/02/18(土) 14:21:53
コードブレイカーと聞いてなぜかソウルテイカーを思い出した
137デフォルトの名無しさん:2006/02/18(土) 14:30:26
インラインアセンブラ教えろ
138デフォルトの名無しさん:2006/02/18(土) 14:50:06
>>137
__asm { a: jmp a }
139デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/02/18(土) 14:54:34
>>134
例えば、rand()の最下位ビットが必ず交互にOn/Offを繰り返す実装があったとする。
rand()%2したら、必ず違う値が続くことが予測できてしまうから質が悪いと言うことになる。
142デフォルトの名無しさん:2006/02/18(土) 14:57:28 BE:19969722-
>>129
いまどきのコンパイラなら問題ないだろ。
143デフォルトの名無しさん:2006/02/18(土) 15:06:04 BE:279569478-
>>133
RAND_MAXがINT_MAXと同じ処理系なら、まずくね?
144デフォルトの名無しさん:2006/02/18(土) 15:16:34
ライブラリではなく、コンパイラが乱数を生成しているのか。
145デフォルトの名無しさん:2006/02/18(土) 15:22:19 BE:239630786-
いまだにrand()は上位ビットを見れッて言ってるヤツがいるのは、アレの影響だろうか。
146ζ゚ :2006/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ζ゚ :2006/02/18(土) 15:36:13
>>125がスルーされている件について

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

余りの問題に関しては、例えばrand()%9とした場合も均一ではなくなる。
仮にRAND_MAXが10の実装があったとすると、0の出る確率は2/10、1乃至8の出る確率は1/10になる。
149デフォルトの名無しさん:2006/02/18(土) 15:38:41
150デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/02/18(土) 15:43:08 BE:159754548-
>>148
RAND_MAXは最低でも0x7fffじゃなかった?
152ζ゚ :2006/02/18(土) 15:52:06
余り問題は

>ゲーム作りたいが今はマダマダ未熟で無理な奴の誓い
ttp://pc8.2ch.net/test/read.cgi/gamedev/1138955951/5-7

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


>>151の突っ込みは無粋。
>>148の話はすごくよくわかる。「仮に」って言ってんじゃん。
153ζ゚ :2006/02/18(土) 16:03:12
>>150

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


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

では、犬の散歩に行ってきます( ゚∀゚)ノシ
154デフォルトの名無しさん:2006/02/18(土) 16:06:59
>>151
ならばRAND_MAXが0x7fffだとしてrand() % 7ffeの場合を考えろ。
155デフォルトの名無しさん:2006/02/18(土) 16:12:32
itoaって何だよ
156デフォルトの名無しさん:2006/02/18(土) 16:26:29
>>155
非標準関数。
大まかに言うとint型の数値を文字列にしてそこへのポインタを返す。
そのメモリの扱いなどから使うことはお勧めできない。
157デフォルトの名無しさん:2006/02/18(土) 16:29:08
>>156
そうでしたか・・・。標準ライブラリ調べても無いからなぜ?と思ってた・・・。
非標準関数なんて存在を知らなかった。
解説ありがとうございます。
158デフォルトの名無しさん:2006/02/18(土) 16:58:10
乱数の偏りが気になるなら、その処理系で調べてみるか
ソース見ればいいんじゃないかな。もしくは、独自で実装。
でもメルセンヌ・ツイスタなヒット&ブローって一体・・・って
気がするけど
159デフォルトの名無しさん:2006/02/18(土) 17:23:34
>>158
ゲームにメルセンヌ・ツイスタを使うのは、厨房が一度は通る道。
麻疹みたいなものだ。
「うひょー、俺はこんなハイテク使っているze!!」ってやつ、な。

ま、生暖かい目で見守ってやれ。
160ζ゚ :2006/02/18(土) 18:11:56
おれは乱数の偏りとか、ある程度以上はどうでもいいけど
厨くさくなれるなら実装してみるか、メルセデス便器
161デフォルトの名無しさん:2006/02/18(土) 18:16:06 BE:59908043-
昔、タクティクスオーガのソースを見たら、クヌースの本に載ってた乱数アルゴリズムを使ってたな。
162デフォルトの名無しさん:2006/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ζ゚ :2006/02/19(日) 00:25:34
>>162
その方法だと、連続した数字が出やすくならないかい?

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

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



追伸:「コードブレーカー(暗号破壊)」は、女神転生シリーズで使われてた名称で
一般には「Hit&Blow」ですにゃ><
まあいいかなと思ってたけど、まさか他のスレに飛び火するとは・・・
164デフォルトの名無しさん:2006/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携帯で書いた暇人:2006/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デフォルトの名無しさん:2006/02/19(日) 01:46:37
>>163
本当の名前は、たしか「マスターマインド」だったとおもふ
167165:2006/02/19(日) 01:48:19
しもーた、マイナスの処理を忘れてたわ。
すんまそん。
168ζ゚ :2006/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デフォルトの名無しさん:2006/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ζ゚ :2006/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ζ゚ :2006/02/19(日) 01:58:22
int main(void)
{
    char question[KETA+1]={'\0'};
    srand((unsigned)time(NULL));

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

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

「1111」とか入力しても1Hit3Blowにならないけど、いいのかな?
173デフォルトの名無しさん:2006/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ζ゚ :2006/02/19(日) 02:14:50
>>173
なるほろおっしゃるとおり。

>sprintf()のところは、溢れたらif(s>9999){...}とか覚悟してたけど
  不思議と落ちなかったもんで。
175ζ゚ :2006/02/19(日) 02:18:15
配列の要素数で、同じこと>>33でも言われてるな。

進歩ない俺_| ̄|○
176ζ゚ :2006/02/19(日) 12:05:20
どようびどようび〜〜
                         ハ_ハ    
                 ハ_ハ    (^( ゚∀゚)^)  にちようび〜〜
               ('(゚∀゚∩    )  /   
                ヽ  〈   (_ノ_ノ         
                 ヽヽ_)

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


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

渡す側と渡される側で変数名が同じ(>>165)なのはなんとなくイヤだし、
かといって関数ごとにcode[],qcode[],question[]と
同じものなのにいろいろ名前がつくのがカコイイとは思えない。
177デフォルトの名無しさん:2006/02/19(日) 12:40:26
>なんとなくイヤ
同じ物に同じ名前がつくのを嫌がるとは……
178デフォルトの名無しさん:2006/02/19(日) 13:36:11
>>176
基本的に、グローバルに置くのは最終手段と思ったほうがいい。
仮にそのプログラムをもっと発展させようと思ったとき、
そのグローバル変数が足枷になるかもしれない。
まぁ、「使い捨てだから構わない」という方針なら別だが。

#あるプログラムのマルチスレッド化を試みているのだが、グローバル変数に泣かされているのは仕事なので内緒。
179デフォルトの名無しさん:2006/02/19(日) 13:40:56
>まぁ、「使い捨てだから構わない」という方針なら別だが。
言い換えるなら十分規模が小さいなら構わないということだな。
特にソースファイルがひとつで収まるようなコードでは
グローバルだ何だと大騒ぎしても全く無意味。
180デフォルトの名無しさん:2006/02/19(日) 13:53:27
せめてstaticにしてソース外でぶつからないようにね。
181ζ゚ :2006/02/19(日) 13:57:02
>>177
  ,o/ ∠先生!呼び出し側と受け側の変数名が同じでも
  lミiニ!  それは違うものだと思います!
1821でs:2006/02/19(日) 14:13:53
配列のところまできました!
そこでわからなくなってしまったので質問です。
やさっしいCという本を手本にさせてもらっているのですが
183ζ゚ :2006/02/19(日) 14:17:25
相手をおもいやる心と、そう思う相手の心を受けとめる心かな。
184配列のソート:2006/02/19(日) 14:23:27
#include <stdio.h>
#define NUM 5

int main(void){

int test=[NUM];
int tmp;
int i, j, s, t;

printf(""%d人の点数を入力してください\n",NUM);
for( i=0; i<NUM; i++){
scanf("%d",&test[i]);
}

185配列のソート:2006/02/19(日) 14:24:10
for(s=0; s<NUM-1; s++){
for(t=s+1; t<NUM; t++){
if(test[t]>test[s]){

tmp=test[t];
test[t]=test[s];
test[s]=tmp;
} } }

for(j=0; j<NUM; j++){
printf("%d番目の人数は%dです\n",j+1,test[j]);
}

return 0;
}

これがまったく訳わかりませんたすけてください!!
186デフォルトの名無しさん:2006/02/19(日) 14:29:51
printf("s=%d, t=%d, test[]={ %s, %s, %s, %s, %s }\n", s, t, test[0], test[1], test[2], test[3],test[4]);
という行を
>for(t=s+1; t<NUM; t++){
の下の行に追加して出力をよく読んでみろ。
187デフォルトの名無しさん:2006/02/19(日) 15:19:10
途中でスレ放り出して、わからない時だけ聞きに来る>>1
188デフォルトの名無しさん:2006/02/19(日) 15:42:39
>>186わかんないです><
詳しく解説してください
189デフォルトの名無しさん:2006/02/19(日) 15:45:03
そんな>>1ウザス。質問しといて1時間放置・・・ウザス。解説してください・・・ウザス。
190デフォルトの名無しさん:2006/02/19(日) 15:51:51
一時間放置したのは考えていたからです・・・><許して><
ぜんぜんわかんあい
191デフォルトの名無しさん:2006/02/19(日) 16:19:57
>>190
何が分からないのか言え。
192デフォルトの名無しさん:2006/02/19(日) 17:14:37
おまいら皆氏ね
193177:2006/02/19(日) 17:32:33
>>181
そこまで言われると、勝手にしてくれとしか言えんが。
main()でMondai()関数に渡しているのは「問題」。
Mondai()関数で生成しているのは「問題」。
Kaitou()関数に渡しているのも「問題」。
それらに同じ名前をつけて何か問題でもあるのか?
194ζ゚ :2006/02/19(日) 21:42:59
>>193
たとえば「問題」が二つ以上欲しくなったとき

void Mondai(char * qcode){,,,,,}
 :
int main(void){
  Mondai(qcode);
  Mondai(qcode2);
 :
ここのmain側qcode[]、qcode2[]と関数側qcode[]では3者全部意味が違うよね?
ただ値渡しという関連だけで。

他の場所で使う変数が同じ名前だと混乱するので、なるべく避けたいというのがζ゚ の考え。
ま、例外としてループに使うint i,j とかはどこの関数でも値渡しせず関数内宣言するけど。


いい燃料になると思ったんだけど、ただの宗教問題になってしまってツマラナス
195デフォルトの名無しさん:2006/02/19(日) 21:57:18
>>194
自己矛盾に陥ってる。
グローバルで充分と言いつつ(>176)、同じじゃなくなると言っている(>194)。
同じ名前がいやだと言うところからスタートしていると思ったのだが。
196ζ゚ :2006/02/19(日) 22:05:21
そこで>>176に戻るわけだ。

>同じものなのにいろいろ名前がつくのがカコイイとは思えない。
>>176のレスの時点で、ζ゚ は別の関数(別のスコープ)では>>177>同じ物 とは思ってないわけだ。

だから
Mondai(*code) ←KETA数の数字列を返す関数
Kaitou(*qcode) ←生成した問題列を渡す
メイン側の呼び出し ←生成された実際の値そのもの

という感じで、汎用的→局所的 に名前を変えてみた。って感じ。


まずはどんなに汚くても反則技を使っても「問題なく動けば勝ち」と思ってるζ゚ なんで、
>>130の指摘を受けて、もっとプログラムが汚くなるなら薮蛇かなと。
それで新たな問題が出てくる(>>163指摘)ようならダメでしょい
197ζ゚ :2006/02/19(日) 22:10:27
>>195
矛盾してるのは承知の上。

今回、問題生成が1回で済むのは仕様上明らかだし、
そんなものを「グローバル変数を嫌う」という理由だけで
関数内宣言→値渡し にこだわりすぎるのはどうかなと思っただけ。

別の関数内で同じ名前をつかうことに関しては>>196
198ζ゚ :2006/02/19(日) 22:15:02
>>195
自己矛盾?
仕様上、qcode[]がひとつでいいという前提ならグローバル宣言を使うし
Mondai()の呼び出しが2箇所以上になることが設計時点で予想できるなら値渡しにするし。
199デフォルトの名無しさん:2006/02/20(月) 02:35:31
>>107
苦Cって何か良いな!初めて見た!
やべぇ続きが読みたくておちんちんがウズウズしてるけど
痔が悪化するから今日は寝るぞ!
200デフォルトの名無しさん:2006/02/20(月) 11:10:47
>>198
>設計時点で予想できる

設計時点でその可能性が無くても後々困らないようにしておくほうが吉
201デフォルトの名無しさん:2006/02/20(月) 12:30:18
/* はじめてのぷろぐらみんぐ☆ */
#include <stdio.h>

int main()
{
fclose(stdin);
fclose(stdout);

return 0;
}
202デフォルトの名無しさん:2006/02/20(月) 16:30:25
stderr はそのままで良いと。
203デフォルトの名無しさん:2006/02/24(金) 12:19:43
横槍すまんこ
今は仕事でVB.NETやってるんだけど将来は(独学で)VC++に乗り換えたいと思ってるんだけど、
何から学べば良いのか分からない。
やっぱりC→C++→VC++って勉強するのがベスト?
204デフォルトの名無しさん:2006/02/24(金) 12:41:40
>>203
最初からVC++がいいと思う。
205デフォルトの名無しさん:2006/02/24(金) 12:55:41
コンソールアプリでC++の文法を覚えつつVSの使い方も覚えてから
Win32API&VC++固有のライブラリ(MFCとか)覚えていくのがいいんじゃないの。
206デフォルトの名無しさん:2006/02/24(金) 20:13:17
207203:2006/03/01(水) 18:36:16
>>204
仕事でVB.net使えってことなので・・・
ホントはVC++使いたかったんだよ。
>>205
基本はHelloWorldってことですな。

とりあえず猫でも分かる〜でなんとなくの雰囲気つかみながら
詳説C++読んで勉強するよ。
208デフォルトの名無しさん:2006/03/03(金) 04:56:37
んえ?VC++ってC++用の開発環境と違うの?
209デフォルトの名無しさん:2006/03/03(金) 05:12:56
>>208
MSのVC++はC++の開発環境を含む
Windowsj上でのC/C++アプリの開発環境
210デフォルトの名無しさん:2006/03/03(金) 07:42:44
VC++にはC++/CLIもあるな<。
211デフォルトの名無しさん:2006/03/03(金) 07:47:50
CLIって言語なの?
212デフォルトの名無しさん:2006/03/03(金) 12:36:02
>>211
C++/CLIって言語だと思ってほぼ間違いない。
つまり、C++でもなければC#でもない。
213デフォルトの名無しさん:2006/03/03(金) 15:13:13
>>211
もうC++/CLIはECMAで標準化されている。もちろん中身はISO C++を引用してあれこれと言う構成になっているけど。
http://www.stdblue.net/cgi-bin/vene/wiki/wiki.cgi?page=C%2B%2B%2FCLI

http://msdn2.microsoft.com/ja-jp/library/ms235629.aspx
> Visual C++ は次の標準に準拠しています。
> ISO C 95
> ISO C++ 98
> Ecma C++/CLI 05
214 :2006/03/18(土) 21:57:06
(まる1ヶ月ほどPG組んでないでごじゃる)
                         0o。.
                            ζ゚
215デフォルトの名無しさん:2006/03/20(月) 13:51:20
include <stdio.h>
int main (void)
{
printf("hell of world\n");
return 0;
}
216デフォルトの名無しさん:2006/03/27(月) 12:37:22
>>215
int main (void) はいかん。int main() だ。
217デフォルトの名無しさん:2006/03/27(月) 12:44:08
>>216

規格で明示的に定められているmain関数のプロトタイプは
(1) int main(void)
(2) int main(int argc,char**argv)
(3) 上二つと等価な方法
(4) それ以外の処理系定義の方法

なのでint main()は処理系定義となって、可搬性に劣るからお勧めできない。
218デフォルトの名無しさん:2006/03/28(火) 13:43:09
>>217
ところがどっこい、関数の定義で空の括弧は関数が引数を持たないことを表すと書いてあって、
関数の定義では空の括弧と(void)の違いが無いように読めるんだ。

つまりint main()でmain関数を定義した場合、それは(3)になると俺は思っている。
尤も俺はint main(void)を使っているけれど。
219デフォルトの名無しさん:2006/03/29(水) 10:34:46
結局なにが言いたい?
220デフォルトの名無しさん:2006/03/29(水) 10:39:16
引数省略した場合に自分の環境でどう振舞うかは
extern foo();
foo(1);
とでもやってコンパイルしてみればわかるだろう。
221ζ゜ :2006/04/12(水) 22:50:02
あふぁ〜〜ん
222ζ゜ :2006/04/16(日) 23:05:05
自己解決しましたw
223デフォルトの名無しさん:2006/05/09(火) 21:04:57
もう、稼働していないのか?
224今更:2006/05/09(火) 22:03:48
ちょいスレ違い?
WindowsのVisual C#とかVisual Basicってフリーのやつで勉強始めてもいいのでしょうか?
225デフォルトの名無しさん:2006/05/09(火) 22:31:32
>>224
visual studio.net
絶対に買い。
226デフォルトの名無しさん:2006/05/10(水) 11:25:19
>>224
何の勉強するかによるが、言語や環境の使い方やプログラムの組み方と言う話なら無料の奴で良い
227デフォルトの名無しさん:2006/05/14(日) 03:46:43
Cの勉強をするんですが、結城浩のプログラミングレッスンで事足りるでしょうか?
一応使える言語はJavaです。
環境は、VC2005EEです。
OSはWindowsXPSP2です。


228デフォルトの名無しさん:2006/05/15(月) 19:41:43
>>227
さあ? とりあえず読んでみたら?
本屋で立ち読みするか図書館行くかして。
229デフォルトの名無しさん:2006/05/15(月) 20:48:09
Hello World出来たよ
230デフォルトの名無しさん:2006/05/21(日) 12:43:22
while(fgets(str, 7, fp){
printf("%s", str);
}

っていうのが本に載ってたんですが条件の意味が分かりません。
やさしく教えていただけないでしょうか?
231デフォルトの名無しさん:2006/05/21(日) 12:45:33
>>230
while (fgets(str, 7, fp) != NULL) {
printf("%s", str);
}
と等価。
232デフォルトの名無しさん:2006/05/21(日) 15:19:26
>>231
ありがとうございます。
それなら意味が分かります。
でも、同じ本でも同じように省略してたり、「!=NULL」が表示してたりで分かりにくかったんです('A`)
ご親切に ども。
233231:2006/05/21(日) 16:42:17
>>232
慣れるまでは間違い防止の為にも書くこと推奨。
234232:2006/05/21(日) 17:54:48
>>233
わかりました。どもm( _ _ )m
235デフォルトの名無しさん:2006/05/22(月) 10:53:26
>232
等価って説明は書いてなかった?初心者用参考書だと書いてそうなもんだけど
> でも、同じ本でも同じように省略してたり、「!=NULL」が表示してたりで
これはよくないな
236232:2006/05/22(月) 17:58:22
>>235
「!=NULL」の説明はありましたが省略されてる構文はそういうことに触れてなかったと思います。
近くに聞けるような人間もいないので質問させてもらった次第です。
他のスレッドは敷居が高いような気がしてここで質問させてもらいました。
ブール型で省略したらtrueだっていうのはなんとなく分かるんですけどね…orz
237デフォルトの名無しさん:2006/05/23(火) 14:52:17

ポインタについて質問です。

int x = 100;
int* p = 100;
printd("%d\n", *p);
でも、100が表示されるのはわかるんですが、

char* s = "hello";
printf("%s\n", *s);
とすると、アドレス?が表示されます。
printf("%s\n", s);
とすると、helloが表示されます。


なぜなんでしょうか?
238デフォルトの名無しさん:2006/05/23(火) 14:56:20
>>237
%sには、文字列の先頭アドレスを指定しなければならないから
239デフォルトの名無しさん:2006/05/23(火) 15:04:25

ポインタ理解できなくてやめたやつって、何人いるんだろうな?
240デフォルトの名無しさん:2006/05/23(火) 16:06:47
>>238

ありがとうございます。

241デフォルトの名無しさん:2006/05/23(火) 16:12:46

int a[] = {0,1,2,3,4,5,6,7,8,9}
int *p = a;
int i;

/* 1 */
for (i = 0; i < 10; i++) [
printf("%d\n", *p++);
}

/* 2 */
for (i = 0; i < 10; i++) {
printf("%d\n", *p);
p++;
}

1と2って、同じ意味になるの?


242デフォルトの名無しさん:2006/05/23(火) 16:18:18
いいえ
243デフォルトの名無しさん:2006/05/23(火) 16:22:23
>>241
微妙に違うがそう書くなら結果は同じ、という感じ。
244241 :2006/05/23(火) 16:33:23
>>242 >>243

レスありがとうございます。

違うというのは、どう違うのでしょうか?
教えていただけるとうれしいのですが。

もしくは参照URLか書籍があれば紹介をお願い致します。
245デフォルトの名無しさん:2006/05/23(火) 16:43:59
>>244
1ではp++が実行される場所が不定。
printfのコール前に実行されるかもしれないし、
printfが終わった後に実行されるかもしれない。
246デフォルトの名無しさん:2006/05/23(火) 16:58:36
>>245

レスありがとうございます。

不定ということは、使用しないで
明示的にp++をしたほうがいいということですか?
247デフォルトの名無しさん:2006/05/23(火) 17:03:36
>>246
不定だからこそ、順序に依存するコードを書いてしまってはダメ、というだけの話。
今回の場合はどこで実行されても問題ない。
248デフォルトの名無しさん:2006/05/23(火) 17:04:28
でもprintfのコール前に実行されるんなら、結果違うじゃん
249デフォルトの名無しさん:2006/05/23(火) 17:07:19
>>248
p++の前にテンポラリに待避させるコードが生成される。
感じとしては、1は

int tmp = *p;
p++;
printf("%d", tmp);

なコードが生成される。

その分、1の方が多少遅くなるけれど、普通は最適化で除去され、printfの後に実行されるようになって

printf("%d", *p);
p++;

みたく、2と同じコードになる。
最適化の有無を切り替えて逆汗を見比べると分かりやすいかと。
250デフォルトの名無しさん:2006/05/23(火) 21:33:03
ひんと:++p











とりあえずお前は帰れ>>245
251デフォルトの名無しさん:2006/05/24(水) 12:42:43
>>245はネタ?
252デフォルトの名無しさん:2006/05/24(水) 13:08:53
知っている者はやる。
知らない者は教える。
253241:2006/05/24(水) 20:29:53
>>247 >>248 >>249

レスが遅くなってしまい、申し訳ございません。

>>249さんのレスが大変参考になりました。

ありがとうございました。
254デフォルトの名無しさん:2006/05/26(金) 02:04:10
質問です


FILE* fp;
fp = fopen("hoge.txt", "rb");

fp = fopen("hoge.txt", "r");

バイナリで読み込んだときとそうでないときは、何か違うんですか?

255デフォルトの名無しさん:2006/05/26(金) 02:21:28
>>254
改行コードの扱いが変わる。
Windowsの場合、前者は普通にそのまま読み込むが、
後者は\r\nのペアを勝手に\nに変換するようになる。
256デフォルトの名無しさん:2006/05/26(金) 11:11:29
>>254
UNIX系OSでは違いはありません。
その他のOSでは"r"の時に改行を意味するコードが '\n' に置き換えられます。
257デフォルトの名無しさん:2006/05/26(金) 17:20:20
main()

int main(void)
は同じなんですか?
258デフォルトの名無しさん:2006/05/26(金) 18:44:51
int main(int argc, char *argv[])

int main(int argc, char* argv[])
ってどーしてスペースの位置が違うの?
259デフォルトの名無しさん:2006/05/26(金) 22:34:54
>>258
好みの問題
260デフォルトの名無しさん:2006/05/26(金) 22:59:07
#include <stdio.h>

#include "stdio.h"
は何が違うのでしょうか?
261デフォルトの名無しさん:2006/05/26(金) 23:08:59
>>260
検索パスが違う。
前者はユーザが指定したかコンパイラが知っているパスからのみ検索する。
後者は先ずカレントディレクトリを検索した後、前者と同じパスを検索する。

>>257
前者は省略しすぎているだけで、ほぼ同じ意味になる。

>>256
Unix系でないOSでも、rbの指定のないOSはいくらでもある。
262257:2006/05/26(金) 23:16:23
>>261
そーなんだ。ありがd
263258:2006/05/26(金) 23:18:35
>>259
んじゃ
int main(int argc, char * argv[])
はだめ?
264デフォルトの名無しさん:2006/05/26(金) 23:20:27
>>263
別に構わないが、プログラム全体でそのスタイルを統一するのを忘れずに
265260:2006/05/26(金) 23:22:08
>>261 Thank you
ちなみに、知っていれば教えていただきたいのですが
#include <stdio.h> と #include "stdio.h" のインクルードの違いって
名前があったりしますか
266254 :2006/05/26(金) 23:27:51

>>255 >>256 >>261

ありがとうございます。
267デフォルトの名無しさん:2006/05/26(金) 23:29:12
>>265
ない
268258:2006/05/26(金) 23:35:50
>>264
わかりました。ありがとうございます。
269デフォルトの名無しさん:2006/05/27(土) 19:01:03
いや、大有りだから!
うそ教えるなよ
270258:2006/05/29(月) 13:04:11
return 0;とreturn (0);とどちらの書き方が
正しいのですか?
271デフォルトの名無しさん:2006/05/29(月) 13:37:00
>>270
正しさと言う観点で見れば、どちらも正しい。
まぁ後者の方が冗長なわけで、前者のスタイルのほうが圧倒的によく見かけるが。
272デフォルトの名無しさん:2006/05/29(月) 15:05:39
>>270
昔は後者だけが正しかった。
今はどちらでもコンパイルは通るが、前者の書き方が良いとされている。
273258:2006/05/29(月) 16:03:59
>>271 >>272
冗長?ってなんじゃろう?
ご丁寧に回答ありがとうございます。
いろいろ書き方があると迷いますね('A`)
return 0;で統一することにします。
274デフォルトの名無しさん:2006/05/29(月) 22:30:14
入門書を読んだあとは何を読めばいいの?
275デフォルトの名無しさん:2006/05/29(月) 23:03:58
>>274
コード
276デフォルトの名無しさん:2006/05/29(月) 23:27:45
コードだけじゃ、不親切だろう。
本とか紹介してやったら?
277デフォルトの名無しさん:2006/05/30(火) 06:29:43
本買ったけど、関数とか数学系の単語が出てきたからやめた。
でももう一度見てみようかな
278デフォルトの名無しさん:2006/05/30(火) 06:42:20
/* sample.c */
#include <stdio.h>
int main(void)
{
  int flug, age;
  printf("フラグ[1 or 0] >>");
  scanf("%d",flug);
  printf("女の子の年齢>>");
  scanf("%d",&age);
  if(flug == 1 && age <= 16)
    printf("それなんてエロゲ?\n");
  else if(flug == 1)
    printf("一生独身\n");
  else
    printf("童貞乙\n");
  return 0;
}
279デフォルトの名無しさん:2006/05/30(火) 06:44:21
flugって何?
280デフォルトの名無しさん:2006/05/30(火) 07:32:36
フラグの意味の事だろうか?
ググったら分かりますよ
281デフォルトの名無しさん:2006/05/30(火) 09:29:08
スペルミスにつっこんだだけだと思われ
282デフォルトの名無しさん:2006/05/30(火) 09:43:40
フラグ[1 or 0] >>
には何と答えればいいんですか?
283デフォルトの名無しさん:2006/05/31(水) 00:47:55
俺は入門書を読んだあと何を学んだらいいのかわからず、プログラマになるのをやめたよ。
俺は何を学べばよかったんだ?

284デフォルトの名無しさん:2006/05/31(水) 05:22:52
>>283
向上心
285デフォルトの名無しさん:2006/06/01(木) 20:58:54
for(; a > 1; b = !b) {
  処理…
}
のように初期化を省略するとどーなるんですか?
286デフォルトの名無しさん:2006/06/01(木) 21:03:37
>>285
初期化が省略されます
287デフォルトの名無しさん:2006/06/01(木) 21:09:33
( ゚д゚)ポカーン
といことは
初期化はしなくてもいいわけですね。
288デフォルトの名無しさん:2006/06/01(木) 21:12:41
??
289デフォルトの名無しさん:2006/06/02(金) 10:12:59
>>287
初期化しなくてもいいと思えば、初期化しなくていいし
初期化しなきゃならないなら、初期化すればいいんじゃね?
290285=287:2006/06/02(金) 12:02:13
>>289
ありがとうございます。
必ずしなきゃ逝けないものかと思ってましたので。
291デフォルトの名無しさん:2006/06/03(土) 09:58:29
必ずしなきゃいけないんだったら for (;;) っていうのは
コンパイル時にエラーにされると思う
292デフォルトの名無しさん:2006/06/03(土) 13:10:00
コンパイルすると
「'scanf'が古い形式として宣言されました」
と警告がでます。
どーすれば直るでしょうか(´д`)
293デフォルトの名無しさん:2006/06/03(土) 13:27:29
294デフォルトの名無しさん :2006/06/03(土) 16:18:35
>>292
あら、こんな所にも入門者さんが
正直「〜が古い形式として宣言された」って文句は
無視しても問題ないっす。
それように新たな関数を装備してるのでそっちを使ってちょ
なんて出てきても、そんなMSだけで標準なCのAPIなんて
使ってたら、基本が身に付かなくなっちゃうよ。
295デフォルトの名無しさん:2006/06/03(土) 17:11:39
>>293 >>294
レス有難うございます。
なんかscanf_sにしたら警告は出なくなったんですが
これって一般的じゃないんですね。
Visual C++をCコンパイラに使うのはマズイのかな…(´д`)
296デフォルトの名無しさん:2006/06/03(土) 17:17:23
scanfにはセキュリティ上の問題が
297デフォルトの名無しさん :2006/06/03(土) 17:28:20
>>296さん
確かに問題は大あり。
せめてfgets()とsscanf()使うのが前提だけど
それでもバッファーオーバーランがある。
ただ、入門者が独自仕様の関数を覚えてしまうと
ANSI準拠の関数を覚えるには支障があると思う。
というか、ごっちゃごちゃになっちまうと思う。
ま、windows用のアプリ作るなら、また別で
それはそれで、win32API群を参照の事
298デフォルトの名無しさん:2006/06/03(土) 17:31:39 BE:79877344-#
scanf_sとかは次期規格に入るんじゃないの?
299デフォルトの名無しさん :2006/06/03(土) 18:39:13
>>298
入るのかな
もし入るなら、また覚えること増える
ま、安全な関数を立案し規格かすることは良いことだと思う
けどぉ・・・・
また覚え直しか!?
C99からC100になるのかな
もう勘弁してくれ〜・・・
ただ、C言語をこれからはじめるなら、今の規格に準拠した物を使った方が
いいよGCCとかではサポートされてないわけだし
組み込みとか、だと、C99どころか、まともに動くコンパイラかどうかもわからないし
MSのコンパイラのみで適用されている関数だから
どっぷりVS2005に対して言語を勉強するなら止めはしないさ
300デフォルトの名無しさん:2006/06/03(土) 19:26:37
>>298
このまま行けば承認されそうだね。
C99の奇天烈シンタクスのサポートよりはよっぽど労力が少ないだろうし。
# 日本の標準化委員会は反対表明をしてた気がするが…
301デフォルトの名無しさん:2006/06/04(日) 01:41:03
cygwinの最新版の使い方が詳しく載っているHPありませんか?
302デフォルトの名無しさん:2006/06/04(日) 01:42:21 BE:279569287-#
おぼえることが増えるって言ってもたいしたことないだろ?
303デフォルトの名無しさん:2006/06/04(日) 15:17:38
C言語を勉強してたのになぜか今、数式勉強してる。
なぜなんだ・・・
304デフォルトの名無しさん:2006/06/04(日) 16:50:49
>>303
別に不思議なことではない。
305デフォルトの名無しさん:2006/06/05(月) 00:25:59
ビットについて聞きたいんですが、これは何に使うんですか?
使い道がまったくわからないんです。
教えてください。
306デフォルトの名無しさん:2006/06/05(月) 12:21:49
double a;
scanf("%lf", a);
printf("%f", a);
というのがあるとして
どうしてscanfは%lfなのにprintfでは%fなんですか?
307306:2006/06/05(月) 12:23:09
scanf("%lf", &a);
でしたm(_ _)m
308デフォルトの名無しさん:2006/06/05(月) 12:34:04
>>306
そういう風に決まっているから。

もうちょっと詳しく言うと、可変長引数では、float型は自動的にdouble型に変換(格上げ)される。
つまり、printfにfloatを渡そうがdoubleを渡そうが、printfにはdouble型にしか見えないことになる。
(float型が渡されることはあり得ない)
floatとdoubleを区別する必要がないので、%fに統一されている。

floatはdoubleに格上げされるけれど、float*はdouble*には格上げされない(別の型として扱われる)ので、
ポインタを引数に取るscanfでは区別する必要がある。
そこで、%lfと%fで使い分けている。

簡単に言えばこんなところ。
309デフォルトの名無しさん:2006/06/05(月) 12:41:03
>>306
つーか、どうせ細かいところがいろいろ違うからprintf()系とscanf()系の指定子に互換性がないと思った方がいい。
#同じとする入門書が多いのも事実だが。
310306:2006/06/05(月) 12:57:50
>>308 >>309
詳しく説明していただいてありがとうございます。
scanfは「ポインタを引数に取る」というところで
別物だとなんとなく分かりました。
も少し勉強してみます。
311デフォルトの名無しさん:2006/06/05(月) 17:36:38
プログラムで"プラスマイナス"を表示するためには
"±"でいいのでしょうか?
312デフォルトの名無しさん:2006/06/05(月) 17:54:30
表示するの意味が分からないが
Cでは±1のような2つの値を持つ定数を直接取り扱うことはできない
313デフォルトの名無しさん:2006/06/05(月) 18:21:53
では
D=pow(b,2)-4*a*c;
x=-b±sqrt(D)/2*a;
はどう修正すればいいのでしょうか?
314デフォルトの名無しさん:2006/06/05(月) 18:26:02
>>313
その結果をどう利用するのかにも拠るが、表示するだけでいいならこれでいい。
printf("x=%g, %g\n", -b+sqrt(D)/2*a, -b-sqrt(D)/2*a);
要は、自分が何をしたいのか理解してから先に進めと。
315デフォルトの名無しさん:2006/06/05(月) 18:59:32
二次方程式ax^2+bx+c=0でa,b,cの値を入力して、解が
D<0,D=0,D>0のいずれに該当するのかを表示させ、その値も表示させるプログラムを作成したいんです。

#include <stdio.h>
#include <math.h>
int main(void)
{
double a, b, c, D, x;

a*pow(x,2)+b*x+c=0:
printf("二次方程式の解の場合分け");scanf("%d,%d,%d", &a,&b,&c);
D=pow(b,2)-4*a*c;
x=-b±sqrt(D)/2*a;

if(D>0)
printf("異なる2つの実数解を持つ\n");
else if(D=0)
printf("重解を持つ\n");
else if(D<0)
printf("異なる2つの虚数解を持つ\n");

return 0;

}

のように組んだのですが(まだ途中)プラスマイナスをどのようにすればいいのかがわかりません。

という質問をしたかったのです(u u)
316デフォルトの名無しさん:2006/06/05(月) 19:04:29
>>315
x1とx2に分けりゃいいだけの話じゃないか
317デフォルトの名無しさん:2006/06/05(月) 19:15:33
>>315
>314でいいじゃん。表示するだけなんだろ。
それから、2乗はpow()を使わないほうがいいぞ。単純に掛け算で済むんだからな。
318デフォルトの名無しさん:2006/06/05(月) 19:21:02
レスありがとうございます。
±が使えないことがわかっただけでも収穫ありです。
いろいろ試してみます
319デフォルトの名無しさん:2006/06/07(水) 01:30:08

char buf[] = "1234";
if (isdigit(buf[0]) {
printf("数字です。\n");
}

これ、「数字です。」が表示されるんですが、なぜなんでしょうか?
bufは文字の配列のつもりで扱っていたのですが、わけがわかりません。
教えてください。
よろしくお願い致します。
320ネタか?:2006/06/07(水) 15:11:34
>>319
正しく数字文字と解釈しているじゃないか。
isdigit()はそういう関数だ。
321デフォルトの名無しさん:2006/06/07(水) 17:24:48
>>319
buf[0]で、bufの最初の文字を意味する。
だからその場合、buf[0] == '1'となっている。
322デフォルトの名無しさん:2006/06/07(水) 23:44:22
>>320 >>321
ありがとうございます。
このまま使用しても問題は無いんですね。


しかし、なんとも不思議な気分です。

323デフォルトの名無しさん:2006/06/08(木) 09:28:08
とりあえず,リファレンスをよく読め
あと,「数字」と「数値」の違いについて考えろ
324デフォルトの名無しさん:2006/06/14(水) 02:43:11
int s2i(char* s){
int n=0;
while(isdigit(*s)){
n=n*10+*s++-'0';
}
return n;
}
void main(){
printf("123=%d\n",s2i("123"));
}
325デフォルトの名無しさん:2006/06/25(日) 01:58:51
私はC言語はまったく知らないのですが
Perlを使ってのCGIなら組むことが出来ます。

C言語のソースってPerlによく似ていますよね?
ifとか・・・。

面白そうなのでC言語を始めてみようと思うのですが
何から始めたらいいのでしょうか?
326デフォルトの名無しさん:2006/06/25(日) 04:29:53
「ifとか・・・」と言ってる時点でよく分かってないことがよく分かる
ifなんて大体の言語に共通するものだ
JavaもCもPerlもPHPもrubyもpascalもその他諸々もそうだ
Perlの延長という気分で始めるなら止めた方がいい
ポインタやらなんやら分からんことあるだろうがまず何より変数の型で痛い目見るぞ

まじでC言語勉強してやろうって言うのならとりあえず変数の型を勉強するべき
327デフォルトの名無しさん:2006/06/25(日) 11:15:52
なぜC言語にはStrung型がないのでしょうか?
328デフォルトの名無しさん:2006/06/25(日) 11:28:34
たぶん他の言語にもないから安心しろ
329デフォルトの名無しさん:2006/06/25(日) 13:45:46
>>327
アセンブラの代替を目指したと言う歴史的経緯、低水準に近いと言うことの表れ。

ちなみにC++にはstd::stringと言うものがあるよ。
330デフォルトの名無しさん:2006/06/25(日) 17:03:08
>>329
他の言語にはstrung型ってのがあるの?
「張り詰め型」とでも訳すのかなぁ…
331327:2006/06/25(日) 19:42:34
String型でした('A`)
332327:2006/06/25(日) 19:50:17
>>329
なるほど…
レスありがとうございます
333デフォルトの名無しさん:2006/06/27(火) 17:39:32
文字列の比較はどうすればいいのですか?

char str[10];
scanf("%s", str);

として入力された文字列が"abc"
なら処理をするという風にしたいです。
str="abc"という条件ではうまくいきません。

VBとはまるで違いますね…orz
334デフォルトの名無しさん:2006/06/27(火) 18:10:56
>>333
#include <stdio.h>
#include <string.h>

int main()
{
char str[10];
scanf("%9s", str);
if (strcmp(str, "abc") == 0) {
...;
}
return 0;
}
335デフォルトの名無しさん:2006/06/27(火) 18:45:51
>>334
ありがとうございます。できました(・∀・)
変数と文字列は等式ではつなげないのですね。
ちなみにstrcmpは何と読むのですか?
336デフォルトの名無しさん:2006/06/27(火) 20:16:15
ストリングコンペアに一票
337デフォルトの名無しさん:2006/06/27(火) 20:40:23
336を略してstrcmpになったのは間違いないだろうが、
俺はストラコンプと読んでいる。
338デフォルトの名無しさん:2006/06/27(火) 21:12:34
>>336>>337
レスありがとうございますm( _ _ )m
339デフォルトの名無しさん:2006/06/28(水) 19:34:56
#include <stdio.h>を書かなくても
printfとかscanfとかが使えて、コンパイルも出来るし、
exeもちゃんと動くんですが何故でしょう?
340デフォルトの名無しさん:2006/06/28(水) 23:12:38
>>339
Cとはそういうもの。
ただし、適切なヘッダをincludeしないと、コンパイル時にエラーチェックがなされないので、
きちんと適切なヘッダをインクルードすべき。

たとえば次のコードは#include <stdio.h>が無いとコンパイルできてしまう。(おそらく実行時に落ちる)
int main(void)
{
  printf(7, "%d\n");
}
341339:2006/06/29(木) 19:45:39
>>340
回答有難うございます。
そうなんですか!?
#include <stdio.h>を忘れてたのにコンパイルできてしまったので
不思議な気がしてました。
普通、実行できなければコンパイル時にエラーになると思いますよね。
342デフォルトの名無しさん:2006/06/29(木) 20:28:56
sprintfとか使わずにdouble型の値を文字列にしたいんだけどどうしたらいいかな?
343デフォルトの名無しさん:2006/06/29(木) 21:27:58
>>342
1. 自力でdoubleを文字列にする関数を書く。
2. Cを使わない。
344デフォルトの名無しさん:2006/06/30(金) 02:57:15
整数部と小数部(整数に直す)に分けてそれぞれ10^nで割って各桁の数を求めて
それを文字に直して上手くくっ付けるというプロセスを踏めばできるだろうけど
何でそんなことしたいんだ?
345デフォルトの名無しさん:2006/06/30(金) 02:59:14
あ、スマン
別に整数部と小数部に分ける必要はないな
0.1, 0.01,...で割れば良いだけの話だった
346デフォルトの名無しさん:2006/06/30(金) 17:43:38
IEEE754は符号、指数、仮数の3つに分かれてる件について
347デフォルトの名無しさん:2006/06/30(金) 21:58:15
漏れも>>342と同じ事考えて、VC++ の CRT ソース追った事あるんだが
どこを見てもdouble⇒文字列変換の部分が見当たらなかった。
348デフォルトの名無しさん:2006/06/30(金) 22:29:42
>>347
VC++での文字列変換はランタイム関数_cfltcvtに依存してるので、
crtのソースの中には該当箇所がないよ。
output.cを参照。
349デフォルトの名無しさん:2006/06/30(金) 23:09:21
C++でboost::lexical_cast使えばいいじゃない、楽だよ〜。
350デフォルトの名無しさん:2006/07/18(火) 21:29:03
char *ss;
………
int i;

while (*ss) {
………
}

これってwhileの条件の意味は
「*ssが'\0'でない間ループする」って本に書いてあるですけど
なんでそうなるの分からないぽ。
馬鹿にでも分かるように説明してほしいぽ。
351デフォルトの名無しさん:2006/07/18(火) 23:26:58
while (x) {
}
と書いたとき、xが真ならばループは継続する。
つまり、xと書いてもx != 0と書いても同じことだ。
>350の例ならば、while (*ss != 0)と同じと言うことだし、
積極的に文字であることを明示したwhile (*ss != '\0')とも同じだな。

まぁ、意味がはっきりするように最後の形で書くことをお勧めするが。
352デフォルトの名無しさん:2006/07/18(火) 23:36:16
さらに補足すると0 == '\0'。
353デフォルトの名無しさん:2006/07/19(水) 00:58:16
>>351>>352
う〜ん、なんとなくわかったぽ。
ありがd
while (*ss != 0)という書き方なら分かります。
ただ…
「xが真ならば」って真ってどーゆーことなのか教えてほしいぽ。
0でなければ真?でおkなのでつか?
354デフォルトの名無しさん:2006/07/19(水) 01:13:00
だんだんむかついてきたから答えるのやめた。
他人に聞いている態度って物を弁えろよな。
355デフォルトの名無しさん:2006/07/19(水) 15:04:10
「論理演算」とか「ブール代数」とかでググれ
356350:2006/07/19(水) 19:56:10
わかったようなわからないような…('A`)
もうちょっと勉強してきます。
レスありがとうございました。
357デフォルトの名無しさん:2006/08/12(土) 22:04:59
return 0;は必ず要るのですか?
358デフォルトの名無しさん:2006/08/12(土) 22:14:27
たまに要ります。
359デフォルトの名無しさん:2006/08/12(土) 22:23:07
レス有難うございます。
なんでもかんでも「return 0;」をつけていたのですが
「Cの絵本」を読んでたらついてないじゃありませんか!!
といわけで…
どういう場合に要るのですか?
360デフォルトの名無しさん:2006/08/12(土) 22:27:37
>>359
int、もしくはintから暗黙的に変換することが可能な型を戻り値の型に持つ関数の中で、
return 0;を書いた場所で関数の実行を終了させ、その関数の結果の戻り値を0にしたい場合に要る。
361359:2006/08/12(土) 22:34:11
難しい表現ですね(?_?)
例えば、戻り値のない関数では要らないと。
では、main関数はどうなのでしょうか。「return 0;」なくてもおkなんですか?
362デフォルトの名無しさん:2006/08/12(土) 22:34:24
ようするに、特に理由がない限り必要。
ただし無くても一見正常に動くので、入門書などではmain関数などでreturnを省略することがある。
363デフォルトの名無しさん:2006/08/12(土) 22:39:05
>>361
C89ではmain関数の戻り値が不定になるため書いたほうが良い。
C99ではC++と同じくmain関数の最後に暗黙的にreturn 0があるのと同じなので必要ない。

ただ、C89との互換性も考慮すると、
main関数の最後にreturn 0;を省略せずに書いていたほうが堅実な書き方ではある。
364359:2006/08/12(土) 22:39:44
>>362
そうでしたか。
ありがとうございました。
365359:2006/08/12(土) 22:41:56
>>363
レス有難うございます。
よく分かりました。
366デフォルトの名無しさん:2006/08/12(土) 22:51:24
void main()って書くよりint main()でreturn文省略したほうがいいの?
367デフォルトの名無しさん:2006/08/12(土) 22:53:53 BE:99846645-2BP(201)
>>363
別にc89でも省略して問題ないよ。
不定で問題あるときだけ書けばいい。
368デフォルトの名無しさん:2006/08/12(土) 23:05:21
>>366
void main()は処理系定義の方法に該当して、ポータビリティがない。
なのでCとしては
int main(void)もしくはint main(int,char**)などと等価な定義にするほうが移植性が高い。
369366:2006/08/12(土) 23:07:55
ほぉほぉ・・・ありり
370デフォルトの名無しさん:2006/08/24(木) 22:34:31
main関数自体が処理系に依存してると思うのだが。
窓アプリだとmainじゃなくてWinMainだし、入口は簡素化しといて、処理系に応じて書き直す位でいいんじゃない?
371デフォルトの名無しさん:2006/08/26(土) 00:03:30
mainでも窓アプリ作れるよ
372デフォルトの名無しさん:2006/08/26(土) 00:39:03
補足すると、main関数から始まるプログラムでもWindowsのコンソールを表示させないことだってできる。
373デフォルトの名無しさん:2006/08/26(土) 00:50:26
というかエントリポイントなんてVCの設定次第でなんとでもなる
374デフォルトの名無しさん:2006/08/30(水) 17:08:22
C言語を全く触ったことがありません。。
自分としてはC++かJAVAを習得しようと考えているんですが、
なかなか壁が高そうなので、その前に足がかりとして
C言語を勉強してみようと思いました。
理由は、何となくPerlからだとすんなり入れそうな気がした、ってだけです。
何か思い違いとか方向性を間違っているようでしたら指摘お願いします。
375374:2006/08/30(水) 17:13:02
すみません。Perlだけは人並程度に扱えます。
376デフォルトの名無しさん:2006/08/30(水) 22:35:13
PerlできるんならC要らないと思うけどな。
JavaでもC++でもやればいいんじゃない?
377374:2006/08/31(木) 18:41:10
>>376
ありがとうございます。
いきなりJavaとかC++とかに手を出して挫折を繰り返すよりも
Cをある程度勉強してからの方が結果的に理解が早い、
(巷の多くの書籍がC習得済みを前提に書かれてたりするので)
というようなケースが多いのなら先にCを勉強しようかなと迷っていたところです。
一筋縄ではいかないとは思いますが興味のある言語をやろうと思います。
ありがとうございました。
378デフォルトの名無しさん:2006/09/04(月) 17:49:58
結果的にはCを理解してた方がC++の理解は早くなる。
一度は高級アセンブラであるCに触れておくべき。
379デフォルトの名無しさん:2006/09/05(火) 09:39:53
でもその前にCを理解するための時間が必要
最初からC++でいいんじゃない?
380デフォルトの名無しさん:2006/09/05(火) 21:32:36
別にCが簡単なわけでもない、C++じゃprintfの別のやつあるし
古典を勉強するもんだお
クイックソートなんていらんじゃろ、クイックソートって年々進化してエロイことなってるし
あんなの毎回関数書かれたらバグだらけだ
381デフォルトの名無しさん:2006/09/12(火) 21:47:09
一応C++はCもサポートしているから、Cを学ぶ事に損は無いかと。

>>380
確かに、ソートする配列の要素数が少ない時はクイックソートは不便。
382デフォルトの名無しさん:2006/09/13(水) 23:34:23
>>381
何故不便?
qsort()関数を使うのが面倒だとか、遅いとかいうなら判るのだが。
#そしてそれらはソートアルゴリズムの所為じゃない。
383デフォルトの名無しさん:2006/09/14(木) 15:52:50
>>381
『不便』と云う言葉が悪かった。
『遅い』と言いたかったのだが。すまん。
384デフォルトの名無しさん:2006/10/25(水) 22:13:50
「新訂 新C言語入門」(林晴比古著)P228の練習問題3の
「文字列を渡すと逆順にして返す関数reverse()」の部分を一行ずつ
解説してもらえませんか?理解できません(@_@)

#include <stdio.h>
#include <string.h>/* for strlen */

void reverse(char *ss);

int main(void) {
char str[] = "program12345";
reverse(str);
printf("str=%s\n", str);
return 0;
}

void reverse(char *ss) {
int wk, pos1 = 0, pos2;
pos2 = strlen(ss) -1;
while (pos1 < pos2) {
wk = *(ss+pos1);
*(ss+pos1) = *(ss+pos2);
*(ss+pos2) = wk;
++pos1;
--pos2;
}
}
385デフォルトの名無しさん:2006/10/26(木) 02:15:12
最初書いたら>>384の3倍近い量になってあー俺って説明下手なんだなぁと実感し鬱になった

pos2にはss(=&str[0])の指す文字列の長さ(=12)-1が代入されるから*(ss+pos2)=str[11]='5'
先にテンポラリとしてwkに*(ss+pos1)=*(ss+0)=str[0]の値を代入しておいてから
ss+pos1(=str[0])にss+pos2(=str[11])の値を入れて、str[11]にwkを代入すれば交換完了
後は++pos1,--pos2で外側から内側に向かいながら交換し続けて
pos1とpos2の値がぶつかるかすれ違ったところでループ終了、文字列は逆順に。

なんでwkがintなのかは、文字定数(''で括った1個の文字)はcharではなくintだからでないでしょーか
386359:2006/10/26(木) 21:01:27
>>385
レス有難うございます。
そうやって解説していただくと、なんとなく分かったような気がします。
ちょっと霧が晴れました。
そんでwkってどーゆー役割をしてるんでしょう?なんかこれがあるためにややこしくなってるような…
387384:2006/10/26(木) 21:03:11
すいません。
359→384です。
388デフォルトの名無しさん:2006/10/26(木) 21:59:22
>>384
この方が判りやすくね?
void reverse(char *ss)
{
 int pos1, pos2;
 for (pos1 = 0, pos2 = strlen(ss) - 1; pos1 < pos2; ++pos1, --pos2) {
  int wk = ss[pos1];
  ss[pos1] = ss[pos2];
  ss[pos2] = wk;
 }
}
389デフォルトの名無しさん:2006/10/26(木) 22:01:44
>>386
>そんでwkってどーゆー役割をしてるんでしょう?なんかこれがあるためにややこしくなってるような…
所謂スワップ(入れ換え)の定番ロジック。マクロにでもしておけば少しは読み易くなるかな。
390384:2006/10/26(木) 22:32:51
>>388
レスありがとうございます。
その方がすっきりしてますね。
ポインタ使ってるからややこしいのかな?(@_@)
391384:2006/10/26(木) 22:35:07
>>389
レスどうも。なんとなく分かってきました。
自分の事を棚に上げるような変数ですね。
392デフォルトの名無しさん:2006/10/26(木) 22:53:28
>>388
wkをint型にする必要はないだろ。
393388:2006/10/27(金) 00:36:31
>>392
>384にあわせてみた。
394デフォルトの名無しさん:2007/01/02(火) 16:08:19
>>382
ここでアルゴリズムを語るのもどうかと思うわけだが、クイックソートは既に大部分がソートされてるときには最悪の計算量になるんよ。
だからといってシェルソートが良いとは言わないが。大規模なソートはいくつかのブロックに分けてシェルソートしたのをマージソートで紡いでいくのが実用的だと思うよ。
395デフォルトの名無しさん:2007/01/02(火) 20:15:54
charってキャラって読むのかよ
チャラって読んでたよ、2年くらいwwwww
396デフォルトの名無しさん:2007/01/02(火) 23:41:26
charactorの略かな?
397デフォルトの名無しさん:2007/01/03(水) 08:58:17
気絶するほど悩ましい
398デフォルトの名無しさん:2007/01/03(水) 13:46:29
>>394
それが問題になる具体的な状況は?
アルゴリズムだけ語って現実を見てないんじゃない?
399デフォルトの名無しさん:2007/01/03(水) 15:02:12
>>398
昔の話だが、とある後援会名簿のシステムを組んだ時の話で参考になるかは微妙だけど。
確か640KBのメモリとDOSで20万人分位の規模。
もちろんHDDに280MB位のファイルを拵えてディスクソートするしか整列の方法が思いつかなくて。実際には各レコードを指すインデックスファイルを作ってインデックスの並べかえをやるんだけど、比較の際にディスクを読みにいくわけでとんでもないことになる。
そこで4096レコード単位でクイックソートしたのをマージで併合するようにした。
ところが、クイックソートはほとんど並べかえが終わってる状況だと計算量が最悪になる。しかも途中経過を定量的に表示するのが困難で「フリーズしてませんか?」とか言われるし。逆にシェルソートは既に大部分が整列済みだとすごく早い。
でもまあ、こんな状況でもない限りはクイックソートがベターな選択だと思うよ。
400デフォルトの名無しさん:2007/01/03(水) 15:14:33
そういうの、懐かしいな。
でかいファイルでメモリが少ないといろいろ工夫するしなあ。

そういや、メモリマップドファイルでクイックソートなんてしちゃいけません、とか書いてあって
早速でかいファイルをメモリマップドファイルでクイックソート試したりしたなあw
401デフォルトの名無しさん:2007/01/03(水) 18:01:49
>>395
チャー?
じゃないの?
ちょっとだけよ
402デフォルトの名無しさん:2007/01/03(水) 18:30:24
>>398
入力の際、既にある程度整列されているものを入力すること(名簿とか)あるでしょ?それをソートする時クィックソート使うと、メモリ馬鹿食いで下手すりゃO(n)分再帰呼び出し。
改良されてない形のまんまのクィックソートは、整列済みのソートを扱うのは苦手で、バラツキが多いサンプルに対してのソートには強い。
三つくらいのデータ選んで、中央値を軸に据える改良されたクィックソートとかなら、話は別だけど。
403デフォルトの名無しさん:2007/01/03(水) 18:53:13
>>402
それって、
クイックソートが悪いんじゃなくて、
クイックソートの使い方が悪いだけだろ?
404デフォルトの名無しさん:2007/01/03(水) 18:59:40
で、クイックソートが不便だという説明はどこ?

結局のところ、不適当な用途に使って遅いって文句を言っているだけのような希ガス。
しかも、>381は「要素数が少ない」ときに「不便」だと言ってるから>382が聞いているのに
なにを頓珍漢なことを言う香具師ばかりなんだ?
405402:2007/01/03(水) 20:17:24
>>403
そだね。
ある程度整列された状況での問題になるケースの、具体的なケースを問われていたみたいだから、示しただけよ。

>>404
>>398は、>>394へのレスでしょ?少数のデータ云々からは、既に話は外れてる。
少数のデータなら、定数係数の大きさ考えて、挿入ソートの方が有利。
まぁ、これも部分配列が小さくなったら、挿入ソートを使うようにすれば問題は無い。
不便ってよりは、万能ではないから、ケースによって他のソートに委ねたり、弱い部分の補強をしないとならないねってことだと思うよ。
それはクィックソートに限った話じゃないけど。
ついでに、自分は380でも381でもない。
380のクィックソート不要論に乗っただけ。
406デフォルトの名無しさん:2007/01/03(水) 20:45:09
>>405
>ある程度整列された状況での問題になるケースの、具体的なケースを問われていたみたいだから、示しただけよ。

いや、そうじゃなくて・・・
「pivot をどう選ぶか」という問題は、
クイックソートとは切り離された問題だという話。

>メモリ馬鹿食いで下手すりゃO(n)分再帰呼び出し。
>改良されてない形のまんまのクィックソートは、整列済みのソートを扱うのは苦手

なのは、通常の場合、まず間違いなく pivot の選び方が拙いから。
407402:2007/01/03(水) 20:57:56
>>406
あぁ、そういうことか。
うん、端を軸にしちゃわなければ、問題は出にくいね。
確かに、使い方が悪い。
408デフォルトの名無しさん:2007/01/04(木) 17:00:44
ある関数内の変数を
ほかの関数でも使うにはどうすればいいんですか?
409デフォルトの名無しさん:2007/01/04(木) 17:16:20
ローカル変数にしないで、グローバル変数にしてどの関数からでも使えるようにするか、
staticにして、変数のポインタを使いたい関数に渡す。
410デフォルトの名無しさん:2007/01/04(木) 22:19:51
>>408
>409の手法はアナクロであり、マルチスレッドプログラミングと相容れない手法でもあるのでお勧めできない。
適切に引き数などによる受け渡しを行なうべき。
411デフォルトの名無しさん:2007/01/04(木) 22:36:43
ちなみに
>>409 のご高説に従えば、
「グローバル変数は全て(アナクロなので)使用不可」となる。

「何が正しいか?」の判断は >>408 が行うこと。
412デフォルトの名無しさん:2007/01/05(金) 00:03:38
>>411
>>409?
ご高説?
仕様不可?
頭に蛆でも湧いているんですか?
413デフォルトの名無しさん:2007/01/05(金) 09:01:18
アナクロとかナウい言葉使うなよ。俺が話についていけないだろ。
414デフォルトの名無しさん:2007/01/06(土) 01:40:39
アナクロじゃなくてアナログだろ!
415デフォルトの名無しさん:2007/01/06(土) 05:20:13
>414
416デフォルトの名無しさん:2007/01/06(土) 17:00:04
417デフォルトの名無しさん:2007/01/07(日) 07:49:33
アナクロ = anachronism
意味は時代遅れとかそんな感じ。
アナログとは無関係。
418デフォルトの名無しさん:2007/01/10(水) 09:58:24
ボケにマジレスされてもい困ってしまうのではないだろうか
そういう時ははつっこむかスルーで
419デフォルトの名無しさん:2007/02/01(木) 22:19:30
まぁ、ぶっちゃけて言えばグローバル変数はどうしても必要な場合以外は使わないようにすると再利用しやすいモジュールになる。
たとえばマウスのデバイスドライバをCで書くときにマウスポインタの位置を記録しておく変数とか。
420デフォルトの名無しさん:2007/02/04(日) 00:23:49
スレ立てるのもあれだし再利用すっか・・
421デフォルトの名無しさん:2007/02/04(日) 00:41:26
現在、高3で今年からニートになる者です
東方に感化されてC言語始めた口なんですけどCほとんど分からないです
Win32APIが僅かに分かる程度なのです
ブロック崩しは作れたんで応用すればSTGも作れるんだろうけど、やる気が出ませぬ
春休み入って親ともしゃべんねーし友達からもメールこねーし、電話こねーしで
流石にこのままだと樹海付近を散歩しにいきそうなのでここを日記代わりにします

最終目標:DirectX使ってシューティング作る
422デフォルトの名無しさん:2007/02/04(日) 00:51:22
だけどDirectXの本持って無いんで取り敢えず

Win32APIで弾幕STG作ります!!
パッドで動けばそれでいい


明日から作りますね自機のドット絵は無意味にキャラ絵にしたいなぁ。と思いつつ今日はもう寝ます
423デフォルトの名無しさん:2007/02/04(日) 14:32:12
2時間悩んでやっと背景が動くようになった・・・
この背景素材の使用許可申請中。無理だったら自分で作るからいいですよいいですよ

次は自機のドット絵を描いてみる
424デフォルトの名無しさん:2007/02/04(日) 20:54:21
>>421
悪いことはいわねーからバイトぐらいはしとけ。
425デフォルトの名無しさん:2007/02/07(水) 01:40:32
>>424
嫌です

ここ数日は遊んでしまったorz
久しぶりに運動して全身筋肉痛

経過:
ドット絵をとりあえず一枚描いた。
それを矢印キーでスムーズに動くようにしてるけどむずい
斜めもいけるようになったけど一つだけ問題が残った。。だるいんで後回し。次のステップへ
企画書?みたいなのを書こうと思った・・・・・
作業の順番決めないと効率悪いし心が折れる
426デフォルトの名無しさん :2007/02/07(水) 04:10:08
>>421
順番的に最低でもC言語の基礎を身につける→Win32apiでWincowsプログラミング
でも、ブロック崩し作れたなら、別に順番なんて関係ないか。
>春休み入って親ともしゃべんねーし友達からもメールこねーし
>電話こねーしで
気にすんな。人間関係に悩んでないなら、自己を極めるのに最適な時だ。
孤独は人を強くする。
427デフォルトの名無しさん:2007/02/07(水) 09:51:41
>>421
つ 図書館
428デフォルトの名無しさん:2007/02/07(水) 15:56:25
>>426
DOS窓でいろんな操作するより単純なゲームのプログラミングのほうが楽でした
孤独に耐えられるか心配ですけど頑張ってみます

>>427
自転車で片道30分かけて行けと申しますか(いつか行こう・・いつか
429デフォルトの名無しさん:2007/02/07(水) 16:01:21
製作メモ:
パッドで動かす

弾幕アルゴリズム
 QEDの真似事、画像使う

当たり判定

当たり判定を丸にする


経過:
矢印キーでスムーズに動くようになった(無意味に複雑にしてたようだ・・
パッドでも動くようになった

次は弾幕アルゴリズムに触れてみる・・・
まずフランのQEDを真似する事に決定

430デフォルトの名無しさん :2007/02/07(水) 16:27:38
>>428
プログラムばっか勉強してると、パソコンでソース書くばっかになって
運動不足になるから、片道30分の自転車は良い運動になるよ。
運動すれば、脳の活性化にもつながるし。
そうしないと、俺みたいなクソデブになっちゃうよ。
クソデブになるとよけいに、運動がおっくうになって悪循環。
もう、俺なんて最悪だよ。超クソデブだよ。

はぁ・・昔は今より体重40kgは少なくて、運動大好きだったのに・・・
431デフォルトの名無しさん:2007/02/07(水) 17:45:28
>>430
そ、そんなに自虐しないでください
プログラミングできるって事はそれだけ精神的に強かったって事でしょうし
間食もやめようと思えば出来ますさ
自分は・・体質と生活的に太る事はまず無いんですけど運動不足はヤバイですね(週1などと言わず毎日動かないと。
先日運動した時の筋肉痛が未だ取れないです
432デフォルトの名無しさん:2007/02/09(金) 02:37:33
>弾幕アルゴリズム
難し・・・・かった
一日使って中心から弾幕が広がるプログラムは出来た(満月よりも丸いんだぜ!

明日は
敵キャラのドット絵を描く
適当に動くようにする
そっから弾幕発生
弾幕の画像描く
画像を斜めに表示する
円以外の弾幕を考える
当たり判定を丸にする
余った時間でドット絵たくさん描く
433デフォルトの名無しさん:2007/02/09(金) 02:44:43
途中経過をUPしてみる
ttp://up3.viploader.net/mini/src/viploader108611.zip
ほとんど出来ないけど
ここ数日で出来るようになった事は・・・以外と多いはず
vv.exeのソースでここはこうしたほうが良いみたいのあったら是非お願いしますorz
stg01.exeのソースは未完成+ほとんどが可笑しいと思うので後でUPします

ちょっと今日高校生プログラマってどんくらいいるのかしらべてたら多くは無いけどいた。
サイト持ちもいて普通にフリーウェア公開してたし、負けてられn
434デフォルトの名無しさん :2007/02/09(金) 03:40:25
>>433
一つ分かったことは、猫でもの本を参考にしてることだ。
別にそれはそれで良いんだけど、メッセージごとの処理を
自分で関数作って、もっとソースの見通しを良くしたらどうでしょう。
c言語で記述してるつもりでもcppファイルって事は、C++として
処理されてるだろうから、クラス作ってさらに処理内容の見通し
を良くしてはどうでしょう。参照も使えますし。
ただ、スレがC言語だからクラスの作り方は知らないかもしれない
ま、別にクラスにすると便利なだけで手間はそうかわらないけど。
とりあえず、自前のヘッダ作って、プロトタイプ宣言は全部放り込んで
ソース用のファイルを増やして、メッセージ内の処理の見通しを
良くした方が良いと思います。
一つのファイル内で、全部の処理書いてると、うんざりしてくると思いますよ。
435デフォルトの名無しさん:2007/02/09(金) 11:20:03
#include<stdio>

main()
{
double[問1]=3.14; /*円周率*/
double[問2]=20.0 ; /*半径*/
double[問3];

    result=[問4];
printf;[問5] 円の面積は[問6]ですと表示させること
return0;

初級だから簡単問題です
436デフォルトの名無しさん:2007/02/09(金) 11:22:40
#include<stdio>

main()
{
double[問1]=3.14; /*円周率*/
double[問2]=20.0 ; /*半径*/
double[問3];

    result=[問4];
printf;[問5] 円の面積は[問6]ですと表示させること
return0;

初級だから簡単問題です
437デフォルトの名無しさん:2007/02/09(金) 14:14:21
>>434
アドバイスありがとうございます
猫でもの本っていうことバレましたかw
コメントだけ削っても特徴は出ちゃうんですね
クラスとヘッダ、、やってみます
438デフォルトの名無しさん:2007/02/09(金) 23:48:41
ヘッダは理解出来ました。
ヘッダファイルばっかりで中身があんまり無いソースとか、こういう事だったんすね。これは便利
ただ、複数のファイルに分割して書くとグローバル関数増えちゃうんですけどこれはしょうがないんですか?
>クラス
少し使い方調べて粘ったけど何だか書き方が違うらしくてエラー出過ぎで諦めました・・
一緒にstructっていうのも出てきて、こっちはとりあえず使えるようになりました
439デフォルトの名無しさん:2007/02/10(土) 01:05:45
今お前はCを勉強しているのだろ。
ならとりあえずクラスは置いておけ、C++という(一応)別言語の概念だから。
440デフォルトの名無しさん:2007/02/10(土) 15:13:49
>>439
どっちつかずな自分がいます(´Д`;)
というか今のところ両方の言語で使える技術しか身について無いので違いもよく分かりません
もう少しこの中間を行き来して使いやすいほうを覚えていくです

経過:
ドット絵の才能を僕にください・・・
自機3枚描きました動かすととても・・・うにょうにょします
441デフォルトの名無しさん:2007/02/10(土) 22:44:33
いろいろとサンプル見てたらいろんなソースの書き方あるみたいだ そして日が暮れている
猫でも分かる本は簡単なんだっていう事が分かってきた
こんだけいろんな書き方あるんじゃ何人かでソフトとか作ったりする時ヤバくね・・・・・・・
やっぱその中に一人くらい凄い人がいてソース繋げるんすかね
442デフォルトの名無しさん:2007/02/10(土) 23:59:58
大丈夫、あんたみたいな日本語でもちゃんと通じるように、いろんな書き方でも(辻褄が合っているなら)ちゃんと動く。
443 ◆SH1gdMMuNU :2007/02/12(月) 21:38:41
>>442
なるほど

さて、ゲ製作は全然進んで無い・・・・
とりあえず当たり判定を四角から多角形にしようと試みて
八角形にしようと座標を取って
線で結んでそれを自機の上に乗っけてみたかったのに
式が間違ってたらしく、自機が左上の0,0にいるときは確かに正しく乗ってるんだけど動かすと八角形の点結んだ線が拡大縮小した・・・

  struct board {int idoo, x, y, w, h;};//自機スピードxy,width,height
  struct board jiki = {5, 100, 100, 200, 200};

    MoveToEx(hdc_mem, jiki.x+(jiki.w-jiki.x)/2, jiki.y, NULL);
    LineTo(hdc_mem, jiki.x+(jiki.w-jiki.x)/2, jiki.y+(jiki.h-jiki.y));

    MoveToEx(hdc_mem, jiki.x, jiki.y+(jiki.h-jiki.y)/2, NULL);
    LineTo(hdc_mem, jiki.x+(jiki.w-jiki.x), jiki.y+(jiki.h-jiki.y)/2);

    MoveToEx(hdc_mem, jiki.x+((jiki.w-jiki.x)/8), jiki.y+((jiki.h-jiki.y)/8), NULL);
    LineTo(hdc_mem, jiki.x+((jiki.w-jiki.x)/8)+(jiki.w-jiki.x)-((jiki.w-jiki.x)/4), jiki.y+((jiki.h-jiki.y)/8)+(jiki.h-jiki.y)-((jiki.h-jiki.y)/4));

    MoveToEx(hdc_mem, jiki.x+((jiki.w-jiki.x)/8)+(jiki.w-jiki.x)-((jiki.w-jiki.x)/4), jiki.y+((jiki.h-jiki.y)/8), NULL);
    LineTo(hdc_mem, jiki.x+((jiki.w-jiki.x)/8), jiki.y+((jiki.h-jiki.y)/8)+(jiki.h-jiki.y)-((jiki.h-jiki.y)/4));

初めてこんな読みにくいもの書いたよ
444デフォルトの名無しさん:2007/02/13(火) 00:45:25
ああ・・・・ほんと酷い。2時間くらいかかった・・・・
自分の頭を疑うよ・・・
でもこれで何とか当たり判定が四角じゃ無くなる・・・
これを式にするのもまた時間かかるから明日だ・・・・・・

MoveToEx(hdc_mem, jiki.x+jiki.w/2, jiki.y, NULL);
LineTo(hdc_mem, jiki.x+jiki.w/2, jiki.y+jiki.h); //頂点から真下

MoveToEx(hdc_mem, jiki.x, jiki.y+jiki.h/2, NULL);
LineTo(hdc_mem, jiki.x+jiki.w, jiki.y+jiki.h/2); //横真っ直ぐ

MoveToEx(hdc_mem, jiki.x+jiki.w/8, jiki.y+jiki.h/8, NULL);
LineTo(hdc_mem, jiki.x+7*jiki.w/8, jiki.y+7*jiki.h/8);//斜め1

MoveToEx(hdc_mem, jiki.x+7*jiki.w/8, jiki.y+jiki.h/8, NULL);
LineTo(hdc_mem, jiki.x+jiki.w/8, jiki.y+7*jiki.h/8);//斜め2
445デフォルトの名無しさん:2007/02/13(火) 04:16:11
先に調べてからやるべきだったwwww
当たり判定を丸にするには丸の中心からの距離を調べればいいのか・・・
八角形にする意味ってあんまり無かった
まぁいいや・・・いつかこの経験は役に経つだろう・・・疲れた。作業時間長いわりに全然進まないんだぜ
もうほんとに寝るぽ
446助けて・・・:2007/02/15(木) 16:51:48
■プログラム課題:最小値を算出するプログラムを作る

3つの整数を入力し,その内の最小値を出力するプログラムを作成せよ.
但し,最小値を算出する関数,"min3"を自分で作成し用いなさい.
また,最小値の出力はメイン文で行うこと.
-------------------------------------------
"表示結果の例"
3つの整数を入力してください。
整数1:5
整数2:-4
整数3:0
最も小さい整数は-4
-------------------------------------------

誰かお助けください!!
447デフォルトの名無しさん:2007/02/15(木) 16:56:52
>>446
スレタイ見ろ
ここは「C言語を今日から始める」やつにしか教えないスレだ
ついでに言えばマルチするやつに明日の太陽を見る資格はない
448デフォルトの名無しさん:2007/02/15(木) 17:01:03
#include <stdio.h>

int min3(int a, int b, int c)
{
if(a <= b) if(a <= c) return a; else return c;
else if(b <= c) return b; else return c;
}

int main(void)
{
int a, b, c;
printf("3つの整数を入力してください。\n");
printf("整数1\n");
scanf("%d", &a);
printf("整数2\n");
scanf("%d", &b);
printf("整数3\n");
scanf("%d", &c);
printf("最も小さい整数は%d\n", min3(a, b, c));
}

面倒だから scanf のエラーチェックをしていない。
そもそも scanf を使うなとかいう突っ込みはしないでね。
449デフォルトの名無しさん:2007/02/15(木) 17:02:26
> 各自の課題であり,それぞれが自力でソースプログラムを作ること

これ消してマルチかよ・・・
宿題スレならこのメッセージがあったってノープロブレム
450デフォルトの名無しさん:2007/02/17(土) 06:03:50
何かを押したらコマンドプロンプトが画面いっぱいになった
何を押しちゃったんだかわかりませんか?
451デフォルトの名無しさん:2007/02/17(土) 10:33:49
Alt+Enter
452デフォルトの名無しさん:2007/02/20(火) 20:56:50
本に載っていた自己参照的構造体のサンプルプログラムなんですが、
解説を繋ぎ合わせてみたんですが、コンパイルエラーになります。
どこがおかしいのか教えて下さい。できたら理由も。
コードが書いてあって解説、コードが書いてあって解説と
通してのコードが書かれてないので繋ぎ合わせたんです。
宜しくお願いします。

#include <stdio.h>
struct Node {
    char name[20];
    struct Node *next;
};

int main(void)
{
    struct Node list[] = {
      {"abe", NULL},
      {"asou", NULL},
      {"tanigaki", NULL}};

    list[0].next = &list[1];
    list[1].next = &list[2];

    struct Node *p;
    p = list;
    while (p != NULL) {
      printf("名前は%s\n", p->name);
      p = p->next;
    }

    return 0;
}
453デフォルトの名無しさん:2007/02/20(火) 21:13:42
struct Node *p;の位置が悪い。
宣言は代入とかの前になければいけないから。
454452:2007/02/20(火) 21:23:56
>>453
レスありがとうございます。
無事コンパイル通りましたm(_ _)m
宣言は使う前にすればいいのかと思っていました。
違うんですね。
455デフォルトの名無しさん:2007/02/22(木) 10:37:12
>>454
古いCコンパイラにはそういう制限がある。
ちゃんと新しいCコンパイラを使うか、C++としてコンパイルすればそんな下らない制限に引っ掛からないで済む。
456452:2007/02/22(木) 20:45:55
>>455
コンパイラはVisual C++2005でvsvars32.batをホルダにコピーして
使ってるんですがエラーになりました…。
457デフォルトの名無しさん:2007/02/22(木) 21:08:30
拡張子をcppとかにしないとC++としてコンパイルされないよ。
458452:2007/02/22(木) 21:37:32
>>457
なるほど…(゚д゚)
459デフォルトの名無しさん:2007/03/29(木) 10:36:57
ヘッダーファイルの身の順番についておしえてくれ。
今のところ、
 インクルード
 マクロの定義
 構造体、enumなどの宣言
 プロトタイプ宣言
 extern 変数宣言
の順番にしているのだけれど、こんな感じでいいかな?
何かアドバイスがあればよろしく。
460デフォルトの名無しさん:2007/03/29(木) 10:37:41
>459
身 → 中身
でした。訂正。
461デフォルトの名無しさん:2007/03/29(木) 11:01:29
>>459
最後のextern変数宣言はない方がいいな。
特に書いてないが、インクルードガードは忘れずに。
462デフォルトの名無しさん:2007/03/29(木) 11:23:48
まあどうしても必要なときには、プロトタイプより先におくべきだと思う。
プロトタイプに比べればずっと数が少ないだろうし。
463459:2007/03/29(木) 12:11:50
みなさん。アドバイスありがとさんです。
では皆さんどこでextern宣言されているんですか?
464デフォルトの名無しさん:2007/03/29(木) 12:17:35
グローバル変数を全ソースで共通に使うなんて無いから
ヘッダには入れないなあ
465デフォルトの名無しさん:2007/03/29(木) 12:31:25
どうしてもグローバル変数を使いたければ、それ専用のインクルードファイルを作るなぁ。
466デフォルトの名無しさん:2007/03/29(木) 19:58:18
C言語書くソフトってどこにあるか教えてください
467デフォルトの名無しさん:2007/03/29(木) 20:31:31
>>466
俺も初心者だが
bcpadとかで検索してみ
468デフォルトの名無しさん:2007/03/30(金) 18:49:41
>>467 
インストールしたんですが使い方がさっぱりわかりません
どうしたらいいんですか?
469デフォルトの名無しさん:2007/03/30(金) 20:17:19
そのまま検索すれば分かりやすいサイトがすぐみつかるよ
470デフォルトの名無しさん:2007/04/07(土) 07:38:41
さて、俺も今日からC言語を勉強してみようと思う。
プログラムの勉強自体初めてなんでwkwkだ。
471デフォルトの名無しさん:2007/04/08(日) 02:19:12
じゃ、まず問1)フリーズするプログラムを作れ!
472デフォルトの名無しさん:2007/04/08(日) 02:29:45
オリジナルのプログラムをお持ちの方いらっしゃいませんか?
この度クレジット決済でスムーズにダウンロード売買が
できるサイトを立ち上げました。
つhttp//web-cart.jp/
※会員登録&商品のうp全て無料です!
クオリティの高い商品のうpをお待ちしてますw
473デフォルトの名無しさん :2007/04/08(日) 02:49:00
俺も2〜3日勉強中の身です。本で*が
キレイに並んでるのを見て
*****
****
***
**
*
↑こんなの作りたいなと思ったんですが
全然できません。
教えて頂けませんか?
474デフォルトの名無しさん:2007/04/08(日) 02:59:50
int main(void)
{
    printf("*****\n****\n***\n**\n*");
    return 0;
}
475デフォルトの名無しさん:2007/04/08(日) 03:16:34
>472ちげ〜よw
フツーに半角で

*****[Enterキー]****[Enterキー]***[Enterキー]**[Enterキー]*

で、おk
476デフォルトの名無しさん:2007/04/08(日) 03:31:10
>>475
ツマンネ
477デフォルトの名無しさん:2007/04/08(日) 03:31:56
ごめんなす(:D)| ̄|_
478デフォルトの名無しさん :2007/04/08(日) 06:26:34
>>473
こんな感じで良いか?
#include <stdio.h>
int main(int argc, char *argv[])
{
int i,j;
for(i = 5; i >= 0; i--){
for(j = 0; j <= i; j++){
putchar('*');
}
putchar('\n');
}
return 0;
}
479デフォルトの名無しさん:2007/04/08(日) 08:12:21
>>473
こんな感じで良いか?
putC(int n){ if(n){ putchar('*'); putC(n-1); } else putchar('\n'); }
putL(int n){ if(n){ putC(n); putL(n-1); } }
main(){ putL(5); }
480デフォルトの名無しさん:2007/04/08(日) 08:30:57
#include <stdio.h>

#define LEN (5)

int main()
{
char star[LEN];
for (int ic = 0; ic < sizeof(star); ++ic) star[ic] = '*';
for (int ic = sizeof(star); ic > 0; --ic) printf("%.*s", ic, star);
return 0;
}
481デフォルトの名無しさん:2007/04/08(日) 08:35:57
#include <stdio.h>
int main()
{
char *p = "*****";
while(*p) puts(p++);
}
482デフォルトの名無しさん:2007/04/08(日) 09:32:55
数字を使ってないってのが素適ですね
483デフォルトの名無しさん:2007/04/08(日) 10:47:53
では>475を採用しまつ
484473:2007/04/08(日) 18:49:59
皆さんありがとうございます。
また、多分わからんことだらけなので
色々勉強に来ます!
485デフォルトの名無しさん:2007/04/16(月) 22:51:51
unionって、何に使うんですか?
使い道がわかりません。
486デフォルトの名無しさん:2007/04/16(月) 23:02:15
>>485
unionを使うと例えば
float a = 1.3;
const char * p = (const char *) & a;
for (int ic = 0; ic < sizeof(a); ++ic) printf("%02x ", p[ic]);
とおなじことが
union {
float a;
char p[];
} u;
u.a = 1.3;
for (int ic = 0; ic < sizeof(u.p); ++ic) printf("%02x ", u.p[ic]);
と書けます。
487名無し@沢村:2007/04/16(月) 23:52:39
おみゃーらー♪
C言語はつまらんぞー!
おみゃーたー、『肥えた語』つー言語があるの知ってる?
おりは知ってるよ。
おりがつくった言語よ。これからh『肥えた語』の時代よ。
URLはここよ↓
http://www.geocities.jp/hontamagod/
感想を頼むなー♪
488デフォルトの名無しさん:2007/04/17(火) 00:55:19
プログラムってどんなソフトに書き込めばいいんだ?
489デフォルトの名無しさん:2007/04/17(火) 00:59:17
書くだけでいいのであれば、なんでもいいので好きなテキストエディタに書け。
490名無し@沢村:2007/04/17(火) 01:16:24
>>488
Super『肥桶』に書き込めがいいよ。
URLはここよ↓
http://www.geocities.jp/hontamagod/
感想を頼むなー♪
491デフォルトの名無しさん
2ちゃんに書き込・・・ ごめん