5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

C言語なら、俺に聞け! <24>

1 :デフォルトの名無しさん:02/06/14 14:43
C言語質問スレッド Part 24

・C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
・comp.lang.c FAQ(英語の原文)
http://www.eskimo.com/~scs/C-faq/top.html
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
推薦図書/必読書のためのスレッド PART4
http://pc.2ch.net/test/read.cgi/tech/1022961238/l50

・前スレ
<23> http://pc.2ch.net/test/read.cgi/tech/1023024817/l50

コンパイラなどのリンクは>>2-3

2 :デフォルトの名無しさん:02/06/14 14:43
【コンパイラ】
gcc
http://gcc.gnu.org/
タダで使えるBorland C++!
http://pc.2ch.net/test/read.cgi/tech/1002377328/l50

【Win32用の開発環境のみ。】
gcc-cygwin
http://www.redhat.com/software/tools/cygwin/
gcc-mingw
http://www.mingw.org
Digital Mars C++
http://www.digitalmars.com/
Open Watcom
http://www.openwatcom.com/
Borland C++ Compiler 5.5.1
http://www.borland.co.jp/cppbuilder/freecompiler/

【製品版。有料】
Microsot C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/
LCC-Win32
http://www.cs.virginia.edu/~lcc-win32/
CINT
http://root.cern.ch/root/Cint.html
めじろ++98
http://www.vector.co.jp/soft/win95/prog/se075910.html

【その他】
http://www.cmt.phys.kyushu-u.ac.jp/~M.Sakurai/prog/progf.html
http://www.bloodshed.net/index.html

3 :デフォルトの名無しさん:02/06/14 14:43
(・∀・)オツカレー

4 :デフォルトの名無しさん:02/06/14 14:45
:::::::::::::::::::/ ,r:::::::::::.:::::::::.:: :
:::::::::::::::/ /::::::::::::: : ,ヘ ::::::::::::::::::::::: : ヽ
:::::::::::/ /::::::::::::::::::: ● ::::::::::::::::: : : :,/
::::::::/ /:::::::::::r(:::::::::`'::::::::::::::::::::::く
:::::/ /::::::::::::::`(::::::: ,ヘ:::::::::::::::::::::: ヽ
::::::し ::::::::::::::::::::::::: :●::::::::::::::::::::::: : : :_>
:::::::::::::::::::::::::::::::::::::: `' ::::::::::::-‐ ´
      ハァ…ハァ…

5 :デフォルトの名無しさん:02/06/14 15:26
クックック

6 : :02/06/14 21:51
a[Cnt++]=1;
短いコード書きたい時に,上のようにして使いますか?
a[Cnt]=1;
Cnt++;
を略したい時とかに

7 :デフォルトの名無しさん:02/06/14 21:56
またポケコンスレかよ

8 :デフォルトの名無しさん:02/06/14 22:04
>>6
そんな書き方はせんでよろしい。

9 :デフォルトの名無しさん:02/06/14 22:05
今回の 1 は誰ですか?
カーニハンかな?

10 :デフォルトの名無しさん:02/06/14 22:26
ていうか++とか+=とかいらないと思うの俺だけ?

11 :デフォルトの名無しさん:02/06/14 22:29
>>10
地獄の苦しみ。
そんなあなたはVBとかObjectPascalとかを使って悔い改めて下さい。

12 :デフォルトの名無しさん:02/06/14 22:32
普通人間は「Aに1を加える」と考え、
「Aの値に1を加えたものをAに代入する」とは考えない。
++や+=は、人間の思考に沿った良い記述方法なのだ。

13 :デフォルトの名無しさん:02/06/14 22:35
一部のプロセッサに沿った記述法だろ

14 :デフォルトの名無しさん:02/06/14 22:35
>>12
純粋にタイプ量が増えるというのも上げてみたい。

15 :デフォルトの名無しさん:02/06/14 22:39
>>12
自分は数学系の人間だけど、=とか配列の使い方とか、最初はかなり戸惑った。
コンパイルのたびに何度もエラーメッセージを出して、繰り返すうちに慣れた。

16 :デフォルトの名無しさん:02/06/14 22:40
誰もINCにコンパイルされるとは書かんのか。

17 :デフォルトの名無しさん:02/06/14 22:41
凄い初心者な質問で恥ずかしいのですが、

void test_strdup(char **string)
{
string[0] = strdup("test");
fprintf(stderr, "%s\n", string[0]);
}

void main(int argc, char *argv)
{
char **string;

test_strdup(string);
fprintf(stderr, "%s\n", string[0]);
}

とはできますよね。
で、この場合に文字列の配列ではなくて、文字列へのポインタを関数の呼出の引数
に与えて、呼出された側で文字列へのポインタのアドレスを変更する場合には
どうしたらいいんでしょうか?

void test_strdup(ここはどうしたらいいんですか?)
{
ここはどうしたらいいんですか? = strdup("test");
fprintf(stderr, "%s\n", string);
}

void main(int argc, char *argv)
{
char *string;

test_strdup(ここはどうしたらいいんですか?);
fprintf(stderr, "%s\n", string);
}

以上、よろしくおねがいします。


18 :デフォルトの名無しさん:02/06/14 22:43
void test_strdup(char *string)



19 :デフォルトの名無しさん:02/06/14 22:48
test_strdup(char** string) か char* test_strdup(void) にしれ。
つか、test_ って…

20 :デフォルトの名無しさん:02/06/14 22:50
>>19
呼び出し元にfreeを強要するのってあり?

21 :デフォルトの名無しさん:02/06/14 22:52
>17
つまり、こうしたいとでも?
もっとポインタ型の勉強が必要だと思われ。


void test_strdup(char **str) {
*str = strdup("test");
fprintf(stderr, "%s\n", *str);
}

int main(void) {
char *str;

test_strdup(&str);
fprintf(stderr, "%s\n", string);
}

22 :デフォルトの名無しさん:02/06/14 22:53
#define 日下部陽一死ね void

23 :デフォルトの名無しさん:02/06/14 22:54
しまったぁ↓
fprintf(stderr, "%s\n", string);

適当に直しといて>17

24 :デフォルトの名無しさん:02/06/14 22:57
>>20
strdupが呼び出し元にfreeを要求してますが、なにか?

25 :デフォルトの名無しさん:02/06/14 23:02
>>17
上の方もできてないという罠。
mainの中の1行目の宣言は char *string[1]; の間違いか?

test_strdupはそのままで合ってるから、mainの方を
 char *string;
 test_strdup(&string);
のようにするよろし。

test_strdupの中の string[0] を *string に直すとなおよろし。

26 :17:02/06/14 23:21
>>21さん
>>25さん

ありがとうございます(^^;

呼出した方でアドレスを与えて、呼出された方で、配列と同じように
処理すればいいんですね。

mainの方で(&str)として、test_strdupの方で(*str)として(たり色々
試して) たのでうまくいきませんでした。
#構造体を確保したかった時にも同じようなことがあった。

こういうのって、どこで学んだらいいんでしょう?


27 :デフォルトの名無しさん:02/06/14 23:31


28 :17:02/06/14 23:37
>>27
そうですね。とりあえず学校に行くわけじゃないから本読みます。
どんな本がいいですか?


29 :デフォルトの名無しさん:02/06/14 23:41
>>28
K&R以外ならどれでも

30 :名無し募集中。。。:02/06/15 00:00
>>29
K&Rで独学してちゃ駄目ですか?

31 :デフォルトの名無しさん:02/06/15 00:11
>>30
最終的に理解できてプログラムが書ければ良し。。

32 :デフォルトの名無しさん:02/06/15 00:11
>>30
できるんならいいよ

33 :30:02/06/15 00:27
>>31-32 レスどうも。
一通り読んで、演習問題やったりしているんだが
このスレのかき込みもあんまり理解できていない

34 :デフォルトの名無しさん:02/06/15 00:29
>>33
実戦から学べば良し。
オリジナルで数本何か書いてみればいい。

35 :デフォルトの名無しさん:02/06/15 10:51
cでDllつかうのってどうすればいいんですか?
解凍ソフト作りたいんですが・・・

36 :デフォルトの名無しさん:02/06/15 12:05
>>35
LoadLibrary
GetProcAddress

37 :デフォルトの名無しさん:02/06/15 13:02
char *p,*temp;

*p=(char *)calloc(2,sizeof(char));
*temp=(char *)calloc(10,sizeof(char));

*p[0]=1;
*p[1]=2;

このpの中の1と2をtempにコピーできる関数はありますか?
temp=p;
だとアドレスをコピーしてしまうので,
temp[0]=5;
とやってしまうと,*pのないようまで変更してしまうので。

38 :デフォルトの名無しさん:02/06/15 13:16
*p[0]=1;
*p[1]=2;
 ↓
p[0]=1;
p[1]=2;

char temp[2];
temp[0] = p[0]; //1のピーコ
temp[1] = p[1]; //2のおすぎ

39 :デフォルトの名無しさん:02/06/15 13:19
*p=(char *)calloc(2,sizeof(char));
*temp=(char *)calloc(10,sizeof(char));
 ↓
p=(char *)calloc(2,sizeof(char));
temp=(char *)calloc(10,sizeof(char));

40 :デフォルトの名無しさん:02/06/15 13:19
>>37
3行目と4行目で警告。char型にchar *型を入れるな。

41 :デフォルトの名無しさん:02/06/15 13:20
























ともっち!大好き!

42 :デフォルトの名無しさん:02/06/15 13:22
関数に型を送りたいのですが,可能ですか?
それをもとに,配列を確保したいのですが

43 :デフォルトの名無しさん:02/06/15 13:33
>>42
void (void *a)
{

}

44 :デフォルトの名無しさん:02/06/15 13:35
>>42
そろそろC++の初めどきです。

45 :42:02/06/15 13:37
できないのですか?

46 :デフォルトの名無しさん:02/06/15 14:05
>>45
> 関数に型を送りたいのですが,可能ですか?
そもそも、この「関数に型を送る」の意味が分からんよ。やりたいことを明記せい。

47 :デフォルトの名無しさん:02/06/15 14:12
十分分かるぞ。

>>42
自分で型を(名前などで)管理すれば可能だが
面倒だね。C言語自体にその機能は無い

48 :デフォルトの名無しさん:02/06/15 14:13
template <typename T> T* makeArray( size_t count )
{
 return new T[count];
}

49 :デフォルトの名無しさん:02/06/15 14:15
>>45 だからC++をやれというとるでしょうが
template<typename Type, int n>void f(){Type ta[n];} //当然動的確保じゃなくてもOK
f<int, 256>(); //int型256個の配列ができた

50 :デフォルトの名無しさん:02/06/15 14:18
>>47
どう理解したの?

>>48
「型を元に配列を確保したい」と言ってるから、実は

if (型 == Player)
  プレイヤー用の配列を確保 & 初期化
else (型 == Cell)
  セル用の配列を確保 & 初期化

だったりしないか。分からんが。

単にメモリブロックを確保したいだけなら、それこそ malloc() に sizeof(配列要素) *
要素数で終わりだしねぇ。

51 :デフォルトの名無しさん:02/06/15 14:19
>>49
C++ 的には配列捨て捨てで vector<T> で良いかと。

52 :デフォルトの名無しさん:02/06/15 14:20
>>50
だよねぇ
型を渡してってのが意味不明、
Cじゃメモリ確保に型なんか必要ないし

53 :デフォルトの名無しさん:02/06/15 14:56
ポインタについて教えてください

54 :デフォルトの名無しさん:02/06/15 15:04
本買え。

55 :デフォルトの名無しさん:02/06/15 15:05
俺の体の中ほどにあるとんがってピクピク動いている硬い竿がポインタ(指し示す者)で
ついでにこの亀のような形のものがセグメントアドレスです

56 :53:02/06/15 15:06
>>54
持ってるけど分からない・・・

57 :デフォルトの名無しさん:02/06/15 15:08
C99に対応したコンパイラって出回ってますか?

58 :デフォルトの名無しさん:02/06/15 15:11
分かるまで買い続けろ。
まさかたかだか1〜2冊というわけではあるまいな。

59 :デフォルトの名無しさん:02/06/15 15:44
そこまで市内とポインタが分からんのか?
歳はいくつぐらい?

60 :デフォルトの名無しさん:02/06/15 15:46
>>59
わからん人にはわからんみたい。
って言うか実戦で使ってみないことには完全には理解できないでしょ。
メリットとかそもそもの使い方とか。

本だけ読んで自己満足してその知識だけでここでなれ合っているというなら問題だけどな。

61 :デフォルトの名無しさん:02/06/15 15:48
>>55
じゃあ、ミルクみたいな奴はなんというのでしょうか?

62 :デフォルトの名無しさん:02/06/15 15:48
教訓
 習うより慣れろ

63 :デフォルトの名無しさん:02/06/15 15:51
>>62
故Dr.パソコンに合掌

64 :42:02/06/15 16:08
わかりずらくてすみません。
callocを使って関数で任意の型を作りたいのですが,
(char *)の部分は,型を送らないと任意の型を作れないので,型を送りたいんです。

65 :デフォルトの名無しさん:02/06/15 16:09
>>64
まださっぱりわからん
型を作るって何?
型を送れないと・・・って何?

66 :デフォルトの名無しさん:02/06/15 16:12
>>64
typedefと構造体か素直にC++か。

67 :デフォルトの名無しさん:02/06/15 16:16
>>64
演算をしないならCのキャストは無敵だから何の心配もいらない。
サイズだけ分かればよい。でもやっぱり多態とRTTIが最強

68 :日本語を勉強したいです。:02/06/15 16:22
>>64
void *yattekure(size_t count,size_t size){
return malloc(count * size);
}

sonohennokansu(){
int *pi;
char *pc;
pi = (int *)yattekure(10,sizeof(int));
pc = (char*)yattekure(16,sizeof(char));
・・処理・・
free(pi);
free(pc);
}
とか。

69 :デフォルトの名無しさん:02/06/15 16:47
やっぱり無理なんですかね?
void ( void * a,size_t count,size_t size,?? kata )
{
 a=(kata *)malloc(count * size);
}

のようにしたいのですが,kataの部分がどうやって送っていいのかわかりません。
void *ではないですしね。

70 :名無しさん@カラアゲうまうま:02/06/15 16:51
>>64
> わかりずらくてすみません。
すげーわかりずらい。

#define allocate(n, type) (type *)calloc((n), sizeof(type))


71 :デフォルトの名無しさん:02/06/15 16:52
>>69
その微塵も意味のない
(kata *)へのキャストはなんですか?
何か根本的に間違ってませんか?

72 :デフォルトの名無しさん:02/06/15 16:58
>>70

ありがとうございます
それをつかえば,できますね。
defineがあったのか。

73 :デフォルトの名無しさん:02/06/15 17:10
char *moji="aあaあ";

moji[0]=?; //a?
moji[1]=?; //あ?
moji[2]=?; //a?
moji[3]=?; //あ?

全角文字も半角文字も一つの配列に入るのですか?

74 :デフォルトの名無しさん:02/06/15 17:13
>>73
SJISと仮定して全角文字は2Byteです。
プログラムも良いけどコンピュータアーキテクチャとかも学ぶと吉。


75 :デフォルトの名無しさん:02/06/15 17:20
comってなんですか?

76 :デフォルトの名無しさん:02/06/15 17:21
>>75
俺が知ってる限りで3個以上意味がある。

77 :デフォルトの名無しさん:02/06/15 17:21
どのcomよ?

78 :デフォルトの名無しさん:02/06/15 17:21
>>75
むむむ・・・。

79 :デフォルトの名無しさん:02/06/15 17:23
computer-output microfilm

80 :デフォルトの名無しさん:02/06/15 17:35
>>75
奇怪語ONLYの最大64KBの実行可能ファイルよ

81 :デフォルトの名無しさん:02/06/15 17:35
漏れは関東出身なんだが、最近からあげは塩コショーで食うのがいいと思うようになってきたage

82 :デフォルトの名無しさん:02/06/15 17:35
どうでもいいが>>69はメモリリークする。

83 :デフォルトの名無しさん:02/06/15 17:36
>>82
どうでもいいな・・・。

84 :デフォルトの名無しさん:02/06/15 21:08
あー、Cって参照使えなかったのかー。

>>80
Turbo C/C++だとタイニーモデルで作れたよ。

85 :デフォルトの名無しさん:02/06/15 21:14
>>81
唐揚げはわさびがあうぞ

86 :デフォルトの名無しさん:02/06/15 22:41
>>70
だめでした
allocate(10, char);
と使いましたが

87 :デフォルトの名無しさん:02/06/15 22:54
何がどう駄目だったのか書かないところを見ると、
かなりのハクチのようですな、、、

88 :デフォルトの名無しさん:02/06/15 22:59
signedな数に最大値より大きい数を代入した時は
オーバーフローして未定義だけど、
unsignedな数に同じことをした時にはどうなるの?
オーバーフローしないとか書いあったんだけど、
それは、勝手に最大値に丸められるということ?

89 :デフォルトの名無しさん:02/06/15 23:01
>>88
いや、単にオーバーフローしたビットが省かれる。

90 :デフォルトの名無しさん:02/06/15 23:01
unsignedだってオーバーフローするんでないかや?

91 :デフォルトの名無しさん:02/06/15 23:02
数値計算やってるものですが
C言語、わかってたつもりなのに全然わかってなかったです
関数に二次元配列を渡す方法がわかりません
大きさ不定の二次元配列を渡す方法がわかりません
それからポインタのこともわかってなかったです

配列のポインタのことをよく書いてあるHP教えて下さい
それからポインタのことを語って下さい 語りつくして下さい
お願いします!!!

92 :デフォルトの名無しさん:02/06/15 23:02
>>88
unsigned int a=-1;
a+=2;
printf("%d",a);

93 :デフォルトの名無しさん:02/06/15 23:03
ポインタはメモリのアドレスをポイントするで終わりでないの?

94 :デフォルトの名無しさん:02/06/15 23:03
>>91

void hoge(DATA **dat)
{
}

95 :デフォルトの名無しさん:02/06/15 23:03
>>87
そろそろ「型を送る」人は放置で良いかと……。自分の置かれている状況と解決
すべき問題を明確に示せない人には、掲示板でアドバイスするのは無理だよ。

96 :デフォルトの名無しさん:02/06/15 23:05
1次元な配列を作って先頭アドレス渡して、受けとった関数で
自前に2次元的にアクセスするとか?

97 :デフォルトの名無しさん:02/06/15 23:05
>>87
もう諦めてvector<T>を使いなさい。


98 :91:02/06/15 23:05
>94
ポインタのポインタと二次元配列は違うのでは???

99 :デフォルトの名無しさん:02/06/15 23:06
>>89
そうなんか…Thx!

>>92
printf("%d");
つうのは、signedじゃなかったけ?

100 :97:02/06/15 23:06
ごめん >>86 の間違い。

101 :91:02/06/15 23:07
ようするにどんな大きさの二次元配列でも引数にとれる関数を書きたいのです

102 :デフォルトの名無しさん:02/06/15 23:07
vectorクラスはどういうことですか?
vector<T>?

103 :デフォルトの名無しさん:02/06/15 23:08
>>98
ポインタに配列の先頭アドレスを代入してるってことだよ。

104 :デフォルトの名無しさん:02/06/15 23:10
配列の先頭要素はポインタではなかったですか?

105 :デフォルトの名無しさん:02/06/15 23:12
>104
ではない

106 :デフォルトの名無しさん:02/06/15 23:14
>>91
http://www.google.co.jp/search?hl=ja&ie=UTF8&oe=UTF8&q=%E9%96%A2%E6%95%B0+%E4%BA%8C%E6%AC%A1%E5%85%83%E9%85%8D%E5%88%97+%E6%B8%A1%E3%81%99%E6%96%B9%E6%B3%95&lr=


107 :デフォルトの名無しさん:02/06/15 23:15
>>105
配列の先頭要素はメモリのアドレスではなかったですか?
違いましたでしょうか?

108 :デフォルトの名無しさん:02/06/15 23:16
char **argv

はもう推奨されないんですか?


109 :デフォルトの名無しさん:02/06/15 23:17
>>108
それはchar* argv[]の別表記じゃん、2次元配列じゃないっしょ

110 :デフォルトの名無しさん:02/06/15 23:18
ttp://www.kumei.ne.jp/c_lang/intro/no_23.htm

二次元配列というのはつまり、
その中の一次元配列の先頭アドレスを格納したポインタの、配列ってことだよ。

111 :110:02/06/15 23:21
その二次元配列の先頭アドレスを格納したポインタを引数として
関数に渡せば言いわけ。
ただ、out of rangeになるという危険性をはらむが。

112 :デフォルトの名無しさん:02/06/15 23:21
int a[3][4];

00 01 02 03
10 11 12 13
20 21 22 23

113 :デフォルトの名無しさん:02/06/15 23:21
>>109
char argv[][]

って書き方も出来ますよね。

114 :110:02/06/15 23:22
>>112
それは二次元配列の宣言だろ。

関数に渡すこととは関係ない。

115 :デフォルトの名無しさん:02/06/15 23:23
>>113
できないんじゃねぇの?

116 :112:02/06/15 23:23
関数に渡すこと言っていたんだ。
勘違い、スマソ

117 :110:02/06/15 23:27
char a[];
char *a;

前のは、配列として宣言してしまっているから、大きさが自動的に決定してしまい、
書き換えできない。後ろのならばできる。



118 :デフォルトの名無しさん:02/06/15 23:27
>>115
DOSのQuick Cでは出来たよ。

119 :110:02/06/15 23:31
>>113
無理。
コマンドラインの各引数はプログラム外で確保されるために、
ポインタが渡される。よって、プログラムは各引数のサイズを
知ることができないので、無理。

120 :デフォルトの名無しさん:02/06/15 23:33
配列よりポインタ使ったほうが融通が利くと独習Cに書いてあった気がしました。
ポインタでアドレス指定して操作すればいいのではないの?
ポインタ、ポインタというと帰って分からなくなりそうです。

121 :110:02/06/15 23:33
>>118
そりゃ、Quick CがCの仕様に沿ってないんだろ。


…自信がなくなってきた。間違ってたらスマソ

122 :デフォルトの名無しさん:02/06/15 23:33
2次元以降はサイズが確定してないと駄目れすね。

123 :110:02/06/15 23:34
>>120

>>117を読んでくれ

124 :110:02/06/15 23:35
>>91が何にも言わないので悲しい。

逝ってくるか…。

125 :120:02/06/15 23:39
>>117
そうですよね。
自分のは間違ってない、と、勝手に思ってます。

おかしくなったときに考えましょう、と思ってますし。

126 :俺に日本語を教えれ!:02/06/15 23:39
>>37
意味不明だが、
とくに
>*pのないようまで変更してしまうので。
memcpyを使ってからもう一度。

>>86
char *p;
p = allocate(10,char);
で何の問題も無い気が…。
呼び出しをチェックしれ。
あとCではvoid*はいちいちキャストしなくてもいいし。
というかまったく意味ないし。

>>91
多次元配列だと、
void kansu(int matari[][]);
のようにはできない。
void kansu(int sastubastu[][10]);
のように一番上以外を定数として宣言しないとダメ(配列の宣言のときを考え)。
自由にやるには多重ポインタしかない。

127 :110:02/06/15 23:44
何言ってるんだ俺!!!!

119は間違い。
配列の配列は結局、一次元の配列の先頭アドレスを格納したポインタ、の配列だから、
ポインタということは、サイズをコンパイラは知ることができないわけ。で、無理。

鬱だ。逝ってきます。

128 :デフォルトの名無しさん:02/06/15 23:47
果たしてそうかな...

129 :デフォルトの名無しさん:02/06/15 23:50
何が正しいのか分からん。
K&R見る。

130 :ANSI工作員:02/06/15 23:51
そうそう
アソシから今すぐ規格書を買って詳細を調べれ

131 :デフォルトの名無しさん:02/06/15 23:52
>>127
とりあえず
> 先頭アドレスを格納したポインタ、の配列だから、
は間違ってると思われ

132 :110:02/06/15 23:57
つまり、二次元配列を関数に与えるときは、
配列の先頭アドレスとともに、配列のサイズを渡さなければならないわけ。
そうしないと配列のサイズが見えないから範囲外にアクセスして、
悪けりゃ、Winごとおさらば…

大体、こんな感じ
void hoge(int **v, int x_size, int y_size)
{
for (int x = 0; i < x_size) {
for (int y = 0; c < y_size) {
v[x][y] = 17;
}
}
}


int main()
{
int foo[9][7];

hoge(foo, 9 , 7);
}

133 :110:02/06/15 23:59
つぶれちまた…。

>>131

???

134 :デフォルトの名無しさん:02/06/16 00:00
>>132
だめ。2次元配列はポインタのポインタではなく長さの情報をもった型
省けるのは一つだけだからエラー

135 :デフォルトの名無しさん:02/06/16 00:01
間違った知識ひけらかすのはそろそろやめてホスィ・・・

136 :デフォルトの名無しさん:02/06/16 00:02
はい
int v[][7]


137 :デフォルトの名無しさん:02/06/16 00:03
エキスパートCプログラミングよめ。

138 :デフォルトの名無しさん:02/06/16 00:05
で、結局何が知りたくて、何が理解できたのよ。


139 :デフォルトの名無しさん:02/06/16 00:09
ポインタ関係の説明は馬鹿ばっかだった。
以上。 

140 :デフォルトの名無しさん:02/06/16 00:12
>>139
同意(鬱)

141 :デフォルトの名無しさん:02/06/16 00:15
おとなしく一次元配列にして、
matrix[ y*y_len + x ] とかアクセスすれば〜

142 :デフォルトの名無しさん:02/06/16 00:17
全員Cコンパイラを作ればよろし。

143 :デフォルトの名無しさん:02/06/16 00:19
>>132
int main()
{
int foo[9][7];
int *p[7];
for(int i=0;i<7;++i)p[i] = foo[9] + i;
hoge(p, 9 , 7);
}



144 :デフォルトの名無しさん:02/06/16 00:19
やっぱ、vector使うのがよろし。

145 :110:02/06/16 00:23
     ||
   Λ||Λ
  ( / ⌒ヽ
   | |   |
   ∪ 亅|
    | | |
    ∪∪

146 :デフォルトの名無しさん:02/06/16 00:25
あ〜あ・・

147 :134:02/06/16 00:25
     ||
   Λ||Λ
  ( / ⌒ヽ
   | |   |
   ∪ 亅|
    | | |
    ∪∪

148 :91:02/06/16 00:28
91です。
FAQみながら↓みたいにやったらできました

void f(int n,double **x){
}

int main(){
int i,n=3;
double **x;
x = (double **)malloc(sizeof(double *) * n);
for(i=0; i<n; i++)
x[i] = (double *)malloc(sizeof(double) * n);
f(x);
return 1;
}

149 :デフォルトの名無しさん:02/06/16 00:28
vector< vector<int> > foo(9, vector<int>(7,0)) ;

150 :デフォルトの名無しさん:02/06/16 00:29
>>149
タイトル読もうな。

151 :デフォルトの名無しさん:02/06/16 00:29
そして、91は何事もなかったように去った。
後には、110と134の死体が揺れていた…。


FIN

152 :91:02/06/16 00:30
普通に

double **x;
x = (double **)malloc(sizeof(double) * n * n);
だとダメらしいのですがなんでダメなのかわからない

153 :デフォルトの名無しさん:02/06/16 00:32
mallocが返すのはふつうのポインタ。
xは2重ポインタ。


154 :デフォルトの名無しさん:02/06/16 00:32
ケツの穴多いな

155 :デフォルトの名無しさん:02/06/16 00:33
>>152
double *の正体がないから。
double ** -> double * -> double って具合に2段にわたって参照するので、
途中通過する double * も必要。

156 :91:02/06/16 00:33
なんかみんなポインタの間違って理解してる気がする
上のレス見たらよけいわからんなった

ちなみに自分は連立方程式の数値解を求める関数を書きたかったのです
fortran90ならこんなのちょろいのになー C言語むづすぎ

157 :デフォルトの名無しさん:02/06/16 00:33
>>152
これこそ、>>110の言ってたポインタのポインタの話じゃないか?

158 :デフォルトの名無しさん:02/06/16 00:34
>>156
2chはいきなり初心者モード無視して答えを書いてくるヤシが多い
ので、かえって混乱するかも。でもいつか理解できる。

159 :91:02/06/16 00:36
誰かC言語のコンパイラ作った人いないの?
そういうのを専門でやってる人いませんかねえ
いたらポインタと配列についてコンパイラ実装者の立場から説明して欲しい

160 :91:02/06/16 00:40
mallocで動的にメモリを確保せずにポインタを使わずに
関数に二次元配列を渡せないのでしょうかね?

161 :デフォルトの名無しさん:02/06/16 00:40
ネタにしては偉そうだ。

162 :デフォルトの名無しさん:02/06/16 00:41
>>160
int a[4][5]ならint (*b)[5]

163 :デフォルトの名無しさん:02/06/16 00:41
>>159
アセンブラを覚えれば分かるよ。

164 :デフォルトの名無しさん:02/06/16 00:42
必要より大き目なサイズ固定の二次元配列をつかう。

165 :91:02/06/16 00:42
引数で大きさ指定してどんな大きさの二次元配列でも扱えるような
関数を書けないですかね?
ポインタつかわんでmalloc使わんで

166 :デフォルトの名無しさん:02/06/16 00:43
>>165
Perlでも使えよ・・・

167 :デフォルトの名無しさん:02/06/16 00:43
>>165
C++使え

168 :デフォルトの名無しさん:02/06/16 00:43
>>160
ポインタを使わないって時点で無理。

169 :デフォルトの名無しさん:02/06/16 00:43
無理ぽいに一票

170 :デフォルトの名無しさん:02/06/16 00:44
つーか規格書買って読めつうの。アフォか

171 :デフォルトの名無しさん:02/06/16 00:44
>>168
こーぞーたいのメンバーにすれば渡せないこともない。

172 :デフォルトの名無しさん:02/06/16 00:44
>>165
支離滅裂

173 :91:02/06/16 00:45
アセンブラの立場から説明してみてや、自分はアセンブラわかりませんが > 163
それは無駄にメモリ使う上に柔軟性がないでしょ > 164

174 :デフォルトの名無しさん:02/06/16 00:45
91はここの住人を試しているようにしか見えないな・・

175 :デフォルトの名無しさん:02/06/16 00:45
>>173
UNIX板からの刺客?

176 :デフォルトの名無しさん:02/06/16 00:45
91を一休さんのキャラに例えると誰ですか?

177 :デフォルトの名無しさん:02/06/16 00:46
>>91
だから最初の要素以外の大きさはコンパイル時に
決定していなければならないわけで、>>152はよくて
#define N 100
double (*hoge(int n))[N]
{
double (*x)[N] ;
x = (double(*)[N])malloc(sizeof(double)*n*N) ;
return x ;
}
のようにしかできない

178 :91:02/06/16 00:46
上のやりかた以外に方法ないんですかねえ

179 :デフォルトの名無しさん:02/06/16 00:47
>>178
なんでCにこだわるの?

180 :デフォルトの名無しさん:02/06/16 00:47
あそこの板嫌いだな
こういうのばっかりだから

181 :デフォルトの名無しさん:02/06/16 00:47
一回ポインタとmallocを使わないでプログラムを実行中に
好きな大きさのメモリを確保してほしい。

182 :デフォルトの名無しさん:02/06/16 00:47
つまらん。

183 :デフォルトの名無しさん:02/06/16 00:47
ポインタを使うのがCの醍醐味ではないけ?

184 :177:02/06/16 00:48
間違えた。すべて決まってなければならない
最初がいらないのは受け渡しのときだけだ

185 :デフォルトの名無しさん:02/06/16 00:48
別にCだけではないだろ。

186 :91:02/06/16 00:49
やっぱfortranかなあ
Cむづかしすぎ
みんなもよくわかってないっぽいし

187 :デフォルトの名無しさん:02/06/16 00:50
>>186
わかってないのはおまえと110だけだと思われ

188 :デフォルトの名無しさん:02/06/16 00:50
>>186
分かっているから無理だと言っているんだろ(ワラ

189 :91:02/06/16 00:51
a[n][n]でaはポインタのポインタではないんですよね?
でわaはなんですか?

190 :デフォルトの名無しさん:02/06/16 00:51
Lisp Schemeでも使え。
考えがスマートに書ける。

191 :デフォルトの名無しさん:02/06/16 00:51
あなたにはそれが一番似合ってます、おめでとう。

192 :デフォルトの名無しさん:02/06/16 00:51
fortranは処理系が中でポインタとmallocを使ってるだけだろ

193 :デフォルトの名無しさん:02/06/16 00:51
>>189
配列名だよ!

194 :91:02/06/16 00:52
煽り多くなってきたな
むづかしすぎたかな

195 :デフォルトの名無しさん:02/06/16 00:53
(´-`).。oO(どういう勉強のしかたすると>>91みたいのが出来あがるんだろう…)

196 :デフォルトの名無しさん:02/06/16 00:53
>>159
> ポインタと配列についてコンパイラ実装者の立場から説明して欲しい
以前に書いたヤツだと、こんな感じやねぇ。

  | l_value '[' expr_ ']' {
    struct comp_node *offnp;
    struct cast_info *cast;
    if (!cast_is_array($1->cn_cast))
      yynotice(COMP_ERRMSG_ELEM_NOARRAY);
    else if (!cast_equal(node_get_cast($3), CAST_INT))
      yynotice(COMP_ERRMSG_INDEX_NOTINT);

    cast = cast_element($1->cn_cast);
    /* offset <- expr_ '*' size */
    offnp = node_create_op2(CAST_INT, $3,
      node_create_valint(cast_size(cast)), OPR_MUL);
    $$ = node_create_lv_off(cast, $1, offnp);
  }

  | '*' l_value %prec PREC_DEREF {
    if (!cast_is_pointer($2->cn_cast))
      yynotice(COMP_ERRMSG_DEREF_NONPTR);
    $$ = node_create_rlv(cast_deref($2->cn_cast), $2);
  }

197 :デフォルトの名無しさん:02/06/16 00:53
だから答えは出てるっつーの

198 :デフォルトの名無しさん:02/06/16 00:53
>>189
int a[n]はint型をn個持つ配列。
int a[n][m]はint型をm個持つ配列をn個持つ配列。

199 :デフォルトの名無しさん:02/06/16 00:53
91が一番煽ってる

200 :デフォルトの名無しさん:02/06/16 00:53
>>189
識別子です。
そろそろやめたら(ボソ

201 :91:02/06/16 00:53
ポインタむづかしすぎ!C言語挫折しそうですわ

202 :デフォルトの名無しさん:02/06/16 00:54
91は暇なやつだな。
そして日本語すらよく分かっていないな。

>むづかしすぎたかな

203 :198:02/06/16 00:54
メモリー上では一直線にならんでいるがな。

204 :デフォルトの名無しさん:02/06/16 00:54
yacc?

205 :デフォルトの名無しさん:02/06/16 00:54
典型的な逆切れパターンか・・・
91にはCは無理だ、あきらめな

206 :デフォルトの名無しさん:02/06/16 00:55
>>203
それだ!それを91は理解しないと

207 :デフォルトの名無しさん:02/06/16 00:56
ラーメンうまかったなぁ。

208 :デフォルトの名無しさん:02/06/16 00:56
>>186
二次元配列諦めて、ポインタのポインタにしたら?

double **d;

d = (double **)malloc(sizeof(double *) * 100);
for (i = 0; i < 100; i++)
d[i] = (double *)malloc(sizeof(double) * 100);

で、見かけ上d[100][100]まで使えるから。ただし、これを受け取る関数も
double **で受け取ること。それに、xとyの次元も指定しなければならない
から、

struct dd {
int x, y;
double **d;
};

のように構造体にした方が柔軟性が増す。

209 :デフォルトの名無しさん:02/06/16 00:56
パイの実(いちご)うまかったなぁ。

210 :デフォルトの名無しさん:02/06/16 00:57
>>208
それを91は嫌がっているんだよ(笑)

211 :デフォルトの名無しさん:02/06/16 00:57
>>201
>ポインタむづかしすぎ!C言語挫折しそうですわ
     .,/ ̄ ̄\.
    .,/  ____ \.
   / /川〃ノ\. ヽ.
   ( (ミ/⌒ヽ三) )  / ̄ ̄ ̄ ̄ ̄
    ヽ. ヽ| ´∀` |ノ .ノ < オマエダケー
      ̄|   .::| ̄    \_____
      |____|

212 :デフォルトの名無しさん:02/06/16 00:58
>>210
ふーん。何でこんなにもめているのか理解できたっすよ。(藁

213 :110:02/06/16 00:59
俺のせいか(藁

214 :91:02/06/16 01:00
>208
上に貼ったソース まさにそのやりかたです。
いちいちそんなめんどくさいことしないとできないのかあ
ポインタのこと考えないで配列の受渡ししたい

215 :デフォルトの名無しさん:02/06/16 01:01
C++などを使おう。

216 :デフォルトの名無しさん:02/06/16 01:02
>>215
もうほっときなって。

217 :デフォルトの名無しさん:02/06/16 01:02
>>214
Perlを薦めるよ。

218 :デフォルトの名無しさん:02/06/16 01:02
>>214
頭固すぎ
他言語使えって

219 :デフォルトの名無しさん:02/06/16 01:02
どうでもいいが91は渡す配列をどうやって持ってくる気だ?

220 :91:02/06/16 01:03
Javaだと配列のサイズ決めないで関数に渡せますね

221 :デフォルトの名無しさん:02/06/16 01:03
>>220
Java使えるならJava使えよ!!(;_;)

222 :デフォルトの名無しさん:02/06/16 01:03
>>220
あれはポインタのポインタと同じ

223 :デフォルトの名無しさん:02/06/16 01:04
>>91
それをしたかったら、もっと高級な言語を使え。
メモリアドレスが1次元である以上、どこかで行と列の計算をする必要があるだろ。
そんなことまでCは面倒見てくれない。

224 :デフォルトの名無しさん:02/06/16 01:04
わかってるヤツは、とっくに飽きてる話題だからな。

225 :91:02/06/16 01:05
これ以上話広がらないかなあ

226 :デフォルトの名無しさん:02/06/16 01:06
>>225
そりゃおまえがネタだと見抜かれてるからね

227 :デフォルトの名無しさん:02/06/16 01:06
無能が煽っても大して大きくならないのは定説。

228 :デフォルトの名無しさん:02/06/16 01:06
>>220
Cは配列の扱いについて、極端に単純化して、一次元配列しか
基本的には使えなくなっていると思われ。

229 :91:02/06/16 01:07
void f(double[][] a)
↑Javaだとこんな感じで配列の大きさ指定しないで関数に渡せて便利ですな


230 :デフォルトの名無しさん:02/06/16 01:07
>>229
配列もオブジェクトの一種ですからな。

231 :デフォルトの名無しさん:02/06/16 01:07
やっぱり煽りは日下部タンじゃないと・・・・

232 :デフォルトの名無しさん:02/06/16 01:07
C言語まったく知らないんだけど、
ポインタ変数の宣言ってどうやるの?


233 :デフォルトの名無しさん:02/06/16 01:08
余計なことを何もしないのが、Cのいいところじゃん。

234 :デフォルトの名無しさん:02/06/16 01:08
>>232
*

235 :91:02/06/16 01:08
>232
double *p;

236 :デフォルトの名無しさん:02/06/16 01:09
>>234
親切度が半端

237 :デフォルトの名無しさん:02/06/16 01:09
>>234
今日はしたい気分なんだ、いいだろ。

238 :91:02/06/16 01:11
C糞かも

239 :デフォルトの名無しさん:02/06/16 01:12
>>238
はげどー
91みたいなどうしようもないやつを生んでしまうもんな。

240 :デフォルトの名無しさん:02/06/16 01:12
>>239
禿同

241 :91にとっては:02/06/16 01:12
Cは糞です。

242 :デフォルトの名無しさん:02/06/16 01:13
>>238
うん、糞だ。
しかし、その糞さえもろくに(略

243 :デフォルトの名無しさん:02/06/16 01:13
>>229
それを「便利」と思うか「余計なお世話」と思うかは、微妙なところだ。少なくとも
処理系を実装する立場から言えば C は、適度に小さく強力で、良い言語だろう。

ところで 91 は >>196 へのコメントはないの?

244 :デフォルトの名無しさん:02/06/16 01:13
>>238
ちょっと同感ついでに>>91も糞

245 :デフォルトの名無しさん:02/06/16 01:14
Cは落ちこぼれ発生率がかなり高いし、糞だな

246 :デフォルトの名無しさん:02/06/16 01:14
91はCがアセンブラに近いことがだんだんと分かってきて、嫌気が
さしてきた様子。迷わずFORTRANやjavaに逝ってよし。

247 :デフォルトの名無しさん:02/06/16 01:15
>>243
理解できるわけないじゃん

248 :デフォルトの名無しさん:02/06/16 01:15
おまえら進行早すぎ。
もっと落ち着け

249 :デフォルトの名無しさん:02/06/16 01:16
もう>>91の時点でネタだってわかってるのに、
付き合ってあげるこのム板住人のやさしさ。

250 :デフォルトの名無しさん:02/06/16 01:16
いい暇つぶしができたよー

251 :デフォルトの名無しさん:02/06/16 01:17
>>249
ROMっている人のため。

252 :デフォルトの名無しさん:02/06/16 01:17
>>249
語りつくしてくださいというから語っているのさ(w


253 :デフォルトの名無しさん:02/06/16 01:17
1スレに2回くらい発生するネタだけどな。

254 :デフォルトの名無しさん:02/06/16 01:18
16進数(HEXコード)について知ってる人教えて!
いまいちF1だとかがよくわかんない。
お馬鹿でスマソ

255 :デフォルトの名無しさん:02/06/16 01:18
>>254
すれ違いだぞー
とりあえずCでは0xを先頭につけろ。

256 :デフォルトの名無しさん:02/06/16 01:19
>>254
F1=241

257 :デフォルトの名無しさん:02/06/16 01:20
F1 = F x 16 + 1 = 15 x 16 + 1じゃん

258 :デフォルトの名無しさん:02/06/16 01:20
F1 = 1111-0001

259 :デフォルトの名無しさん:02/06/16 01:21
>>258
ハァ?と思ったが、-は区切りか。

260 :デフォルトの名無しさん:02/06/16 01:21
今質問すれば誰かがものすごい勢いで答えてくれそうだな(w

261 :デフォルトの名無しさん:02/06/16 01:21
F1 == Formula One

262 :デフォルトの名無しさん:02/06/16 01:21
F1=ヘルプ

263 :デフォルトの名無しさん:02/06/16 01:21
F1 = Winアプリだとヘルプが出てくる

264 :デフォルトの名無しさん:02/06/16 01:22
なぜFに16をかける?

265 :デフォルトの名無しさん:02/06/16 01:22
C2=虫歯

266 :デフォルトの名無しさん:02/06/16 01:22
ケコーン

267 :デフォルトの名無しさん:02/06/16 01:22
>>263
間違って押してしまって糞重いヘルプが・・・

268 :91:02/06/16 01:22
>243
196って何言語なのかもわからん

269 :デフォルトの名無しさん:02/06/16 01:23
寂しい漏れを抱いて↓

270 :デフォルトの名無しさん:02/06/16 01:23
>>264
2桁目は16の1乗を表すから。

271 :デフォルトの名無しさん:02/06/16 01:25
こういうのに寄ってたかってレスするから、
このスレの消費速度が速いんだよな、、

272 :デフォルトの名無しさん:02/06/16 01:26
>>267
F2の隣にF1置いたの誰だよ!

273 :デフォルトの名無しさん:02/06/16 01:26
数値計算なら自分でプログラム組むよりマスマティカあたりを使えば・・・

274 :デフォルトの名無しさん:02/06/16 01:27
ていうかHEXコードってなに?

275 :デフォルトの名無しさん:02/06/16 01:27
>>272
ごめんなさい。


276 :デフォルトの名無しさん:02/06/16 01:27
F1が出てきてからおもしろくない。

277 :91:02/06/16 01:28
>273
今回はC言語のお勉強だったのです
普段はmatlab使ってます

278 :デフォルトの名無しさん:02/06/16 01:43
Mathematica高い!!!!

279 :デフォルトの名無しさん:02/06/16 01:49
関数のオーバーロードの方法を教えてください。

ライブラリのある関数を乗っ取りたいのですが
ldのオプションでENTRYを指定すればいいらしい
というところまではわかりました。

でも、実例を示してくださるとありがたいです。

280 :デフォルトの名無しさん:02/06/16 01:53
なんで関数のオーバーロードにそんなたいそうな(ようわからんけど)
ことをする必要があるの?
オーバーロードでしょ?

281 :デフォルトの名無しさん:02/06/16 01:57
Cでもオーバーロードって出来たのか。

282 :デフォルトの名無しさん:02/06/16 01:57
モビルスーツがオーバーロードしてます

283 :デフォルトの名無しさん:02/06/16 01:58
>>281
できねえって


284 :デフォルトの名無しさん:02/06/16 01:59
「乗っ取る」とオーバーロードが結びつかない

285 :デフォルトの名無しさん:02/06/16 02:00
オーバーライドと勘違いしてるんじゃないの。

286 :279:02/06/16 02:01
要するに
ライブラリにある関数と同じ名前の関数を作ったから
ライブラリの方じゃなくて自分の作った関数の方を
リンクしてくれ、と ldに指示を出したいわけです。

287 :279:02/06/16 02:02
オーバーロードじゃなくてオーバーライドでした

288 :91:02/06/16 02:03
>279
お前レベル低すぎるよ
死んでくれよ

289 :デフォルトの名無しさん:02/06/16 02:03
オーバーレイのまちがい?

290 :デフォルトの名無しさん:02/06/16 02:04
ENTRYはエントリーポイント関係じゃないの?

291 :デフォルトの名無しさん:02/06/16 02:04
頭がオーバーヒートしてんじゃないの?

292 :279:02/06/16 02:04
>>288
おまえだけには言われたくないよ。

293 :デフォルトの名無しさん:02/06/16 02:05
>>279
C++スレへ来なさい

パパが誠意を持って体中で教えてあげるから

294 :デフォルトの名無しさん:02/06/16 02:05
>>279
自分の関数の名前をちょっと変えて#defineで見た目をごまかすとかは
どう?

295 :デフォルトの名無しさん:02/06/16 02:07
>>279
ライブラリをリンクしない。

296 :デフォルトの名無しさん:02/06/16 02:08
279が希望することって実現可能なの?

297 :デフォルトの名無しさん:02/06/16 02:10
$ man ld
しれ

298 :デフォルトの名無しさん:02/06/16 02:12
.obj にしてリンクするだけじゃないのか?

299 :デフォルトの名無しさん:02/06/16 02:16
>279
あるライブラリをリンクしたいが、それに含まれるいくつかの
関数だけは自分バージョンを同じ名前で使いたいってこと?

300 :279:02/06/16 02:18
ひょっとしてここの奴らって程度低いの?

301 :279 ◆bislCqN. :02/06/16 02:21
>299
はい、そういうことです。

>>300
騙らないで

302 :デフォルトの名無しさん:02/06/16 02:23
たしか、glibcの日本語localeがぐちゃぐちゃだったときに、
プリロード、って言葉を聞いたことがあるけどな……

303 :デフォルトの名無しさん:02/06/16 02:24
騙りという名のスケープゴート

304 :299:02/06/16 02:25
>>279
いま急いで調べたから違っているかもしれないけど、ldの--entryオプションは
プログラムのエントリーポイントを設定するだけで、関数の乗っ取りは
少なくともこのオプションではできないと思うよ。

305 :279 ◆bislCqN. :02/06/16 02:33
>304
わざわざありがとうございます。
そうですね、関係なかったみたいですみません。

プリロードうんぬんって、動的リンクさせるときに読み込むライブラリを
順番指定するとかして自分の思い通りにライブラリをリンクさせる手法
でしたっけね。
静的リンクでも同様のことがこれで出来るのかな?
調べてみます。

306 :デフォルトの名無しさん:02/06/16 02:44
>>299
>>294のいうとおり
#if use_custom_printf
#define getchar printf__
#include <stdio.h>
#undef printf__
#endif
とかじゃだめ?ヘッダファイルの内容次第では死ぬけど。

307 :デフォルトの名無しさん:02/06/16 03:11
半径N(ピクセル)の円の中に含まれる点(x,y)をランダムに算出する方法がわかりません。
講義で習ったんですが忘れてしまいますた。
別に宿題というわけではありませんが、教えてください。おねがいします。

308 :デフォルトの名無しさん:02/06/16 03:15
dx = rand() % N;
dy = rand() % N;

if(dx * dx + dy * dy < N * N)
{
  出力(x, y, dx, dy);
}
の繰り返しじゃだめなの?

309 :デフォルトの名無しさん:02/06/16 03:16
>>307
x と y を -N〜Nまで乱数で求め、x^2+y^2<=N^2となる(x,y)を出力しなされ。

310 :308:02/06/16 03:22
わしのちょっとおかしい。
>309さんのがいいね。

311 :デフォルトの名無しさん:02/06/16 03:32
>>310
設問にxとyが負でもいいのか条件が欲しいところだね。

312 :デフォルトの名無しさん:02/06/16 03:47
できました。こんなかんじです。

for(int i=0;i<15000;i++){
int a,b;

for(;;){
a=rand()%200-100;
b=rand()%200-100;
if( a*a + b*b <= 100*100)
break;
}

shige[i].SetPosition(200+a,200+b);

}

どうもありがとうございました。

313 :デフォルトの名無しさん:02/06/16 03:47
角度と長さをランダムで求めて、適当に出力するのが良いんじゃないの?
無駄撃ちが無くなるし。

314 :デフォルトの名無しさん:02/06/16 03:48
shige?


315 :デフォルトの名無しさん:02/06/16 04:05
>>313
分布が一様じゃなくなるんじゃない?

316 :デフォルトの名無しさん:02/06/16 06:59
>>301
298 で答え出てる気が。もし実行ファイルで、実行時リンカが解決するシンボルを
上書きしたいなら、共有ライブラリを作って LDPRELOAD 環境変数で指定、かね。
(man ld.so)

ただ、よーく理解して使わんと死ぬぞ。詳しい話を知りたければ、書籍「Linkers &
Loaders」でも買って読むべし。

317 :デフォルトの名無しさん:02/06/16 07:58
質問というかアンケート。
関数書く時、最大何行超えると駄目ってのありますか?


318 :デフォルトの名無しさん:02/06/16 08:08
>>317
行数とは無関係だと思う

319 :279 ◆bislCqN. :02/06/16 08:11
>316
どうも。その本買いに行ってきます。

320 :デフォルトの名無しさん:02/06/16 08:15
一関数で変数が4000万とかになったりすると、
コンパイラに、いろいろヤヴァイ部分が出てくるとおもう。
角度とか。

321 :デフォルトの名無しさん:02/06/16 08:30
>>318
いやでも1関数で何千行とかあったら引きませんか?

322 :デフォルトの名無しさん:02/06/16 09:19
>>321
引くけど、
でも50行でもその中に複数の処理が混ぜ混ぜに詰め込まれてたらダメでしょ
逆に何千行でも分割不可能な最小の処理(ありえるか?)なら仕方がないし
(何千行の関数がコンパイルできるかどうかは知らんけど)

323 :デフォルトの名無しさん:02/06/16 09:41
>>322
現実派そんなことあるのですか?

324 : :02/06/16 10:07
個人的には一関数200行かな

325 :デフォルトの名無しさん:02/06/16 15:15
ソースを読んでたらこんな記述がありました。
w->sp0->x_pos = 0;
なんですか -> って。見たこともない表記に混乱しています。助けてください。

326 :デフォルトの名無しさん:02/06/16 15:17
>>325
a->b == (*a).b

327 :デフォルトの名無しさん:02/06/16 15:18
>>325
構造体Aが構造体bへのポインタ型のメンバを持っている。

で、構造体Aのポインタから構造体bのメンバを参照している。


328 :デフォルトの名無しさん:02/06/16 15:19
こんな質問をするあたり、構造体自体知らないかも・・・・

329 :デフォルトの名無しさん:02/06/16 15:21
>>322
1000を越えることはないだろうけど、出力するものが多いプログラム(CGIとか)の場合は一つの関数の行数が多くなりそう。

330 :デフォルトの名無しさん:02/06/16 15:22
>>329
そうならないようにデザインとコードはわけろとあれほど・・・。
と言うアンチ最近の風潮な俺は逝ってきます。

331 :デフォルトの名無しさん:02/06/16 15:36
>>326-328
あー、思い出しました。完全に忘れてた。なんで忘れてたんだろう。
ありがとうございました。

332 :デフォルトの名無しさん:02/06/16 15:40
おおお、、、25000行以上の関数がコンパイル通った(VC++6.0)・・・
ファイルサイズが260KBにもなったが・・・

333 :デフォルトの名無しさん:02/06/16 15:46
質問よろしいでしょうか
目盛り関数のmalloc()は型の指定がないようなのですが
自分でサイズを確保しておけばどの型のデータも格納できるのでしょうか

334 :デフォルトの名無しさん:02/06/16 15:47
>>333
???????
戻り値のvoid *のこと?適切な型にキャストすれば?
もっとも、mallocのプロトタイプが有れば必要ないけど。

335 :デフォルトの名無しさん:02/06/16 15:49
>>333

まぁ、そう言うことやね。
変数も所詮は数バイトのメモリ領域。

でも、ちゃんと然るべき型のポインタに入れてやるように。

336 :デフォルトの名無しさん:02/06/16 15:50
説明がヘタですいません、
例えば戻り値void*が返ってきて
その番地に何か値を代入するとしたら
charとかintとか関係無くどの種類の値も代入できるのかと思いまして

337 :デフォルトの名無しさん:02/06/16 15:51
>>336
できる。
mallocはメモリを確保するだけ。
それをどう扱うかは変数次第。

338 :デフォルトの名無しさん:02/06/16 15:52
>>333

問題ない。
このスレの少し上のほうにそれを知らなかったのか意味不明な質問があったが。

339 :デフォルトの名無しさん:02/06/16 15:52
こんな初心者に親切に答えて頂いて有り難うございます
一応代入は出来たのですが、型の指定とかしなくていいのかな?と
疑問に思いまして・・
みなさん有り難うございます


340 :デフォルトの名無しさん:02/06/16 15:53
>>336
大きささえ合えばね。
余る分にはいいが少ない場合は危険。

共用体とかC自体結構そう言うことを想定してる。

341 :デフォルトの名無しさん:02/06/16 16:35
va_argのmanpageの
>ap が va_arg(ap,type) の形で関数に渡されると、 ap の値は関数から返って来た後は不定となる。
という記述の意味が分かりません。

va_list型のapを「va_arg(ap,type)の形で関数(何の?)に渡す」とは具体的どういうことでしょうか?
user_func(va_arg(ap, char *));
のように渡す場合のことかと思ったのですが...。
(これでapが不定になる筈が無いとも思いますけど...)


342 :shige:02/06/16 16:39
>>341
英語で読んだ方が明解でないか?
>If ap is passed to a function that uses va_arg(ap,type)
> then the value of ap is undefined after the return of that function.
つーか、酷い訳だな。それ。


343 :デフォルトの名無しさん:02/06/16 16:45
>>342
酷いつーか誤訳?

344 :shige:02/06/16 16:57
誤訳でふね。どこをどう読めばそんな訳になるのかわからんけど。Rubyさいこー

関係ないが、 http://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/c/C-faq/C-faq-15.html
> 可変個数の実引数リストの可変個数の部分には、古い「省略時の引数格上げ」が適応される。
> つまりfloatの引数は必ずdoubleに格上げされ(幅を広げられ)、charとshort intの引数はintに
> 格上げされる。よってva_arg(argp, float);と書くのは常に誤りである。代わりにva_arg(argp, float)
> と常に書かなければならない。
何も変わってません。Rうbyさいこー


345 :デフォルトの名無しさん:02/06/16 17:00
>>344
warata

346 :デフォルトの名無しさん:02/06/16 21:16
配列(構造体配列、多次元配列も)の要素数を
動的に確保したいのですが、どうすればいいのでしょうか?

347 :デフォルトの名無しさん:02/06/16 21:23
>>346
燃料投入だな。
それは無理。代わりにポインタと[]演算子を使う

348 :346:02/06/16 21:34
>>347
□演算子?これは初めて聞きました
どのようなものでしょうか?

349 :デフォルトの名無しさん:02/06/16 21:37
malloc を使え

350 :デフォルトの名無しさん:02/06/16 21:41
>>348
ダランベリアンじゃなくてだな
[と]。ポインタをint *pとしてmallocで確保した後
p[3]とかやってアクセス

351 :デフォルトの名無しさん:02/06/16 21:45
んで、気が向いたら free

352 :346:02/06/16 21:46
>>349
大変お恥ずかしい話ですが
mallocを使ったことがありません
失礼ですが、どうのように使えばよいのか
教えていただけませんでしょうか?

353 :デフォルトの名無しさん:02/06/16 21:47
マトモな本買えよ、、、

354 :346:02/06/16 21:53
>>353
本を買ったら使えるようになるのでしょうか?
やっぱり使い方を知らないと使えないと思うのですが。

355 :デフォルトの名無しさん:02/06/16 21:53
>>352
何度もでてるが、例えば一次元なら
int *p ;
p = (int*)malloc(sizeof(int)*n) ;/* nは確保したい個数 */
使い終わったら
free(p) ;

356 :デフォルトの名無しさん:02/06/16 21:58
>>352
知らないのはいいとして調べないのが問題だ。

powered by google
http://bi.appi.keio.ac.jp/seminar/c/node53.html
http://homepage1.nifty.com/MADIA/vc/C/c_lang_ansi2.htm
http://www.microsoft.com/JAPAN/developer/library/vccore/_crt_malloc.htm
http://www.ice.nuie.nagoya-u.ac.jp/~l94334/c/malloc_calloc.html
http://cai.cs.shinshu-u.ac.jp/sugsi/Lecture/c/e_04-02-01.html

一番下の信州大 Flash まで使って無駄に豪華だ。

357 :デフォルトの名無しさん:02/06/16 21:59
>>354
本買ったら使い方くらい書いてあると思うのですが。

358 :デフォルトの名無しさん:02/06/16 21:59
まあまあ、慣れないうちはキーワードすら思いつかないものだ

359 :346:02/06/16 22:00
あれ?
346は自分です
>>354は誰ですか?

>>355
ご親切にありがとうございます
多次元などは自分で頑張ります
本当にありがとうございました

360 :346:02/06/16 22:02
>>356
確かに・・・
失礼しました
これからは自分で調べてから質問します
お手数かけてすいませんでした

361 :デフォルトの名無しさん:02/06/16 22:02
>354
┐(´ー`)┌

362 :デフォルトの名無しさん:02/06/16 22:13
NULL は ナル と読むんですか?

363 :デフォルトの名無しさん:02/06/16 22:15
NULLはナル?ヌル?
http://piza2.2ch.net/tech/kako/992/992588535.html
NULLって
http://pc.2ch.net/test/read.cgi/tech/1014987555/
「False」を「ファール」って発音してる人の数→
http://pc.2ch.net/test/read.cgi/tech/1005578173/

364 :デフォルトの名無しさん:02/06/16 22:24
null /nΛ'l/

365 :デフォルトの名無しさん:02/06/16 23:10
よくゲームプログラミングで聞かれるスクリプトってどういうふうな機能を指すんですか?


366 :Dennis M.Ritchie:02/06/16 23:13
Cの王子光臨。

367 :Dennis M.Ritchie:02/06/16 23:13
何でもきいてくれ。・

368 :デフォルトの名無しさん:02/06/16 23:15
光臨ならIP晒せ。(藁

369 :デフォルトの名無しさん:02/06/16 23:18
>>365
プログラミング言語の一種。

C++ や Java などといったプログラミング言語に比べて、
特定の目的に特化されており、
プログラマではなくても記述できる(ことを目的としている)。

より広い範囲では、コンパイルなどの煩雑な作業が必要ない
手軽に使える簡易言語といったところ。

370 :デフォルトの名無しさん:02/06/16 23:28
ビット演算で質問なのですが、
特定のビットが0なのか1なのかは論理積を使って読めるようになりました。
書き込むのも論理和なり排他等を使えば可能なのですが、
ビットイメージ(2進数)で書き込みたいのですが、
手持ちの書籍、インターネットでの検索で見つけることができませんでした。
現在はWindowsの関数電卓を使って2進数を10進数に変換して
それをコピーアンドペーストしているのですが、
面倒で仕方がありません。何とかならないものでしょうか?
ちなみに、Borland-C++ エディターはC言語をはじめよう を使っております。

371 :デフォルトの名無しさん:02/06/16 23:30
>>370
int x = /* ここに2進数表記で整数を書く */;
ってことがやりたいってことか?
それならCだと無理。16進か8進で我慢じゃ。

372 :Dennis M.Ritchie:02/06/16 23:32
>>370
むり
Cの開発者がいってるんだからムリ

373 :デフォルトの名無しさん:02/06/16 23:36
2進で編集したデータを10進に変換。
読み込むときに、10進を2進に変換して
2進からデータを読み込むってのはダメ?

374 :デフォルトの名無しさん:02/06/16 23:39
荒業で伽羅型で書く、変換は?
めんどいけど、どうしてもやりたいなら(w

375 :デフォルトの名無しさん:02/06/16 23:41
>>370
モニタの横に、0からFまでの16進⇔2進変換表でも貼っとけ。
そのうち覚える。

376 :デフォルトの名無しさん:02/06/16 23:41
>>370
int i ;
asm mov i, 10101010101B

377 :デフォルトの名無しさん:02/06/16 23:43
int x = strtol("01000110101", NULL, 2);

378 :デフォルトの名無しさん:02/06/16 23:45
>>370
簡単なプリプロセッサ自作すればいいんでは?
プリプロセッサといっても、実際にコンパイラ
に組み込まなくて、単に標準入力の2進数入り
ソースを、10進数なり16進数に置き換えるだけ
でいいと思う。mypp < foo.cbb > foo.cpp みたい
な感じで。2進は 0b ではじめる、とか決めとけ
ばいいんでないの?

漏れは大昔、漢字変数名や漢字関数名が使える
ようなのを作って遊んでたよ。コンパイルエラー
表示を戻すことは考えていなくて、エラーが出る
と意味不明な英数字が表示されることになった
けどな(w。

379 :デフォルトの名無しさん:02/06/16 23:47
つうか、先頭ビットが0立っても
unsignedなら表現できるのか?

380 :デフォルトの名無しさん:02/06/16 23:53
#define B0000000000000001 1
#define B0000000000000010 2
以下略

381 :デフォルトの名無しさん:02/06/17 00:03
gccを改造して2進表記を可能にしてた人がいたね。
パッチをざっと眺めた限り、思ったよりは複雑なことしてなかった。
コロンブスのエッグって感じだったな。

382 :デフォルトの名無しさん:02/06/17 00:13
>>381
そんな対応は
#define START {
#define END }
とするぐらい、無意味でやっちゃならん事だと思うが。

383 :デフォルトの名無しさん:02/06/17 00:15
まーそれもそうだねぇ
printfで %b を追加した方がまだマシかな

384 :デフォルトの名無しさん:02/06/17 00:27
VC++にはstdint.hがあ遘サ讀肴ァ遘讀


385 :デフォルトの名無しさん:02/06/17 00:32
>>371
そうです。そうです。
そういうことがやりたいんです。
頭の中で2進にできなくて。
16進にしろ8進にしろ一度変換しないとだめなんですね。
16進だとどういう手段で可能なのかは分かりかねますが(汗

>>372
標準で不可能なようですね。
ありがとうございます。

>>373
371さんの書いてあることがしたいので、
残念ながら373の方法では、
コマンドラインから入力する場合なら可能ですね。
後の374さんが書かれていますが、
charで処理と言うのは、
CUIに2進表記するために、
10進をcharで2進表記しようとしましたが、
化け化けで失敗。一筋では通らなかった。
まだまだ精進が足りないようです。

>>374
上記の通りですm(__)m

>>375
そうですね。
371さんのいう16進でと言うのをやるためには、
暗記して、頭の中で処理できるようにならないとだめですね。
まだまだ精進が足りないようです。

>>376
はじめ見て何のことか分かりませんでしたが、
辞書で調べてみたところ、
アセンブラとC言語を組み合わせるためのような
ちょっと不明ですが、試してみたいと思います。
一手間かかりますが、それで可能なら見た目的にやりやすくて
ちとうれしいです。

>>377
なるほど。
文字列を2を基数にして変換してしまうのですか。
long型に変換してint型に入れてしまって良いものなのかは
ちょっと謎ですが(現在のPCなら問題ないだろうけど)
私にはまったく思いつきませんでした。
結構基本的な関数なのに、まだまだ頭が固いようです。
精進します。

>>378
拡張子cppと言うことはC++ですね?
ちょっと無理なようです。

>>379
現在はintでやっていますが、
将来的にはunsinged longまで拡張する可能性があります。
というか、そこまで使うかどうかは分かりませんが(w

>>380
それはちょっと・・・

386 :378:02/06/17 00:39
>>385
>拡張子cppと言うことはC++ですね?
>ちょっと無理なようです。
こういうResになるということは、確かに無理だろうな(w
拡張子は何だって構わないんだが。因みに漏れが昔書いた
ヤシは、C++でなくCで書いてある。当時はC++なんて、存在
すら知らなかったんだよ(w

387 :デフォルトの名無しさん:02/06/17 00:43
>cpp
暗にスレ違いってことでは。

388 :デフォルトの名無しさん:02/06/17 00:47
カンマ打つのめんどくさいが。

#define bit(b,n) ((b)<<(n))

#define bin4byte(b7,b6,b,b4,b3,b2,b1,b0) \
(bit(b7,7)|bit(b6,6)|bit(b5,5)|bit(b4,4)\
|bit(b3,3)|bit(b2,2)|bit(b1,1)|bit(b0,0))
#define bin4short(\
b15,b14,b13,b12,b11,b10,b9,b8,\
b7,b6,b5,b4,b3,b2,b1,b0) \
((bin4byte(b15,b14,b13,b12,b11,b10,b9,b8)<<8)\
|bin4byte(b7,b6,b5,b4,b3,b2,b1,b0))

以下略。
>>377はマクロで隠蔽すれば(実行効率以外は)けっこういいかも。

389 :378:02/06/17 00:53
>>387
ああそうか、スマソ。例がマズすぎたんだな。

390 :デフォルトの名無しさん:02/06/17 00:56
>>375 これ常識。
たった16種類の一対一対応。簡単に覚えられる。

391 :デフォルトの名無しさん:02/06/17 01:17
九九を覚えるよりも早く15x15を覚えました
一度身に付けるとスゲー楽だよ

392 :デフォルトの名無しさん:02/06/17 01:37
>現在はWindowsの関数電卓を使って2進数を10進数に変換して
>それをコピーアンドペーストしているのですが、
8進法や16進法ならだいぶ簡単だよ。

  0  1  2  3  4  5  6  7
0000 0001 0010 0011 0100 0101 0110 0111
  8  9  a  b  c  d  e  f
1000 1001 1010 1011 1100 1101 1110 1111

だから16進法だと4桁づつ区切って
0010 0111 1100
  2  7  c
int x = 0x27c;
ってやれば
printf("%d\n", x);
でちゃんとコンパイラが10進法に変換してくれる。



393 :デフォルトの名無しさん:02/06/17 01:53
>>392
そこで10進法に変換してるのはコンパイラではなくprintfだったりする(笑)

394 :デフォルトの名無しさん:02/06/17 02:21
>>393
gcc (x86) あたりだと、コンパイラが 10 進数に変換してアセンブリコードを
出力してたり。もっともアセンブラがバイナリに変換するから、そこはどうでも
良いんだが。

395 :デフォルトの名無しさん:02/06/17 02:59
printfに二進のイメージで書き込む機能をつけてほしかった。PHPにはあるようだけど。

396 :デフォルトの名無しさん:02/06/17 03:21
C言語,UNIX-XWindowシステムでグラフィックを描くプログラムを勉強したい
んですが、どこかわかりやすいHPありませんか?
教えてください。


397 :デフォルトの名無しさん:02/06/17 03:25
>>396
あまり環境に依存することはここでは聞かないでね。

398 :名無しさん@カラアゲうまうま:02/06/17 03:53
>>396
Unix板で聞いたほうがよろし。
ただし、「XWindowシステム」という妙な表記は避けたほうが無難。


399 :デフォルトの名無しさん:02/06/17 04:37
2進出力関数ぐらい自分で作れ矢

400 :shige:02/06/17 05:04
400got

401 :デフォルトの名無しさん:02/06/17 06:21
a,b,c;という構文があったとしたら、必ずしもa -> b -> cの順で評価されるとは限らないんですよね?

402 :デフォルトの名無しさん:02/06/17 06:25
限るよ。

403 :デフォルトの名無しさん:02/06/17 07:58
f( a, b, c ); だったら限らんが a, b, c; なら限る。

404 :デフォルトの名無しさん:02/06/17 08:00
>401
402の言うように
a, b, c;
なら評価順はa => b => cになることが保証されている。&&や||でも同様。
func(a, b, c)
はどこから評価されるかわからない。

405 :デフォルトの名無しさん:02/06/17 13:39
質問です。
SJISからEUCへ変換させるプログラムを作りたいのですが,
まったく分かりません。どなたか教えていただけないでしょうか。
お願いします。

406 :デフォルトの名無しさん:02/06/17 13:41
>>405
google 逝け。探せば文字コードの解説、ソース公開しているサンプルプログラムとも
山のように見つかる。

(文字コードの解説は、ここで書くには長すぎるし)

407 :デフォルトの名無しさん:02/06/17 13:46
>>395
vsprintfにパッチ当てようぜ。

408 :デフォルトの名無しさん:02/06/17 14:38
>>405
system関数でnkfを呼び出す。

409 :401:02/06/17 14:40
>>403-403
そうなんですか。
じゃあv=(a,b,c);という構文があったとしたら、必ずa -> b -> cの順に評価され、vにはcの結果が入ると見てよいのですね?

410 :デフォルトの名無しさん:02/06/17 14:51
>>409
v = (a, b, c); の , はカンマ演算子だけど、v = func(a, b, c); の , は
カンマ演算子でなくてただのセパレータ。

411 :デフォルトの名無しさん:02/06/17 14:55
エクセルVBAなんですけど

---

Sub Test()
Dim ff As Object

Set ff = CreateObject("Shell.Application"). _
BrowseForFolder(0, "フォルダを選択してください", 0, "c:\\")

If Not ff Is Nothing Then
MsgBox ff.Items.Item.Path
'選択したフォルダ名を表示
End If

End Sub

---

これで出てくるフォルダ選択ウィンドウで、
一番上の階層であるデスクトップを選ぶとエラーになっちゃうんですけど
エラーにならない方法ってありますかね?
ちなみに"c:\\"のパラメータを0(デスクトップ)にしても同じでした。

412 :デフォルトの名無しさん:02/06/17 14:55
>>411
>エクセルVBAなんですけど
良い根性してるな。

413 :デフォルトの名無しさん:02/06/17 14:58
>>411
もしかして絨毯爆撃ですか?

414 :デフォルトの名無しさん:02/06/17 16:13
>>409 正解!

415 :デフォルトの名無しさん:02/06/17 16:17
>>410
変数宣言・定義の","モナー

416 :デフォルトの名無しさん:02/06/17 16:29
>>415
つーことは、int a = 0, b = a; とやっても b は 0になることは
保証されない訳だよね?

417 :デフォルトの名無しさん:02/06/17 16:45
>>416
どっちにしろtpりっきーすぎ

418 :デフォルトの名無しさん:02/06/17 18:10
int a = 0, b = a;

int a = 0;
int b = a;
は等価じゃなかったでしたっけ。


419 :Dennis M.Ritchie:02/06/17 18:13
>>418
私はあなたより日本語が上手い。

420 :デフォルトの名無しさん:02/06/17 18:16
418
変な日本語すまそ。

421 :名無しさん@カラアゲうまうま:02/06/17 18:19
>>411は日本語読めないようだから、教えてやったところでどうせ無駄だろう。

422 :415:02/06/17 18:22
糞K&Rにそう書いてあったと思う。

423 :Dennis M.Ritchie:02/06/17 18:22
>>422
なんで糞だと思うんですか?

424 :デフォルトの名無しさん:02/06/17 18:23
>>423
ステレオタイプなアフォなので無視するアル。

425 :Dennis M.Ritchie:02/06/17 18:24
あなたは無視するとき、「無視するよ。」と宣言してから無視するんですか。(笑

426 :415:02/06/17 18:28
>>424
日本語話してください、お馬鹿さん。

427 :C初心者の名無しさん:02/06/17 18:28
ttp://www.basicmagazine.net/bmnet/0207/toukou/kyudo.lzh
↑このソフトがベーマガの投稿であってよくわからない部分がいくつかあったので教えてください

・printf("\x1b[2J") このようなprintfの使い方をしているのですが
  具体的にどういうことをしているのですか?
・unionは共用体を指定するやつでそのメンバは同じアドレスを参照するってのは知っているのですが
  union REGS reg;このような宣言(?)の仕方はあるのですか?
  それともプログラム中では宣言されていなくてヘッダファイルとかで
  REGSっていう共用体が定義されているのですか?


428 :デフォルトの名無しさん:02/06/17 18:31
unionは使用しているのですか?

429 :名無しさん@カラアゲうまうま:02/06/17 18:32
>>427
> ・printf("\x1b[2J") このようなprintfの使い方をしているのですが
>   具体的にどういうことをしているのですか?

(テキスト)画面のクリア。ただし、ANSI互換のターミナルじゃないとだめ。

>   それともプログラム中では宣言されていなくてヘッダファイルとかで
>   REGSっていう共用体が定義されているのですか?
DOS用の処理系だと定義されてるものが多い。

430 :デフォルトの名無しさん:02/06/17 18:34
>427
・エスケープシーケンスじゃないの?
・ヘッダファイルもプログラム

431 :1:02/06/17 18:34
C言語をマスターしたいのですが半年ぐらいでかなり上達しますか?

432 :玉三郎:02/06/17 18:35
そろそろワシの出番か・・・(´┏┓`)

433 :デフォルトの名無しさん:02/06/17 18:35

一つ目:DOSのエスケープシーケンス
二つ目:そういうのがある

434 :デフォルトの名無しさん:02/06/17 18:40
>>431
腕のいい師匠について、10年も修行すればモノになるかな。
でも、だめな奴は30年やってもダメだから、自分に向かないと
思ったら、早めに見切りをつけなよ。

435 :デフォルトの名無しさん:02/06/17 18:44
while{
while{

while{

}
}
}
}
ってなってるやつをある特定の条件になったら
初期のwhileの状態に戻したいのだが、どうやったらいいですかね?

分かりやすくいうと、ゲームオーバーしたらファミコンで言うリセット
した状態にしたいのですが。。

436 :デフォルトの名無しさん:02/06/17 18:45
>435
意味が。

437 :C初心者の名無しさん:02/06/17 18:45
レスありがとうございます エスケープシーケンス…聞いたことがあるけど
ちょっと難しい… いろいろ調べてみようと思います ありがとうございました

438 :C初心者の名無しさん:02/06/17 18:50
ttp://www.capricorn.cse.kyutech.ac.jp/~tate/tako/esc.html
これっぽいですね \x1bってのはエスケープシーケンスを使いますよって
定義みたいなものですか?

439 :デフォルトの名無しさん:02/06/17 18:50
>>436
ゲームオーバーしたらファミコンをリセットするには
どうやったらいいですかね?

440 :manko_chinko:02/06/17 18:51
>>439
リセットボタンを押せばいいのでは?

441 :名無しさん@カラアゲうまうま:02/06/17 18:51
\x1bってのはエスケープコード。
エスケープコードで始まるからエスケープシーケンスと呼ぶ。

442 :デフォルトの名無しさん:02/06/17 18:52
>>440
じゃあ通じてるじゃないですか。。

443 :デフォルトの名無しさん:02/06/17 18:53
>435
つくりかけでいいから、ソースの一部分を見せてや。

444 :manko_chinko:02/06/17 18:54
goto使えばいいじゃないですか。(プ

445 :名無しさん@カラアゲうまうま:02/06/17 18:54
たぶん、変数の初期化のところまでgotoするってことなんでわ。

446 :445:02/06/17 18:55
>>444
ケコーンしてくれ。chinkoのほうはいらんから。

447 :デフォルトの名無しさん:02/06/17 18:56
bool foo()
{
  while () {
    while() {
      if (特定の条件を満たした) return true;
    }
  }
  return false;
}

main()
{
  while (foo());
}

448 :デフォルトの名無しさん:02/06/17 18:56
>>445
あってます。変数を初期化して最初のオープニングの状態に戻したいってことです

449 :デフォルトの名無しさん:02/06/17 18:56
gotoは却下とか言うなよ

450 :デフォルトの名無しさん:02/06/17 18:59
>>447
ほぉーこういう手もあったか。

451 :デフォルトの名無しさん:02/06/17 19:00
gotoなんて使えばいいんですかね?

452 :デフォルトの名無しさん:02/06/17 19:15
>>451
label: goto label;

453 :デフォルトの名無しさん:02/06/17 19:24
>>447
これは何パターンなんですか?

454 :デフォルトの名無しさん:02/06/17 19:25
パターンじゃねーよ
多重ループ脱出のために、ループ内を関数に追い出すのは昔からある手段

455 :デフォルトの名無しさん:02/06/17 19:30
最近、プログラミングがしたくなって、本を買ってなんとなくC言語を覚えてるんですが、

役に立つかな?仕事以外で役に立ったことありますか?

今18でプ〜な俺・・・

456 :デフォルトの名無しさん:02/06/17 19:30
いい湯加減ですね。

457 :デフォルトの名無しさん:02/06/17 19:33
>>455
趣味が何かの役に立つと考えてはいけないかと。
俺は結果的に役に立ってるけど。

458 :デフォルトの名無しさん:02/06/17 19:36
>>457
言われてみれば・・・

独学じゃきついだろうが、頑張ります。

・・・どうでもいいな・・・

459 :デフォルトの名無しさん:02/06/17 20:27
おい、おまえ、どうでもよくないぞ。
役に立つとか立たないとかじゃなくて、
自分が楽しいと思えることが何よりじゃないのか。
役に立つ・立たないを基準にするようなやつは、
所詮、底が見えてると思わないか。



とマジレスしてみる。


460 :デフォルトの名無しさん:02/06/17 23:29
a=1^4+2^4…n^4の出力プログラムは

#include <stdio.h>
main()
{
int a,n;
for(i=1; i<=n; i++){
n[i]=i*i;
}

printf("a= %d\n",n[i]);
scanf("%d",&n[i]);
}

これでイイのでしょうか?
ドキュソな質問でゴメンなさい


461 :デフォルトの名無しさん:02/06/17 23:31
なんだよそれ

462 :デフォルトの名無しさん:02/06/17 23:32
>>460
int i, j = 0;
for (i = 1; i <= n; i++) j += i * i * i * i;

463 :デフォルトの名無しさん:02/06/17 23:32
やっぱ、めちゃくちゃ蚊…

464 :ドキュ460:02/06/17 23:34
>>462
アリガト

465 :デフォルトの名無しさん:02/06/18 00:25
>>459
好きこそモノの上手なれ。
だがしかしセクースは上手くならないのはナゼか。

466 :デフォルトの名無しさん:02/06/18 00:30
>465
本当は嫌いだから

467 :デフォルトの名無しさん:02/06/18 00:47
WIn32APIスレでスレ違いと言われたので・・・。

マウスの座標(x,y)=(100,200)みたいなデータがchar型の変数に
char grid[128]="100,200"
のように入っているときxとyの値を個別に取り出して別の変数に入れたい時は
どんな感じでプログラミングすればよいですか?できればint型やPOINT型で入れたいんですが。

>148 名前:デフォルトの名無しさん 投稿日:02/06/16 01:56
>>>146
>どうせstdio.hをincludeするなら、
>int x,y;
>sscanf(grid,"%d,%d",&x,&y);
>がスマートかも。
>すれ違いなのでSEGA。

stdio.hはincludeしてませんが、sscanfを使うためだけにincludeするのは
なんかアレですが仕方ないですかね?

468 :デフォルトの名無しさん:02/06/18 00:49
>>467
なんで文字列として格納するの?


469 :名無しさん@カラアゲうまうま:02/06/18 00:50
アレっつーか正しい姿だが、別にincludeしなくても使えるよ。

470 :デフォルトの名無しさん:02/06/18 00:51
パス先のファイルの
有無ってどうやって確認したらよいデスか?

471 :デフォルトの名無しさん:02/06/18 00:53
>470
試しにッ!開くッ!

472 :名無しさん@カラアゲうまうま:02/06/18 00:55
Cの規格ではないがaccess()とか。

473 :467:02/06/18 01:02
>>468
文字列として格納してるのは通信で受け取ったデータをバッファに
入れてるので。

>>469
stdio.hをincludeしないとエラーが出たんですよね。
おかしいな、もう一回確認してみます。

474 :デフォルトの名無しさん:02/06/18 01:05
>>473 stdio.hをincludeしないとエラーが出たんですよね。
おまえC++でコンパイルしてるだろ

475 :467:02/06/18 01:06
>>474
全くその通りです(汗。
拡張子をcppでやってるのでC++でコンパイルされてると思います。
ってことはC++スレ行きでしょうか・・・。

476 :デフォルトの名無しさん:02/06/18 01:14
>>475
いや、そうでなく。
言語仕様を把握してないだろってことで。

それから、どうしてもstdio.hをincludeしたくないなら、
自前でパースしろ。

477 :470:02/06/18 01:19
>>472

if(_access(ファイルパス, 00) != -1){
処理;
}

でうまくいきました。ありがとー!!( ゚ー゚)


478 :デフォルトの名無しさん:02/06/18 01:26
>>476
それ以前に、なぜ stdio.h を include したくないのかと小一時間問いつめたく
ないか? ワケあって標準 C ランタイムライブラリをリンクしたくない、とかなら
話は分かるが sscanf() は使うんだよな…(謎すぎ)

479 :◆CvWntcsM :02/06/18 01:27
>467
あれだ。カンマでcharを区切って別々のバッファに保存してatoiを使え。

480 :476:02/06/18 01:28
タシカニ

481 :デフォルトの名無しさん:02/06/18 01:28
B言語って今でもあるの?

482 :デフォルトの名無しさん:02/06/18 02:09
組み込み用にsscanfを自作したが
スタックオーバーフローとかされても困るし
第一使わねぇよなぁ と思ってcvsの肥やしになった。

7行ネタになるかと思ったけど大して難しくないしな。
7行コンバータにかけたら何もせずに10行になったし・・・

483 :デフォルトの名無しさん:02/06/18 02:12
>>482
一行の文字数に制限を付けなければ、いくらでも行数は減る(w

484 :デフォルトの名無しさん:02/06/18 02:16
>>483
余所のスレでも展開するなよ。
改行込み80*7の560文字だ。

485 :デフォルトの名無しさん:02/06/18 02:17
>483
一応7行規定では79x7文字だよ

486 :デフォルトの名無しさん:02/06/18 02:23
つーことは書くときに既に圧縮をかけないといけない訳だ罠(w

487 :デフォルトの名無しさん:02/06/18 02:32
>486
その罠の使い方にはやや違和感があるんだが、
最近でははやっているのか?

488 :デフォルトの名無しさん:02/06/18 02:39
書くときに圧縮って何だ?
普通に(勿論最小の記述で)コードを書いて、
後から行連結等をして短くするのが普通だと思うが。

1スレ目の頃の勇者でも、79*xの状態で編集はしないだろ

489 :デフォルトの名無しさん:02/06/18 02:40
>>487
俺はこういう書き方だと今まで思っていた罠(w

>>488
いや、物の例えですよ。いかに短くするか頭をひねるんだ
ろうなって。

490 :名無しさん@カラアゲうまうま:02/06/18 02:41
変数名を短くとかマクロで縮めるとか、そういうことだろ。

491 :デフォルトの名無しさん:02/06/18 02:48
それだけで済んだら苦労しない

492 :デフォルトの名無しさん:02/06/18 03:27
>486
はただたんに”〜だわな”を変換してしまっただけでは?

493 :デフォルトの名無しさん:02/06/18 03:45
>>492
正しい罠の使い方って?

494 :デフォルトの名無しさん:02/06/18 03:52
>>493
誰も知らない罠

495 :スパイスガール図:02/06/18 04:10
罠ビー

496 :罠師はマ板へ逝け:02/06/18 04:14
                              §〆(゚д゚;)
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  @

 492 :デフォルトの名無しさん :02/06/18 03:27
 >486
 はただたんに”〜だわな”を変換してしまっただけでは?

 493 :デフォルトの名無しさん :02/06/18 03:45
 >>492
 正しい罠の使い方って?

 494 :デフォルトの名無しさん :02/06/18 03:52
 >>493
 誰も知らない罠

 495 :スパイスガール図 :02/06/18 04:10
 罠ビー

497 :デフォルトの名無しさん:02/06/18 04:17
>>496
がんがれ

498 :デフォルトの名無しさん:02/06/18 04:28
↓このスレでいいのかよくわからないと言う罠。
http://ton.2ch.net/test/read.cgi/gline/1021935708/

499 :デフォルトの名無しさん:02/06/18 06:09
gccで
char s[] = "abc";
char *p;
とすると、p=sは通るのですが、p=&sとすると
warning: assignment from incompatible pointer type
となります。別に困ることは無いのですが、理由が分からないのは
気持悪いです。誰か理由の分かる方はいませんか?

500 :デフォルトの名無しさん:02/06/18 06:15
&sは配列へのポインタ。

501 :愛子:02/06/18 06:20
独学でC言語をものにするポイントってありますか?
やっぱり、数学が出来ないと駄目なんでしょうか?



502 :デフォルトの名無しさん:02/06/18 06:21
>>501


503 :愛子:02/06/18 06:51
お金もないんですが、絶望的でしょうか。

504 :デフォルトの名無しさん:02/06/18 06:53
>>503
やる気があれば誰でもそこそこは身に付く技術。

505 :デフォルトの名無しさん:02/06/18 07:00
まともな読解力さえあればK&R熟読すれば身につくよ。

506 :デフォルトの名無しさん:02/06/18 09:59
>>505
書かなきゃ覚えないと思うが.....
評論家になったらおしめぇょ!
まぁ、(評論家 == 優秀) が真という会社もあるが、クソ。


507 :デフォルトの名無しさん:02/06/18 10:45
>>501
はじめてのC 最強.

508 :デフォルトの名無しさん:02/06/18 11:35
>>499
&s は char へのポインタでなく char[3] へのポインタだから。
ポインタとしての値は同じだけど型が違う。


509 :デフォルトの名無しさん:02/06/18 12:18
プログラムを始めて2ヶ月の初心者の質問です。よろしくお願いします。
C++Builder6 で、

typedef struct {
WORD a;
WORD b;
WORD c;
DWORD d;
DWORD e;
}TEST;

と構造体を定義して

sizeof(TEST);

とすると、サイズが16byteになってしまいます。
メンバ変数の合計値は14byteなのに、何故なんでしょうか?
色々と試してみたんですが、4byte境界に強引に合わせられてしまっているようです。
正しく(?)14byteにするには、どの様にしたら良いのでしょうか?
お教え下さい。



510 :デフォルトの名無しさん:02/06/18 12:48
>509
typedef struct {
DWORD d;
DWORD e;
WORD a;
WORD b;
WORD c;
}TEST;


511 :デフォルトの名無しさん:02/06/18 12:51
>>509
コンパイラオプションである場合がある

512 :509:02/06/18 13:05
>>510 それでもダメでした。
>>511 ただ今、格闘中です。ありがとうございます。

513 :デフォルトの名無しさん:02/06/18 13:32
>509
2byteくらいよいのでは?

514 :デフォルトの名無しさん:02/06/18 13:47
FAQだな

515 :デフォルトの名無しさん:02/06/18 14:10
>>507
育児教育系の書棚の近くでそれ見つけて思わず買っちゃったよ。ナイスな店長さん。

516 :デフォルトの名無しさん:02/06/18 15:06
>>509
C++Builder6のデフォルトのパディング数は8だからこういうことに
なります。

プロジェクト→オプション→コンパイラ(詳細)で、データの配置境界
が8になっていると思います。

これを1や2に変えれば、14バイトになると思いますが、そうすると
VCLとの互換性が取れなくなりますので、そのままにしておいて
下さい。

517 :デフォルトの名無しさん:02/06/18 15:45
>>509
#pragma pack(1)

元に戻すなら
#pragma pack(push, 1)
typedef struct {
 :
}TEST;
#pragma pack(pop)

518 :shige:02/06/18 16:44
自分でPythonのstrut_pack()/struct_unpack()みたいなのを作ったほうがいいよ。


519 :名無しさん@カラアゲうまうま:02/06/18 17:10
>>509
つーか、なぜ14バイトであることに拘ってる?

520 :509:02/06/18 19:36
>>510-511 & 513 & 516-518
うおっ!色々ありがとうございます。すごい沢山のアドバイスを頂くことができ、ビクーリしました。
大変恐縮です。。。

>>519
グレースケールとかモザイクとか合成ができる、ちょっとしたグラフィックソフトを
本を見ながら作っているんですが、最初はとにかくエフェクトの効果を楽しみたいと思い、
手抜きして、Graphics::TBitmapを使って書き、ひと通り楽しんだ後に
ファイルの読み書き→fopen、描画→StretchDIBitsにしたんですが

fread(&bmfh, sizeof(BITMAPFILEHEADER), 1, fp);
fread(&bmih, sizeof(BITMAPINFOHEADER), 1, fp);

switch(bmih.biSize)
{
    case sizeof(BITMAPINFOHEADER);
      break;

    case sizeof(BITMAPCOREHEADER);
      break;

    default:
      goto err;
}

のswitch文でdefaultを通過してるので、何故?

fread(&bmfh, sizeof(BITMAPFILEHEADER), 1, fp);
ftell(fp);
fread(&bmih, sizeof(BITMAPINFOHEADER), 1, fp);

とファイルポインタの位置を確認したところ、16でした。
でもBITMAPFILEHEADERのメンバの合計は14byteじゃ…と>>509の様に自分で定義しても、
やはり16byteだったので、不思議に思いカキコさせて頂きました。
お邪魔して申し訳ありませんでした。m(_ _)m













521 :デフォルトの名無しさん:02/06/18 20:04
2進数→10進数、10進数→2進数、10進数→16進数、16進数→10進数、2進数→16進数、16進数→2進数
の変換をするプログラムを教えていただきたいのですが。
当方ゲリゲリの初心者なので、できるだけ簡単な関数でおながいします。もちろん「printfの変換文字」というのは無しで...


522 :デフォルトの名無しさん:02/06/18 20:05
2進数の何を10進数にするんだ?
文字列?

523 :デフォルトの名無しさん:02/06/18 20:15
>>521
intは10進数しか保持しない とか思ってるんじゃない?
どっちにせよこのくらい小学生だって自分で解決するけどね。

524 :デフォルトの名無しさん:02/06/18 20:23
>>523
むしろ普通2進数でしか保持しないよね(笑)

525 :デフォルトの名無しさん:02/06/18 20:33
n進数の文字列からCPU内部表現には、strtol使う。
CPU内部表現から10,16進数文字列は、sprintfが便利。
2進数文字列へは、自分

526 :デフォルトの名無しさん:02/06/18 20:33
>>521
Windows付属の電卓

527 :デフォルトの名無しさん:02/06/18 20:33
で出力関数を書くべし。

528 :デフォルトの名無しさん:02/06/18 20:47
>>521
まず読み込み。(^はべき)
納i=0,n-1]a_ib^iを上位の桁から解析するなら
上位の桁から数値が入っている配列をs[i]とすれば
sum *= b ; sum += s[i] ;をiについて繰り返せばよいだろう。
書き出しは下位からが簡単だが上位から行うなら桁数の
最大をnとすれば順にs[i] = sum / b^(n-i+1) ; sum -= s[i] * b^(n-i+1) ;
をiについて繰り返せばよい。

529 :デフォルトの名無しさん:02/06/18 22:52
>>521
8進数も仲間に入れてやれよ

530 :デフォルトの名無しさん:02/06/18 23:00
ついでにBASE64も仲間に入れてやれよ……

531 :デフォルトの名無しさん:02/06/19 00:37
>208に、
double **d;

d = (double **)malloc(sizeof(double *) * 100);
for (i = 0; i < 100; i++)
d[i] = (double *)malloc(sizeof(double) * 100);

の書き込みがありますが、このメモリを全て解放するときは
free(d);で良いのですか?

532 :デフォルトの名無しさん:02/06/19 00:46
>>531
だめ。iそれぞれにfree(d[i])のあとfree(d)

533 :デフォルトの名無しさん:02/06/19 03:36
>>531
それをやりたいならこうする

/* x[n][m]を確保 */
int i ;
double **x ;
int n=100,m=100 ;

x = (double**)malloc(n*sizeof(double*)+n*m*sizeof(double)) ;
x[0] = (double*)x+n ;
for(i=1;i<m;i++) x[i] = x[i-1]+m ;

534 :533:02/06/19 03:43
間違えた
x = (double**)malloc(n*sizeof(double*)+n*m*sizeof(double)) ;
x[0] = (double*)(x+n) ;
for(i=1;i<m;i++) x[i] = x[i-1]+m ;


535 :デフォルトの名無しさん:02/06/19 03:44
>>533
これだと開放はfree(x); だけでいいんですか?

536 :533:02/06/19 03:50
そういうこと。また間違えてた。止めたほうがいいかも
x = (double**)malloc(n*sizeof(double*)+n*m*sizeof(double)) ;
x[0] = (double*)(x+n) ;
for(i=1;i<n;i++) x[i] = x[i-1]+m ;

537 :デフォルトの名無しさん:02/06/19 03:52
>>536
やろうとされている事はわかります。double *[]とdouble[]を同時に確保
して、アドレス計算によりdouble *[]を作成するのですね。

538 :デフォルトの名無しさん:02/06/19 04:50
構造体の中のメンバとして配列を動的に確保するときは
先に構造体の中にポインタ変数を用意して
mallocで確保したメモリのアドレスをそのポインタに割り当てる
みたいな方法でできます?

539 :デフォルトの名無しさん:02/06/19 05:03
>>538
struct ss {
double *d;
};

で、

ss.d = (double *)malloc(sizeof(double) * 100);

みたい奴か?普通にできるよ。

540 :538:02/06/19 05:12
>>539
そうですか、良かったです^^;。
この方法で良いのかあまり自信が無かったので聞いてみました。

541 :デフォルトの名無しさん:02/06/19 06:26
>>540
ss.d = malloc(sizeof *ss.d * 100);
とやるのも一法。

542 :デフォルトの名無しさん:02/06/19 06:55
struct ss{
double d[1];
};
pss = (ss*)malloc(sizeof(ss) + sizeof( double ) * (100-1) );

543 :デフォルトの名無しさん:02/06/19 07:04
>>541
sizeof ss.d * 100でしょ。

544 :543:02/06/19 07:06
と思ったが、*ss.dは間接参照か。

545 :デフォルトの名無しさん:02/06/19 17:33
ハノイの塔を、再起呼び出しでやるんですけどわかりません。
プログラムはあるので細かく解説お願いします。

void hanoi(int , char, char, char);
と関数を定義して
int n; scanf("%d %d",&a,&b);
hanoi(n,'a','b','c');

void hanoi(int n, char a, char b, char c)
{
if(n>0){ このif文の中身がどう動くのか教えてください
hanoi(n-1,a,c,b);
printf("%d番の円盤を %c から %cに移動\n",n,a,b);
hanoi(n-1,c,b,a);
}
}


546 :デフォルトの名無しさん:02/06/19 17:33
明日の昼までに提出しないといけない課題が分かりません。
どなたか助けてください。
課題は
10次元のベクトルa,bを配列に作成してa,bの内積を求めなさい。

配列を使わなくていいなら出来そうなんですけど、
配列を使うとなるといまいち分かりません。

547 :g:02/06/19 17:34

-------風俗の総合商社・MTTどこでも-------

〇デリバリーヘルス〇デートクラブ〇女性専用ホストクラブ〇
〇ハードSM奴隷クラブ〇レズビアン倶楽部〇ホモ・オカマ倶楽部
〇変態痴女と遊ぶ会〇痴漢・覗き趣味の会〇変態同好会・各種!
●楽しく遊べます! 090-8002-8356番
-----------美男・美女会員など多数在籍中-----------
  http://www.mttdocomo.jp/
-----女性アルバイト随時募集・高収入(日払い)月100万円可能-----
-----レズビアン・スタッフ●ホモスタッフ●女性専用ホストスタッフ同募-----
http://www.mttdocomo.jp/
------------------------------------------------


548 :デフォルトの名無しさん:02/06/19 17:34
>>545
デバッガでステップ実行してみれや。

549 :デフォルトの名無しさん:02/06/19 17:42
>>546

まず内積の計算の仕方を教えなさい。

550 :デフォルトの名無しさん:02/06/19 17:46
>>546
あらあら、宿題なのね?
http://pc.2ch.net/test/read.cgi/tech/1020785918/l50

551 :U-名無しさん:02/06/19 18:42
>>546
たぶん、やっぱり、
「10次元」「ベクトル」「内積」っていうタームの定義が
わからんちんなのだろう。

てか、めちゃめちゃ簡単なんですけど。

(´-`).。oO( 入力がリストだから配列は不要なんでぇ )
とか、そういう状況でもなさそう。

552 :マジで:02/06/19 18:52
>>546
俺の辞書に内積と言う言葉はない(IMEにも

553 :デフォルトの名無しさん:02/06/19 19:00
便乗

|a|[b]cosθとかほざいたら叩かれますよね?俺。

554 :デフォルトの名無しさん:02/06/19 19:13
>>553
当然

555 :デフォルトの名無しさん:02/06/19 20:14
>>553
それでも良いが、ふつーは

a = (a1, a2, ..., an)
b = (b1, b2, ..., bn)

として
        ___
a・b = Σai * bi

で定義するだろう。(そもそも空間が Kn じゃないと話が別だが)

556 :デフォルトの名無しさん:02/06/19 20:18
>>555
そうそう、この式がなぜか出てこなかった・・・。

557 :デフォルトの名無しさん:02/06/19 21:38
error C2146: 構文エラー : ';' が、識別子 'Abc' の前に必要です。
fatal error C1004: 予期せぬ EOF が検出されました。
VC6.0++です。
extern 構造体 Abc;
付近でエラーが出ます。
ちゃんと型をインクルードしてるんですが

558 :デフォルトの名無しさん:02/06/19 21:38
>>557
#include <stdafx.h>

559 :デフォルトの名無しさん:02/06/19 21:40
struct ABC { }; <-セミコロン

560 :デフォルトの名無しさん:02/06/19 21:42
CNNが伊×韓戦の審判判定についてアンケート。
で、チョソの掲示板による組織投票でえらいことに!

「レフェリーを非難しますか?」(右下の方)YESに投票を!!
今のところ95:5ぐらいで負けてます

[緊急]CNNで韓国:イタリア審判判定投票!!

http://asia.cnn.com/2002/WORLD/europe/06/18/italy.korea.reaction/index.html

コピペ推奨!

2ちゃんねらーの力を見せてやれ!!!



561 :デフォルトの名無しさん:02/06/19 21:44
> 2ちゃんねらーの力を見せてやれ!!!

最低・・・

562 :デフォルトの名無しさん:02/06/19 21:45
群れていきがる珍走団と変わらんな。

563 : :02/06/19 21:49
#include <stdafx.h>
インクルードファイルを開けません・・・
昨日まではうまくいっていたんだけどなぁ

564 :デフォルトの名無しさん:02/06/19 21:51
さむいな

565 :デフォルトの名無しさん:02/06/19 21:57
インクルードファイルの優先順位?どうやってかえるの?
ttp://www.netsphere.jp/osaru/lv2/error.htm

566 :デフォルトの名無しさん:02/06/19 21:59
>>565
そのページは間違ってる。忘れろ・・・忘れるんだ・・・

567 :デフォルトの名無しさん:02/06/19 22:05
構造体の宣言をヘッダーファイルで宣言しないで,
ファイルないで宣言したらうまくいった・・・。

568 :デフォルトの名無しさん:02/06/19 23:35
>>561-562
この辺りにまともな2ちゃんねらが・・。

569 :デフォルトの名無しさん:02/06/20 00:09
http://www.netsphere.jp/osaru/lv2/error.htm

570 :デフォルトの名無しさん:02/06/20 01:48
関数ポインタの決定的証拠をお見せします。
http://corn.2ch.net/test/read.cgi/news/1024502993/
           

571 :デフォルトの名無しさん:02/06/20 02:07
char *(*ret_dummy())[3]
{
static char *x_men[3] = {"氏ねよ(≧▽≦)","(´-`)bナイス","<丶`∀´>ニダ"};
return &x_men;
}

char *(*(*ret())())[3] {return &::ret_dummy;}

int main(int ,char **)
{
char *(*(*addr)())[3] = ::ret();
cout<<(*(*addr)())[rand()%3]<<endl;
return 0;
}

572 :デフォルトの名無しさん:02/06/20 02:40
glColor3f(1.0,0.0,0.0);
glVertex3f(-1.5,-1.5,0.0);

glColor3f(0.0,1.0,0.0);
glVertex3f(1.5,-1.5,0.0);

glColor3f(0.0,0.0,1.0);
glVertex3f(0.75,0.75,0.0);

こうやって三角形を頂点で与えてるんだけどこれを
三角錐にするにはどうしたらいいんですか?

573 :デフォルトの名無しさん:02/06/20 02:43
こー、ぐるーっとまわせば、

574 :デフォルトの名無しさん:02/06/20 02:54
グーグルさっきからしてるんだけど、サパーリなものなんで
聞いてみたんですが。。

575 :デフォルトの名無しさん:02/06/20 03:00
>>573-574
ワラタ

576 :デフォルトの名無しさん:02/06/20 03:10
正直本気でグーグルと思いますた。。
逝ってきます(´・ω・`)

577 :572:02/06/20 03:51
投影変換を行わないとダメぽ?
Z軸に頂点をもう一個足して、あとは投影処理で△にしたら良いのですか?
サパーリわからん


578 :デフォルトの名無しさん:02/06/20 04:04
>>572
ちゃんと3次元で処理しろよ、先ずはワイヤフレームからだな(藁
OpenGLのサンプル(MSDN付属)にあったと思うが...

579 :デフォルトの名無しさん:02/06/20 09:32
配列で得たランダム値(100個と仮定)の中に、ある数字が含まれるか
どうかを判別するにはどう書いたらいいですか?

580 :デフォルトの名無しさん:02/06/20 09:36
>>579
ループで配列を舐めて、ifで判定すればいいじゃん。
そうじゃなくて?

581 :デフォルトの名無しさん:02/06/20 12:04
DOS/V + PentiumでDOSベースのゲームを作り
たいのですが、キーボード割込みハンドラの登録
はどのシステムコールを使えばいいのでしょうか?
VC++のWin32 Console Applicationでプロジェクト
つくってコンパイルしてます。

582 :名無しさん@カラアゲうまうま:02/06/20 12:10
Win32 Console ApplicationってDOS/Vで動くん?

583 :デフォルトの名無しさん:02/06/20 12:11
キーボードインタラプトをフックしたい?


584 :デフォルトの名無しさん:02/06/20 12:13
フックって殴ることですよね?

585 :デフォルトの名無しさん:02/06/20 12:13
引っ掛けるじゃない?

586 :デフォルトの名無しさん:02/06/20 12:16
引っ掛けて殴るんですか?

587 :デフォルトの名無しさん:02/06/20 12:24
>>583
矢印キーが押されたことを割込みハンドラで
処理したい。
kbhit()で拾っていたのではレスポンスが
悪すぎたので。

588 :デフォルトの名無しさん:02/06/20 12:24
>>586
ワラタ

589 :デフォルトの名無しさん:02/06/20 12:26
>>587
割り込みじゃなくてイベントハンドラじゃないの?


590 :デフォルトの名無しさん:02/06/20 12:29
よろしくお願いいたします。

591 :デフォルトの名無しさん:02/06/20 12:29
DirectInputじゃ駄目?

592 :デフォルトの名無しさん:02/06/20 12:39
>>587
割り込みベクタを書き換えるんだろうけど
手もとにAT互換機の資料が無い

593 :デフォルトの名無しさん:02/06/20 12:43
98とはやっぱ違うんかな

594 :デフォルトの名無しさん:02/06/20 12:48
お返事ありがとうございます

595 :デフォルトの名無しさん:02/06/20 13:07
なにが。

596 :初心者:02/06/20 14:42
得点を次々入力して、もし70以上なら合格、70未満なら不合格とし、
合格人数、不合格人数、受験者合計、最高得点、最低得点、平均点を出力する
プログラムを設計・開発せよ。なお、999が入力されたらループを抜け、
999はカウントしない。

これの最高・最低得点ができません。
お願いします。

597 :みんみ ◆Hk7UCbL. :02/06/20 14:43
UNIXはCで作られているそうですが、
WindowsもCなんですか?

598 :デフォルトの名無しさん:02/06/20 14:53
>>596
あらあら、宿題なのね?
http://pc.2ch.net/test/read.cgi/tech/1020785918/l50

599 :初心者:02/06/20 14:59
はい、宿題です。
よろしくお願いします。

600 :デフォルトの名無しさん:02/06/20 15:00
600


601 :という噂があるんだけどね:02/06/20 15:17
>>597
WindowsはPascalです。

602 :デフォルトの名無しさん:02/06/20 15:19
(´・∀・`)へー

603 :みんみ ◆Hk7UCbL. :02/06/20 15:49
>>601
噂ですか。ゲイツさんなら知ってるんですかね。



604 :デフォルトの名無しさん:02/06/20 16:23
>>587 (>>592)
本家(本当の本家はIBMか?)に仕様書がある。要レジストだが無料。
http://www.oadg.or.jp/


605 :デフォルトの名無しさん:02/06/20 16:44
577が作ってるのはDOSのアプリケーションと違うやん・・

606 :名無しさん@カラアゲうまうま:02/06/20 16:54
577が作ってるのは三角錐だからな。

607 :デフォルトの名無しさん:02/06/20 17:03
>>597
WindowsはC++です。

608 :デフォルトの名無しさん:02/06/20 17:04
>>607
NTに限ってはな。

609 :デフォルトの名無しさん:02/06/20 17:11
return で何を返すのですか?

610 :デフォルトの名無しさん:02/06/20 17:13
思い出

611 :デフォルトの名無しさん:02/06/20 17:17
重いではどうやって返すの?

612 :デフォルトの名無しさん:02/06/20 17:29
>>610
ワラタヨ

613 :デフォルトの名無しさん:02/06/20 17:33
笑えねぇよ

614 :あん:02/06/20 17:38
IPから住所を調べられるサイトを教えてください(ホスト検索)

615 :デフォルトの名無しさん:02/06/20 17:41
>>614
http://www.google.co.jp/search?q=%8E%81%82%CB&hl=ja&lr=

616 :デフォルトの名無しさん:02/06/20 17:43
>>614
http://kan-chan.stbbs.net/goods/shine.html

617 :デフォルトの名無しさん:02/06/20 17:55
>>597
Windowsはベーシックとちごたんか?

618 :Pennis M.Ritchie:02/06/20 17:56
I C.

619 :デフォルトの名無しさん:02/06/20 18:03
Windowsを動かすにはVBのランタイムが必要らしいぞ

620 :デフォルトの名無しさん:02/06/20 18:14
漏れはFORTRANって聞いたんだが。

621 :デフォルトの名無しさん:02/06/20 18:45
DOSXNTでWin32コンソールアプリうごかなかったっけ?


622 :デフォルトの名無しさん:02/06/20 20:35
C入門用の良い本はありませんか?
教えてください。

623 :デフォルトの名無しさん:02/06/20 20:36
K&R

624 :デフォルトの名無しさん:02/06/20 20:42
C++ sard edition

625 :デフォルトの名無しさん:02/06/20 20:44
はじC

626 :デフォルトの名無しさん:02/06/20 20:50
>622
君なら河西本だな。

627 :デフォルトの名無しさん:02/06/20 21:03
アヒル本がいいよ

628 :デフォルトの名無しさん:02/06/20 21:14
void main(){
int i;
int num[5]={10,3,7,18,5};

for(int i=0;i<5;i++){
 printf("num[%d]=%d\n",i,num[i]);
}

for(int i=0;i<5;i++){
 printf("num[%d]=%d\n",i,num[i]);
}
}
なぜエラー?
int iは,別々じゃないの?
for文抜けたら,なくなるんじゃないの?

629 :デフォルトの名無しさん:02/06/20 21:14
#define for if(0); else for

630 :デフォルトの名無しさん:02/06/20 21:20

 お勉強レベルな私ですが。
 WAVE関係を勉強しようとサンプル組もうとしたのですが、
まずは読み込み関係を省略しようとターゲットを直接
埋め込もうとしました。

unsigned char test[] = {
#include "test.wav"
};

 ・・・なーんて事したら、
test.wav:1: stray '\' in program
scream.wav:1: syntax error before `{'

みたいなエラーが、沢山出てくれました。
バイナリなんだから、当然ですが。

 で質問ですが、バイナリのソース埋め込みってどうやるんですか?
 アセンブラなら、.include で十分だったはずなのに。

 環境は関係ないと思いますが、MinGWです。


631 :デフォルトの名無しさん:02/06/20 21:22
>>628
VC++6だろ。古いC++の文法なので、エラーになります。
VC++.NETを買いなせえ。

632 :デフォルトの名無しさん:02/06/20 21:29
VC++6では、だめでVC++.NETではOK?

633 :デフォルトの名無しさん:02/06/20 21:35
そうでもない

634 :デフォルトの名無しさん:02/06/20 21:40
>630
WAVE関係とやらを勉強する前に(以下略)


635 :632:02/06/20 21:40
ビルGに問い合わせてみます

636 :デフォルトの名無しさん:02/06/20 21:42
>>630
・・・・・・

637 :j:02/06/20 21:45
>630
うまい!

638 :デフォルトの名無しさん:02/06/20 21:51
すいません。教えてください。
コンソール上に出力するときに
三桁毎にカンマなりドットなりを入れたいんですが、
標準でそういう、書式で出力できますか?
やっぱり、関数作らないとダメですか?

639 :デフォルトの名無しさん:02/06/20 21:56
ちんぷんかんぷん

640 :デフォルトの名無しさん:02/06/20 21:57
ちんちんかもかも

641 :デフォルトの名無しさん:02/06/20 21:58
100.100.100ってことか
関数作ったほうがいいかも

642 :デフォルトの名無しさん:02/06/20 22:02
>>638
標準にはないから、sprintfでchar[]化してから","を入れなされ。

643 :デフォルトの名無しさん:02/06/20 22:38
y = a ? b ? c ? A : B : C : D; を

if の形で書き直すとどうなるんですか?

644 :デフォルトの名無しさん:02/06/20 22:44
>>643
if (!a) y = D;
else if (!b) y = C;
else if (!c) y = B;
else y = A;

645 :デフォルトの名無しさん:02/06/20 22:50
>>644
分かりましたサンクス

646 :638:02/06/20 23:08
あ〜
やっぱ標準ないですよね〜
お世話になってる先輩から
標準であるよ〜って言われたんで
新たに関数領域を作っていたんですが
注意されてから必死こいて探したんですけど
なくて(笑
とりあえず、何もなかったことにします(笑
ありがとうございました。。。

647 :デフォルトの名無しさん:02/06/20 23:34
>>630
(゚д゚)ぽかーん

648 :デフォルトの名無しさん:02/06/20 23:53
>>646
あんなんロケール依存だから標準で入れるのは難しいだろう。

649 :デフォルトの名無しさん:02/06/21 00:16
>>648

locale で、

char *decimal_point
 金額以外の数量の小数点文字。
char *thousands_sep
 金額以外の数量の、小数点の左にある数字のグループを分離するのに
使う文字。
char *grouping
 金額以外の数量の各グループの桁数。
char *mon_decimal_point
 金額書式の小数点文字。
char *mon_thousands_sep
 金額書式の、小数部の左にある数字のグループの分離記号。
char *mon_grouping
 金額書式の各グループの桁数。

とか定義されてるから、難しくはないと思う。需要が少ないだけと思う。

650 :デフォルトの名無しさん:02/06/21 00:22
おお、locale.h なんてあったのか。
使ったことなかった…

651 :デフォルトの名無しさん:02/06/21 00:40
(´・∀・`)へー
さすがローカル。

652 :あ、釣られちゃった:02/06/21 00:54
>>651
誰も釣られていないようだね。かわいそうに。

653 :デフォルトの名無しさん:02/06/21 01:02
>>630は神ですか?

654 :shige:02/06/21 01:10
XBMまんせー

655 :デフォルトの名無しさん:02/06/21 01:57
すみなせん、今まで整数から文字に変換するときはitoaを使っていたのですが、sprintfのほうがいいのかお前ら。

656 :デフォルトの名無しさん:02/06/21 02:01
>>655
好きにしろゴミ人間。

657 :デフォルトの名無しさん:02/06/21 02:03
ゴミだと尾おおおおおおおおおおおおおおおおおおおおおお奥羽うううううううううううううううううううううう嗚呼あああああああああああああああああああああああああああああああああああああああああああああああああああああああ
ああああああああおああああああrrrっらロおおおおおおおおおおおおkじゃ尾krじゃお子rじゃぎじゃえrがぇrgjrsじjrs

658 :デフォルトの名無しさん:02/06/21 02:05
おしい!もう少しでじゃい子!

659 :デフォルトの名無しさん:02/06/21 02:06
>>655
itoa()は標準の関数じゃないから移植性がないぞな。便利なんだけどね。

660 :デフォルトの名無しさん:02/06/21 02:10
>>630
僕が使ったことのあるアセンブラは、バイナリファイルをincludeなんてできなかった気がするんですが、
Cコンパイラ付属のリンカで扱える形式ではき出せるなら、名前の付け方に注意すればアセンブラとCのリンクはできるはずです。

実は僕も同じような状況になったことがあるんですが、そのときは、
バイナリファイルをCの形式にコンバートするツールを作りました。

ファイル1バイトずつを読んで、fprintfで
char testwav[]="\x00x\00\x00\x00\x00\x00

と書き出すだけという簡単なものです。
makefileにも書いておけばそんなに面倒ではありません。

>>655
sprintfはあまり安全じゃない面があります。
僕はitoaは使ったことないけど、snprintfを使います。

661 :デフォルトの名無しさん:02/06/21 02:21
>659
なるほど〜。

662 :デフォルトの名無しさん:02/06/21 02:24
すみなせん。makefileってなんですか?

663 :デフォルトの名無しさん:02/06/21 03:27
>>662
人生の敗北者が使うファイルです

664 :デフォルトの名無しさん:02/06/21 03:31
それを触れたら絶対時間で生きなければいけないと言う罠。

665 :デフォルトの名無しさん:02/06/21 03:33
make・・・・説明しだしたら小一時間ではとても足りそうにない。汗

666 :デフォルトの名無しさん:02/06/21 03:41
automake/autoconfのいい解説サイトを教えてください

667 :デフォルトの名無しさん:02/06/21 05:47
http://shimaki.hoops.ne.jp/autoconf/book1.html

668 :デフォルトの名無しさん:02/06/21 05:50
>>396
UNIXプログラミング質問すれ
http://pc.2ch.net/test/read.cgi/tech/992057422/l50

669 :630:02/06/21 06:12
 なにやら、ネタだか真性馬鹿と思われちゃったみたいですね。
 愚か者なのは認めますが(^^;

>>660
 なるほど、テキスト化ですか。
 しかし手間を考えると、素直に自分で開いて確保して読み込んだ方が早いかなあ・・・。
 でも、テクニックとして面白い事を覚えた気がします。
 道を示された気がします、ありがとうございました!

 新たな環境で目的を急ぎすぎました。 あはは。


670 :デフォルトの名無しさん:02/06/21 06:27
>>669
この文章読んでも、「ネタだか真性馬鹿」としか思えない。

671 :デフォルトの名無しさん:02/06/21 07:48
unsigned char test[] = {
#include "test.wav"
};

凄い発想だ。
>>669で言い訳しているようだが、何の弁解にもなっとらん

672 :デフォルトの名無しさん:02/06/21 07:59
>>671
でもこれくらい柔軟な発想が出来た方が(略

>>669
面倒かなあ・・・・ファイルサイズ分freadするだけだろ?

673 :デフォルトの名無しさん:02/06/21 09:37
>>630
エラー出なくなる方法ハケーンしたよ!

unsigned char test[]={
// #include "test.wav"
}


674 :デフォルトの名無しさん:02/06/21 10:00
>>673
つまらんこといちいち書くな。だいいちエラーなくならないし。

675 :デフォルトの名無しさん:02/06/21 10:49
ワラタ。

676 :デフォルトの名無しさん:02/06/21 11:31
>>669
test.wav
01 02 03
なバイナリファイルを
test_wav.c
unsigned char test_wav[] = {
0x01, 0x02, 0x03
}
に変換するツールの作成なんて入門レベルだぞ。
5分で書け。

それからこの方法はそれほど特殊というわけではないよ。
もちろんメリット・デメリットをよく理解しておく必要はあるけど。

677 :デフォルトの名無しさん:02/06/21 12:17
いい加減、行末にセミコロンを付けろって。

678 :_:02/06/21 13:02
struct Stack{
int a;
char b;
int c;
};

void func(){
int a;
char b;
int c;

other_func((Stack*)&a);
}

void other_func(Stack* stack) {
printf("%d %d %d\n", stack->a, stack->b, stack->c);
}

ローカル変数を別の関数に渡したいです。
これで家では一応動いたのですがマシンによっては
int a; char b; int c;のアドレス配置って変わってしまいますか?


679 :デフォルトの名無しさん:02/06/21 13:04
>678
危険なかほりがぷんぷんする

680 :デフォルトの名無しさん:02/06/21 13:05
つぅかそれのどこがスタックだと小一時間・・・

681 :デフォルトの名無しさん:02/06/21 13:11
おとなしくローカル変数でstruct Stack作ればいいじゃん。
それを渡せば吉

682 :デフォルトの名無しさん:02/06/21 13:11
>>678
Cで10年プログラムをしてますが、そういう組み方を
発想したことがありませんでした。

683 :デフォルトの名無しさん:02/06/21 13:12
>680
あるいみスタック。

684 :デフォルトの名無しさん:02/06/21 13:15
>>681
禿同

685 :デフォルトの名無しさん:02/06/21 13:16
>>678
論外

っつか、なんで素直に

struct foo {
  int a;
  char b;
  int b;
};

void func () {
 struct foo foo;
  other_func(&foo);
}

としないのかと小一時間…。

686 :デフォルトの名無しさん:02/06/21 13:17
けど、こいつは大物になると思うぞ。
この人並み外れた発想力と工夫。
こいつに論理とアーキテクチャをたたき込んだら驚異になる存在だ。

バカにするのではなく認める方向で行こう。

687 :デフォルトの名無しさん:02/06/21 13:18
>>685
さらに禿同

688 :デフォルトの名無しさん:02/06/21 13:20
>>686
う〜ん。なんとか禿同。
変に思わないでね。ホントに禿同なんだよなぁ。

689 :デフォルトの名無しさん:02/06/21 13:24
俺だったらこう定義するね。
struct foo {
  int a;
  int b;
  char c;
};

つーか>>685はコンパイルエラー出るね。
ごめんね、つついて。

690 :_:02/06/21 13:28
>>685
void func()内では普通にa,b,cとアクセスしたいんです。
foo.a, foo.b, foo.cってするより。
これが一番速そうなので。。。

691 :デフォルトの名無しさん:02/06/21 13:28
速さは変わらんでしょ?

692 :デフォルトの名無しさん:02/06/21 13:32
>>678
> int a; char b; int c;のアドレス配置って変わってしまいますか?
それどころか、最適化によっては b とか c がレジスタ変数になるかも知れん
ぞ。

>>686
> けど、こいつは大物になると思うぞ。
んなわけねーだろ。

693 :デフォルトの名無しさん:02/06/21 13:32
>>690
絶対止めろ。死んでもやめろ。

694 :デフォルトの名無しさん:02/06/21 13:34
ホームラン級のバカだな

695 :デフォルトの名無しさん:02/06/21 13:35
自チームのゴールにドライブシュート級のバカだな

696 :デフォルトの名無しさん:02/06/21 13:39
>>690
まずは、普通に組め。どうしても速くしたい所があったら、ここで聞け。
そうすれば、みんなハッピーになれる。
あまりにも、バカバカしい書き込みはスレが荒れるから止めてくれ。

697 :デフォルトの名無しさん:02/06/21 13:40
685の作戦>>>>>>>>>>>>>>>>>>>>>>>>>>>グローバル変数>>>∽>>>678の作戦

698 :_:02/06/21 13:41
>>692
なるほど。。。最適化されないようにvolatile?とか付けても駄目ですか?

699 :デフォルトの名無しさん:02/06/21 13:42
>698
速度を求めてるのに、最適化を防いでどうするのよ?

700 :デフォルトの名無しさん:02/06/21 13:45
汲んでみたところで、コンパイルスイッチでアセンブラコード
に落として、ステート数などを自分で計算するのもよろし。

701 :デフォルトの名無しさん:02/06/21 13:45
>>698
最適化されないようにしたら遅くなるじゃん。
つーか、「速くなりそう」とか勘でやるんじゃない。ちゃんと計測しろ。

702 :デフォルトの名無しさん:02/06/21 13:50
>>698
無駄な抵抗な罠。

703 :デフォルトの名無しさん:02/06/21 13:51
inline

704 :_:02/06/21 13:51
>>699, 701, 702
ほんとだw;。。。やっぱり駄目か。。。
素直にstruct Stack{ int* a; char* b; int* c };としてother_func()
前に代入して見ます。
(他の関数にもローカル変数を渡す可能性があるので)
さすがム版煽りが激しいですね>_< 逝ってきます。。。

705 :デフォルトの名無しさん:02/06/21 13:52
>>704
全然素直じゃない罠。

706 :700:02/06/21 13:53
>>703
それで行こう!
ま、プログラム容量は増えるけど。

707 :デフォルトの名無しさん:02/06/21 13:53
>704
まだ何か考え違いをしている

708 :700:02/06/21 13:55
あれ?ここってsage進行?


709 :デフォルトの名無しさん:02/06/21 14:00
>>704
素直に>>685にしとけって。その方法は遅くなるだけだぞ。

710 :696:02/06/21 14:02
>>704
煽り ? どこがよ ? >>696 にも書いたけど、お前の書き込みの方が有害だぞ。

>>708
じゃないけど、くだらん話題には sage が当然でしょ。

711 :デフォルトの名無しさん:02/06/21 14:04
>>710
わかった。お前の性格が常に煽りモードなのか。
人間関係築け。こんなところで遊んでないで。

712 :696:02/06/21 14:10
>>709
つーか、こいつなら実体の確保を忘れて、「プログラムがあぼーん
されますぅ...」とか言ってきそう。

713 :700:02/06/21 14:15
もうやめようYO!
どうせ>>704はいないんだしさ。

714 :デフォルトの名無しさん:02/06/21 14:18
配列を昇順に並べ替え、並べ替えた結果を画面に出力するプログラムを作成せよ。
a[0]='~';
a[1]='M';
a[2]='g';
a[3]='!';
a[4]='-';
a[5]='p';
a[6]='v';
a[7]='4';
a[8]='l';
a[9]='R';
a[10]='@';
a[11]='}';
a[12]='-';
a[13]='\';
a[14]='/';
a[15]='X';
a[16]='h';
a[17]=':';
a[18]='r';
a[19]='?';
a[20]='c';
a[21]='<';
a[22]=']';

715 :デフォルトの名無しさん:02/06/21 14:20
> 配列を昇順に並べ替え、並べ替えた結果を画面に出力するプログラムを作成せよ。

なに命令してんだよ。
土下座して教えを乞う立場だろうが。
バカ学生は死んでろ。


716 :デフォルトの名無しさん:02/06/21 14:23
つーか、縦にずらずら書かんでほしいよ。

717 :デフォルトの名無しさん:02/06/21 14:26
system("cat >>714 | sort > result.txt");

718 :696:02/06/21 14:29
>>711
オマエモナー

719 :デフォルトの名無しさん:02/06/21 14:31
>>714
配列を昇順に並び替える ? できないよ、そんなこと。配列の中身じゃ
ねーのか ? とりあえず、qsort() あたりを調べたらどうよ。

720 :700:02/06/21 14:37
宿題ならライブラリとか使わないで、自力関数作りなさい。
forとifで!


721 :デフォルトの名無しさん:02/06/21 14:39
もしもー

722 :デフォルトの名無しさん:02/06/21 14:41
ピアノがー

723 :デフォルトの名無しさん:02/06/21 14:44
弾けたならー

724 :デフォルトの名無しさん:02/06/21 14:45
>>714
つーか、「昇順」って何を基準に「昇順」なんだ?
誰だ、そんな超下流でタコな問題を出した禿げは?

725 :デフォルトの名無しさん:02/06/21 14:45
>>717
厨房は大概ゲイツな罠。


726 :デフォルトの名無しさん:02/06/21 14:45
どうせjis順だろ

727 :デフォルトの名無しさん:02/06/21 14:46
なんだか荒れてきたな。
荒れるのも分かる気がするけど。

728 :デフォルトの名無しさん:02/06/21 14:55
int** a[10][10][10][10][10];

何バイト確保されるか答えなさい。

729 :デフォルトの名無しさん:02/06/21 14:56
sizeof(a)バイト

730 :デフォルトの名無しさん:02/06/21 14:56
あほくさ

731 :デフォルトの名無しさん:02/06/21 14:58
どこの専門学校だよ。
ダメな問題ばっかり。

732 :デフォルトの名無しさん:02/06/21 15:03
qsortより早いソートを考えなさい。


733 :デフォルトの名無しさん:02/06/21 15:06
>>732
O(n/2)のソート知ってるよ。

734 :デフォルトの名無しさん:02/06/21 15:06
presort

735 :732:02/06/21 15:15
ぷ。ひっかかったな。qsortより速いじゃなくて早いんだから、qsortより前に開発されたソート手法ならなんでもいいんだよ。ぷぷ・・・

736 :デフォルトの名無しさん:02/06/21 15:18
はあ。カロリーメイト食お。

737 :デフォルトの名無しさん:02/06/21 15:18
>>735
おまえqsortとクイックソートを混同してないか?

738 :デフォルトの名無しさん:02/06/21 15:22
>>714

せんせーできましたあ

#include <stdio.h>

int main(void)
{
int i, j;
int count[256];
char a[] = "~Mg!-pv4lR@}-\\/Xh:r?c<]";
for(i = 0; i < 256; i++) count[i] = 0;
for(i = 0; a[i] != '\0'; i++) ++count[a[i]];
for(i = j = 0; i < 256; i++)
while(count[i]--)
a[j++] = i;
printf("%s\n", a);
return 0;
}


739 :デフォルトの名無しさん:02/06/21 15:30
>>737
qsortはクイックソートじゃないのか?

740 :デフォルトの名無しさん:02/06/21 15:33
>>739
実はバブルソートでもばれない罠。

741 :デフォルトの名無しさん:02/06/21 15:34
>>739
実は、正確にはクイックソートじゃない。

742 :デフォルトの名無しさん:02/06/21 15:42
クイックソートじゃない実装の qsort があるという意味?
一般的にっていうこと?

743 :デフォルトの名無しさん:02/06/21 15:46
quick sortが最速だった時代はもう終わったのさ。

744 :デフォルトの名無しさん:02/06/21 15:47
>>742
区間が短くなったら挿入ソートとか選択ソートに切り替える方式の
多段ソートって事だろ

745 :デフォルトの名無しさん:02/06/21 15:48
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int try_sort(unsigned int challange, char* array, size_t size)
{
 int i;
 srand(time(0));
 for (i = 0; i < challange; i++) {
  int a1 = rand() % size, a2 = rand() % size;
  if (a1 > a2) {
   int tmp = a2;
   a2 = a1;
   a1 = tmp;
  }
  if (array[a1] > array[a2]) {
   char tmp = array[a2];
   array[a2] = array[a1];
   array[a1] = tmp;
  }
 }
 for (i = 0; i < size - 1; i++) {
  if (array[i] > array[i + 1])
   return -1;
 }
 return 0;
}

int main()
{
 char a[23];
 a[0]='~'; a[1]='M'; a[2]='g'; a[3]='!'; a[4]='-'; a[5]='p'; a[6]='v'; a[7]='4'; a[8]='l';
 a[9]='R'; a[10]='@'; a[11]='}'; a[12]='-'; a[13]='\\'; a[14]='/'; a[15]='X'; a[16]='h';
 a[17]=':'; a[18]='r'; a[19]='?'; a[20]='c'; a[21]='<'; a[22]=']';
 
 if (try_sort(1000, a, sizeof(a)) == 0)
  printf("成功しました\n");
 else
  printf("失敗しました\n");
}


746 :742:02/06/21 15:50
なるほど、そういうことでしたか。

747 :デフォルトの名無しさん:02/06/21 16:02
>>745
ソートーあほですべ。


748 :名無しさん@カラアゲうまうま:02/06/21 16:05
つーかqsort()がクイックソートを使うことなんてどこにも規定されてない。

749 :名無しさん@カラアゲうまうま:02/06/21 16:06
>>676
xxd -i

750 :738:02/06/21 16:08
せっかく書いたのに誰も何もいってくれない。
ここは悪いインターネットですね。

751 :デフォルトの名無しさん:02/06/21 16:13
>>748
どこにも ? VC++ とかなら書いてあるぞ。

752 :742:02/06/21 16:16
規格で決められてないということじゃない?
実装は実装者依存だったはず。

753 :ANSl:02/06/21 16:18
漏れに何か用でも?

754 :デフォルトの名無しさん:02/06/21 16:19
>>750
750ゲトオメ。
ここは凄いインターネットですな。

755 :デフォルトの名無しさん:02/06/21 16:25
>>753 漏れ漏れ野郎氏ね。

756 :デフォルトの名無しさん:02/06/21 16:26
#include <stdio.h>
#include <conio.h>
void main()       

int su1,su2,kekka1;
float kekka2;
char enzansi;

printf("2つの整数と演算子を入力してください\n");
printf("1つ目の値を入力 =");
scanf("%d\n",&su1);
printf("2つ目の値を入力 =");
scanf("%d\n",&su2);
printf("演算子を入力   =");
scanf("%c\n",&enzansi);


if(enzansi == '+'){
kekka1=su1+su2;
printf("%d+%d=%d",su1,su2,kekka1);
}
else if(enzansi == '-'){
kekka1=su1-su2;
printf("%d-%d=%d",su1,su2,kekka1);
}
else if(enzansi == '*'){
kekka1=su1*su2;
printf("%d*%d=%d",su1,su2,kekka1);
}
else if(enzansi == '/'){
if(su2 == 0){
printf("kekka1=0");
}
else{
kekka2=su1/su2;
printf("%d/%d=4.1%f",su1,su2,kekka2);
}
}
else if(enzansi == '%'){
if(su2 == 0){
printf("計算できません");
}
else{
kekka1=su1%su2;
printf("%d%%d=%d",su1,su2,kekka1);

}
}

else{
printf("演算子がおかしいです");

getch();
}
}


757 :デフォルトの名無しさん:02/06/21 16:26
>>750
少なくとも、char は unsigned char にしとけ。
後は、悪いけど見る気にもならない。

758 :756:02/06/21 16:27
main(){
以外でおかしいところあったら教えてください

759 :デフォルトの名無しさん:02/06/21 16:27
#include <stdio.h>
#include <conio.h>
void main()       

int su1,su2,kekka1;
float kekka2;
char enzansi;

printf("2つの整数と演算子を入力してください\n");
printf("1つ目の値を入力 =");
scanf("%d\n",&su1);
printf("2つ目の値を入力 =");
scanf("%d\n",&su2);
printf("演算子を入力   =");
scanf("%c\n",&enzansi);


if(enzansi == '+'){
kekka1=su1+su2;
printf("%d+%d=%d",su1,su2,kekka1);
}
else if(enzansi == '-'){
kekka1=su1-su2;
printf("%d-%d=%d",su1,su2,kekka1);
}
else if(enzansi == '*'){
kekka1=su1*su2;
printf("%d*%d=%d",su1,su2,kekka1);
}
else if(enzansi == '/'){
if(su2 == 0){
printf("kekka1=0");
}
else{
kekka2=su1/su2;
printf("%d/%d=4.1%f",su1,su2,kekka2);
}
}
else if(enzansi == '%'){
if(su2 == 0){
printf("計算できません");
}
else{
kekka1=su1%su2;
printf("%d%%d=%d",su1,su2,kekka1);

}
}

else{
printf("演算子がおかしいです");

getch();
}
}


760 :デフォルトの名無しさん:02/06/21 16:27
#include <stdio.h>
#include <conio.h>
void main()       

int su1,su2,kekka1;
float kekka2;
char enzansi;

printf("2つの整数と演算子を入力してください\n");
printf("1つ目の値を入力 =");
scanf("%d\n",&su1);
printf("2つ目の値を入力 =");
scanf("%d\n",&su2);
printf("演算子を入力   =");
scanf("%c\n",&enzansi);


if(enzansi == '+'){
kekka1=su1+su2;
printf("%d+%d=%d",su1,su2,kekka1);
}
else if(enzansi == '-'){
kekka1=su1-su2;
printf("%d-%d=%d",su1,su2,kekka1);
}
else if(enzansi == '*'){
kekka1=su1*su2;
printf("%d*%d=%d",su1,su2,kekka1);
}
else if(enzansi == '/'){
if(su2 == 0){
printf("kekka1=0");
}
else{
kekka2=su1/su2;
printf("%d/%d=4.1%f",su1,su2,kekka2);
}
}
else if(enzansi == '%'){
if(su2 == 0){
printf("計算できません");
}
else{
kekka1=su1%su2;
printf("%d%%d=%d",su1,su2,kekka1);

}
}

else{
printf("演算子がおかしいです");

getch();
}  
}


761 :デフォルトの名無しさん:02/06/21 16:29
人間として根っこの部分が決定的に間違ってる。

762 :デフォルトの名無しさん:02/06/21 16:33
>>756
何故に 10 % 0 なら "計算できません" と表示するのに 10 / 0 なら
kekka1 = 0 と表示するのか小1時間...

それはさておき、悪いことは言わんから...

1. switch() 文を覚えろ。
2. scanf() は使うな。

763 :735:02/06/21 16:41
クイックソートを略せばqsortと言うだろ。

764 :デフォルトの名無しさん:02/06/21 16:43
>>763
qualityless sort

765 :デフォルトの名無しさん:02/06/21 16:44
宿題みせるバカ学生は、プログラム以前のことを覚えてこいや。

766 :デフォルトの名無しさん:02/06/21 16:44
iwanai

767 :デフォルトの名無しさん:02/06/21 16:45
C言語って何があれば遊べますか?

768 :735:02/06/21 16:45
なんだそりゃあ。詐欺じゃねーか。

769 :742:02/06/21 16:47
最初にqsortなんて名付けてしまったのが悪い。

770 :756:02/06/21 16:47
>>765
何で宿題ってわかった?来週までに出さないとやばいんです

771 :デフォルトの名無しさん:02/06/21 16:50
>>770
あなたにこんなもん作れるわけがない。

772 :デフォルトの名無しさん:02/06/21 16:51
>>770
http://pc.2ch.net/test/read.cgi/tech/1024592344/

773 :762:02/06/21 16:53
>>770
俺の忠告 (特に 2. の方) がきけねぇやつは、落第でも赤点でも取りやがれ。

774 :デフォルトの名無しさん:02/06/21 17:07
int main(){
int a, b, c;
char d;

printf("式 > ");
scanf("%d %c %d", &a, &d, &c);

if((c=='/' || c=='%') && b==0) d=0;

switch(d){
case '+': c=a+b; break;
case '-': c=a-b; break;
case '*': c=a*b; break;
case '/': c=a/b; break;
case '%': c=a%b; break;
default': d=0; break;
}

if(d){
printf("%d %c %d = %d\n", a, d, b, c);
} else {
printf("計算できん\n");
}

return 0;
}

775 :デフォルトの名無しさん:02/06/21 17:09
if((c=='/' || c=='%') && b==0) d=0;

if((d=='/' || d=='%') && b==0) d=0;

776 :デフォルトの名無しさん:02/06/21 17:12
便乗ですが int が 4バイトの場合でも %d でいいの?

777 :デフォルトの名無しさん:02/06/21 17:14
>>776
%ld

778 :デフォルトの名無しさん:02/06/21 17:15
776>>777 さんきゅです。

779 :デフォルトの名無しさん:02/06/21 17:31
>>776
int なら "%d" でいいよ。たとえそれが long int と同じでも。

780 :デフォルトの名無しさん:02/06/21 17:52
>>777
あほ!

781 :デフォルトの名無しさん:02/06/21 17:54
bsearchも別にバイナリサーチを使って実装しなくてもいいんだよね。
他の方法を使う奴は馬鹿だと思うけど。

782 :デフォルトの名無しさん:02/06/21 17:58
可変長引数の関数の...部分に渡す引数は渡す前に
signed char, short, long, etc. → signed long
unsigned char, short, long, etc. → unsigned long
float → double
に自動的にキャストされる。
これが理由でprintf系はintだろうとcharだろうと%dでOK。
scanf系は%ldとか使い分けなきゃならない。

・・・で、OK?

783 :デフォルトの名無しさん:02/06/21 18:00
>>782
intのサイズと%d,%ldの違いに何か関係あるの?

784 :デフォルトの名無しさん:02/06/21 18:02
読込むときは格納先の大きさがハキーリしてないといけないから
使い分ける必要があるんだよね。

785 :デフォルトの名無しさん:02/06/21 18:02
>>783
だって4バイトの変数を2バイトしか読まず評価したらだめっしょ。

786 :デフォルトの名無しさん:02/06/21 18:03
intは%d,longは%ld
これはいいんだが、size_tのようにどんな型にtypedefされているのか分からない型はどうすればいいんだろ・・

787 :デフォルトの名無しさん:02/06/21 18:03
>>785
intが4バイトの環境なら%dも4バイト読みそうなもんだけど、違うの?

788 :デフォルトの名無しさん:02/06/21 18:04
>>785
評価先でもintの大きさは同じだぞ(笑)

789 :デフォルトの名無しさん:02/06/21 18:05
>>786
longで読んどいて後で代入・・・とかになるかな?

790 :デフォルトの名無しさん:02/06/21 18:21
>>786
何にtypedefされてるか調べれ。

char型に%dで読み込んだらその変数以下が壊れたことはあった。

791 :デフォルトの名無しさん:02/06/21 18:23
>>790
ヘッダーファイルを見るというのはあまりよくないような・・・
sizeofで調べるだけでは符号ありか符号なしか分からないし・・・

792 :デフォルトの名無しさん:02/06/21 18:25
>>790
昔それやって帰り先のアドレス壊して、
関数の最後にfprintf突っ込んでも
呼出元で関数の次にfprintf突っ込んでも
何も表示されなくて悶絶したことがある(藁)

793 :デフォルトの名無しさん:02/06/21 18:26
型もわからん変数使うなってこと。

794 :デフォルトの名無しさん:02/06/21 18:26
>>793
ハァ?

795 :デフォルトの名無しさん:02/06/21 18:28
793 → >>791

796 :デフォルトの名無しさん:02/06/21 18:30
32bit版のランタイムってどうなんだろう。たとえばscanfが%dを
4バイト入力とは解釈しないのかな。

797 :デフォルトの名無しさん:02/06/21 18:30
>>791
size_tは符号無しと決まってると思う。
intかlongかはき待ってなかったと思う。

798 :デフォルトの名無しさん:02/06/21 18:30
int a に対し、
  a = (条件式)?(-30):(30) +5;
とやると、条件式がfalse のときは a=35 になるんですが、trueのときは a=-30 になってしまいます。
VCでしか試していませんが、条件演算子(?:)のこういう使い方って NGなんでしょうか?

799 :デフォルトの名無しさん:02/06/21 18:30
>>793
標準関数が戻り値に使っちゃっていたりするし。strlenとか。
まあscanf系で使うことはないから問題ないけど。

800 :デフォルトの名無しさん:02/06/21 18:31
>>796
sizeof(long) == sizeof(int) ならそうなる「可能性はある」。
でも保証されていない。

801 :デフォルトの名無しさん:02/06/21 18:31
>>798
なんで?(笑)

802 :デフォルトの名無しさん:02/06/21 18:31
やっぱりわからない
rule(int l,int r,int h){      rule(0,8,3)から初めて 
int m=(l+r)/2;           rule(0,4,2) 
if(h>0){ rule(0,2,1)
rule(l,m,h-1); rule(0,1,0)
mark(m,h); mark(1,1)
rule(m,r,h=1);} rule(1,2,0)
}という定規の目盛をつける問題なのですが・・mark(2,2)
rule(2,4,1)
というような感じで動くんですが、mark(2,2)のあたりから分かり
  ません。   お・た・す・け〜〜〜

803 :デフォルトの名無しさん:02/06/21 18:32
>>798
優先順位の問題なんじゃねーの?

804 :デフォルトの名無しさん:02/06/21 18:32
>>798
優先順位覚えれ。

805 :デフォルトの名無しさん:02/06/21 18:32
>>798
?:演算子は+演算子よりも優先順位が低いから、

 a = ((条件式)?-30:30) + 5;

とやりなせえ。

806 :デフォルトの名無しさん:02/06/21 18:33
>>798
a=-30になってしまいますって、当たり前だと思うけど。

807 :デフォルトの名無しさん:02/06/21 18:33
>>803-805
ケコーンしようよ

808 :806:02/06/21 18:34
>>805
そういうことしたかったのか

809 :デフォルトの名無しさん:02/06/21 18:35
FAQぽ

810 :798:02/06/21 18:36
勉強になりますた。

811 :デフォルトの名無しさん:02/06/21 18:42
scanf系で%dが確実に読み込めるサイズは2バイトまでということなのか。
それ以上は処理系依存ということなのかな。

812 :デフォルトの名無しさん:02/06/21 18:42
>>802
どこがコードでどこがコメントで何をする関数で何がおかしいのかわからないので
誰もわからないと思われ。

813 :デフォルトの名無しさん:02/06/21 18:43
>>811
intのサイズが処理系依存なだけで、sizeof(int)バイト分まで確実に読み込める。

814 :デフォルトの名無しさん:02/06/21 18:44
>>811
%dはintを読み込む。

815 :デフォルトの名無しさん:02/06/21 18:45
>>802
まず少なくとも;がないからエラーになるな。

816 :デフォルトの名無しさん:02/06/21 18:45
ああそっか。
ということは sizeof(int) == 4 でも、%d で OKということか。

817 :デフォルトの名無しさん:02/06/21 18:45
ハァァ?

818 :デフォルトの名無しさん:02/06/21 18:46
>>816
sizeof(int)==256でもな。

819 :デフォルトの名無しさん:02/06/21 18:47
了解>>818

820 :デフォルトの名無しさん:02/06/21 18:47
intで機種依存してどーする(藁

821 :デフォルトの名無しさん:02/06/21 19:51
C言語ってsex言語という意味ですか?

822 :デフォルトの名無しさん:02/06/21 19:54


823 :デフォルトの名無しさん:02/06/21 19:54
ゲラゲラ

824 :デフォルトの名無しさん:02/06/21 19:56
そう言えば、「はじめてのC」という本があったな(藁

825 :デフォルトの名無しさん:02/06/21 19:58
じゃぁCマガはセックスマガジンだ(鬱

826 :デフォルトの名無しさん:02/06/21 20:14
6809といういにしえのCPUにはSEX命令というのがあった。
(だから何だよ)

827 :デフォルトの名無しさん:02/06/21 20:42
いかにSEXを織り込むかを考える、と。

828 :デフォルトの名無しさん:02/06/21 20:48
変数の前には絶対sex、関数にはfuckをつけるってのはどうか?


829 :デフォルトの名無しさん:02/06/21 20:52
関数 kiss_my_ass_hole(female_ejaculation *fe)

実行すると大変なことに(((( ;゚Д゚))))ガクガクブルブル

830 :デフォルトの名無しさん:02/06/21 21:07
void kiss_my_ass_hole(female_ejaculation *fe)
{
printf("hello world.\n");
}

実行すると大変なことに(((( ;゚Д゚))))ガクガクブルブル



831 :デフォルトの名無しさん:02/06/21 21:21
>>820
だいじょぶ? 熱あるみたいだし、今日はもう寝なさい。

832 :デフォルトの名無しさん:02/06/21 21:22
>>830
warning: unused parameter `fe'
英語よくわからんけど警告してくれますた。

833 :デフォルトの名無しさん:02/06/21 21:31
これはass holeからhelloってことなのかな。
違うかもしれないけど。

834 :デフォルトの名無しさん:02/06/21 21:42
>>832
日本語に訳すと、「潮吹くほどケツ穴は使い込まれてません」てこと。

835 :デフォルトの名無しさん:02/06/22 01:58
使い込むと潮吹きますか…
うちはまだまだです。

836 :デフォルトの名無しさん:02/06/22 13:03
C言語で音のファイル(waveとか)を扱うことって出来ますか?

837 :Cは無敵です。:02/06/22 13:04
>>836
どう扱うんだ?
多分出来ると思うけど。

838 :デフォルトの名無しさん:02/06/22 13:11
>>836
unlink("hoge.wav");
とか。

839 :デフォルトの名無しさん:02/06/22 13:13
>>837
日本語の「あ」「い」「う」「え」「お」「か」・・・と一つずつ
音の入ったファイルがあって、打った文字の音が出るようにしたいんですけど・・・。

たとえば、キーボードから「いってよし」と打ったら
その文字に合う音のファイルを探して、つないで出力するっていう感じです。
音のファイル扱えるならできますよね?

840 :デフォルトの名無しさん:02/06/22 13:13
>>838
remove()にしろよ。

841 :デフォルトの名無しさん:02/06/22 13:14
>>839
できる。

842 :デフォルトの名無しさん:02/06/22 13:26
>>841
できるのですね。
ありがとうございます。

843 :デフォルトの名無しさん:02/06/22 13:30
>>842
できることだけ知ってどうするのだろう...。誰も「お前には」と言って
ないんだけど...。

844 :デフォルトの名無しさん:02/06/22 13:37
>>843
音に関するC言語のプログラムってやったことなかったんで、
出来るかどうか知りたかっただけです。
私が出来るのかっていうことを聞きたかったわけではないです。

845 :デフォルトの名無しさん:02/06/22 15:10
>>844
これができるかどうかも自分で調べられないようなやつにはできない。


846 :デフォルトの名無しさん:02/06/22 15:22
int DisplayMenu(void){
int choice;
char *select;
select = (char *)malloc(10);

printf("1.氏名と電話番号と住所の入力\n");
printf("2.電話番号から検索\n");
printf("3.氏名から検索\n");
printf("4.電話帳をディスクに保存する\n");
printf("5.ディスクから電話帳を読み込む\n");
printf("6.終了\n");
while( choice < 1 || choice > 6){
printf("選択してください: ");
fgets( select, 1, stdin);/*ここのfgetsが効かない。
choice = atoi(select);
printf("\n");
}
free(select);
return choice;
}

電話帳のプログラムくんでたんですが、実行してみると選択してくださいの無限ループになってしまい、DEBUGしたらfgetsが実行されていないんです。そこをgetsにするとできるんですが。。
なんでだめなのか教えてください

847 :デフォルトの名無しさん:02/06/22 15:31
>>846
char *fgets( char *string, int n, FILE *stream );
...
あるいは読み込んだ文字数が n - 1 になるかのいずれかに最初に遭遇する
まで続きます。

これでわからなきゃ、あきらめろ。

あと、while() で参照する前に choice を初期化しとかないとそのうち
はまるぞ。あと、malloc() なんてなんで使う ? 普通の配列で良いと思
うが。

848 :デフォルトの名無しさん:02/06/22 15:44
下ののような
引数と返り値の型だけが違って、中で行う数値計算は同じ関数
を、ひとつにまとめることはできるのでしょうか?

double kakezan1(double a, double b)
{
  return a*b;
}

int kakezan2(int a, int b)
{
  return a*b;
}

849 :デフォルトの名無しさん:02/06/22 15:44
>>846
リファレンスマニュアル読めよ。
数字読み込むだけなら、
scanf("%d", &choice);
とかのほうが素直と思われ。

850 :デフォルトの名無しさん:02/06/22 15:48
>>848
マクロにするとかはだめ?
#define kakezan(a, b) (a * b)


851 :デフォルトの名無しさん:02/06/22 15:53
>>848
template

852 :デフォルトの名無しさん:02/06/22 15:59
>>849
scanf() は止めた方が良いと思う。

853 :デフォルトの名無しさん:02/06/22 16:06
>>852
なんで?遅いから?メモリ食うから?

854 :デフォルトの名無しさん:02/06/22 16:28
>>853
挙動が理解しにくいから。
>>864 の fgets() + atoi() を >>849 のように scanf() に変えてから
プログラム実行して、入力に "A" + 改行 を入力したら、無限ループに
なるよ。
最低 fgets() + sscanf() にしとくべき。

855 :デフォルトの名無しさん:02/06/22 16:30
>>853
FAQ読めや

856 :デフォルトの名無しさん :02/06/22 16:40
クラスの定義の仕方って下のようでいいんでしょうか?
コンパイルできないんですけど・・・

class Customer{
int id;
char name[20];
};



857 :デフォルトの名無しさん:02/06/22 16:46
>>856
頼むから、「コンパイルできないんですけど・・・」じゃなくて、
エラーメッセージとか書いてくれ。

858 :デフォルトの名無しさん:02/06/22 16:46
>>856
クラス使いたいならCじゃなくてC++でしょ。

859 :デフォルトの名無しさん:02/06/22 16:49
>>854
なる殻。そいや最近fscanfしかつこてなかったからscanfの動き忘れとった。
余談だけどprintfとかscanfとかって内部でヒープからメモリ確保しよるよな?
前これしらんくてエライ目にあった。

>>855
よんどくよ。

860 :デフォルトの名無しさん:02/06/22 16:50
定義(というか宣言)は間違ってない。>>856


861 :デフォルトの名無しさん:02/06/22 16:52
>>856
外部からクラスメンバにアクセスするときはpublicメンバにしないとだめ。


862 :デフォルトの名無しさん:02/06/22 16:57
>>859
> 前これしらんくてエライ目にあった。
具体的には ?

863 :デフォルトの名無しさん:02/06/22 17:05
>>862
とあるマシンで自作のメモリマネージャ動かす為に、
プログラム起動直後にめいっぱいのメモリをmallocしたら、
意味不明のハングが起き始めた。
結局printfがヒープからの確保ヘコッてたみたい。

864 :デフォルトの名無しさん:02/06/22 17:28
>>863
なるほど、そう言うこともあるんだね。了解。

865 :デフォルトの名無しさん:02/06/22 17:42
おまえらいい加減にscanf系の仕様を理解しろゴルァ


866 :デフォルトの名無しさん:02/06/22 17:49
数とかを入力させるときにscanf使う方がいいですか、それともgetsとatoi使う方がいいですか。

867 :デフォルトの名無しさん:02/06/22 17:57
>>866
fgets+strtol

868 :デフォルトの名無しさん:02/06/22 17:58
cinがいいと思います。

869 :デフォルトの名無しさん:02/06/22 17:58
>>866
時と場合による。

870 :デフォルトの名無しさん:02/06/22 18:20
>>866
gets() は論外として、エラー処理をマジメにやるなら入力と解析は別にするのが
無難。

>>869
そうだね。場合によっては lex + atoi とか言い出すかもしれん。

871 :デフォルトの名無しさん:02/06/22 18:27
>>865
scanf() 系なんていらねーよ。どうせ使いもんにならないし。

872 :デフォルトの名無しさん:02/06/22 18:32
>>871
使い方による。
いらねーなら使わなければよい。

873 :デフォルトの名無しさん:02/06/22 18:44
scanfを使うのが最適な場合ってどんなときですか?

874 :デフォルトの名無しさん:02/06/22 18:47
>>873
決まった書式のデータファイルとかを読み込むときで、
読み込みルーチン作るのが面倒なとき?

875 :デフォルトの名無しさん:02/06/22 20:14
>>873
バッファオーバーフローが絶対におきないとき。

876 :デフォルトの名無しさん:02/06/22 20:20
>>873
ロボットがキーボードを叩く時。

877 :デフォルトの名無しさん:02/06/22 22:39
>>846

パッと見ただけだけど。

誤 char *select;
正 char select[1024];

配列のサイズは適当に変えて。

878 :877:02/06/22 22:41
本当にパッと見ただけだった。(鬱
877 はなかったことに。

879 :デフォルトの名無しさん:02/06/22 22:53
>>878
かわいそうなくらい痛い

880 :877:02/06/22 22:57
だって、その下で malloc 使ってるとは思わなかったんだもん。。。

881 :中学生:02/06/22 22:59
彼女とはまだCすんの早いかな〜
Aまでで押さえといた方がいい?

882 :デフォルトの名無しさん:02/06/22 22:59
>>880
そゆことじゃなくて、その下のレスたちは見てないのかよ

883 :877:02/06/22 23:00
>>846

名誉挽回。

入力文字列を読みこむのに十分な大きさの領域が確保されている場合、
fgets で読みこまれるのは、改行文字まで。その後にヌル文字を付加する。

$ abc[return]

とした場合、用意した領域には

'a', 'b', 'c', '\n', '\0'

と格納される。
の場合だと、

$ 1[return]

とした場合は、

'1', '\n', '\0'

と格納されるはず。

が、 >>846 のコードでは 1 文字分しか取られていない( fgets の第2引数 )。従って、

誤: fgets(select, 1, stdin);
正: fgets(select, 10, stdin);

とすれば良い。

一般的には fgets の第2引数は確保した領域の大きさを使う。

後は >>847 も参考に。


884 :manko_chinko ◆c2rpKRNM :02/06/22 23:01
>>881
俺中学生だけどCやってるよ。
AってAPL?それにしても彼女と一緒にやるって事は本気なんだね。
がんばって。

885 :デフォルトの名無しさん:02/06/22 23:02
>>884
ALGOLだと思われ。

886 :中学生:02/06/22 23:04
>>884
でもDが恐いよ〜

887 :デフォルトの名無しさん:02/06/22 23:07
>>886
Delphiなめんな。クソ人間。

888 :manko_chinko ◆c2rpKRNM :02/06/22 23:07
>>886
ごめん俺寡聞だからDってのしらない。(言語はAからZまであると誰か言っていた。)
もしかしてDelphiのことかな。Delphiってこわいかな?Vbとかわらんじゃん

889 :デフォルトの名無しさん:02/06/22 23:09
>>888
あんなクソ言語と一緒にしないで・・・おねがい。

890 :manko_chinko ◆c2rpKRNM :02/06/22 23:10
K&R C ってカーニハンとリッチーのセックス暴露本らしいね。

891 :manko_chinko ◆c2rpKRNM :02/06/22 23:11
>>889
RADという点で変わらないと言っただけ

892 :デフォルトの名無しさん:02/06/22 23:12
>>891
C#とかもっとましなたとえがあるだろう・・・。
VBが簡単!ってじだいは終わったし。

893 :デフォルトの名無しさん:02/06/22 23:12
A B C D E は〜♪ E気持っち

894 ::02/06/23 00:04
精子の運動をプログラミングしたいのですが、どうすればよいのでしょうか。

895 :デフォルトの名無しさん:02/06/23 00:06
まずは分析だ。放出して顕微鏡で観察しる。

896 ::02/06/23 00:08
どうせなら3Dで卵子に到達するまでをプログラミングしたいのですが。
卒業研究にしたいぐらいです。

897 :デフォルトの名無しさん:02/06/23 00:13
俺の精子は元気ないからだめだ。
やめてくれ

898 :デフォルトの名無しさん:02/06/23 00:33
ttp://www.hansen.co.jp/Marchandise/syouhin/Hamilton/hamilton.html

これ買え。

899 :デフォルトの名無しさん:02/06/23 02:30
「,」で区切った文字列"100,100,1000,2000,10,10"を順番に
取り出したいんですけど良い方法はありますか?

900 :899:02/06/23 02:36
配列なんかに入れれば良いです。
100
100
1000
2000
10
10
の順番に。

901 :デフォルトの名無しさん:02/06/23 02:56
>>899
ふつーにループ回して、チェックすれば?

902 :名無しさん@カラアゲうまうま:02/06/23 03:15
>>899
strchr()かstrcspn()


903 :デフォルトの名無しさん:02/06/23 03:25
最速の素数判定(Nが素数であるか田舎を判定しる)プログラム教えれ

904 :デフォルトの名無しさん:02/06/23 04:03
>903
Nの範囲は?

905 :デフォルトの名無しさん:02/06/23 04:27
http://www5d.biglobe.ne.jp/~yakamome/formation/formation_giko.html
やっぱこれが一番良かった。

906 ::02/06/23 05:08
>905
すれ違いだけどワラタ
俺持ってるよフォーメーションゼット。

907 :846:02/06/23 12:43
>>847
fgetsの仕様みたら理解した。
n-1をnだと勘違いしてました。逝ってきます
アドバイスthxです。

908 :847:02/06/23 15:11
>>907
つーか、一文字だけ入力したいからと言って fgets(..., 2, ...) なんて普通
書かないぞ。改行コードが入力バッファに残ってしまうからな。
>>883 も書いてるけど、入力バッファーを越えないための制限値と思うべきだよ。

909 :デフォルトの名無しさん:02/06/23 16:57
100*100=1KBの配列をグローバルでひとつ
400*400=16KBの配列をグローバルでひとつ
確保していますが,まだまだ大丈夫でしょうか?
業務用アプリとかプロのゲームとかでは,こんなの序の口でもっと確保してるよゴラァって感じなんでしょうか?

910 :デフォルトの名無しさん:02/06/23 17:00
17K程度で心配になるって、どんな環境だろう…
組み込みかな?
にしても、業務用とかプロのゲームだとなんで(略
あと、100*100は1Kじゃねーぞ。

911 :ミスった:02/06/23 17:05
100*100=10KBの配列をグローバルでひとつ
400*400=160KBの配列をグローバルでひとつ
確保していますが,まだまだ大丈夫でしょうか?
業務用アプリとかプロのゲームとかでは,こんなの序の口でもっと確保してるよゴラァって感じなんでしょうか?

912 :デフォルトの名無しさん:02/06/23 17:06
>>910
組込みやってる奴ならこんなバカな質問しないだろう。

>>909
そのマシンにメモリーはいくつ積んでんだよ。

913 :デフォルトの名無しさん:02/06/23 17:10
8bitパソコンでプログラム組んでるのかい?兄さん。
今のWindowsだったら1MBや10MBくらいまで確保しても別にOKだ。

さらにいうなら確保しても使わなければOSが無視してくれる。

914 :デフォルトの名無しさん:02/06/23 17:15
>911
夕飯はまだ早すぎじゃないか?

915 :デフォルトの名無しさん:02/06/23 18:32
そろそろいいんじゃないか

916 :デフォルトの名無しさん:02/06/23 20:48
>>899
strtok()とかでいいんじゃない?

917 :初C者:02/06/23 21:45
#include <stdio.h>
#include <conio.h>
void main(){
int b,c,d;
char a;


printf("機種名を入力してね\n");
scanf("%s",&a);
printf("支出を入力しろや\n");
scanf("%d",&b);
printf("収入は?\n");
scanf("%d",&c);
d=c-b;
printf("収支は%d円だよ!",d);

if (d > b) {
printf("今日は勝ちですね。良かった良かった\n");
}
else if(d == b){
printf("トントンだね。負けよりはマシだな。\n");
}
else{
printf("負けちゃったね。%sなんかやるから・・・\n",a);
}
getch();
}











実行すると、if文実行する手前で、強制終了されます。
なんでですか?

918 :デフォルトの名無しさん:02/06/23 21:46
>917
aに機種名は入れられん

919 :初C者:02/06/23 21:48
>>918
半角英数字でも?

920 :デフォルトの名無しさん:02/06/23 21:50
>917
ためしにchar a[80]にしてみなされ

921 :920:02/06/23 21:56
あ、char a[80];にしたら、scanf("%s",a);ね。

922 :デフォルトの名無しさん:02/06/23 21:58
すんません、VCつかってるんですが、基本っぽいもんはおぼえたんですが、MFCをつかわないで、Cのウィンドウズプログラムや、ゲーム作成、できればDXを超初心者からわかりやすく解説されてあるサイトはないでしょうか?お願いします。

923 :デフォルトの名無しさん:02/06/23 21:58
>>917
いいかげん、scanf() 使うのヤメレ。

924 :デフォルトの名無しさん:02/06/23 22:02
>>922
ウィンドウズなプログラムは猫でもとかは?
(http://www.kumei.ne.jp/c_lang/)
DirectXはSDKのサンプルを見たらどうでしょう?

925 :デフォルトの名無しさん:02/06/23 22:04
924>>どうもありがとうございます。しかし、猫のところはVCのVERが古いみたいで、こちらは6.0をつかっていまして、
かいてあるとおりにやっても動作しないのです。微妙になにかがちがうんでしょうけど。
SDKってのはMSにおかれてるんでしょうか?

926 :デフォルトの名無しさん:02/06/23 22:04
>>923
scanfを馬鹿にするな

Scanf擁護委員会一同より。


927 :初C者:02/06/23 22:07
>>920
できました!ありがとうございます。
[80]って、80文字入れれるって事ですか?

928 :デフォルトの名無しさん:02/06/23 22:09
最後の要素には'\0'が入るから79文字入る。

929 :初C者:02/06/23 22:14
>>928
なぜ、 char a; ではだめなんでしょうか?
文字列の場合は [ ]を使って文字数を指定しないとだめなんですか?

930 :デフォルトの名無しさん:02/06/23 22:16
Cでは文字列を文字の配列として表現するためです

931 :manko_chinko ◆c2rpKRNM :02/06/23 22:37
>>929
あなたBASICやってたでしょ?

932 :初C者:02/06/23 22:45
>>931
すごいコテハンすね。
BASICやってないですよ。プログラム言語はCが初めてです。
もうそろそろ学校でVB習うと思いますが。
なんでそう思われました?

933 :manko_chinko ◆c2rpKRNM :02/06/23 22:48
>>932
べつに。俺もBASICやってて、C始めたとき最初文字列配列のところで??だったから

934 :デフォルトの名無しさん:02/06/23 23:05
>>932
文字は数値を読み替えてるだけだってことをきちんと理解しろよ

935 :デフォルトの名無しさん:02/06/23 23:27
char text[256];
fprintf(fp,text);
でEUCが混じった文字列を書き込もうとすると落ちるのですが
どうすればいいのでしょうか?

936 :デフォルトの名無しさん:02/06/23 23:28
せめてfprintf(fp, "%s", text);

937 :935:02/06/23 23:37
>>936
ありがとうございます。一発で動きました。
しかし、printf()系の関数で、別に表示したい変数が存在しない場合
fprintf(str);と書くのは文法違反なのですか?
今までのコードにたくさん存在するのですが・・・。

938 :デフォルトの名無しさん:02/06/23 23:39
>935
表示する文字列に%とかが入っていると死ぬ

939 :デフォルトの名無しさん:02/06/23 23:42
>>937
stdio.hを(以下略

940 :935:02/06/23 23:44
>>938
なるほろ・・・。
それで引数を探しに行って死んでたわけですね。
htmlを適当に読んで吐き出す仕様なのでそういう文字列が入ると
やばいのですね。
今からやばいところ書き直します・・・。

941 :名無しさん@カラアゲうまうま:02/06/24 03:03
"%s"で出すなら素直にfputs()使えよ。

942 :デフォルトの名無しさん:02/06/24 04:05
人のソースを参考にしながらプログラムの勉強をしているのですが,その中でπの値を
「tan2(1,1)*4」で書いてあるのがありました(というか,「atan2(1,1)*4*2」というのがあって
最初なにをやっているか分からなかった).
これっってマクロのM_PIを使わないで,「tan2(1,1)*4」でπの値を求めるのは,なんか
メリットってあるのでしょうか?
googleで"tan2(1,1)*4"で検索したら約177件もひっかかったことから,なんか意味が
あるような気がするのですが,なんでしょう?

943 :デフォルトの名無しさん:02/06/24 04:11
>942
俺は数学を知ってるぞ、と見せ付けることが出来ます。

944 :デフォルトの名無しさん:02/06/24 04:15
>>942
tan2→atan2
遅いだけ。しかし標準ではPIの値はdefineされてないから便利な
こともある。

945 :デフォルトの名無しさん:02/06/24 06:55
「 tan (π/4) = 1 」 高校数学の教科書を読もう。

ところで、tan2( ) とか atan2( ) って初めて見るんだけど
これって標準ライブラリに入ってるの?


946 :942:02/06/24 08:14
>>942 の「tan2(1,1)*4」は「atan2(1,1)*4」の間違いです.すまむ.
>>944
M_PIのマクロって標準じゃなかったのですね.
たしかにdefineされてなかったら,atan2(1,1)*4でπの値を出すという
のは便利ですね.
>>945
tan2()はtypoです.atan2()はmath.hに入ってますよ.

947 :デフォルトの名無しさん:02/06/24 08:37
#ifndef M_PI
#define M_PI (atan2(1,1)*4)
#endif
とやろうと思ったが、M_PIってmath.hにあるし。

948 :名無しさん@カラアゲうまうま:02/06/24 08:45
M_PIはANSI Cなら持ってるはず。
古い処理系でもコンパイルできるようにするためだろう。

949 :945:02/06/24 08:51
>>946
あ、ほんとだ atan2( ) あるね
/* 負け惜しみ : それなら atan(1)*4 の方がいいと思うが */

ひとつ賢くなりやした。さんくす


950 :デフォルトの名無しさん:02/06/24 10:57
defineよりconst double M_PI = atan2(1,1)*4;のほうが
速くならないですか?

951 :デフォルトの名無しさん:02/06/24 11:19
次スレ〜

952 :デフォルトの名無しさん:02/06/24 13:23
>>903
Nの平方根以下の素数で割り切れなければNは素数
多分これが一番計算少ない

953 :デフォルトの名無しさん:02/06/24 14:03
>>948
それなら
#include <math.h>
#ifndef M_PI
#define M_PI 3.14〜
#endif
とすればいいだけなので、単にM_PIを知らなかっただけではないかと

954 :846:02/06/24 18:38
>>883
すみません、見逃してました(;´Д`)
第2引数を10にするのは、\nと\0を入れるためと解釈していいですか?
>>908
入力バッファに残ると後のfgetsとかscanfとかに影響してしまうためですか?

955 :デフォルトの名無しさん:02/06/24 20:45
新スレ、立てました

C言語なら、俺に聞け! <25>
http://pc.2ch.net/test/read.cgi/tech/1024918442/


956 :883:02/06/24 22:49

>>954

http://pc.2ch.net/test/read.cgi/tech/1024918442/13


957 :デフォルトの名無しさん:02/07/02 01:49


958 :デフォルトの名無しさん:02/07/02 22:31


959 :デフォルトの名無しさん:02/07/03 00:44


960 :デフォルトの名無しさん:02/07/03 00:47


961 :デフォルトの名無しさん:02/07/03 00:55


962 :デフォルトの名無しさん:02/07/03 01:12


963 :デフォルトの名無しさん:02/07/03 02:35


964 :デフォルトの名無しさん:02/07/03 03:48


965 :デフォルトの名無しさん:02/07/03 23:35


966 :デフォルトの名無しさん:02/07/04 01:10


967 :デフォルトの名無しさん:02/07/04 02:38


968 :デフォルトの名無しさん:02/07/04 08:07


969 :デフォルトの名無しさん:02/07/04 08:14


970 :デフォルトの名無しさん:02/07/04 21:50


971 :デフォルトの名無しさん:02/07/04 22:28


972 :デフォルトの名無しさん:02/07/05 01:01


973 :デフォルトの名無しさん:02/07/05 05:04
きゅ

974 :デフォルトの名無しさん:02/07/05 14:46


975 :デフォルトの名無しさん:02/07/05 15:46


976 :デフォルトの名無しさん:02/07/06 00:38
ま゛

977 :デフォルトの名無しさん:02/07/06 00:53


978 :デフォルトの名無しさん:02/07/06 01:38
わ゜

979 :デフォルトの名無しさん:02/07/06 02:19


980 :デフォルトの名無しさん:02/07/06 02:31


981 :デフォルトの名無しさん:02/07/06 02:34


982 :デフォルトの名無しさん:02/07/07 02:18


983 :デフォルトの名無しさん:02/07/07 02:28


984 :デフォルトの名無しさん:02/07/07 02:46


985 :デフォルトの名無しさん:02/07/07 03:13


986 :デフォルトの名無しさん:02/07/07 03:21


987 :デフォルトの名無しさん:02/07/07 16:48


988 :デフォルトの名無しさん:02/07/07 17:17


989 :デフォルトの名無しさん:02/07/07 20:48
う゛

990 :デフォルトの名無しさん:02/07/07 21:12


991 :デフォルトの名無しさん:02/07/07 21:34


992 :デフォルトの名無しさん:02/07/07 21:42


993 :デフォルトの名無しさん:02/07/07 21:49


994 :デフォルトの名無しさん:02/07/07 22:03


995 :デフォルトの名無しさん:02/07/07 22:26


996 :デフォルトの名無しさん:02/07/07 22:39


997 :デフォルトの名無しさん:02/07/07 22:48


998 :デフォルトの名無しさん:02/07/08 00:35


999 :デフォルトの名無しさん:02/07/08 00:37


1000 :デフォルトの名無しさん:02/07/08 00:37
□□□■■■■■□■□□□■□■■■■□□■■■■□■□□□■□■■■■□□□□
□□□□□■□□□■□□□■□■□□□□□■□□□□■■□□■□■□□□■□□□
□□□□□■□□□■■■■■□■■■■□□■■■■□■□■□■□■□□□■□□□
□□□□□■□□□■□□□■□■□□□□□■□□□□■□□■■□■□□□■□□□
□□□□□■□□□■□□□■□■■■■□□■■■■□■□□□■□■■■■□□□□


1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

185 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.02 2018/11/22 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)