C言語なら俺に聞け! Part 92

このエントリーをはてなブックマークに追加
1v(^o^i)d
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。

GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。

エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/

各種リンク、関連スレは>>2-13あたり

C言語なら俺に聞け! Part 91
http://pc5.2ch.net/test/read.cgi/tech/1095180315/
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
2デフォルトの名無しさん:04/10/02 14:51:36
【コンパイラ】
gcc
http://gcc.gnu.org/

【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/
Visual C++ Developer Center: Microsoft Visual C++ Toolkit 2003
http://msdn.microsoft.com/visualc/vctoolkit2003/

【ライセンスや機能などに問題あり】
Microsoft 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
Intel C++ Compiler for Linux
http://developer.intel.com/software/products/compilers/clin/noncom.htm
32:04/10/02 14:54:52
2
4デフォルトの名無しさん:04/10/02 19:50:01
ifで式を , で複数書いたとき一番右の式だけが評価されて次の行に実行が移るのですが
これは仕様で決まっているのですか?
5デフォルトの名無しさん:04/10/02 19:52:30
>>4
>ifで式を , で複数書いたとき一番右の式だけが評価されて

んなこたーない。
6デフォルトの名無しさん:04/10/02 20:04:51
VBとかでのdir関数に相当する事をC言語の標準関数でできますか?
やっぱりAPIを使う必要がありますか。
7デフォルトの名無しさん:04/10/02 20:06:36
Ruby!!!
8デフォルトの名無しさん:04/10/02 20:07:48
>>6
システムコールを使わないとだめだね。
だって環境によって違うもの。
9デフォルトの名無しさん:04/10/02 20:08:35
>>5
#include <stdio.h>
int main(void)
{
int m=0;
if (m == 0, m == 1) printf("%d %d\n", __LINE__, m);
if (m == 0, m == 1, m == 0) printf("%d %d\n", __LINE__, m);
if (m == 0, m == 1, m == 0, m == 1) printf("%d %d\n", __LINE__, m);
if (m == 0, m == 1, m == 0, m == 1, m == 0) printf("%d %d\n", __LINE__, m);
if (m == 0, m == 1, m == 0, m == 1, m == 0, m == 1) printf("%d %d\n", __LINE__, m);
return 0;
}

これで一番右がm==0の時だけ真と評価されているみたいなんですけど
実際はどういう動作をしているんでしょうか?
10デフォルトの名無しさん:04/10/02 20:11:27
>>9
m == 0 もしっかり評価されている。
その後、最後に書いた m == 1 の結果が
全体的な式の評価結果となっているだけだ。

if (printf("評価してるよー\n"), m == 0)

を実行してみろ。
11デフォルトの名無しさん:04/10/02 20:15:23
>>9
m = 0;
m = 1;
m = 2

if(m == 2) printf("mは2です。");

とするとm = 0; m = 1; m = 2;すべてが実行されて
最終的にmは2になるだろ。
それと似たような原理で、すべて評価した上で最後の式が
ifにかけられている。
12デフォルトの名無しさん:04/10/02 20:18:00
つか、まずは「評価」という言葉の意味をしっかり理解しれ
13デフォルトの名無しさん:04/10/02 20:18:38
>>10
分かりました、ありがとうございます。
14デフォルトの名無しさん:04/10/02 20:32:45
volatileってなに?
言語仕様の外側の話?
15デフォルトの名無しさん:04/10/02 20:34:00
その変数への最適化を抑制するようにコンパイラに指示する
16デフォルトの名無しさん:04/10/02 20:35:22
全角で書くな
17デフォルトの名無しさん:04/10/02 20:37:34
マルチスレッド動作してたり、割り込み処理があるなどで変数が突然書き換わる場合があるときにつけるやつ
18デフォルトの名無しさん:04/10/02 20:38:48
いみわかんね

言語仕様として定義できるキーワードじゃないってこと?
19デフォルトの名無しさん:04/10/02 20:39:32
>>18
言語仕様の一部だけど?
20デフォルトの名無しさん:04/10/02 20:43:43
彼女のはあともvolatile
          ↑こんなかんじ
21デフォルトの名無しさん:04/10/02 20:44:57
int i = 0;
while(i == 0){
  printf("Waiting...\n");
}

は、最適化されて
while(1){
  printf("Waiting...\n");
}
こういう動作をしても仕様上問題はない。

しかし、他のスレッドから書き換えられるのを待ってたりするときに
最適化されて評価されないと困る。
だから、volatileを付けてiに最適化を加えるなと指示する。
22デフォルトの名無しさん:04/10/02 20:48:38
>>8
やっぱりそうですか。ありがとうございました。
23デフォルトの名無しさん:04/10/02 20:50:30
>>18
いみわかんねー奴には
一生関係ないものだ。

もともと足りない脳みそを
無駄に使うようなマネをするな。
24デフォルトの名無しさん:04/10/02 20:52:51
宿題で「この中からC言語の仕様として定められているキーワードを選びなさい」という問題が出てるんでしょ。
25デフォルトの名無しさん:04/10/02 20:57:04
>>24
はあ?w
volatileはどう考えてもC言語の使用だろ?w
26デフォルトの名無しさん:04/10/02 21:01:04
volatileはコンパイラへのメッセージ。
言語仕様ではない、かも。。
27デフォルトの名無しさん:04/10/02 21:07:41
>>26
>volatileはコンパイラへのメッセージ。

いみふめ。
ソースコードは全て「コンパイラへのメッセージ」だろ?
28デフォルトの名無しさん:04/10/02 21:26:17
>>26
何をもって「言語仕様」と言ってるのかはわからんけど。
少なくとも規格にはありますぜ。
29デフォルトの名無しさん:04/10/02 21:28:46
こうしてまたひとつ新たなトリビアが誕生しました

「volatileは、言語仕様ではない」
30デフォルトの名無しさん:04/10/02 21:30:21
>>29
volatileって、なに?
31デフォルトの名無しさん:04/10/02 21:38:01
trivialな例で申し訳ないが、以下の関数fooが割込処理にiのアドレスを登録するものだったとする。
その割込処理は登録されたアドレスに何か書いたりする。

void func(void)
{
static int i;
foo(&i);
i = 1;
while (i)
;
}

んで、のようにやったときはループから抜け出すことができない(可能性がある)。
コンパイラは最適化でiは1から変わらないと思ってiの評価をループの外で終える
ようにするかもしれないからだ。

しかし、iの宣言をvolatileつきにすると、そのような最適化は一切行わない。
なので割込処理でiに0を設定するとループから抜けるようになる。

この辺がvolatileの存在意義。
32デフォルトの名無しさん:04/10/02 21:43:52
教えてください。
ttp://www.cmagazine.jp/src/kinjite/c/null.htmlに
『NULLにしても0にしても'\0'にしても「ゼロという値」がstrcpyのふたつ
目の引数にセットされます。』
とあるので、NULLの内部表現は0と一致していると私は思うのですが、
先輩はNULLの内部表現は0とは限らない、といって譲りません。
どちらが正しいのでしょうか。
33デフォルトの名無しさん:04/10/02 21:49:23
>>32
NULL の内部表現は 0 とは限りません。
'N''U''L''L'という文字が入っている可能性だってあります。
34デフォルトの名無しさん:04/10/02 21:54:28
>>33
NULL は0です。
しかし、必ずしも
0の機械上での表現が
0x0000とは限りません。
35デフォルトの名無しさん:04/10/02 21:57:00
>>32
一応FAQなんだけど、ポインタとして評価される文脈で字面の0が出てきたら、
それはNULLポインタとして扱われる。また、その文脈ではNULLポインタは
0として扱われる。

これはあくまでCとしての評価の話で、NULLポインタが実際にバイナリ0で
あるかどうかとは関係のない話なのだ。ただし、おれはNULLポインタを
バイナリ0以外にしている処理系は見たことがないが規格上は区別されてる。

ポインタとして扱われる文脈とは、たとえば

(void *)0; /* キャスト */
int *i = 0; /* ポインタ変数への代入*/
void foo(void *);
foo(0); /* ポインタを取る関数のパラメータ */

など。fooを例に取るとこいつに渡るのはたしかにvoid*型のNULLポインタなのだが、
パラメータを積んだスタックにバイナリ0があるとは限らないっていうこと。

# もっともスタック渡しかどうかも処理系によるんだけどそこはそれ
36デフォルトの名無しさん:04/10/02 22:01:21
>>34
はじめから内部表現の話をしているのだから一行目の突っ込みは意味不明だが・・・。

>>35
昔そういう環境もあったって話が過去スレであった気がする。
37デフォルトの名無しさん:04/10/02 22:02:31
38デフォルトの名無しさん:04/10/02 22:12:33
>>32
>NULLの内部表現は0と一致していると私は思うのですが、
>先輩はNULLの内部表現は0とは限らない、

ここで書かれている 0 が内部表現なのか数値なのかによって
話が変わってくるから、いくら議論しても無駄。
39デフォルトの名無しさん:04/10/02 22:15:27
ていうか、
「どちらも本当。但し、話がかみ合っていないけど」
という回答もありうるな。
40デフォルトの名無しさん:04/10/02 22:26:13
>>32
「内部表現」の意味がわかってない気がする。
41デフォルトの名無しさん:04/10/02 23:19:16
つーか、ネタだろ・・
新スレになったばっかだっつーのにご苦労さん
42デフォルトの名無しさん:04/10/03 00:07:59
printf("%s\n", NULL);
ってやると、
(null)
ってでるよな。
てことは、どこかで
#define NULL "(null)"
ってやってあるのか?
43デフォルトの名無しさん:04/10/03 00:09:57
>>42
printfの中で
0なら"(null)"を出力する
というふうにしてるんだろ。
44デフォルトの名無しさん:04/10/03 00:27:48
char *ptr = 0;
*ptr = 1;
ってやると、
ぬるぽ
ってでるよな。
てことは、どこかで
#define ぬるぽ 1
ってやってあるのか?
45デフォルトの名無しさん:04/10/03 00:42:35
プックス
46デフォルトの名無しさん:04/10/03 00:44:07
先生!Wide Studioでボタンに出力ってどうするんですか。
47デフォルトの名無しさん:04/10/03 00:56:29
おまいら、ヘッダファイルをのぞいてみましたよ。
linuxならこんな感じ。
% grep "define NULL " /usr/include/*/**
/usr/include/g++-3/streambuf.h:#define NULL (__null)
/usr/include/g++-3/streambuf.h:#define NULL (0)
/usr/include/linux/stddef.h:#define NULL 0
/usr/include/linux/stddef.h:#define NULL ((void *)0)
48デフォルトの名無しさん:04/10/03 00:58:46
>>46
スレ違い
49デフォルトの名無しさん:04/10/03 00:59:32
grepの使い方間違ってるし。
50デフォルトの名無しさん:04/10/03 01:25:20
        _
    ミ ∠_)
        ./
      /_∧
      /,,・∀・)
  // と    )    | | ガッ
       Y /ノ    人    ガッ
      て / )    <  >__Λ  ガッ
      _/し' //.V;´Д`)
     (_フ彡  /    ヽ ←>>44
5147:04/10/03 01:32:18
ごめん、こうだった。
% grep "define NULL " /usr/include/**/*
/usr/include/freetype2/freetype/internal/ftobjs.h:#define NULL (void*)0
/usr/include/g++-3/streambuf.h:#define NULL (__null)
/usr/include/g++-3/streambuf.h:#define NULL (0)
/usr/include/glib-2.0/glib/gmacros.h:# define NULL (0L)
/usr/include/glib-2.0/glib/gmacros.h:# define NULL ((void*) 0)
/usr/include/libio.h:# define NULL (__null)
/usr/include/libio.h:# define NULL ((void*)0)
/usr/include/libio.h:# define NULL (0)
/usr/include/linux/stddef.h:#define NULL 0
/usr/include/linux/stddef.h:#define NULL ((void *)0)

>>49
厨な漏れにgrepの使い方を教えてください。
そもそもしよう目的が違ってるとか...?
52デフォルトの名無しさん:04/10/03 02:28:16
>>51
find /usr/local -type f -print | xargs grep -n define | grep NULL
とかかな…。

これが>>49的正解かどうかは分からない

53デフォルトの名無しさん:04/10/03 02:28:43
s/local/include/
54デフォルトの名無しさん:04/10/03 07:12:17
>>51
zshが前提になってるのがいかんのじゃなかろうか。
あとgrepは

egrep '^ *# *define +NULL'

で探さないといけないんじゃなかろうか。あ。tabも考慮せんとならんか。
55 ◆FIcNi4f8js :04/10/03 07:28:04
\s
56デフォルトの名無しさん:04/10/03 12:19:13
>>52,>>54
zsh依存なのがだめなのか(´・ω・`)
って、grepの使い方とかとは関係ないような。。
zsh使ってなかったら自分が使ってるshellに適当に読み替えればいいことだし。
いずれにしてもすれ違いな質問に答えてくれてありがとうございます。
57デフォルトの名無しさん:04/10/03 12:50:09
ISO C99を使うと
char *s;
s=strdup("test");
とすると
implicit declaration of function `strdup'
と文句を言われるんですが、これってC99ではstrdupなんて使うなってことなんでしょうか?
58デフォルトの名無しさん:04/10/03 12:51:07
そもそもCにstrdupなんか無い。
59デフォルトの名無しさん:04/10/03 14:12:21
zsh依存って、**かな?
他のシェルなら例えばcshで*{,/*{,/*{,/*}}}くらいやっておけば事足りそうだけど。
#まぁ、find使えと。
60トーシロ:04/10/03 21:30:00
ちょっとお尋ねしたいのですが、引数でデータ型の後ろに*だけつけて宣言してる関数があるのですがどういう意味でしょうか?

void aaa(char *)

こんな感じです
61デフォルトの名無しさん:04/10/03 21:31:34
>>60
char型ポインタ
62デフォルトの名無しさん:04/10/03 21:35:26
>>60
プロトタイプ宣言で変数名は必修じゃないよ
63トーシロ:04/10/03 21:47:37
>>62
完璧に理解できました。どうもです
64デフォルトの名無しさん:04/10/03 22:15:09
65デフォルトの名無しさん:04/10/03 22:21:40
>>60
おいおい、右に ダッコ♪ がないぞ
66デフォルトの名無しさん:04/10/03 23:14:57
だっくぉ?
67デフォルトの名無しさん:04/10/04 02:37:07
ageとsageを掛けたり割ったりするにはどうすればいいのですか?

double age(double a1, double a2){
 return 0.5*a1 + a2;
}

double sage(double b1, double b2, double b3){
 return -7*b1 + 8*b2 + b3;
}
68デフォルトの名無しさん:04/10/04 02:42:11
またお前か!
69デフォルトの名無しさん:04/10/04 09:40:16
>>68
いや今回係数の掛け算は出来てるから別の意図の質問と思われる。
わけわかなのは以前と一緒だが。
70デフォルトの名無しさん:04/10/04 09:50:57
age(1.0,1,0) * sage(1.0,1.0,1.0);
age(1.0,1,0) / sage(1.0,1.0,1.0);
71デフォルトの名無しさん:04/10/04 12:35:43
67と同一人物か同じクラスのやつの書き込みを3つは見たな・・・。
72デフォルトの名無しさん:04/10/04 13:33:25
>>71
お前で四つ目だ。
73デフォルトの名無しさん:04/10/04 20:28:22
>>72 で5つ目
74デフォルトの名無しさん:04/10/05 14:36:23
ポインタの中身同士の割り算で
ひっさびさに例のアレやっちったよ
びっくりこいたぜ
75デフォルトの名無しさん:04/10/05 16:30:23
>>74
あぁ、ゼロ割りか。たまにやっちまうよな
まあ、がんばれ
76デフォルトの名無しさん:04/10/05 19:58:35
ゼロ除算には聞こえないなあw
77デフォルトの名無しさん:04/10/05 20:09:30
*a/*b;

↑これだろ? 空白厨が空白あけろぼけと言いそうだ。
78デフォルトの名無しさん:04/10/05 20:11:32
つか、アドレス同士で割り算するのが間違ってるだろ。
79デフォルトの名無しさん:04/10/05 20:11:47
>>77
厨でもなんでもないだろう。
空白を空けた方が見やすい。
80デフォルトの名無しさん:04/10/05 20:14:03
>>79
かっこつけたほうがいいじゃん。
81デフォルトの名無しさん:04/10/05 20:14:09
>>79
「空白あけろぼけ」を連呼していた奴のこと>空白厨 ぼけ厨と言うべきか。
82デフォルトの名無しさん:04/10/05 20:28:42
正直、召喚するような気がするのでよしてくださいませんか…
83 ◆FIcNi4f8js :04/10/05 21:38:27
キー入力するときに脳内コンパイルで気付く
84デフォルトの名無しさん:04/10/05 21:39:46
>>83
そだな・・・
85デフォルトの名無しさん:04/10/05 22:09:13
ある数の三分の一乗とか四分の一乗を計算するための関数ってありますか?
自作しなくてはならないのでしょうか?
86デフォルトの名無しさん:04/10/05 22:10:58
math.h の pow
87デフォルトの名無しさん:04/10/05 22:12:32
ぽw
88デフォルトの名無しさん:04/10/05 22:12:39
>86
即レスありがとうございます!
89デフォルトの名無しさん:04/10/05 22:42:01
#include <stdio.h>

typedef struct hit{
int atari;
int hazure;
} HIT;



int main(void)
{

HIT data[9000];

return 0;
}

HIT data[9000];の上限を500万ほどにしたいんですが
数を増やすして実行すると「問題が発生したため〜」
とでてきて動きません解決方法をお教え下さい。
90デフォルトの名無しさん:04/10/05 22:45:52
static つけるか、グローバル変数にするか
91デフォルトの名無しさん:04/10/05 23:00:45
>89
コンパイラオプションでスタック領域を増やす
92デフォルトの名無しさん:04/10/05 23:02:38
>>89
コンパイラのマニュアルで、スタックサイズを指定する方法を調べれ。
プログラムの中に不明瞭な処理系依存を持ち込むようなバカな真似はやめれ。

トラブルが起きたとき、論理的な間違いが、まず自分にあるかどうか調べ、
しかる後に相手にあるかどうか調べ、大局的に妥当な解を導く能力を大事にすれ。
93デフォルトの名無しさん:04/10/05 23:06:21
#include <stdio.h>
#define STR_MAX 20

void strngcpy(char *s, char *t){while (*s++ = *t++)
printf("s => %c t => %c\n",*s,*t);
}
int main(void){
char source[] = "hello, world";
char dest[STR_MAX];
strngcpy( dest, source );
printf("%s\n", dest);
exit(0);
}


// strngcpyで*sにアクセスするにはどうすればいいんですか?
94デフォルトの名無しさん:04/10/05 23:07:54
>89
巨大なデータはファイルとかDBを利用した方がいい鴨
95デフォルトの名無しさん:04/10/05 23:08:30
>>93
いつの時点でだ? s++ の前か、後か。
9693:04/10/05 23:10:46
s++ の後です
よろしくお願いします
97デフォルトの名無しさん:04/10/05 23:13:39
>93
void strngcpy(char *s, char *t)
{
 while (*s = *t) {
  printf("s => %c t => %c\n",*s++,*t++);
 }
}
9893:04/10/05 23:18:48
ありがとうございます
99デフォルトの名無しさん:04/10/05 23:53:54
>>96
無理
100デフォルトの名無しさん:04/10/05 23:59:35
>>89
UNIXの場合、スタックサイズは、ユーザ側の設定でも制限がかかることがある。

bashなら、
ulimit -s
で確認
ulimit -s unlimited
で制限をはずせる。
# これでハマッタことがある。

Windowsはしらん。
101デフォルトの名無しさん:04/10/06 00:05:25
>>89 普通に malloc でヒープ領域にとれないの?
HIT のメンバに next と prev 作れば可変的にも増やせるし。
102デフォルトの名無しさん:04/10/06 00:13:13
実際に500万件登録する可能性があるんなら例外が少ないほうがいいんじゃないか?
103デフォルトの名無しさん:04/10/06 01:05:12
ttp://pc5.2ch.net/test/read.cgi/tech/1087209526/243
↑このソース、 0割りを回避するらしいんですが、
double に対しても != 0 で分岐すれば0割りは回避できるんでしょうか?
104デフォルトの名無しさん:04/10/06 01:07:37
>>103
出来るんじゃない?
105デフォルトの名無しさん:04/10/06 01:25:56
>>103
出来ないんじゃない?
106デフォルトの名無しさん:04/10/06 01:29:31
そんなもの関数呼ぶ前にチェック汁
107デフォルトの名無しさん:04/10/06 01:54:59
NaN位返せばいいのに…
108デフォルトの名無しさん:04/10/06 03:21:36
な、なんだってぇぇぇ
109デフォルトの名無しさん:04/10/06 18:46:17
もるぱ
110デフォルトの名無しさん:04/10/06 19:10:10
>>103
浮動小数点の等値・非等値比較は誤差を考慮しないという致命的な欠陥を抱えている
111デフォルトの名無しさん:04/10/06 19:32:24
>>110
0除算で問題が起こるのは分母が厳密に0に一致するときだけじゃないか?
112デフォルトの名無しさん:04/10/06 19:44:58
問題が起きないケースまではねてしまうよね
113デフォルトの名無しさん:04/10/06 19:49:13
>>112
つまりa!=0はaが厳密に0じゃなくてもfalse返すことがあるってこと?
・・・true返すと思い込んでたよ・・・(´ー`;)
114デフォルトの名無しさん:04/10/06 20:56:31
そこでイプシロンですよも前ら。
115デフォルトの名無しさん:04/10/06 21:07:53
116113:04/10/06 21:43:27
>>112
確認してみたけどやっぱり厳密に 0 になるときだけだったよ。
だからそのコードは問題ないんじゃない?
確認方法は、下記のとおり。

double a = 1;

while( a!=0 )
{
a /= 2;
std::cout << a << "!=0 == " << (a!=0) << std::endl;
std::cout << a << "*2 == " << (a*2 ) << std::endl;
}
117デフォルトの名無しさん:04/10/06 21:57:45
>>116
coutはCじゃない……。
118113:04/10/06 22:00:51
>>117
ふぉっΣ(゜o゜;)
すんません。もし動かす人がいたら適当にprintfに置き換えて。
119デフォルトの名無しさん:04/10/06 22:49:57
これは1つまたは有限個の処理系での結果の写像が結論であるべき問題なのだろうか・・・・
120デフォルトの名無しさん:04/10/06 23:07:00
#include <stdio.h>
#include <time.h>
#include <stdlib.h>

main()
{
int computer;
printf("【ジャンケン】\n");

srand(time(NULL);
computer = rand()%3 + 1;
printf("コンピュータは %d",computer);
return 0;

}


↑のプログラムを実行するとコンピュータの出す値が、
1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,・・・のようにかなり偏って出てきてしまうんですがどうしてなんでしょう?
コンパイラはGCCです。
121120:04/10/06 23:08:31
すみません >>120の10行目は
srand(time(NULL));   でした。
122デフォルトの名無しさん:04/10/06 23:10:05
>>120
実装によるんじゃないか?
srand直後のrandが3の倍数を返す確率が高いのかもしれない。
123120:04/10/06 23:13:50
>>122
なるほど そんなこともあるんですか〜。
即レスどうもありがとうございました。
124デフォルトの名無しさん:04/10/06 23:14:04
>>120
randは下位ビットがランダムにならない線形合成法を使っている事が多い。
下位ビットは捨てて、上位ビットを使え。
125120:04/10/06 23:16:40
>>124
レスありがとうございます。
プログラミングを始めてからまだ1週間程度なので、
下位ビットとか上位ビットの意味がわからんです。。。
126デフォルトの名無しさん:04/10/06 23:21:05
敢えてマジレスするとtimeの返す値が変わってなくて
同じseedが使われてるからだろ
127デフォルトの名無しさん:04/10/06 23:23:31
>>125
まーなんだ、

rand() / (RAND_MAX / 3) + 1

とかすれば、切り捨ての分偏りはでるものの、
余りを使うよりはいい結果がでるってこった。
128120:04/10/06 23:25:59
>>125
マジレス感謝いたします。
>>126
おお〜 なるほど〜。それを使って再度朝鮮してみます。
どうもありがとうございました。
129デフォルトの名無しさん:04/10/06 23:36:45
>>119
ISO/IEC 9899:1999には特記事項なし。
130デフォルトの名無しさん:04/10/06 23:51:03
>>119
>>113 にも理解できるように言い換えると、
「俺の環境で出来たら問題ない、とかほざくんじゃねーよ!」
って事ですね?
131デフォルトの名無しさん:04/10/07 00:49:16
>>118
その顔文字いいな。
使わせてもらおう。
132デフォルトの名無しさん:04/10/07 01:38:29
きょうは、あたらしくおぼえたかおもじのれんしゅうをしました。

ふぉっΣ(゜o゜;)ふぉっΣ(゜o゜;)ふぉっΣ(゜o゜;)ふぉっΣ(゜o゜;)ふぉっΣ(゜o゜;)
ふぉっΣ(゜o゜;)ふぉっΣ(゜o゜;)ふぉっΣ(゜o゜;)ふぉっΣ(゜o゜;)ふぉっΣ(゜o゜;)
ふぉっΣ(゜o゜;)ふぉっΣ(゜o゜;)ふぉっΣ(゜o゜;)ふぉっΣ(゜o゜;)ふぉっΣ(゜o゜;)
ふぉっΣ(゜o゜;)ふぉっΣ(゜o゜;)ふぉっΣ(゜o゜;)ふぉっΣ(゜o゜;)ふぉっΣ(゜o゜;)
ふぉっΣ(゜o゜;)ふぉっΣ(゜o゜;)ふぉっΣ(゜o゜;)ふぉっΣ(゜o゜;)ふぉっΣ(゜o゜;)
ふぉっΣ(゜o゜;)ふぉっΣ(゜o゜;)ふぉっΣ(゜o゜;)ふぉっΣ(゜o゜;)ふぉっΣ(゜o゜;)
ふぉっΣ(゜o゜;)ふぉっΣ(゜o゜;)ふぉっΣ(゜o゜;)ふぉっΣ(゜o゜;)ふぉっΣ(゜o゜;)

たのしかったです。
おわり。
133デフォルトの名無しさん:04/10/07 02:02:06
バルタン星人!
134デフォルトの名無しさん:04/10/07 13:53:29
Σ(゜o゜;)
135デフォルトの名無しさん:04/10/07 14:17:59
32767

何が発想できますか?
136デフォルトの名無しさん:04/10/07 14:30:58
>135
サンニーナロナ
137デフォルトの名無しさん:04/10/07 14:43:24
135見てサンニーナロナがすぐに思いつかないやつはプログラマ失格
138デフォルトの名無しさん:04/10/07 16:25:16
??なにそれ。。。
139デフォルトの名無しさん:04/10/07 18:00:58
知らないやつがいるとは・・・。
140デフォルトの名無しさん:04/10/07 18:14:33
オナニーは他でやれ
141デフォルトの名無しさん:04/10/07 20:08:15
>>135
shortの最大値
142デフォルトの名無しさん:04/10/07 20:57:55
>>141
ぶっぶー
143デフォルトの名無しさん:04/10/07 21:47:38
>>141
・・・・・・・・・・。(゜o゜;)
144デフォルトの名無しさん:04/10/07 21:56:00
>>135
私の家の緯度を10000倍した数
145デフォルトの名無しさん:04/10/07 21:56:41
>>144
経度は?
146いなむらきよし:04/10/07 23:25:51
奇形の俺でもよければ何でも聞いて欲しいキケー!
147デフォルトの名無しさん:04/10/07 23:29:06
ソケットのプログラミングやってるんですが、
サーバ側のrecvの返値が、クライアントから送ったデータのサイズになりません。
つまり全部送られてきていないみたいなんです。
どういう原因が考えられますでしょうか。
148デフォルトの名無しさん:04/10/07 23:31:06
突然ですみません。
浮動小数点演算エラーって何ですか?
また、よくある原因は?
149デフォルトの名無しさん:04/10/07 23:32:22
>>147
それは正常な動作です。
ソケットプログラミングの入門書でも読みましょう
150147:04/10/07 23:33:00
いや、入門書買うお金がないからここで聞いてるんですが・・。
正常ってどういう意味ですか?
151デフォルトの名無しさん:04/10/07 23:35:29
>>150
じゃあ
http://pc5.2ch.net/test/read.cgi/tech/1096187183/
の1あたりからリンク読んでおいで
152147:04/10/07 23:39:04
そっちで質問します
153初心紗:04/10/07 23:46:29
大学の課題で、ファイルの16進ダンプを作成しなければならなくなりました。
で、プログラムを作ったのですが、こんなもんで世の中で通用しますか?
/*////////////////////////////////////////////////////////////////////////////*/
/* */
/* 機能:指定されたファイルを16進数でダンプする */
/* 使い方:HEXDMP FILE-NAME */
/* */
/*////////////////////////////////////////////////////////////////////////////*/
/* インクルードファイル定義 */
#include <stdio.h>
#include <fcntl.h>
#include <string.h>
#include <memory.h>
#include <io.h>
#include <conio.h>

/* マクロ定義 */
#define OK 0
#define NG 1
#define HEXLEN 16 /* 出力幅 4の倍数指定 */
#define STRMAX 256

/* プロトタイプ宣言 */
int MemDmp(int, unsigned char *, int);

154デフォルトの名無しさん:04/10/07 23:49:01
半角カナ使ってる時点で0点。
155デフォルトの名無しさん:04/10/07 23:50:25
いみわからね
156デフォルトの名無しさん:04/10/07 23:51:01
全角数字使ってる時点で0点。
157デフォルトの名無しさん:04/10/07 23:51:54
タブ使って書き込みした時点で0点
158デフォルトの名無しさん:04/10/07 23:53:00
>>153 これはプログラムと呼べるのか?
159デフォルトの名無しさん:04/10/07 23:54:37
ネタじゃないとしたら相当なアホだな。
実際にそれを使ってダンプしてみろよ。
160デフォルトの名無しさん:04/10/07 23:56:31
誰が松本香やねん
161デフォルトの名無しさん:04/10/07 23:56:57
/*////////////////////////////////////////////////////////////////////////////*/

やる気のなさが致命傷
162デフォルトの名無しさん:04/10/08 00:07:12
>>153
最高に頭悪そうな発言してください in ム板 (2)
http://pc5.2ch.net/test/read.cgi/tech/1090324689/
163初心紗:04/10/08 00:22:08
くそ〜みんなで ば〜にしやがって! それならウナラセルプログラムをみせてみろってんだ。
ってねぇ。言うだけならだれでもねぇできるもん。
164初心紗:04/10/08 00:26:35
>>163
あなた誰ですか?
冗談は止めてください
165プロ ◆2r7NFKA9/2 :04/10/08 00:28:01
今は作ってる最中だからな。完成したら見せてやるよ。
俺は今、Winnyのようなファイル共有方式の掲示板を作ってるんだ。
2ちゃんねる以上の匿名性を備えた、完璧な掲示板だぜ。
166デフォルトの名無しさん:04/10/08 00:30:44
他のスレで誰かが答えるなと思ったら誰も答えないのが2ch
167デフォルトの名無しさん:04/10/08 00:33:09
そう言って傍観してるのも2ちゃんねるらしいね。
168デフォルトの名無しさん:04/10/08 00:33:26
初心者です。
ライブラリに登録されているようなヘッダーファイル開いても意味がわかりません。
みなさんはわかりますか?
完璧に理解できるようになるまで、みなさんはどのくらいの年月がかかったですか。
教えてください。
169デフォルトの名無しさん:04/10/08 00:35:23
>>168
精進せいや
170& ◆fn827t8V72 :04/10/08 00:35:30
ヘッダファイルの中身を見るようになったのは1年以上たってからだな。
それにヘッダファイルの中身は理解する必要はない。
171素人 ◆2r7NFKA9/2 :04/10/08 00:37:06
名前が化けやがった。
いいか、俺のトリップをよく覚えておけ。
そのうちインターネットの歴史に名を残すようなソフトを公開するからな。
172デフォルトの名無しさん:04/10/08 00:38:29
>>171
うん、待ってるね。
173デフォルトの名無しさん:04/10/08 00:42:36
>>170
・ドキュメントのバグか?
・隠しコマンドがありそう
・どう考えても自分に責任のなさそうなエラー

こんなときだな
174デフォルトの名無しさん:04/10/08 00:51:31
ヘッダファイルなんて読んでも意味がない。処理系固有のことしか書いてないんだから。
175デフォルトの名無しさん:04/10/08 00:54:04
>>168
286マシンで、メモリが無くてソースが詰め切れなくてヘッダ内の要らない関数宣言とか削除したとき。
という過去があるので、一ヶ月くらい?
176デフォルトの名無しさん:04/10/08 00:58:46
・マクロにハメられたとき

他に同様の危険物がないか確認にいったりする
177デフォルトの名無しさん:04/10/08 01:00:18
・標準以外かつ他人が作った物を触るとき
178デフォルトの名無しさん:04/10/08 01:40:06
>>175
>メモリが無くてソースが詰め切れなくて
すまん、これさっぱり解らんのだが。どーゆーコンパイラだ?それ…
179デフォルトの名無しさん:04/10/08 01:42:31
メモリがたりなくてヘッダを展開しきれなかったとか

64k以上の行のソースを読めないのもあったな
180デフォルトの名無しさん:04/10/08 01:49:46
SDKのヘッダなら良く開いたりする。ドキュメントよりも進んだことが書いてあったりするし。
181デフォルトの名無しさん:04/10/08 02:40:57
Cのヘッダはよく中身最初見てたがC++は見ない。MSDNマンセー
182 ◆FIcNi4f8js :04/10/08 08:43:54
>>178
BDS-Cとかじゃないか?
183デフォルトの名無しさん:04/10/08 13:23:51
ある配列があって、それをある処理にかけるのに
要素と要素の間でsleepをはさんだりするとき
for(i=0;i<len;i++){
 if( i ) sleep(30);
 hoge( array[i] );
}
のようなコードなんだけど もっとエレガントに書きたいです

これって 配列の各文字列をカンマでつなげるときとかも
同じようなもんだと思うけど この書き方だとちょっとダサいし・・・
184デフォルトの名無しさん:04/10/08 13:27:03
音声ファイル変換を行っています。
以下のようなプログラムがあります

short* prbuf = new short[remain];
intTmpFlame = pWAV->_GetRemData(prbuf);

strcat(LPSTR(wh->lpData) , (LPSTR)prbuf);


_GetRemData(short*)の引数にポインタを渡すと
その型のデータを取得できるメソッドがあるのですが、
そこで取得したshort*型のデータをWAVEHDR構造体のデータ部である
LPSTR lpData// 音声データ部
に新たに追加(元からデータが格納されています)させたいのですが、
型が違うデータの追加の仕方がわかりません。
どなたか教えていただけないでしょうか?

ちなみにstrcatで
strcat(LPSTR(wh->lpData) , (LPSTR)prbuf);
とキャストしても考えていたような
結果がえられませんでした。

よろしくおねがいします。
185デフォルトの名無しさん:04/10/08 13:27:21
>>183
配列の話の最中にいきなり文字列云々が出てくるし、何を聞きたいのか判らん。
186デフォルトの名無しさん:04/10/08 13:30:47
>>183
質問の意味というか意図がよくわからん。
if( i ) で何がしたかったの?
あなたの言うエレガントとはどんなことを言うの?
187デフォルトの名無しさん:04/10/08 13:32:01
188デフォルトの名無しさん:04/10/08 13:33:01
>>187
質問してる範囲はスレ違いじゃねえだろ
189デフォルトの名無しさん:04/10/08 13:35:57
>>188
それでは環境に依存しない回答を頼む。
190デフォルトの名無しさん:04/10/08 13:38:47
>>184
wh->lpData = (LPSTR)prbuf;
じゃあダメなのか?
lpDataってこたぁポインタだろ
内容の確保されていないポインタに文字列コピーしてどうするよ?

ポインタの概念を一度勉強しなおすべし
191デフォルトの名無しさん:04/10/08 13:38:50
>>189
ハァ?質問者に回答しろって?アホかアホかアホか
192デフォルトの名無しさん:04/10/08 13:41:39
>>191
なんだ質問者か。だったら>190をよく読んで出直せ。
193デフォルトの名無しさん:04/10/08 13:43:30
>どなたか教えていただけないでしょうか?
>質問してる範囲はスレ違いじゃねえだろ
>ハァ?質問者に回答しろって?アホかアホかアホか

スレ違いって言うより、生きててごめんなさいって感じだな。
194184:04/10/08 13:43:31
>>190
wh->lpDataは、内容が確保(?)されてるんです。
(っというか、既にデータがある先を指しています。)
wh->lpData = (LPSTR)prbuf;
これだと上書いてしまいますよね。
あくまでその指してるデータに追加したいのです。
ちなみにwh->lpDataには、追加されるprbuf分のメモリも
確保されています。
195デフォルトの名無しさん:04/10/08 13:50:57
>>186

a[0]    a[1]    a[2]    a[3]
    ↑     ↑     ↑

配列を処理するときに、矢印のところでも
なにか処理をはさみたい という話
196陽気な名無しさん:04/10/08 13:51:37
mutukasiidesu
197デフォルトの名無しさん:04/10/08 13:56:53
>>194
まずはなんでstrcatを使ってるのか理由を教えてくれ
あと、文字列型でのNULLの意味も書いてみてくれ

その2つがわかってれば、バグの原因もわかるだろう
198デフォルトの名無しさん:04/10/08 14:00:21
ぬるぽ
199デフォルトの名無しさん:04/10/08 14:07:33
>>195
>183で何が気に入らないのか書いてみ。
200デフォルトの名無しさん:04/10/08 14:13:05
>>194
wav形式の取り扱いなら適切なスレがある。このままこのスレだといつまでもこの調子で話が展開するぞ。
201デフォルトの名無しさん:04/10/08 14:14:10
>>183
OK。俺に任せろ

#define elegant_sleep sleep
#define elegant_hoge hoge
#define ELEGANT_SLPTIME 30

for ( elegant_i = 0; elegant_i < elegant_len; elegant_i++){
 if ( elegant_i ) elegant_sleep(ELEGANT_SLPTIME);
 elegant_hoge( array[elegant_i] );
}

こんなところでどうだ?
forやifまでエレガントにしたかったら、自分でやってくれ
202デフォルトの名無しさん:04/10/08 14:15:45
>>200
いや、スレ違いのところに書き込んだはいいが、>>194がstrcpyなんていう
馬鹿なものを使ってるからここで正解だろう
WAVEに限らず、NULLが混じるデータを扱う場合全般にかかわる馬鹿コードだからな
203デフォルトの名無しさん:04/10/08 14:24:38
>>199
if( i ) sleep(30);

この判定文が、うまいこと他んところに紛れ込ませないかなと。
ループの最初の一回だけ処理しない、または最後の一回だけ処理しない
というのが エレガントに記述できたらなぁ と。
ループはi=0から始まるとは限らないし
204デフォルトの名無しさん:04/10/08 14:44:05
hoge(array[0]);
for(i = 1; i < len; i++){
 sleep(30);
 hoge(array[i]);
}

ではイヤかね?
205デフォルトの名無しさん:04/10/08 14:52:19
>>183
一定時間ごとにタイマイベント発生させて
イベントハンドラを呼び出すようにしたら?
スレッド作るとかして

WindowsだったらWM_TIMERメセージつかうとか
206デフォルトの名無しさん:04/10/08 15:00:53
for ( i = 0; i < len; i++, sleep(30) )
  hoge( array[i] ) ;
207デフォルトの名無しさん:04/10/08 15:21:13
>>206
それはおかしいですよ
208デフォルトの名無しさん:04/10/08 15:55:20
v(^o^i)d
209デフォルトの名無しさん:04/10/08 16:22:54
>>203
その調子で、何がしたいのかを、
まず日本語ではっきり書いてみれ。(ここにじゃなくていい)
はっきりとはどの位かというと、規格や法律の条文くらい。
1点のあいまいさも残さないように要求をきっちり定義すれ。
いざコードを書こうとすると、やることが決まっていて
悩んでいる余地がなくなっているのが理想形だ。

あなたの考える「エレガント」とは違うかも知れないが、
俺の考える「エレガント」の1つに「フラットであること」がある。
例外的な扱い(≒if 文)はいわば反例へのフォローであり、
数学的な正しさに疑問符がつくとこれがまた不快だったりする。
前提条件はあっていいが、論理の本体に傷が残るとブスなコードになる。
あなたのコードと >>204 はこの点で大きく違う。
210デフォルトの名無しさん:04/10/08 16:35:51
>>209
でも、もういいです。ありがとう。
綺麗には書けないから仕方なくif文使います。
211デフォルトの名無しさん:04/10/08 16:41:05
i = 0;
goto L1;
while(++i < len){
 sleep(30);
L1:
 hoge(array[i]);
}
でいいだろ。
212デフォルトの名無しさん:04/10/08 16:45:30
>>211
ネタ?
213デフォルトの名無しさん:04/10/08 17:06:21
数字好きな人って変な人が多いよね
ガンヲタとかアニヲタとかPCとか
214デフォルトの名無しさん:04/10/08 17:18:05
正確な統計は取ったんでしょうか。
あと数字好きという点の定義は?
215デフォルトの名無しさん:04/10/08 17:27:58
>>210
しょうがないな、のび太くんは。

    for (i=0; i<len; i++) switch (i) {
        default:
            sleep(30);
        case 0:
            hoge(array[i]);
    }

これでいい?
216デフォルトの名無しさん:04/10/08 18:06:47
>>204
len が 0 の場合こけるな。
217デフォルトの名無しさん:04/10/08 18:10:22
>>215
それだと
for(i=0; の 0 と、case 0: の 0 というように
同一の意味を持つ定数が2箇所に分かれて出てくるから
美しくないと思う。
が、しょうがないな
218デフォルトの名無しさん:04/10/08 18:30:26
>>216
だから要求定義をまずはっきりさせてからでないとキリねえっつの。
それとも T array[0]; ができるって言いたいのか?
219デフォルトの名無しさん:04/10/08 18:31:37
for( loop_count = 0, i = 0; i<len; ++loop_count, ++i )
{
if ( loop_count!=0 ) sleep(30);
hoge(array[i]);
}

これがもっとも思考に忠実でエレガント。
220デフォルトの名無しさん:04/10/08 18:37:46
思考的には 0かどうかの判定など存在せずに、
単に間に sleepを挟むだけでは?
221デフォルトの名無しさん:04/10/08 18:39:23
// (a)original(183)
for (i = BEGIN; i < len; ++i) {
if (i != BEGIN) sleep(30);
hoge(array[i]);
}
// (b)分岐なし(len対策済み)(204)
if (len > 0) hoge(array[BEGIN]);
for (i = BEGIN + 1; i < len; ++i) {
sleep(30);
hoge(array[i]);
}
// (c)switch(215)
for (i = BEGIN; i < len; ++i) {
switch (i) {
default:
sleep(30);
case BEGIN:
hoge(array[i]);
}
}
// (d)分岐なしの派生
i = BEGIN;
if (len > 0) hoge(array[i]);
for (++i; i < len; ++i) {
sleep(30);
hoge(array[i]);
}
>217の言う、定数の出現数だけなら(d)がいいように見えるが。
#私なら(a)のままだな。
222221:04/10/08 18:41:25
// (e)変数追加(219)
for (loop_count = 0, i = BEGIN; i < len; ++loop_count, ++i) {
if (loop_count != 0) sleep(30);
hoge(array[i]);
}
これはこれで、定数出現が一回か。
223デフォルトの名無しさん:04/10/08 18:42:27
>>218
長さが0ということはよくある。
T array[0];
とは無関係の話。
224デフォルトの名無しさん:04/10/08 19:02:19
今回の場合 sleep() だからいいけど、何億何十億とまわるループだと
ループ内の条件分岐を外に出せるなら出したほうが良い。
225デフォルトの名無しさん:04/10/08 19:44:31
>>224
何億何十億と配列操作するならその方が考えもんだ。
226デフォルトの名無しさん:04/10/08 19:50:18
それくらいすぐに行くけどな。
227デフォルトの名無しさん:04/10/08 20:22:36
#include <stdio.h>
main(){
char buffer[1024];
scanf("%s", buffer);
printf("%s", buffer);
}

というプログラムをtest.exeにコンパイルして
DOSからtest.exe | test.exeとパイプして起動したら
キーボードからの入力をそのまま画面に出力されることを期待してたのですが、
最初のprintfからパイプを通してscanfへと流れてないようです。

どうすれば期待通りのプログラムに出来ますか。
228デフォルトの名無しさん:04/10/08 20:43:57
>227
printf("%s\n", buffer);
229デフォルトの名無しさん:04/10/08 20:44:34
>>228
なんでやねん
230227:04/10/08 20:44:40
>>228
それも試しましたがダメでした。
231215:04/10/08 20:46:30
>>217
「switch を goto として使う最悪の例」というボケだったんだが…
232デフォルトの名無しさん:04/10/08 20:49:24
>>230
^Z+Enter で
入力したやつまとめて出てくるんじゃね?
233デフォルトの名無しさん:04/10/08 20:49:49
>>227
OS が NT 系で test.exe が 16bit の旧EXEなら、
COMMAND.COM を起動してから実験してみるもよし
234デフォルトの名無しさん:04/10/08 20:50:17
>>232
俺も一瞬そう思ったが、EOF 判定はしてないぞ
235デフォルトの名無しさん:04/10/08 20:50:26
>>232
質問ちゃんと読んだら?
オレは答えはわかるけど、説明する気にもなれん
23689:04/10/08 20:51:48
>>90-92
どうもありがとうございます。
スタック領域を増やすと少し増やす事が出来ました。
237227:04/10/08 20:53:07
>>233
OSは2000でEXEのbitはわかりませんが、
変わりありませんでした。
238デフォルトの名無しさん:04/10/08 20:57:37
>>232
してないとは言い切れないぞ。
239デフォルトの名無しさん:04/10/08 21:00:40
>>227
DOSはマルチタスクではないので、前段プロセスが終了するまで後段プロセスがスタートしない。
そうでない場合でも、改行するまでは入力がバッファリングされてしまう。
240デフォルトの名無しさん:04/10/08 21:01:44
Win2kならDOSじゃないだろ……_/ ̄|○
241デフォルトの名無しさん:04/10/08 21:04:24
>>237
>EXEのbitはわかりませんが

コマンドラインみしてみ
242デフォルトの名無しさん:04/10/08 22:59:07
レスちがいを承知でおしえてもらいいことがある、パソコンのプロのみなさまへ
今日メモリクリーナなるものをDLしてつかったところ何も開いていない状態で
みたら60Mぐらいつかわれていた・・これって一体なににそんなとられてるの?
メモリー俺のパソは128しかないんで・・・解放しても70Mぐらいからはじまる
まじでいったい何が60Mもつかってるの?てかfreeとなんか似てるな
って、まじでおしえてください・・60Mのメモリのパソならなんもできないじゃん
60も意味不明にとられてたら・・バスタかなんかですか?
243デフォルトの名無しさん:04/10/08 23:08:39
>>242
氏んでこい
244デフォルトの名無しさん:04/10/08 23:13:53
>>242
メモリクリーナってのはわざと大量のメモリを確保する。(中身は全く手を付けないけど)
そのときWindowsはメモリが足りなくなるので今までのメモリの内容をスワップファイルへ書き出す。
そしてすぐに確保したメモリを解放する。当然このときにスワップからメモリに書き戻されるのだが、
このときWindowsは虫食い状態になっていた空き領域を1ヶ所に集めて空き領域が連続ようにメモリに書き出す。
基本的にはこの空き領域が連続させることがメモリクリーナの効果。

こういうのはソフトウェア板で聞け。
245デフォルトの名無しさん:04/10/08 23:15:49
おまえらconst付けてるか
246デフォルトの名無しさん:04/10/08 23:21:11
明らかに釣りだな
マジレスしてるやつ頭悪スレ池
247デフォルトの名無しさん:04/10/08 23:28:44
C言語の中括弧とかのタブの取り方っていろんなスタイルあるけど,
大体手本となるような本とかWebページは同じやり方だよね。
例えば,if文を例に取ると,大概のページ・書籍には

if(……){
処理1;
処理2;
}

って書いてあるけど,俺は

if(……)
{
処理1;
処理2;
}

っていうほうが見やすい。
やっぱり前者のほうで書いて勉強を続けていったほうがいいのかなぁ。
248デフォルトの名無しさん:04/10/08 23:29:50
249デフォルトの名無しさん:04/10/08 23:38:33
サンキュウ
250デフォルトの名無しさん:04/10/09 02:58:22
プログラムの高速化を図りたいのですが各命令の速度の比較は分からないでしょうか?
例えばa=a+bを1とすると
a=a*b 3
if    10
rand  20
みたいな感じで。
251デフォルトの名無しさん:04/10/09 03:11:53
>>250
プロファイル取るか、CPUの仕様書でも読め。
252デフォルトの名無しさん:04/10/09 03:41:53
>>250
a=a+bがいつも1だとは限らないしな。
253デフォルトの名無しさん:04/10/09 05:54:36
数万個ある小さなファイルを順番に読み込んでるんですが、数が進むにつれて
読み込み速度がどんどん低下してしまいます。何か解決法はありますか?
254デフォルトの名無しさん:04/10/09 05:55:40
なぜ遅くなってるのかを解析する。
255デフォルトの名無しさん:04/10/09 06:04:10
>>253
例えば読み込んだファイルを全てメモリに確保して、
新しいファイルが読み込まれても削除してないとか。
256デフォルトの名無しさん:04/10/09 06:07:52
>>253
読んだデータは全部メモリ上に保持してたりする?
メモリ不足でページフォルト起こしてるんだろ。
257デフォルトの名無しさん:04/10/09 07:22:51
>253
小さなファイルが数万個あること自体がアウツ
258デフォルトの名無しさん:04/10/09 09:26:07
万個って言いたかっただけだろ。
259デフォルトの名無しさん:04/10/09 11:39:16
C言語でメールクライアントを作っているのですが
retr 1をした後に送られてくるデータを*bufに入れたはいいが
空行でメールのヘッダと本文に分けたい(分かれ目のポインタの値が知りたい)
strcmpとかでやってみたところ、うまく分かれてくれないんだが
どうすればいいんでしょうか?

260デフォルトの名無しさん:04/10/09 11:41:45
あきらめろ
261デフォルトの名無しさん:04/10/09 11:42:49
>>259
chomp せよ
262デフォルトの名無しさん:04/10/09 12:01:29
*bufをchompしても、最後の改行が消えるだけで
分けれないんですが。
263デフォルトの名無しさん:04/10/09 12:05:36
正規表現使えば楽。
264デフォルトの名無しさん:04/10/09 12:16:38
p = strstr(buf, "\n\n"); ?
265デフォルトの名無しさん:04/10/09 12:36:12
p = strstr(buf, "\n\n");

最初、それで余裕とか思ってたらOUTでしたorz
266デフォルトの名無しさん:04/10/09 12:42:55
\n\r\n\r
じゃないの?
267デフォルトの名無しさん:04/10/09 12:55:26
orz
\n\r\nで、逝けた。。。。。。
板汚しスマソ
268デフォルトの名無しさん:04/10/09 13:07:14
execやspawnは外部プロセスを終了させないと制御が戻ってこないですが、
外部のプログラムを実行して、そのプロセスを終了させないで、制御を元のプログラムに戻すことはできるのでしょうか?
269デフォルトの名無しさん:04/10/09 13:11:39
_P_NOWAIT もしくは INT 27H などいかが?
270268:04/10/09 13:58:08
もしかしてボーランドのコンパイラでしょうか?
私はLSIC試食版を使っていますが、INCLUDEの中からは発見できませんでした。
271デフォルトの名無しさん:04/10/09 14:04:59
>>268
LSI-Cじゃどっちみち限界があるからBCCでも使え。
それと、プロセス制御は環境依存するから該当スレへ。
【初心者歓迎】C/C++室 Ver.9【環境依存OK】
http://pc5.2ch.net/test/read.cgi/tech/1094494997/
272デフォルトの名無しさん:04/10/09 14:05:49
>>269
>INT 27H
それはどうかと…w
mov ax, 35xxh
int  27h
だっけか?もうとっくに忘れてるや
273268:04/10/09 14:55:27
【初心者歓迎】C/C++室 Ver.9【環境依存OK】
http://pc5.2ch.net/test/read.cgi/tech/1094494997/
にて質問します。

黙って移動してすいませんでした。
274デフォルトの名無しさん:04/10/09 14:59:41
>>268
(POSIX って前提で) ふつー、fork して exec か、または popen しないか?
一度、system("hoge &"); してるのは見たことがあるが。
275268:04/10/09 15:09:16
>274
ごめんなさいwindowsXP Proです
276デフォルトの名無しさん:04/10/09 15:13:51
MSYSでmingwを使うと、日本語部分が文字化けするのですけど
どうやれば対処できるのでしょうか?
277デフォルトの名無しさん:04/10/09 15:16:42
>>276
環境依存のスレで聞いてください
278227:04/10/09 18:11:24
マルチスレッド化してみましたがやはりうまくいきませんでした。

#include <stdio.h>
#include <sys/types.h>
#include <process.h>
#include <windows.h>

unsigned __stdcall func(void *arg){
char buf[1024];
while(1){
scanf("%s", buf);
printf("%s", buf);
}
}


int main(int argc, char *argv[])
{

unsigned d;
int id;
id = _beginthreadex(NULL, 0, func, (void *)1, 0, &d);
if( id==NULL ){
fprintf(stderr, "error.");
return 0;
}
while(1){
Sleep(100);
return 0;
}
}
279デフォルトの名無しさん:04/10/09 18:18:47
>>278
1行ずつバッファリングされるってレスついてたと思ったけど?
どううまくいかないのかね。
280デフォルトの名無しさん:04/10/09 18:49:21
aやsなどのキーを押したように仮想させるには、具体的にどのように書けばいいのでしょうか?
281デフォルトの名無しさん:04/10/09 18:51:00
>>280
まずはイメージトレーニングだ
282デフォルトの名無しさん:04/10/09 18:53:47
>>280
標準入出力だけじゃ無理。
即ち、標準関数だけじゃ無理。
283デフォルトの名無しさん:04/10/09 18:57:23
>280

stdinから読み込むがごとく、ファイルから読め
284デフォルトの名無しさん:04/10/09 19:12:37
他のヘッダファイル等を使えば可能ですか?
ルーチンのようなものをCで作れればと思っているのですが。
285デフォルトの名無しさん:04/10/09 19:14:47
>>284
人の話を聞け
286デフォルトの名無しさん:04/10/09 19:21:54
>>285
すみません。
Cは数値解析で使ったことしかなく、他の事に関してはまったくの初心者なのです。
287デフォルトの名無しさん:04/10/09 19:46:14
Microsoft Visual Studio .NET でC/C++の基本的練習するとしたら、どうしたらいいと思いますか?
288デフォルトの名無しさん:04/10/09 19:47:05
次の質問をどうぞ
289デフォルトの名無しさん:04/10/09 20:04:49
自作関数のヘッダにstring.hという名前をつけて#include "string.h"で
インクルードしてるんですが、#include <string.h>を同じソース上に書いても
問題ないのでしょうか?
290デフォルトの名無しさん:04/10/09 20:33:14
>>280
freopen てことじゃなくてか?
291デフォルトの名無しさん:04/10/09 21:27:55
>>289
問題ないと思うがお薦めしない。
その自作関数のヘッダのファイル名を変えとけ。
292デフォルトの名無しさん:04/10/09 22:27:46
構造体のメンバーに long hoge:8; のようなものがあるのですが、
':'の意味と、そのあとの数字の意味を教えて下さい。
293デフォルトの名無しさん:04/10/09 22:31:25
>>292
ビットフィールドで調べてみよう
294デフォルトの名無しさん:04/10/09 22:46:33
long hoge:8;って激しく無意味だな・・・。
295デフォルトの名無しさん:04/10/09 23:03:45
long unko:69;
296sage:04/10/09 23:10:20
C標準関数とシステムコールの違いを教えてください
297 ◆FIcNi4f8js :04/10/09 23:17:23
298デフォルトの名無しさん:04/10/09 23:17:29
>>296
なんで検索しないんですか?
299 ◆FIcNi4f8js :04/10/09 23:18:35
ぐぐるだけでいっぱいでてくる
ttp://x68000.startshop.co.jp/~68user/unix/func.html
300sage:04/10/09 23:32:01
この書き方がよくない理由はなに?
if (!strcmp(a, b))
301デフォルトの名無しさん:04/10/09 23:35:27
>>300
strcmp が真偽値を返すわけじゃないから、かな。
別に結果は同じだけど ==0 にした方がわかりやすい。
strequal という関数を作ったほうがもっとわかりやすい。
302227:04/10/09 23:41:11
>>279
みのがしてました
printfのあとにfflush(stdout)をいれることで解決しました。
みなさんありがとうございます。
303デフォルトの名無しさん:04/10/09 23:45:55
>>300
not string compare と読ませることにメリットがない
304デフォルトの名無しさん:04/10/09 23:49:54
>301
>strequal

とはいえ大小比較するからなぁ...
305デフォルトの名無しさん:04/10/10 00:00:50
#define strequal(a,b) (strcmp((a),(b))==0)
306デフォルトの名無しさん:04/10/10 00:59:25
localtime()はtmのポインタを返すんですが、
これによって得られたtmは使った後解放してやる必要があるんでしょうか。
307デフォルトの名無しさん:04/10/10 01:10:44
>>306
なぜ、そう思ったんだ?
308デフォルトの名無しさん:04/10/10 01:15:39
ポインタを返すということは、localtime()の関数内部でmallocをしている可能性があるので、
こっちで解放してやらないとメモリがどんどん食われると思ったんです。
あるいはローカルの静的なオブジェクトを返しているのかもしれないですが、
どちらか分からないので。
309デフォルトの名無しさん:04/10/10 01:16:11
>>306
解放してはだめ。
310 ◆FIcNi4f8js :04/10/10 01:53:06
仕様書読めば書いてあることをわざわざ聞くのは
その仕様に納得してないから?
311マジレスしてみるテスト:04/10/10 02:14:46
>>310
いいえ。仕様書へのアクセス手段を知らないからです。
みながみなεπιστημηみたいな言語オタクだと思うなよ。
312デフォルトの名無しさん:04/10/10 02:23:20
標準関数の仕様書くらいどこにでもころがってるだろ
313デフォルトの名無しさん:04/10/10 02:37:40
>>308
ttp://www.linux.or.jp/JM/html/LDP_man-pages/man3/localtime.3.html

ここにもあるように静的な領域を確保するらしいけど

 引き続いて呼び出されるあらゆる日付や時刻に関する関数によって上書きされる可能性がある。

とあるように、localtime() を複数回呼び出しても「メモリがどんどん食われる」事はないと思う。
314デフォルトの名無しさん:04/10/10 02:44:00
επιστημηって言語の仕様をすべて暗記してるのか?
315デフォルトの名無しさん:04/10/10 03:28:24
επιστημη氏は、記憶力聡明な人ではあると思う。
が、全てのプログラマが記憶力聡明であるわけではないし、
また優秀なプログラマでも、記憶力が乏しい人もいる。
お互いを摺り寄せる努力が必要だ。
316デフォルトの名無しさん:04/10/10 03:36:39
記憶力聡明?
いいかげんな造語だな。
317デフォルトの名無しさん:04/10/10 10:09:32
> そうめい【聡明】
> ―な
> ―に
>
> 〔「聡」は耳が、「明」は目がさといこと〕 物事や人情などに対する判断力・洞察力にすぐれ、自分の置かれている
> 環境で第一になすべき事を十分に自覚している様子。
Shin Meikai Kokugo Dictionary, 5th edition (C) Sanseido Co., Ltd. 1972,1974,1981,1989,1997
318デフォルトの名無しさん:04/10/10 10:12:20
まぁ、まともな奴ならマニュアルくらい普通に読めるだろって話だな。
319デフォルトの名無しさん:04/10/10 10:16:56
マニュアルを持ってればな
320デフォルトの名無しさん:04/10/10 10:21:40
マニュアルにアクセスすることすらできない奴はまともとは言えない。
321デフォルトの名無しさん:04/10/10 10:23:46
まぁ、まともな奴ならマニュアルくらいどこで見つけられるか知ってるだろって話だな。
322デフォルトの名無しさん:04/10/10 10:56:50
このヌレの住民って本当に優しいな。見なおしたよ。
323デフォルトの名無しさん:04/10/10 11:30:36
int a;
printf("%d %d\n",
sizeof(int), sizeof a);

というのをiccでコンパイルすると

ero.c(6): remark #181:
argument is incompatible with corresponding format string conversion
        sizeof(int), sizeof a);
        ^
のようなのが出ます。

sizeofの前に(int)とかつけると出なくなりますが
そもそもsizeof演算子を使うと、どういうデータ型になるので
すか?
324デフォルトの名無しさん:04/10/10 11:37:40
>>311
>仕様書へのアクセス手段を知らないからです。
ばかだからでは?
325デフォルトの名無しさん:04/10/10 11:39:57
>>323
size_t
これは大抵unsigned intがtypedefされている。
326デフォルトの名無しさん:04/10/10 11:53:50
>>325
%u にすると出なくなりました。

ありがとうございます。
少しえろくなりました。
327デフォルトの名無しさん:04/10/10 11:54:47
%uにするよりも、頭に(int)つけるほうが賢い対処法だったのになぁ・・。
328デフォルトの名無しさん:04/10/10 12:06:19
>>327
gcc に糞メッセージを出させないようにするのがスジな気がしないでもない。
329デフォルトの名無しさん:04/10/10 12:29:10
iccだよ
330デフォルトの名無しさん:04/10/10 14:11:32
ちょいと調べてみると、size_t には
POSIX では %zd
Microsoft では %Id
C99 のフォーマットマクロにはなし
なんだな。
331デフォルトの名無しさん:04/10/10 15:26:33
>>330
C99も%zd
332デフォルトの名無しさん:04/10/10 16:29:32
>>331
あれ ?
%zu ではなくて %zd なの ?
333デフォルトの名無しさん:04/10/10 17:14:01
>>332
確かに%zuの方が良いかもしれん。
符号無から符号有の変換は未定義だか処理系依存だからな。
334デフォルトの名無しさん:04/10/10 21:36:42
C++ の bool のようなものを定置したいんですが、
typedef enum{ false = 0, true = 1 } bool;

typedef enum{ false = ( 0 != 0 ), true = ( 0 == 0 ) } bool;
のどちらがいいのでしょうか…
335デフォルトの名無しさん:04/10/10 21:41:56
Cでは真偽値は0と1と決まっているから前者でいい。
336デフォルトの名無しさん:04/10/10 21:43:33
>>334
どちらよりも、 #include <stdbool.h> がよい。

それがだめなら、どちらかというと前者。
理由は、下の書き方にしてもメリットは無いから。
337デフォルトの名無しさん:04/10/10 21:46:25
学校の課題で使うので stdbool はちょっと無理かなと…
長いことC++やってるんでCの細かい仕様なんか忘れちゃった(´・ω・`)
338デフォルトの名無しさん:04/10/10 21:50:09
stdbool.hがないなら、

#ifndef STDBOOL_H
#define STDBOOL_H
typedef enum {false, true} bool;
#endif

をstdbool.hと名付けるよろし。
339335:04/10/10 21:50:18
しばらくC++ばっか使ってたら頭からstdbool抜けてた(焦
>>337
stdbool.hは標準のヘッダだから、なかったらその環境がおかしい。
340デフォルトの名無しさん:04/10/10 21:52:05
>>338
stdbool.h を真似るなら、もっと小細工が要りそうだ。
341デフォルトの名無しさん:04/10/10 21:53:23
>>339
いや、C99がどうとかじゃなくて、例えばC++の演習で
std::vectorとか使ったらやり杉じゃないのかなあ…という感じで・・

まだCのテキスト渡されて関数すらやってない感じなので・・・
342デフォルトの名無しさん:04/10/10 21:56:18
複数のCプログラムから実行ファイルを作る make を(WindowsXPの)コマンドラインで使いたいのですが、
ググってみても分かりませんでした。どうすればよろしいのでしょうか?
Linux環境であれば make が出来るのですが、Windows でのやり方が分かりません。
343デフォルトの名無しさん:04/10/10 21:57:11
DVD-RAM書き込みや、メディア(DVD-RAMの空き容量)の情報を取得するには、
どのようにすればいいのでしょうか?
MMCのコマンドを使用すれば可能とのことらしいのですが、
ググッテもよくわかりませんでした。
ご存知の方いらっしゃいましたら、教えてください。
参考になるHP/書籍を教えていただけるだけでも構いませんので、よろしくお願いします。
OS:windows2000
言語:C言語
コンパイラ:VC6.0
344デフォルトの名無しさん:04/10/10 22:00:19
>>334
できない。あきらめろ。
bool a;
a = 2;
if(a == true) goto hell;
345デフォルトの名無しさん:04/10/10 22:08:43
>>344
そこまで厳密にやるわけではないので大丈夫です…

にしても C++ だと enum では int からの暗黙の型変換が
出来ないために bool が新しく出来たってのに、Cでは
typedef enum{ false = 0, true = 1 } bool;
bool b = ( 0 == 0);
これが動くんですね…
346デフォルトの名無しさん:04/10/10 22:11:10
>>345
某社のライブラリのように大文字で BOOL なら
まがいものと割り切って使えという表示になる
347デフォルトの名無しさん:04/10/10 22:11:39
>>345
C++のboolでも bool b = ( 0 == 0); はコンパイルとおるぞ。
「動く」とはまた違うのかもしれんが。
348デフォルトの名無しさん:04/10/10 22:15:27
「まがいもの」で済む問題かどうかも疑わしい
それは #define begin { と同質

頭がおかしくなってしまってからでは自覚不能に陥るぞ
349デフォルトの名無しさん:04/10/10 22:20:35
>>347
それが通るように bool が新しく作られたですよね・・
プリプロセッサは使いたくないし、class にしてもうまくいかない…
enum にしても型変換が出来ない・・

皆さんのアドバイス通りとりあえず前者にしておきます。
ありがとうございました
350デフォルトの名無しさん:04/10/10 22:35:45
351342:04/10/10 22:36:37
すみません、>>342 もお願いします。
352デフォルトの名無しさん:04/10/10 22:39:20
>>351
nmake
353342:04/10/10 22:45:18
>>352
ありがとうございましたm(_ _)m
354343:04/10/10 22:58:51
>>350
ありがとうございます。
ですが、書き忘れていました。言語は「C言語」のみで(「C++」は不可)でした。
折角、教えていただいたのに申し訳ございません。


webでちょこちょこ調べてみてはいるのですが、
実装出来そうな方法が、「ASPI(SPTI)」、「MMC(マルチメディアコマンド)」
位しか出てきませんでした。
この辺を使用してCプログラムを書いたことがある方いらっしゃいませんでしょうか?
355デフォルトの名無しさん:04/10/10 23:03:09
>>354
DirectXはCでも使えなかったっけ?
356デフォルトの名無しさん:04/10/10 23:06:30
Cでも使えたと思うが
357343:04/10/10 23:18:43
>>355-356
すみません。Cで使えるとは知りませんでした。
使用方法と自分のやりたい事が実装できるか調べてみます。
どうもありがとうございました。
358デフォルトの名無しさん:04/10/10 23:19:44
>>350 >>355
答えるな。>>343 が図に乗ってスレ違いに気付いていない。
359343:04/10/10 23:24:39
>>358
図に乗っていません。本気で困っています。
たしかにC以外のlibやapiを使うと言う意味ではスレ違いかもしれませんが、
他に適切なスレが見つからなかったので、ここで聞いています。
適切なスレをご存知であれば、誘導してもらえないでしょうか。
360デフォルトの名無しさん:04/10/10 23:33:16
int double float
361デフォルトの名無しさん:04/10/10 23:33:27
362デフォルトの名無しさん:04/10/10 23:34:37
363デフォルトの名無しさん:04/10/10 23:35:21
364343:04/10/10 23:38:28
C限定なんですけど・・・
365デフォルトの名無しさん:04/10/10 23:41:02
流れに乗ろうかと思ったがまぁいいや。

>359
>図に乗っていません。本気で困っています。
おまいさんが困っているかどうかなどこっちには関係ない。

>他に適切なスレが見つからなかったので、ここで聞いています。
で、スレッドの検索ぐらいしたんだろうな?おい。

Win32API質問箱 Build23
http://pc5.2ch.net/test/read.cgi/tech/1095534704/

【初心者歓迎】C/C++室 Ver.10【環境依存OK】
http://pc5.2ch.net/test/read.cgi/tech/1097416187/

鬱だ氏のう DirectX (Part 15)
http://pc5.2ch.net/test/read.cgi/tech/1096649788/
366343:04/10/10 23:43:49
>>361、363
どうもです。そっちに移動します。
DirectXで実装できなそうだったら、戻ってくるかも知れませんが、
その時は、またよろしくお願いします。

>>364は、俺じゃないです。
よくそうやってからかえるよな。あんた最悪だな。

367デフォルトの名無しさん:04/10/10 23:50:43
>>366
>>354 はだれ?
368デフォルトの名無しさん:04/10/10 23:55:10
>366
おいおい、このスレには戻って来ちゃだめだっつーの。
後、最後の1行は余分。2ch で質問するなら煽り耐性は持っててほしい。
とりあえず自分の心の中だけで罵っとけば平和。
369343:04/10/11 00:03:33
>>365
スレッド検索はしました。
「【初心者歓迎】C/C++室 Ver.10【環境依存OK】 」は見つけたんですが、
こっちとの違いが良く分からなかったので。
(>>1を読んだらすれ違いだと分かりました。)
↑のほうが適切だったんですね。以後、気をつけます。
今更書いてもしょうがないかも入れませんが、Win32Apiではなく(Dos)Commandを
作るイメージでした。
(俺が、細かいことまで書かなかったのが原因です、すみません。)

>>367
>>354は自分です。

>>368
ベタのC言語専用スレだったんですね。すみません。
370デフォルトの名無しさん:04/10/11 00:06:56
main で return するのと プログラムのどこかで exit するのと
どこが違うのでしょうか?
371デフォルトの名無しさん:04/10/11 00:12:59
おなじ
372デフォルトの名無しさん:04/10/11 00:17:07
処理系によってはI/Oのフラッシュ等をせずに終らせる機能もある。非常用。<exit
373370:04/10/11 00:23:43
ありがとう。
374デフォルトの名無しさん:04/10/11 00:27:29
>>372
そのexitはやばいんじゃないの?
abortならそれでもいいけど。
375デフォルトの名無しさん:04/10/11 00:30:38
整構造で組み立てる気がない者が使う分には exit と abort は気分の差
376デフォルトの名無しさん:04/10/11 00:35:21
exit で終わろうが、セグフォで終わろうが、気分の差
377デフォルトの名無しさん:04/10/11 00:36:24
で、どっちの場合も malloc してた場合は free しないといけないんですか?
378デフォルトの名無しさん:04/10/11 00:38:36
free不要。時にexit書くような所では危険。
379デフォルトの名無しさん:04/10/11 00:43:42
char a;
// (中略)
printf("あああ%cいいい",a);

これで、「あああいいい」という風に、空白も無しに表示させるにはaに何を代入すればいいのでしょうか?
380デフォルトの名無しさん:04/10/11 00:45:03
>>379
a='\0'
381デフォルトの名無しさん:04/10/11 00:45:52
char a[] = { 0, 0 };
// 中略
printf("あああ%sいいい", a);

として a[0] に \0 を入れる。
382デフォルトの名無しさん:04/10/11 00:45:55
>>380
気は確かか?
383デフォルトの名無しさん:04/10/11 00:47:00
>>381
問題変えるなよ。
384デフォルトの名無しさん:04/10/11 00:50:32
a=255;
385デフォルトの名無しさん:04/10/11 00:50:43
>>377
main()
{
malloc(1);
exit(0);
}
これがOKと言いたいだけな消防と話すことはない
386デフォルトの名無しさん:04/10/11 00:51:43
'\b'
387デフォルトの名無しさん:04/10/11 00:57:24
a=127;
388デフォルトの名無しさん:04/10/11 02:00:54
Cのプログラムで、複数の .c ファイルをコンパイル・リンクするときに、
グローバル変数が二重定義になることがあるのですが、
それを避けるにはどうすればよろしいのでしょうか?
389デフォルトの名無しさん:04/10/11 02:02:31
static
390デフォルトの名無しさん:04/10/11 02:06:45
>>388
extern で宣言と定義を区別
初期値を指定しない
391デフォルトの名無しさん:04/10/11 02:08:48
名前がファイルによってかぶっているときには>>389
実体が1つのはずのものが二重定義になるときは>>390
392デフォルトの名無しさん:04/10/11 02:10:16
>>389
ありがとうございます。

>>390
ヘッダファイルは extern にして、.c ファイルで定義するということでしょうか?
393デフォルトの名無しさん:04/10/11 02:12:02
>>391
複数の .c ファイルで同じヘッダファイルを使うときはどうなのでしょうか?
394デフォルトの名無しさん:04/10/11 02:18:54
395デフォルトの名無しさん:04/10/11 02:19:03
>>393
>>392の4行目でいっている通り
396デフォルトの名無しさん:04/10/11 02:19:24
390-391では無いが、
ヘッダにグローバル変数は書かない事を勧める。
IDEなら良いが、素のエディタでは把握できなくなる。
397デフォルトの名無しさん:04/10/11 02:22:52
例えば、xxx.h を yyy.c と zzz.c の両方で include するとき、
xxx.h では変数を extern 宣言して、yyy.c で変数の実体を定義すればよいのでしょうか?
398デフォルトの名無しさん:04/10/11 02:25:29

レス・ハンコック「C言語入門」という本を見てみたら、冒頭のサンプルソースに#include <stdio.h>なしにprintf()関数を使ってるソースを出してるんですが、一応コンパイルできるんでしょうけども、入門書的にはアリなんでしょうか?

それとも昔はこれでよかったんでしょうか?
399デフォルトの名無しさん:04/10/11 02:31:38
>>395-396
御親切なアドバイスをありがとうございましたm(_ _)m
またどうしても分からなかったら質問させて頂きます。
400デフォルトの名無しさん:04/10/11 02:32:06
>398
リンカのデフォルトに入っている処理系は多い。
たとえばVCだと、
#pragma comment(linker, "/nodefaultlib:\"libc.lib\"")
として実行ファイルサイズを切り詰める場合もある。
401デフォルトの名無しさん:04/10/11 03:01:01
>>398
いい訳がない。もしそれよりも前のどこかに「冗長になるから省く」などと
書かれていれば理解できるけれども。
402デフォルトの名無しさん:04/10/11 03:08:26
>>400
なんかズレてないか? なぜリンカが出てくる?

>>398
昔はそれでよかった。
今でもプロトタイプを省略しても間違いではないのだが、省略するメリットは無く、思わぬデメリットを食らうこともある。
よって、入門書的にはNG。
403デフォルトの名無しさん:04/10/11 03:12:35
.cファイルって.hファイルがインクルードされる前に
全てコンパイルされるんですか?
404デフォルトの名無しさん:04/10/11 03:14:55
プリプロセス(含インクルード)してからコンパイルだろ
405デフォルトの名無しさん:04/10/11 03:15:05
>>403
プリプロセッサ→コンパイラ→リンカ
の順に動くから、#include が先に展開される。
406デフォルトの名無しさん:04/10/11 03:17:36
ヘッダファイルを処理するプログラムを日本語に訳してみろ
407デフォルトの名無しさん:04/10/11 03:18:41
違った。
○#ディレクティブを処理するプログラム
×ヘッダファイルを処理するプログラム
408デフォルトの名無しさん:04/10/11 05:07:28
>>406
前処理
409デフォルトの名無しさん:04/10/11 12:57:50
#include "oresama.h"
410デフォルトの名無しさん:04/10/11 13:07:40
>>379

ちょっとうるさいけど char a='\a';
411デフォルトの名無しさん:04/10/11 13:42:30
return文では、なぜ括弧をつけるスタイルとつけない
スタイルが許されているのでしょうか?
412デフォルトの名無しさん:04/10/11 13:44:14
>>411
は?
a = 1;
は許すが、
a = (1);
はコンパイラで弾けって事か?
413デフォルトの名無しさん:04/10/11 13:54:57
>>412
if a {}
はなぜ弾くのかってことじゃないか?
414デフォルトの名無しさん:04/10/11 13:56:33
おまえらくだらない話題ほどよく絡みますね
415デフォルトの名無しさん:04/10/11 14:02:00
>>414
おまえくだらない話題ほどよく絡みますね
416デフォルトの名無しさん:04/10/11 14:04:47
>>411
文法的にそういう決まりになっているから。
417デフォルトの名無しさん:04/10/11 14:07:23
未だにCでは最後の評価式の値がそのまま返り値にできないんですか?
418デフォルトの名無しさん:04/10/11 14:09:10
>>417
ガキかお前は
419デフォルトの名無しさん:04/10/11 14:14:01
>>417
そんな無駄な仕様は入れない。
420デフォルトの名無しさん:04/10/11 14:29:15
無名関数が欲しいです
421デフォルトの名無しさん:04/10/11 14:51:55
>>410
char a[2] = {'\0', '\0'};

a[0] = 'a';
printf("->%s<-\n", a);
a[0] = '\0';
printf("->%s<-\n", a);
422421:04/10/11 14:52:26
>>379
>>410
423デフォルトの名無しさん:04/10/11 15:54:46
>421
%sぢゃねーて
424398:04/10/11 16:53:52
>>401, >>402

お返事ありがとうございます。

そういえばK&Rにもプロトタイプ省略のソースが載っていたと思うんですが、今でも推薦する人が多いようですね。
425デフォルトの名無しさん:04/10/11 17:08:27
>>417
昔からCではreturnを書かない時は最後の評価式の値がそのまま戻値だ。

最近のコンパイラは関数定義で戻値の型が指定されているときはreturnが必要で、
戻値がvoidの時は逆にreturnを書くな。とコンパイルエラーが出る。
ただそれだけ。
426デフォルトの名無しさん:04/10/11 17:14:09
>>425
大嘘を書くな、大嘘を。
427デフォルトの名無しさん:04/10/11 17:35:03
C言語で連想配列やスタック、キューといった基本的なデータ構造が
使えるSTLみたいなライブラリはありませんか?単純なものでいいんですが、
できればGPLでないやつがいいんですが・・・
428デフォルトの名無しさん:04/10/11 17:45:01
boostってGPLだっけ?
429デフォルトの名無しさん:04/10/11 17:45:56
>>428
この際boostがGPLかどうかは殆ど関係ないと思うのだが。
430デフォルトの名無しさん:04/10/11 17:48:19
>>428 ちがうよ
431デフォルトの名無しさん:04/10/11 17:48:54
>>426
何が大嘘?
432デフォルトの名無しさん:04/10/11 17:50:18
>>431
× 昔から
○ 昔は
じゃないか?
433デフォルトの名無しさん:04/10/11 17:52:12
>>431
プ
434デフォルトの名無しさん:04/10/11 17:53:11
> 戻値がvoidの時は逆にreturnを書くな。とコンパイルエラーが出る。

おいおい。
435デフォルトの名無しさん:04/10/11 17:54:53
boostってCのAPIあんの?
436デフォルトの名無しさん:04/10/11 17:57:08
>>425
return;は?
437デフォルトの名無しさん:04/10/11 17:58:48
> 戻値がvoidの時は逆にreturnを書くな。とコンパイルエラーが出る。
とあるんだから、、
438431≠425:04/10/11 18:08:33
あーなるほど。確かにreturn書くなって言われたら困るわなぁ。
439デフォルトの名無しさん:04/10/11 18:08:57
だめなんだ!?
うるさくなったな。エラー吐くんだろ。わー人具じゃないんだろ?
440デフォルトの名無しさん:04/10/11 18:18:46
>>439
エラーになるのは、voidとしているのに値を返している場合。
それ以外は出ても警告のみじゃないかな。
#C99は知らん。
441デフォルトの名無しさん:04/10/11 18:18:59
--- Compile log ------------------------------------
Error - voidなのにreturnが書かれとる。
Warning - scanf使うのはやめときや。
Warning - gets使うのはやめときや。

コンパイルに失敗したで。直しときや。
--------------------------------------------------
442デフォルトの名無しさん:04/10/11 18:23:35
いいな、大阪弁で答えてくれるのか
その中の人がさんまさんだったら余計なことが80%は占めるんだろうな。
443デフォルトの名無しさん:04/10/11 18:33:10
Error - voidゆーてreturnで値返しよる。

やな
444デフォルトの名無しさん:04/10/11 18:55:46
>>441
3つとも外れじゃスカタン
445デフォルトの名無しさん:04/10/11 19:53:18
最近よく見るのは↓だなー。リンカが出してるようだ。

/tmp/cccaJuBA.o(.text+0x18): In function `main':
: warning: the use of `mktemp' is dangerous, better use `mkstemp'
446デフォルトの名無しさん:04/10/11 21:10:59
これってたまたまうまくいってるだけですか?

#include <stdio.h>

int test()
{
volatile int a = 123;
volatile int b = 456;
volatile int c = a + b;
}

int main(void)
{
printf("result = %d\n", test());
return 0;
}
447デフォルトの名無しさん:04/10/11 21:29:08
>446
ネタのマジレスするとw
1.test()は戻り値を返せ
2.マルチスレッドでもないローカル変数ごときにvolatileを使うな
448デフォルトの名無しさん:04/10/11 21:31:15
>>446
たまにはソースとアプリケーションだけじゃなくコードも眺めてみれ

っとそれはC言語じゃないな
449デフォルトの名無しさん:04/10/11 21:44:38
>>448
もしかしてアキュムレータの値が戻り値になるっていう話のことを言っているのですか?
450デフォルトの名無しさん:04/10/11 22:08:24
>>442
欲しいな・・・
451デフォルトの名無しさん:04/10/11 22:16:40
デスマで死にそうなときにそっとリアルゴールドを出してくれるコンパイラが欲しい
452デフォルトの名無しさん:04/10/11 23:50:06
んなもん呑んだら吐くわい
453デフォルトの名無しさん:04/10/12 02:49:47
> return文では、なぜ括弧をつけるスタイルとつけない
> スタイルが許されているのでしょうか?

大昔はつけなければいけなかったから。

大昔といっても、void型が導入されるよりはずっと前、
かつ、 += という演算子ができたよりはあと、だ。
454デフォルトの名無しさん:04/10/12 02:51:41
> /*////////////////////////////////////////////////////////////////////////////*/
> ↑
> やる気のなさが致命傷

じゃあ
//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//
455デフォルトの名無しさん:04/10/12 03:39:26
int foo, hoge
1.foo / hoge
2.foo % hoge
1 と 2 ではどっちが遅いですか?
456デフォルトの名無しさん:04/10/12 03:49:29
>>455
比較する以前に計算自体が違うわけだが
457デフォルトの名無しさん:04/10/12 04:11:44
x86のDIVの場合、/の結果と%の結果は同時に取得できるから、
>>455 の1と2はどっちが速いとか遅いとかじゃなくて不可分の関係
458デフォルトの名無しさん:04/10/12 06:16:11
stdio.hのstdioって何って読むんですかぁ?
ストディオ?
459デフォルトの名無しさん:04/10/12 06:22:51
すたっどあいおー
460デフォルトの名無しさん:04/10/12 06:28:19
>>459
すたっどあいお、スタッドアイオともにgoogleで検索してみたけどともに0ヒットでした
本当にこの読み方なんですかぁ?
461デフォルトの名無しさん:04/10/12 06:58:01
Standard Input Output
標準入出力
462デフォルトの名無しさん:04/10/12 07:29:36
えすてぃーでぃーあいおー が業界標準です。日本のUnix業界では。
463デフォルトの名無しさん:04/10/12 08:40:51
すたんだーどあいおーと読んじゃうけど
464デフォルトの名無しさん:04/10/12 11:55:10
現場からは以上です。それではスタジオにお返しいたします。
465デフォルトの名無しさん:04/10/12 15:51:50
失礼しまつ
http://pc5.2ch.net/test/read.cgi/tech/1095075678/669
・アルゴリズム・データ構造の説明(少なくていいです)
・スピードやメモリの効率向上のためなど工夫した点
を聞きたいのですが、おねがいします
466デフォルトの名無しさん:04/10/12 15:53:28
>>465
そこらへんに何個も貼り付けてんじゃねーよカスチンが
467デフォルトの名無しさん:04/10/12 15:55:31
>>466
何個もって2個しかない
つーか質問スレなんだから答えてやれ
468デフォルトの名無しさん:04/10/12 15:56:28
469デフォルトの名無しさん:04/10/12 15:56:50
>>467
自演モツ彼
>ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。
470デフォルトの名無しさん:04/10/12 17:49:27
LINUX(UNIX)でファイルが指定ディレクトリ下に作成されたのを検知する方法
ってあるでしょうか?(C言語で)

やりたいのは、指定ディレクトリ配下にファイルが生成されたら、その
ファイルの内容をチェックする仕組みを作りたいのですが、ディレクト
リはルートから複数(可変数)ディレクトリ下ったところに生成され、
なおかつファイル数が膨大なため、いちいちチェックしていると非常に
時間がかかってしまうためです。

もしご存知の方がいましたらお知恵をお貸し下さい。
471デフォルトの名無しさん:04/10/12 18:00:34
#includeで
netint/in.h
arpa/inet.h
sys/socket.h
fcntl.h
unistd.h
errno.h
がコンパイルできるコンパイラ教えてください。
VC++6.0ではできませんでした。
472デフォルトの名無しさん:04/10/12 18:14:07
環境違うもんな。コンパイラ以前の問題。
473デフォルトの名無しさん:04/10/12 18:21:07
errno.hがないはずはない
474471:04/10/12 18:34:27
>>472
UNIXじゃないと無理ですか?

>>473
errno.hはありました
475デフォルトの名無しさん:04/10/12 20:33:33
>>455
聞く前に実測しろ
理屈の上では完全に等速のはず

Cでもアセンブラでもいいから
除算プログラムを自分で書いてみれば明らか
商を求めるアルゴリズムと
余を求めるアルゴリズムが
全く同じになることがわかる
476デフォルトの名無しさん:04/10/12 20:36:08
>>471
> コンパイルできるコンパイラ教えてください。
根本的なところが解ってない悪寒。
ヘッダファイルがないんでしょ?
で、上3つは winsock2.h で代用できればラッキー。
fcntl.h は、あるはずだ。
unistd.h はインクルードしなくて宜しい。

まあ多分、エラーが山ほど出て来るだろうな。
477デフォルトの名無しさん:04/10/12 20:39:27
>>476
あんた馬鹿?
478デフォルトの名無しさん:04/10/12 20:53:46
>>471
激しくスレ違い。お好きなところへどうぞ。

ネットワークプログラミング相談室 Port11
http://pc5.2ch.net/test/read.cgi/tech/1096187183/
★初心者にVisual C++を教えるスレ★ Part14
http://pc5.2ch.net/test/read.cgi/tech/1093672937/
【初心者歓迎】C/C++室 Ver.9【環境依存OK】
http://pc5.2ch.net/test/read.cgi/tech/1094494997/
C言語なら俺俺に聞け! Part 87
http://pc5.2ch.net/test/read.cgi/tech/1090652323/
最高に頭悪そうな発言してください in ム板 (2)
http://pc5.2ch.net/test/read.cgi/tech/1090324689/
479デフォルトの名無しさん:04/10/12 20:58:15
>>475
あんたも馬鹿?
480デフォルトの名無しさん:04/10/12 20:59:41
>>479
聞く前に実測しろ >おまえの脳の性能
481デフォルトの名無しさん:04/10/12 21:13:58
$ cat test48-1.c test48-2.c
int waru( void ) {
int foo = 4;
int hoge = 2;

return foo / hoge;
}
int jyouyo( void ) {
int foo = 4;
int hoge = 2;

return foo % hoge;
}
482デフォルトの名無しさん:04/10/12 21:15:09
$ cat test48-1.s test48-2.s
.file "test48-1.c"
.text
.p2align 4,,15
.globl waru
.type waru, @function
waru:
pushl %ebp
movl $2, %eax
movl %esp, %ebp
popl %ebp
ret
.size waru, .-waru
.section .note.GNU-stack,"",@progbits
.ident "GCC: (GNU) 3.3.4 (Debian 1:3.3.4-13)"
.file "test48-2.c"
.text
.p2align 4,,15
.globl jyouyo
.type jyouyo, @function
jyouyo:
pushl %ebp
xorl %eax, %eax
movl %esp, %ebp
popl %ebp
ret
.size jyouyo, .-jyouyo
.section .note.GNU-stack,"",@progbits
.ident "GCC: (GNU) 3.3.4 (Debian 1:3.3.4-13)"
483デフォルトの名無しさん:04/10/12 21:15:38
>>482
その前に
gcc -O2 -S test48-1.c test48-2.c
484デフォルトの名無しさん:04/10/12 21:17:57
>>481-482
やーい作れねえ
低脳確定
485デフォルトの名無しさん:04/10/12 21:20:23
>>475
おまえ >>457 読んでないだろ?
それとも意味分からんの?
486デフォルトの名無しさん:04/10/12 21:21:42
>>485
xは86じゃなくオマエのあたま
487デフォルトの名無しさん:04/10/12 21:22:17
>>484
なにいってんの?
>>455への説明だよ?
488デフォルトの名無しさん:04/10/12 21:22:33
低脳確定x2
489デフォルトの名無しさん:04/10/12 21:24:13
>>487
おい、アセンブラ読めない低脳
除算でも剰余でもなくなってることに気付・・・けるわけねえな (プププ
490デフォルトの名無しさん:04/10/12 21:25:04
>>488
やーいつくれねーって意味解からない。
何を作って欲しいの?
491デフォルトの名無しさん:04/10/12 21:25:25
C:\>debug
-a0
3643:0000 mov dx, 0004
3643:0003 mov ax, 0000
3643:0006 mov cx, 0064
3643:0009 div cx
3643:000B
-t=0

AX=0000 BX=0000 CX=0000 DX=0004 SP=FFEE BP=0000 SI=0000 DI=0000
DS=3643 ES=3643 SS=3643 CS=3643 IP=0003 NV UP EI PL NZ NA PO NC
3643:0003 B80000 MOV AX,0000
-t

AX=0000 BX=0000 CX=0000 DX=0004 SP=FFEE BP=0000 SI=0000 DI=0000
DS=3643 ES=3643 SS=3643 CS=3643 IP=0006 NV UP EI PL NZ NA PO NC
3643:0006 B96400 MOV CX,0064
-t

AX=0000 BX=0000 CX=0064 DX=0004 SP=FFEE BP=0000 SI=0000 DI=0000
DS=3643 ES=3643 SS=3643 CS=3643 IP=0009 NV UP EI PL NZ NA PO NC
3643:0009 F7F1 DIV CX
-t

AX=0A3D BX=0000 CX=0064 DX=002C SP=FFEE BP=0000 SI=0000 DI=0000
DS=3643 ES=3643 SS=3643 CS=3643 IP=000B NV UP EI PL NZ NA PO NC
3643:000B 03D9 ADD BX,CX
-q
C:\>
492デフォルトの名無しさん:04/10/12 21:25:37
x86 だの 4 だの 2 だのと電波が飛んでくるらしいが・・・キモッ
493デフォルトの名無しさん:04/10/12 21:26:43
debug.com で速度が論じれると思ってるアフォがいるづらだぁ
494デフォルトの名無しさん:04/10/12 21:27:45
あ、ごめんごめん。
こうしないといけなかったか。。。
アセンブリ見てなかった。
$ cat test48-1.c test48-2.c
int waru( int foo, int hoge ) {
return foo / hoge;
}
int jyouyo( int foo, int hoge ) {
return foo % hoge;
}
495デフォルトの名無しさん:04/10/12 21:29:01
ほらよ
http://debug.com/
496デフォルトの名無しさん:04/10/12 21:30:37
>>493
debug.exe な
497デフォルトの名無しさん:04/10/12 21:30:57
おうおう、喧嘩か?おい!
498デフォルトの名無しさん:04/10/12 21:32:17
やめとけ、アフォは放置に限る
499デフォルトの名無しさん:04/10/12 21:34:23
プログラミングから少し外れるかもしれませんが…

(1)大学でプログラミング(C言語)を教えている先生って
ISOなりJISなりのCの規格を直接調べているのが普通なんでしょうか?
(2)本格的に言語を学ぶ場合には(1)の書籍って必須なんでしょうか?
500デフォルトの名無しさん:04/10/12 21:36:36
>>499
(1)いいえ
501デフォルトの名無しさん:04/10/12 21:38:20
>>499
(2)いいえ
502デフォルトの名無しさん:04/10/12 21:38:22
>>499
(2)はい
503デフォルトの名無しさん:04/10/12 21:39:51
>>499
人に教える立場の人間ならば、持っていて然るべき。
それ以外ならどうでもいい、かな。
504デフォルトの名無しさん:04/10/12 21:43:00
>>499
「普通」を定義せよ
505499:04/10/12 21:51:35
尋ねてはみたものの、実際の本(?)を見たことがないんで
実感が沸かなかったりします(スンマセン

プログラミング(とりあえずC)を本格的に勉強したいと思っているんですけど
値段にビビッっているんですよね、僕。

>>504
多数派とか8割以上とかってあたりです。
506デフォルトの名無しさん:04/10/12 21:55:52
>>505
その定義なら標準偏差で 10〜90 の範囲に含まれるものってことになるな
507デフォルトの名無しさん:04/10/12 21:56:53
270ドルか…K&Rでも読んだほうがいいな
508デフォルトの名無しさん:04/10/12 22:14:34
>>505
生データが必要だな
調査がんばれよ
509デフォルトの名無しさん:04/10/12 22:33:56
for文の++iとi++は使い分ける必要はありますか?どんなタイミングで加算されますか?
510デフォルトの名無しさん:04/10/12 22:34:45
>>509
強い理由が生じるまで【素直でいろ】。
511デフォルトの名無しさん:04/10/12 22:36:11
>>509
for(;この辺;)
の ++i と i++ は意味がぜんぜん違うから使い分けろ。
512デフォルトの名無しさん:04/10/12 22:36:27
>>509
なんか似たような質問、最近みたな
このスレ的答えならば、実測しろ。
513デフォルトの名無しさん:04/10/12 22:37:49
>>509
C++じゃないので気にするな
514デフォルトの名無しさん:04/10/12 22:38:21
>>509
アセンブラ嫁
515デフォルトの名無しさん:04/10/12 22:42:09
++iはインクリメントしてから計算するのに対して、
i++は計算してからインクリメントする。
(例)
int main() {
int i=0, j=0;
printf("%d,%d\n", i++, ++j);
return 0;
}
516デフォルトの名無しさん:04/10/12 22:46:47
( ; ;++i)と( ; ;i++)の場合の違いです。
517デフォルトの名無しさん:04/10/12 22:48:06
>>516
今からでも「わざわざ」憶えろ。それほどのことだ。>汗
518デフォルトの名無しさん:04/10/12 22:49:54
(;_;)と(T_T)の違いを教えてください。
519デフォルトの名無しさん:04/10/12 22:53:28
(*^o^*)
520デフォルトの名無しさん:04/10/12 22:54:51
>>518
(;_;) < (T_T)
521デフォルトの名無しさん:04/10/12 22:56:09
>>518
無限ループを作るとき、以下のように使い分けます。

#define _ 1
#define T_T 1

for (;_;) {
// ...
}

while (T_T) {
//...
}
522デフォルトの名無しさん:04/10/12 22:57:48
523デフォルトの名無しさん:04/10/12 22:57:49
while(T^T);
524デフォルトの名無しさん:04/10/12 23:03:18
>>522
激しくさんくすこ
525デフォルトの名無しさん:04/10/12 23:13:34
コマンドラインオプションの解析とかしてると
switch( optionChar )
{
 case _T('o'): hoge; break;
 case _T('v'): hage; break;
 case _T('-'): hege; break;
}

とか出てくんの。なんかかわいいの。
526デフォルトの名無しさん:04/10/12 23:51:50
0 か 1 が入る配列 a[] (a[10])がある。
1 は必ず[0]から入り、歯抜けは無い。但し、いくつ 1 が入るかは不定。
で、1 が入っている個数分の桁を 1〜3 の値で表示する。
例)
a[0] が 0 → 表示なし
a[0] が 1
   1
   2
   3
a[0] a[1] が 1 → 1,1 1,2 1,3 2,1 2,2 2,3 3,1 3,2 3,3 を表示 (上のように各表示改行して)
a[0]〜[2] が 1 → 1,1,1 1,1,2 1,1,3 1,2,1 1,2,2 1,2,3 ・・・ 3,3,3 を表示(同)
a[0]〜[3] が 1 → 1,1,1,1 1,1,1,2 1,1,1,3 1,1,2,1 1,1,2,2 ・・・ 3,3,3,3 を表示(同)

以下同様(最大[0]〜[9])


どう作ればエレガントかなぁ(´・ω・`)
527470:04/10/12 23:58:27
>>522

470です。感謝感謝です。では早速試してみます。
どもありがとうございました。
528デフォルトの名無しさん:04/10/12 23:58:50
ごめん、読解力なくて理解出来ん
529ぼるじょあ ◆yBEncckFOU :04/10/13 00:02:43
な〜んとなく分かった気がするが、a[10]にする必要があるんだろうか。
530デフォルトの名無しさん:04/10/13 00:08:47
int i = 0;
while(i < 10 && a[i]) i++;
これでi桁になるわな。
531デフォルトの名無しさん:04/10/13 00:19:00
5桁だったら
最小値を1,1,1,1,1
最大値を3,3,3,3,3
に設定して一つずつインクリメントすればいいんじゃ?
532デフォルトの名無しさん:04/10/13 00:59:46
組み合わせみたいなもんかな、とかオモタけど
それじゃ a[10]じゃ収まらないし・・・うーん?? どゆこと?
533デフォルトの名無しさん:04/10/13 01:26:48
こういうのをかぐわしいという
534530:04/10/13 01:35:20
>>526 醜いかなぁ…
#include <stdio.h>
#include <string.h>
char temp[20];
void inc(int digits, int n){
  if (n > 1){
    strcpy(temp + 2 * (digits - n), "1,");
    inc(digits, n - 1);
    strcpy(temp + 2 * (digits - n), "2,");
    inc(digits, n - 1);
    strcpy(temp + 2 * (digits - n), "3,");
    inc(digits, n - 1);
  }else if (n == 1){
    printf(temp);
    printf("1\n");
    printf(temp);
    printf("2\n");
    printf(temp);
    printf("3\n");
  }
}
int main(){
  int a[10] = {1, 1, 1, 1, 0, 0, 0, 0, 0, 0};
  int n = 0;
  while(n < 10 && a[n]) n++;
  if (n > 0) inc(n, n);
}
535デフォルトの名無しさん:04/10/13 02:30:00
>>526
printf(t + 1); がちょっとトリッキーだけど、ま、こんな感じかなぁ。

#include <stdio.h>

#define N 10
#define R 4
void PrintRec(int a[], int p)
{
    static char t[N * 2 + 2], *u = t;
    int i;

    if (p < N && a[p]) {
        *u++ = ',';
        for (i = 0; i < R; i++) {
            *u++ = '0' + i; PrintRec(a, p + 1); u--;
        }
        u--;
    } else {
        *u++ = '\n'; *u = '\0'; printf(t + 1); u--;
    }
}

int main(void)
{
    int a[] = {1, 1, 1, 0, 0, 0, 0, 0, 0, 0};

    PrintRec(a, 0);
    return 0;
}
536530:04/10/13 02:30:33
あ、うっかりmain()なんて書いちまった。
537530:04/10/13 02:31:48
>>535
かっこよすぎる…
538535:04/10/13 02:46:55
げ、間違えてた。

for (i = 1; i < R; i++) {

に修正してくれ。
539デフォルトの名無しさん:04/10/13 02:49:48
自作自演乙
540デフォルトの名無しさん:04/10/13 02:52:39
strtok 並のタコさを感じる関数だ
541デフォルトの名無しさん:04/10/13 02:53:49
再帰するのにメインの変数はstaticって、
難読化してるんじゃないかと疑いたくなる。
542デフォルトの名無しさん:04/10/13 02:55:50
配列の先頭から 1 を数える処理と、
1,2,3 による組み合わせを列挙する処理を別々でつくっちゃだめなの?
543530:04/10/13 03:02:22
>>542
俺の別々だけど
544デフォルトの名無しさん:04/10/13 08:30:20
ちなみにうちには規格票あります。
545デフォルトの名無しさん:04/10/13 09:26:39
>>525
すっげかわいい
546526:04/10/13 10:18:19
>>530>>535
わーい。お二人ともサンクス!!
自分もチョビっと作り始めてたけど、リカーシブルコールはイマイチ苦手で (´・ω・`)ゞ
精進します。
547デフォルトの名無しさん:04/10/13 10:33:17
自作自演乙
548470:04/10/13 11:22:45
>>522
試してみました。ディレクトリ内で更新があることは検知できるのですが、
どのファイルが更新(作成)されたか?という所までは取れないみたいですね…
なにか方法があるのかもしれませんが…
もう少し調べてみます。どもでした。また何か情報がありましたら追加情報を
お待ちしています(^^;;
549デフォルトの名無しさん:04/10/13 11:48:19
>>548
更新される以前の状態を自分で保持してればいいだけでは?
550デフォルトの名無しさん:04/10/13 12:09:24
char配列の終わりを示す文字っていうか数字ってあります?
551デフォルトの名無しさん:04/10/13 12:09:57
>>550
特に無い。
552550:04/10/13 12:12:09
ありがとうございます。
charのポインタから配列の終わりを探そうと四苦八苦していたのですが
これでようやく諦めがつきました。
553デフォルトの名無しさん:04/10/13 12:23:11
>>550-552
そのやり取り何度も見たぞ。
554470:04/10/13 12:48:33
>>549
階層が固定、小数のファイルならそれでも良いのですが、ルート以下の階層数
は不定であり、その中に含まれるファイル数も膨大で(一階層下に数万ファイル、
全体で数百万ファイル)ある事を想定しているため、前回の情報を保持して…っ
て言うのは非現実的なんです(´;ω;`)
また秒間数件のファイルが作られる事もあり、単純に各階層化をチェックして…
って事も無理なのです(処理スピードが追いつかない予感がして…)。
なのでファイルが作成に対して機能をフックするみたいな事が出来ないかと
思い、質問させていただきました(Windowsなら簡単なんですが…)。

何か妙案がありましたらご教授お願いします(^^;;
555デフォルトの名無しさん:04/10/13 12:58:49
K&R第2版(邦訳) p.125 の、ポインタ同士の比較に関する
内容についてなんですが、

|…つまり、pとqが同じ配列の要素をさしていれば、==、!=、<、>=
|などの関係演算子は正常にはたらく。
  (略)
|しかし、同じ配列のメンバーをさしていないポインタ同士の演算や
|比較を行うと、結果は不定となる

前半部は分かるのですが、後半部については例えば
char *p = malloc(〜);
char *q = malloc(〜);
if (p == q) 〜
このケースで大小比較がまずいのはわかるのですが、==による比較も、
実は規格的にはまずいということになるのでしょうか。
556デフォルトの名無しさん:04/10/13 13:03:35
>>555
なにがまずい?
557デフォルトの名無しさん:04/10/13 13:06:58
>>555
後者はまずくありません。
558555:04/10/13 13:07:37
>>556
いえ、後半部分に、同じ配列のメンバーをさしていないポインタ同士の
演算や比較を行うと結果は不定となるとありましたので、
p==q という比較演算の結果が不定とはどういうことなのだろうかなと、、
559デフォルトの名無しさん:04/10/13 13:16:46
>>558
p==q という比較演算の結果が不定ではありません
560デフォルトの名無しさん:04/10/13 13:20:46
飽きた。
561555:04/10/13 13:33:04
>>559
すみません、では何が不定なのでしょう
562デフォルトの名無しさん:04/10/13 13:38:25
>>561
書いた奴の気持ちになって読め
563555:04/10/13 13:46:13
どうも良く分からないです。
前半部の例は「関係演算子は正常にはたらく」例として
挙げられていますから、後半部の「しかし〜」以降の内容は
「関係演算子は正常にはたらかない」ということを
暗に示しているのだと思うのですが、そうではないのでしょうか
564デフォルトの名無しさん:04/10/13 14:14:47
>しかし、同じ配列のメンバーをさしていないポインタ同士の演算や
>比較を行うと、結果は不定となる
=「もし p!=q ならば、p==q または p<q または p>q」

別に矛盾はしていない。
ただ、p!=q なら p!=q であるのは間違いないだろうな。
何しろ

>…つまり、pとqが同じ配列の要素をさしていれば、==、!=、<、>=
>などの関係演算子は正常にはたらく。
=「もし p==q ならば、p==q」

だといっているのだから。
565デフォルトの名無しさん:04/10/13 14:34:59
> ただ、p!=q なら p!=q であるのは間違いない
それは間違いないだろう。p!=qなのだから。
しかし、同じ配列のメンバーをさしていないポインタ同士の演算では
常にp!=qが成立するということが保証されているかどうかの問題だろ?

不定であるのならば、規格としては保証されていないということでFA?
566デフォルトの名無しさん:04/10/13 14:43:07
詳しい人いないかなあ
仕様はともかくデファクトではどう扱われるのか興味ある
567555:04/10/13 14:44:34
>>564
「比較を行うと結果は不定」の結果というのは
比較演算の結果ではなく、そういうことを指して言ってたんですか…

何とも分かりづらいですが、比較演算の結果としては
正しい論理値が得られるわけですね。安心しました。


| 同じ配列のメンバーをさしていないポインタ同士の
| 演算や比較

意味があるかないかは別として、
char c1, c2;
char *p1=&c1, *p2=&c2;
if (p1 < p2) 〜

このような比較演算を実行すること自体は
規格上問題はないのでしょうか。
568デフォルトの名無しさん:04/10/13 14:49:20
>>566
デファクトでは直感的な理解で問題ないのでは?
大抵はポインタ=そのマシンにおけるメモリアドレスとして扱われてるだろうし。
569デフォルトの名無しさん:04/10/13 14:49:43
メモリリークの検査のためにプログラムのmain部を何度も繰り返すテストをしました。
リークは問題なかったのですが、長時間(2、3時間ぐらい)続けていたら
mallocが0を返す事がありました。
メモリのブロックの断片化か何かでメモリ確保できなかったと想像していますが、
プログラムの性質上、メモリ破壊は考えにくく、
再現性がないので原因が特定できていません。
これを防止する方法はあるでしょうか。
(WindowsXPSP1 VC6SP6)

とりあえず再発したら同じサイズのメモリ片に対してmalloc/freeを繰り返さずに
キャシュしておく方法を試すつもりです。遅いですし。
570デフォルトの名無しさん:04/10/13 14:53:38
>>550
但しchar配列を文字列として扱っているなら'\0'で終わるのが通例。
571デフォルトの名無しさん:04/10/13 15:06:29
セグメントありなメモリモデルだと、別の配列をさすポインタが同じ値
になることがなかったっけ

572デフォルトの名無しさん:04/10/13 15:07:41
オフセットだけ同じってか?
ラージポインタでもなんでも、全く同じ値になったら駄目だろう。
573デフォルトの名無しさん:04/10/13 15:30:07
関数の中でポインタに配列の頭のアドレスをおしえても、呼び出し側に戻って(pt++)で一文字づつ表示させても、全部0、0、0、0...です。なんででしょうか?
574デフォルトの名無しさん:04/10/13 15:33:25
>>573
最小限のコード出せ
575デフォルトの名無しさん:04/10/13 15:33:30
わけわからんが、関数内でポインタの指す領域を変更したのではなく、
ポインタ変数の値を変更したのなら、呼び出し元には反映されんよ。
576デフォルトの名無しさん:04/10/13 15:38:51
>>567
演算を実行すること自体は問題ない。
どんな値が返ってくるかはわからないが、少なくともディスプレイが突然爆発したりはしない。
577555:04/10/13 15:47:27
>>576
了解しました。
ありがとうございます。
578デフォルトの名無しさん:04/10/13 15:53:39
ニ、三時間に一回mallocが0を返すっていったら、
原因はやっぱり宇宙線以外考えられないから、
対策としては鉛の板でパソコンを覆うことだね。
579573:04/10/13 15:57:53
int main(void)
{char i=0;

   char ss[80]
   int a[80], *apt=a;

     gets(ss);

      op(ss,a,apt);

printf("%d\n",a[i++]);printf("%d\n",a[i++]);printf("%d\n",a[i++]);printf("%d\n",a[i++]);printf("%d\n",a[i++]);printf("%d\n",a[i++]);printf("%d\n",a[i++]);


void op(char ss[],int a[],int *apt)
{
   char i=0;

while(a[i]){a[i]=ss[i++];}
apt=a;
}
580573:04/10/13 15:58:39
ソースは上の通りです。
581デフォルトの名無しさん:04/10/13 16:01:35
>>554
creatとかopenのシステムコールをフックするモジュール書けば検知できるけど、
一般的にはファイル作る側が勝手に作るんじゃなくて、作る時に管理プロセスに
通知するとかDBに登録するとかの構成にしたほうがスマートだろう。

Linux板行けばもっといい方法教えてくれるんじゃない?
582569:04/10/13 16:08:35
>>578
ありがとうございました。
仰るとおり宇宙線が原因でした。
鉛の板をパソコンに覆ったところ、無事対策できました。
今後再発するようでしたら鉛の板を増築しようと思います。
583デフォルトの名無しさん:04/10/13 16:10:34
>>582
宇宙線の影響はほとんどないと思われます。
もっとも有力な原因はあなた自身の電波ではないでしょうか。
584デフォルトの名無しさん:04/10/13 16:11:04
>>580
gets()はさておき、op()の第三引数意味無かったり、a[i]=ss[i++];とか
突っ込み所は多いけど、そのコードなら表示内容が0ばっかにはならんだろ?
585470:04/10/13 16:13:46
>>581
ありがとうございます。実はファイルを生成する側のモジュールは
自分達で生成したものではなく、とある製品が生成するものなので
こちらの都合にあわせてDB等に通知してもらう事が出来ないんです(´;ω;`)

>Linux板行けばもっといい方法教えてくれるんじゃない?
ですね、アドバイスどもでした。そちらでも聞いてみます。
586デフォルトの名無しさん:04/10/13 16:18:27
>>580
清書してみました。おいらもこれが全部0になるとは思えないのだが・・・
環境は何??

void op(char *ss,int *a )
{
for(;*ss; a++, ss++)
*a = (int)*ss;
*a = 0;
}

int main(void)
{
char ss[80];
int a[80], i;

gets(ss);

op( ss,a );

for( i = 0; a[i]; i++ )
printf( "%d\n", a[i] );
}
587デフォルトの名無しさん:04/10/13 16:19:44
>>573
ポインタについて根本的に判ってない悪寒。
指摘しようと思ったが、指摘箇所が二桁になりそうなのでやめた。

>>584
自動変数の内容が0になってしまう環境ならそれも有り得る。
588デフォルトの名無しさん:04/10/13 16:20:39
メイン関数閉じてませんでした。直しました
何入力しても、0、0、0...です..
int main(void)
{char i=0;

   char ss[80]
   int a[80], *apt=a;

     gets(ss);

      op(ss,a,apt);

printf("%d\n",a[i++]);printf("%d\n",a[i++]);printf("%d\n",a[i++]);printf("%d\n",a[i++]);printf("%d\n",a[i++]);printf("%d\n",a[i++]);printf("%d\n",a[i++]);
return 0;
}
void op(char ss[],int a[],int *apt)
{
   char i=0;

while(a[i]){a[i]=ss[i++];}
apt=a;
}
589デフォルトの名無しさん:04/10/13 16:20:52
>>586
おいおい、清書の段階でバク取っちゃダメだろ。
590デフォルトの名無しさん:04/10/13 16:21:10
>>579
初期状態ではa[]の中身は何もないんだよな?
while(a[i])してるが、iはss[i++]でインクリメントされた後の数
つまり、a[i]の判定に使われているのはまだデータが入力されていない場所じゃないか?
a[0]の初期値がNULLだったら、そのまま終了してしまうぞ
ゼロフィルされたデータだったら、そりゃ0ばっかりになる
591デフォルトの名無しさん:04/10/13 16:24:56
あー、条件判断ssじゃなくa見てたのか
こりゃ釣られちまったぜ
592デフォルトの名無しさん:04/10/13 16:28:00
whileと代入文を別の行にしてデバッガ動かせば一発でわかるバグじゃないか?これ
593_gunzip:04/10/13 16:28:27
>>585
kernel2.4付属ののdnotify.txt読んだ?
あとはdnotifyのソースを参照するとか。
IRIXで向けにFAMとかいうライブラリもあった気がする。
594環境は..:04/10/13 16:30:26
C言語をはじめよう! Ver.1.1.0.9
Copyright (c) 1998-2004 AOK.

LSI C-86 Ver. 3.30c試食版
です。
595デフォルトの名無しさん:04/10/13 16:30:53
いや、答えでてるだろ、もう
596デフォルトの名無しさん:04/10/13 16:32:06
ホントだ。すまん。
597デフォルトの名無しさん:04/10/13 16:32:18
598594:04/10/13 16:41:35
ありがとうございます。もっと修行します
599デフォルトの名無しさん:04/10/13 16:59:13
>>598
ところでcharを整数型として使うな。文字型だと思え。
整数はint使え。
600デフォルトの名無しさん:04/10/13 17:00:24
>>599
intよりlongとかのほうがよくないか?
601デフォルトの名無しさん:04/10/13 17:00:39
602デフォルトの名無しさん:04/10/13 17:01:57
>>599
文字型とか言うな
603デフォルトの名無しさん:04/10/13 17:02:08
>>601
>float MySin(float x,int m)内のルーチンがよく分かりません。
いや、それを作れという問題じゃないのか?
604デフォルトの名無しさん:04/10/13 17:04:55
>>599
Cに文字型なんてねーよ
605デフォルトの名無しさん:04/10/13 17:08:15
低能どもが
606デフォルトの名無しさん:04/10/13 17:12:34
>>605
よう。元気か?前スレ893
レポートはちゃんとでっちあげることができたか?
607デフォルトの名無しさん:04/10/13 17:15:09
どこの前スレだよ
608デフォルトの名無しさん:04/10/13 17:15:20
>>606
お前、スレ勘違いしてないか?
609デフォルトの名無しさん:04/10/13 17:15:39
ここは酷いスレですね
610デフォルトの名無しさん:04/10/13 17:17:54
宇宙線て何?
ヴァカ?
611デフォルトの名無しさん:04/10/13 17:45:28
restrict キーワードについて教えてください。

int * restrict p[7];

とすると、コンパイラに怒られました。restrict ポインタ
の配列は意味がないのでしょうか?

エイリアスなし、変更なしのポインタを

int * const restrict p;

と宣言するとコンパイラの最適化を助けることができますか?

よろしくお願いいたします。
612デフォルトの名無しさん:04/10/13 17:50:49
xの2n+1乗ってCで書くにはどうしたらいいのかなぁ。
もちろんXには数字を代入するんだけど。
613デフォルトの名無しさん:04/10/13 17:51:49
>>612
printf( "%dの2n+1乗", number );
614デフォルトの名無しさん:04/10/13 17:53:19
>>612
最初にxとnを読み込んでおいて、
さっきいった関数に読み込んで累乗の計算させるんですけど。
615デフォルトの名無しさん:04/10/13 17:54:40
Cソース中から、決められたディレクトリにあるファイルを
FTPで送信(PUT)することってできるんでしょうか?
fprintf(stdout, ゙ftp ホスト名・・・
なんて記述じゃ駄目でしょうか?
やはり、ソケットを使ったプログラムにするしか無いのでしょうか?
なにせ、ソケットの知識が無いもので。
すいませんが、よろしくお願いします。
616デフォルトの名無しさん:04/10/13 17:55:10
>>612
#include <math.h>してpow()、powf()またはpowl()
617デフォルトの名無しさん:04/10/13 17:55:25
>>611
君は素晴らしい。才能がある。intelやAMDに入社すべき。
618デフォルトの名無しさん:04/10/13 17:55:53
>>615
無理です。
619デフォルトの名無しさん:04/10/13 18:33:30
http://vvv.ciao.jp/cgi-bin/test/pic/28.txt

1984 taro okamoto [email protected]
1999 tanaka ichiro [email protected]
1945 takasi okada [email protected]

上記のリストをコンパイルしたプログラムに出力したのですが、
最初の一行目がメールアドレスのところしかディスプレイには表示されません。
あとの二行は正常に表示されるようです。
原因が不明で悩んでいます。どなたか教えてください。
620デフォルトの名無しさん:04/10/13 18:36:47
>>615
コマンドファイルを生成してリダイレクトしちゃう?

#include <stdio.h>

main()
{
char command_buf[256];
FILE *fp;

fp = fopen( "command.txt", "w" );
fprintf( fp, "open HOSTNAME\n" );
fprintf( fp, "USERNAME\n" );
fprintf( fp, "PASSWORD\n" );
 :
 :
fprintf( fp, "quit\n" );
fclose( fp );

sprintf( command_buf, "ftp<command.txt" );
system( command_buf );
}

と思ったが、パスワードの入力部分で止まっちゃうだろうな・・・たぶん・・・
621デフォルトの名無しさん:04/10/13 18:46:21
>>620
そういう用途のために、止まらないftpクライアントもあるよ。
622デフォルトの名無しさん:04/10/13 18:55:35
>>619

まず、indexの宣言がポインタもしくは配列じゃないとダメでしょ?
ばっふぁおーばーらんで打ち壊してるよ。

あとはwhileの条件文だが、
while(scanf(中略)==4)
にした方がよくねぇか?
これだと、1文字とか入力した段階で終われるし。
623デフォルトの名無しさん:04/10/13 19:14:27
そもそもindex無意味のような
624デフォルトの名無しさん:04/10/13 21:09:00
>612->614
センス良すぎ。笑ってたら聞こうとした質問忘れた
625デフォルトの名無しさん:04/10/13 21:35:20
構造体の中に関数ポインタを含ませるなんて事、出来ま・・・・・・・・・・せんよね。
626高校生:04/10/13 21:41:07
それ位己でやってみそ。
627デフォルトの名無しさん:04/10/13 21:43:40
>>625
Cで virtual 使いたくなったときの常套手段
628デフォルトの名無しさん:04/10/13 21:58:21
出来るんか!Σ(´Д`;)
629デフォルトの名無しさん:04/10/13 22:02:58
むしろ出来ない理由がまったく思いつかないが・・・。
630デフォルトの名無しさん:04/10/13 22:08:53
うほっ、出来た。
書き方悪かっただけなのね・・・

お邪魔しますた
631デフォルトの名無しさん:04/10/13 22:45:36
>>610
地球を貫く強い紫外線の一種です。
632デフォルトの名無しさん:04/10/13 22:49:25
太陽風
633デフォルトの名無しさん:04/10/13 22:53:20
>>615
Unix でならやった事あるよ。
/dev 配下のファイルに直接アクセスしたような記憶が...
634デフォルトの名無しさん:04/10/13 22:58:56
質問です。
1〜16の数をそれぞれ 1/16 で発生させるプログラム
を作りたいんですがどうやればいいのでしょうか?
誰かご教授下さい。
635デフォルトの名無しさん:04/10/13 23:04:23
>>634
rand()%16+1
636デフォルトの名無しさん:04/10/13 23:05:32
下位ビットがどうのとか荒らしてみる
637635:04/10/13 23:06:26
おっと、
ランダムにとは書いていないな。ならば(ry
638デフォルトの名無しさん:04/10/13 23:17:23
>>634
確実に1/16発生させたければ、160個ほどの配列を作り1〜16を10回繰り返し入れ
シャッフルさせ、一個ずつ取り出す。無くなったら先頭に戻ってシャッフル
639デフォルトの名無しさん:04/10/14 00:40:57
scanf()を用いて以下の通り関数の値を出力するプログラムを作戦してください

1を入力したときにsin(x)の値
2を入力したときにcos(x)の値
3を入力したときにtan(x)の値

お願いします
640デフォルトの名無しさん:04/10/14 00:42:01
>>639
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。
641デフォルトの名無しさん:04/10/14 00:51:40
>>555
"<" などによる大小比較と、 "-" による距離の算出は同じ配列上にあるポインタ同士で有効。
"==" などの等値比較にそのような制限は無い。

ttp://www-ccs.ucsd.edu/c/express.html#Less Than
ttp://www-ccs.ucsd.edu/c/express.html#Equals
642デフォルトの名無しさん:04/10/14 00:51:43
>>639
-lmでいいと思います


と、エスパーレス
643デフォルトの名無しさん:04/10/14 00:54:04
scanf("%d",a);
if(a==1){printf("%f\n",sin(x));}
とか。
644デフォルトの名無しさん:04/10/14 00:56:46
int (*a)[3];
int *a[3];
↑二つの違いは判るのですが、()によって
 配列[3]へのポインタになるのか すっきりしません。
 ルールですか?それとも[]演算子の結合ルールによる記述なのですか?
 教えてください。
※a[x][j] = *(*(a+x)+j)
645デフォルトの名無しさん:04/10/14 01:10:53
>>644
Cの変数/関数宣言は大体
型 式;
の形になるように出来てる。
上の int (*a)[3] の場合、式 (*a)[n] の型が int になる。だから a は配列へのポインタ。
下の int *a[3] の場合、式 *a[n] の型が int になる。だから a はポインタの配列。
646デフォルトの名無しさん:04/10/14 01:12:58
>>509
for に限った話でもないし、ちょっと遅いレスだけど

int
main (void)
{
int i;

i = 0;
printf("%d, %d, %d\n", i++, i++, i++);

i = 0;
printf("%d, %d, %d\n", ++i, ++i, ++i);

return 0;
}

こんな感じになるのも注意。
647デフォルトの名無しさん:04/10/14 01:16:56
>>646
どんな結果になるわけ?
648デフォルトの名無しさん:04/10/14 01:18:45
>>647
環境依存なので自分の環境で試すがよろし
649デフォルトの名無しさん:04/10/14 01:21:16
>>648
わかってて聞いてんだよ
650デフォルトの名無しさん:04/10/14 01:42:20
>>645
質問の仕方が悪かったかもしれん、
大きさnの配列へのポインタを定義する際に
()を付与する必要があるが、付与しなければならない理由が今一
理解できていない。
651デフォルトの名無しさん:04/10/14 01:49:46
int *a[n];はint*[n]型、int (*a)[n]はint(*)[n]型。
652706:04/10/14 01:51:49
お願いします *
* *
* * *
* * * *
* * * * *
を表示するプログラムを作りたいんですけどどうすればいいでしょうか?
653デフォルトの名無しさん:04/10/14 01:52:40
しつこい
654デフォルトの名無しさん:04/10/14 01:52:46
>>652
宿題スレへ
ダディクールがC/C++の宿題を片づけます 32代目
http://pc5.2ch.net/test/read.cgi/tech/1097592876/
655706:04/10/14 01:53:16

       * *
      * * *
     * * * *
    * * * * *
です。すみません   
656デフォルトの名無しさん:04/10/14 01:55:45
>>655
はいよ。
main(){printf("*\n       * *\n      * * *\n     * * * *\n    * * * * *\n");}
657デフォルトの名無しさん:04/10/14 02:09:03
>> 650

前置演算子 * は [] よりも優先度が低いからっす。似たようなものに、

void (*foo)(void);
void *foo(void);

とかあります。
658デフォルトの名無しさん:04/10/14 02:36:34
>>657
「*a」ポインタ変数→[]演算子ってなって 配列へのポインタ?
こうなると、先にポインタ変数である事が定義されて
[]演算子で指定した大きさを参照するポインタになる?

逆に
*a[n]
[]演算子→「*a」ポインタ変数になって、ポインタ変数の配列になる?
これだと、配列である事が先に定義されてから
その一要素サイズがポインタ変数(int)である事が定義されるのか?

[]()の演算子の優先順位が関係してるから、()を付与しなければ
配列へのポインタとして定義できないのかな。

ここの所が知りたい。
※今、ちょうど この答えが出たんだが こういうことですか?
659デフォルトの名無しさん:04/10/14 03:50:25
*a は *(a+0) と表せ、a[0]と同じで、
同様に
*(a+1)はa[1]
*(a+2)はa[2]...となる。
例えばポインタ変数aはとある領域、仮に1111番地
を指すとすると、
*(a+1)は1112番地
*(a+2)は1113番地...を示す。
つまり、a[i]はポインタ変数aの指す領域からi番目の場所を指す。
660デフォルトの名無しさん:04/10/14 03:54:22
foo[]
のように[]がくっつくと、
最初に配列であることが確定するので
*foo[]とすると

foo は "array" of pointer
となりまs

順番を変えて、
foo は "pointer" to array
にするには
(*foo)[]
としまs

そんな感じで
(*foo)()
で "pointer" to function
となりまs

...のようなことが
K&Rの5章12節にかいてありまs
661デフォルトの名無しさん:04/10/14 03:57:18
配列のポインタって全く使って無いな。。。
全く頭に無かったけど。いつ使うの?
662デフォルトの名無しさん:04/10/14 04:38:43
多元配列を引数で受け渡す時とか、C++でnew演算子を使用して多元配列の領域を
確保した際とか。
663デフォルトの名無しさん:04/10/14 09:24:29
#include <stdio.h>

int main(void)
{
char a[100];
char *p;
char (*pp)[100];
char *p2;

p = &a[0];
pp = &a;
p2 = &a; /* warning */

printf("p = %08x, pp = %08x\n", p, pp);
p++;
pp++;
printf("p = %08x, pp = %08x\n", p, pp);

return 0;
}
664デフォルトの名無しさん:04/10/14 11:45:47
>>660ちゃんと最後の「u」まで打てや(@u@ .:;)
665デフォルトの名無しさん:04/10/14 14:02:50
>646>648
ありがとうございました。i++と++iの違いはわかります。配列やポインタについてはあの後復習したら理解できました。


>647>649
ガッ ガッ
666555:04/10/14 15:51:04
>>641
ありがとうございます
ここですね。<, =<, >, >= について以下のように書かれていました。
| You can compare two pointer values only if they are the addresses
| of elements within (or just beyond) the same array object.

2つのポインタが同じ配列の要素を指している場合に限って
それらの大きさを比較してもよいというわけなんですね。
もっともだと思います。また == の解説にはこのような
記述はありませんでした。納得です。
667デフォルトの名無しさん:04/10/14 16:40:08
=<
=<
=<
668デフォルトの名無しさん:04/10/14 16:54:37
>>667
餓鬼みたいな揚げ足取ッてンなヨ
669デフォルトの名無しさん:04/10/14 17:27:59
オレが許してもコンパイラが許さん
670デフォルトの名無しさん:04/10/14 19:03:50
みなさん、ヘッダファイルのインクルードガードって
どういう工夫してますか?
大文字? 小文字? アンダースコア使う?
ついでに GUID も混ぜ混んじゃう?

-------------------------
#ifndef MYLIB_H
#define MYLIB_H

XXXXX
XXXXX
XXXXX

#endif
-------------------------

ANSIでは、アンダースコアで始めちゃだめ、とかいろいろあるんですよね?
ん、アンダースコア2発だったかな??
671デフォルトの名無しさん:04/10/14 19:22:20
     >667>669
        _, ,_   ガッ ガッ      _**_*
     ( ・д・)三●☆))Д´;((☆拳三(・А・ )  
672デフォルトの名無しさん:04/10/14 19:23:51
アンダースコア開始は駄目だからね
駄目駄目、駄目だからね
673デフォルトの名無しさん:04/10/14 19:31:36
おれWindowsでしかソフトつくったことないんだけど、
UNIXにもGUIDの考え方ってあるの?
674デフォルトの名無しさん:04/10/14 19:33:04
なんでそんなに「駄目」なの?
675デフォルトの名無しさん:04/10/14 19:33:43
システム予約の識別子、って事になってなかったっけ。
まぁやめとけと。
676デフォルトの名無しさん:04/10/14 19:41:07
MACアドレスとかもGUIDなんじゃねーの?
と用語サイトを検索した結果をそのまま書く俺。
677デフォルトの名無しさん:04/10/14 19:41:50
これからC始めるならどのコンパイラがいいですか?
OSはXPです。
とりあえず>>2のVC++toolkit2003を入れてみました。
678デフォルトの名無しさん:04/10/14 19:45:07
>>677
それでいいからやれよ
679デフォルトの名無しさん:04/10/14 21:22:57
おれ >>673 です。
GUIDには、いつも世話になっています。
これって生成ソースが公開されてるのかな。
VisualStudioだったら「GUIDの生成」というメニューがあるけど、
gccの関連ツールとか関連ライブラリにはそんなのあるのかなと思って。
680デフォルトの名無しさん:04/10/14 21:25:25
>>678
えぇこというねぇ〜
681デフォルトの名無しさん:04/10/14 21:46:55
#include <stdio.h>
main(void){
double x;
while(1){
printf("整数入力してね : ");
if(scanf("%lf",&x)!=1) break;
if(x>=0.0)
printf("%15s%22.15e\n%15s%22.15e\n%15s%22.15e\n",
"x=" , x ,
"sqrt(x)=" , sqrt(x) ,
"pow(x,x)=" , pow( x , x ));
else { printf("負数は無理 \n"); break; }
}
printf("EXIT \n");
}

結果
整数入力してね : 2
x= 2.000000000000000e+00
sqrt(x)= 1.414213562373095e+00
pow(x,x)=3.903118602145848e-322
整数入力してね : 3
x= 3.000000000000000e+00
sqrt(x)= 1.732050807568877e+00
pow(x,x)=-2.424659668443082e-231
整数入力してね : 4
x= 4.000000000000000e+00
sqrt(x)= 2.000000000000000e+00
pow(x,x)= 8.000000000000140e+00
なぜに?
682デフォルトの名無しさん:04/10/14 21:57:18
そもそもGUIDが必要な理由がわかれば答えもわかるはず。
683デフォルトの名無しさん:04/10/14 22:08:28
>>681
コンパイル時にwarningでてないか?
684681:04/10/14 22:12:54
>>683
warning出ません
ちなみにMac OS 10.2 gcc3.1 です
685デフォルトの名無しさん:04/10/14 22:15:16
warningはしょせんerrorじゃない
686デフォルトの名無しさん:04/10/14 22:18:01
うちのコンパイラは出してくれるなぁ
test.c : warning:#include <math.h>を忘れています
687デフォルトの名無しさん:04/10/14 22:18:06
if(a=kansu(b))
こんなんでも出すものがあるしな。
688デフォルトの名無しさん:04/10/14 22:28:38
>>682
わかんねぇ。
689681:04/10/14 22:43:46
>>686
#include <math.h> 入れてみました
結果
整数入力してね : 2
x= 2.000000000000000e+00
sqrt(x)= 1.414213562373095e+00
pow(x,x)= 4.000000000000000e+00
整数入力してね : 3
x= 3.000000000000000e+00
sqrt(x)= 1.732050807568877e+00
pow(x,x)= 2.700000000000000e+01
整数入力してね : 4
x= 4.000000000000000e+00
sqrt(x)= 2.000000000000000e+00
pow(x,x)= 2.560000000000000e+02
なにげに進歩?
690デフォルトの名無しさん:04/10/14 22:47:56
>>689
進歩ってどういう意味だ?ちゃんと答え出てるだろ
691681:04/10/14 22:58:41
>>690
アホですんません
答え出てますね パニ食ってました
692デフォルトの名無しさん:04/10/14 23:40:09
みんなが普段使ってる文字フォントはなんですか
693デフォルトの名無しさん:04/10/14 23:42:23
>>692
うるせえ馬鹿
694デフォルトの名無しさん:04/10/14 23:49:27
はい
695デフォルトの名無しさん:04/10/15 02:59:12
>>665
>>646は実行したときの結果が思っているものとは違うかも、ってこと

i++ と ++i の違いじゃなくて、
i++, i++, i++ ってなっているときに
0, 1, 2 とか 1, 2, 3 となるのが当然とは限らない

>i++と++iの違いはわかります。
>理解できました。
とあるので、分かってくれているのかもだが
実行せずにレスしたんなら一度試しておけ

696デフォルトの名無しさん:04/10/15 03:11:52
あ、あの、結構前に restrict ポインタの配列等について質問した
ものなのですが... ひょっとして忘れられてるのかと思ってひつこく
もう一度投稿します。困っています。気になって夜も眠れません。

static const int * const restrict * const restrict * const restrict ppp = ...

とかなってしまいます。ひょっとしたら僕は騙されているのではないか?
と思い始めています。typedef で見た目スッキリにはできるけれども、
僕の心はスッキリしません。エイリアス一切なしのソースを書き、その
決意をコンパイラにオプションで伝えた方がよっぽどましです。

そもそも、restrict キーワードなんて使っている人は、

 ぼ く だ け で す か ?
697デフォルトの名無しさん:04/10/15 03:14:21
この辺を言っているのかな。
ISO/IEC 9899:1999 6.5.2.2 -10
The order of evaluation of the function designator, the actual arguments,
and subexpressions within the actual arguments is unspecified.
698デフォルトの名無しさん:04/10/15 03:17:51
アセンブラリスト見ればいいじゃないか
699デフォルトの名無しさん:04/10/15 03:35:14
C言語って何ですか?
700デフォルトの名無しさん:04/10/15 03:40:50
>>699
貴方には関係の無い物です
701デフォルトの名無しさん:04/10/15 03:41:47
うひょひょ
702デフォルトの名無しさん:04/10/15 04:51:17
いくつかの標準関数の引数にはrestrictがつけられるようになったんじゃなかった?
memcpyとか。
703665:04/10/15 12:38:22
>646
実行結果

2, 1, 0,
3, 2, 1,

ひえーっカウントダウンしてます!
表示の順番が逆に!
704デフォルトの名無しさん:04/10/15 13:09:04
>>703
Sun-OSだと昇順になるよ。
引き数をスタック渡しするCPUだと降順になると思われ。
705デフォルトの名無しさん:04/10/15 13:12:35
>>704
そんな決まりは無い
706デフォルトの名無しさん:04/10/15 13:18:33
Cの引数の評価順は不定
707デフォルトの名無しさん:04/10/15 13:22:27
不定というと、毎回バラバラみたいな印象だな。
708デフォルトの名無しさん:04/10/15 13:37:13
Cの引数の評価順は俺に聞くな
709デフォルトの名無しさん:04/10/15 13:53:45
J=0の畤、

*(a+J++)
は、a+何と書いたことになりますか?
710デフォルトの名無しさん:04/10/15 13:56:01
>>709
当然 a+J++ と書いたことになります
711デフォルトの名無しさん:04/10/15 13:58:36
0
712デフォルトの名無しさん:04/10/15 14:05:07
>>709
*(a+(J++))と同じになると思われる

今、お遊びでVC++ .NETで
int i=1, j=2, k;
k = i+++j;
としてみたら、
k = (i++)+j
として処理された・・・i+(++j)とどっちになるかと思ったけど、つまらん結果だった
713デフォルトの名無しさん:04/10/15 14:09:10
>711さん ありがとうございます。
714デフォルトの名無しさん:04/10/15 14:16:56
if (>>709が聞きたかった事 == >>712)
>>711 == >>713 && printf("乙\n");
715デフォルトの名無しさん:04/10/15 14:26:36
自演したと言いたいのか?
なんか知らんがガンバレ。
716デフォルトの名無しさん:04/10/15 14:34:24
>>712>>709が聞きたかったこととは少しずれてるが、
>>711の補足として読んでおけばいいのかな?
>>709はJが0の場合の計算結果を知りたかったみたいだし

>>712のがちょっとおもしろかったので、俺も今試してみた。
i++++jもi+++++jも不可だな
i+++++jは(i++)+(++j)と処理したらMSを見直したんだが
717デフォルトの名無しさん:04/10/15 14:40:05
見直すって?
((i++)++)+jでもi+(++(++j))でもなく、そうなるべきという根拠は何だ。
718デフォルトの名無しさん:04/10/15 14:40:08
>>712,716
演算子は可能な限り長くなるように解釈すると仕様で決められていたと記憶しているが。
719デフォルトの名無しさん:04/10/15 14:42:55
頻繁に使われる   って何ですか?
どんな働きをしますか?
720デフォルトの名無しさん:04/10/15 14:45:06
>>719
そういう働き
721デフォルトの名無しさん:04/10/15 14:45:49
>>717
いや、((i++)++)+jでもi+(++(++j))でも構わんのだけど、
i+++jを通すなら、i+++++jも適当な解釈で通してくれてもいいじゃん、って思っただけ
融通利かせてくれたら、ネタ提供してくれたMSを見直す、って意味だよ
722デフォルトの名無しさん:04/10/15 15:11:06
723デフォルトの名無しさん:04/10/15 15:12:03
演算子の優先順位のお勉強からはじめようね。
とりあえず。
724デフォルトの名無しさん:04/10/15 15:12:44
あぁ、&nbsp;って書いてたのか。
また何かネタかと思った。
725デフォルトの名無しさん:04/10/15 17:39:56
>722英語がわかりません
726デフォルトの名無しさん:04/10/15 17:46:00
*(p++)++ は出来ると思うんですけど、
*++(++p) ってやっても大丈夫?
727デフォルトの名無しさん:04/10/15 17:46:28
728デフォルトの名無しさん:04/10/15 17:52:52
ありがとうございます!よくわかりました!
729デフォルトの名無しさん:04/10/15 18:14:49
プログラムの勉強なんて俺にとってはぶっちゃけウォナニー。英語も数学も全くだめなんだから。
16でGUIアプリに挑戦中とかいう奴もいる。俺は18。始めて3ヶ月。
鬱だ。この差は埋められないのか...
730デフォルトの名無しさん:04/10/15 18:19:35
なんちゃって
731デフォルトの名無しさん:04/10/15 18:25:38
でも気持ちいいんだろ?
732デフォルトの名無しさん:04/10/15 18:29:46
ウォナニーが出来れば充分
[email protected]

初めまして、C言語を初めて1ヶ月もまだ経っていない16歳です。
メッセにてC言語のことを助言及び教えていただける方、募集中です。
私の質問に答えてくれる人、登録お願いいたします!!
734デフォルトの名無しさん:04/10/15 18:34:42
>731
はい..気持ち...いいです..(w
735デフォルトの名無しさん:04/10/15 18:43:35
とりあえず、荒らし依頼として通報しとくね ^^
736デフォルトの名無しさん:04/10/15 18:46:29
確かに半年立つまでは気持ち良かったが...(ry
737デフォルトの名無しさん:04/10/15 19:16:37
>>726
++ 演算子の結果は右辺値なので不可。
738デフォルトの名無しさん:04/10/15 19:43:19
質問
/*compute Mass of Black Hole */
/*Print Data for M vs C vs P Plot */
#include <math.h>
#include<stdio.h>

main( )

{

float C0, /* Orbital circumference, km */
P0, /* Orbital Period, seconds */
G; /* Gravitational constant km**3/s**2 per solar
mass*/
float pi, MassHole;

G=1.327E11;
pi=3.14159;

for(C0=1E5; C0 < 1E7; C0=C0+2E5){
printf("C0 is : %f\n",C0);
for(P0=10; P0 < 1000 ; Po=P0+10){
MassHole=C0*C0*C0/(2*pi*G*P0*P0);
printf("%f %f\n",P0, MassHole);
}
}
}
  上記のコードでコンパイルしようとしてもエラー E2451  未定義のシンボル P0( 関数main() )
トエラーメッセージが出てコンパイルできません。どうしたら解決しますでしょうか?
739デフォルトの名無しさん:04/10/15 19:48:49
嘘を吐くな
未定義なのはPoだろ
>for(P0=10; P0 < 1000 ; Po=P0+10){
エラーメッセージの意味を読み取る努力しろ
740デフォルトの名無しさん:04/10/15 19:48:58
>>738
Poってなに?

おっぱいおっぱい!!
741デフォルトの名無しさん:04/10/15 19:49:07
>>738
眼鏡かける。
742デフォルトの名無しさん:04/10/15 21:29:56
Windows 環境なのですが、コマンドプロンプトに色をつけることは出来ないのでしょうか?
"\x1b[33m" などを使っても、文字に色がつきません。
どうすればよろしいのでしょうか?
743デフォルトの名無しさん:04/10/15 21:31:35
GUIなどは標準Cではできない






そもそもなんで?
OS書くため生まれた言語としては
グラフィックが扱えないと言うのはいささか手落ち、
そんなことが あってたまるかの一言。
744デフォルトの名無しさん:04/10/15 21:35:21
>>742
NT系統はANSI.sys入ってないからエスケープシーケンス不可
9xは標準で入っているから可の場合「も」ある

NT系統は自分でANSI.sys入れることが必須だが、
入れて正しく記述しても付かない人も多いし、上手いこと付いた場合でも
それを人に渡す場合、相手も入れてないと結局色はつけられない
745742:04/10/15 21:40:07
>>744
XPもNT系統なのでしょうか?

無理そうなので、別な方法で(特定の文字列を)強調してみます。
ありがとうございましたm(_ _)m
746デフォルトの名無しさん:04/10/15 21:40:49
>>743
適切なライブラリさえあれば、標準Cで十分可能ですが。
747デフォルトの名無しさん:04/10/15 21:40:59
>>743
別にできないとは規定されてないぞ。
fread/fwrite で VRAM を読み書き出来るようにすれば良い。
748デフォルトの名無しさん:04/10/15 21:45:50
>>743
オブジェクトモデルが規定されていないため cdecl のような非標準拡張が必要となったまで
リッチー氏が C を設計した当時、Unics はモノリシックカーネルでよかったので静的リンクについてしか設計をしていなかった
749デフォルトの名無しさん:04/10/15 21:49:40
>>745
2000, 2003, XPなど ME以降に出たものはNTカーネルだから、
NT系統と言ってしまっていいだろう。

できないわけではない。
テキストファイルに一行書き加えるだけだが
ttp://kasai86.ld.infoseek.co.jp/dos/esc.htm
それでできるようになるのは「自分だけ」だ。
配布用には向かない
750デフォルトの名無しさん:04/10/15 21:51:30
2000はMeより前だがな
751デフォルトの名無しさん:04/10/15 21:53:12
>>743
全ての環境のI/Oなんて標準化できない、
お前の使ってるヘボイPCとOSが世の全てじゃない。
752デフォルトの名無しさん:04/10/15 21:58:01
>>750
T-engineみたいなの
753デフォルトの名無しさん:04/10/15 22:13:07
>>743
C言語が出来た頃のコンピュータを見てきてからそれを言えヴォケ
754デフォルトの名無しさん:04/10/15 22:15:26
>>749
cygwinのbashとかはどうやって色をつけてるんだろう?
755デフォルトの名無しさん:04/10/15 22:40:31
>>749
config.ntは16ビットアプリ用だから32ビットコンソールアプリだとそれでも無理のはず。
32ビットアプリをNT上で動かすときにはこういうのを使うしかないよう。
http://www.kumei.ne.jp/c_lang/intro/no_58.htm
http://www.kumei.ne.jp/c_lang/intro/no_59.htm

どうしてもエスケープシーケンスを使いたいのならLSI-Cでも使え。
756デフォルトの名無しさん:04/10/15 23:16:50
>>754
bash は コマンドプロンプト ではない
757デフォルトの名無しさん:04/10/15 23:42:54
数学にもC言語にも強いお方助けてくださいまし・・・

多項式の次数Nを読み込む
N+1個の係数a[0]・・・a[N]を読み込む

y=aN XのN乗+aN-1 XのN-1乗+・・・+a1 X+a0

=(((aN X+aN-1)×X+aN-2)×X+・・・+a1)×X+a0

【aNのNは下付きのちっちゃいNで、×は”かける”、Xは”エックス”】

読み込む部分はmain関数でおこない
多項式の計算する部分を関数にせよ
(戻り値は多項式の場合)

式がかなりわかりずらいですがなにとぞよろしく
758デフォルトの名無しさん:04/10/15 23:48:04
要は多項式をHorner(ホーナー)形式に書き換えよということか?
759デフォルトの名無しさん:04/10/15 23:49:58
むむ?
ホーナー形式?
そんな難しい話ではないはずなのだが。。。
760758:04/10/15 23:54:19
>>757
あぁ、早とちりした。ホーナーじゃないか。で、何がしたいんだ?
761デフォルトの名無しさん:04/10/15 23:54:49
つまり半スイング状態でホームラン打つ奴のことだな
762デフォルトの名無しさん:04/10/15 23:58:29
C言語の課題で>>757これを作れと。。。
なんだかよく分からなくてあの授業にはもうついていけんorz
763デフォルトの名無しさん:04/10/15 23:59:57
>>761
もえぷろきたーー!!
764デフォルトの名無しさん:04/10/16 00:04:40
>>762
エスパーでもないとこんな問題文読み取れない。
関数にしてほしいのは何だ?多項式の次数と係数を配列にでもして
引数にとって値を返すのか?
765デフォルトの名無しさん:04/10/16 00:12:10
がんがれー
766デフォルトの名無しさん:04/10/16 00:15:07
>>762
具体例をあげてみては?
767デフォルトの名無しさん:04/10/16 00:16:28
あー下付きのNとか階乗の表示がしづらい。。。
数列のつもりなんだがそこらへんは伝わってた?
768デフォルトの名無しさん:04/10/16 00:17:03
>>1
> ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。
769デフォルトの名無しさん:04/10/16 00:19:59
了解。さわがせました。
でも、ここで>>757解けるかたいたらよろ
770デフォルトの名無しさん:04/10/16 00:20:42
ダディクールスレを見て逃げ帰ってくる予感
771デフォルトの名無しさん:04/10/16 00:21:36
>>762 >>767
なんでもかんでも他人のせいにする根性は
社会に出る前に直しておけ
772デフォルトの名無しさん:04/10/16 00:27:05
>>756
あれ?、コマンドプロンプト上で動いてるようにしか見えないんだけど違うのか・・・
773デフォルトの名無しさん:04/10/16 00:30:32
>>771
はい、なおします。
でも、大学でたら永久就職する予定なんだが...

永久就職も社会に出るのと同じか...
どっちにしろもうちょっと自分で努力します
774デフォルトの名無しさん:04/10/16 00:31:40
>>773
永久就職とは?
775デフォルトの名無しさん:04/10/16 00:32:31
大学卒業と同時に無期懲役刑
776デフォルトの名無しさん:04/10/16 00:34:39
>>774
あれ?永久就職しらん?
結婚すよ。

数学の助教授とね。
777デフォルトの名無しさん:04/10/16 00:36:13
永久就職を知らん人も知らん人だが
性格を注意されて永久就職するからって言い訳するのもなぁ・・・
なんていうか・・・orz
778デフォルトの名無しさん:04/10/16 00:37:16
>>767
y=aN XのN乗+aN-1 XのN-1乗+・・・+a1 X+a0
これは
y=a_N*X^{N}+a_{N-1}*X^{N-1}+…+a_1*X+a_0
と書くとわかりやすい。
数式を書くとき、TeX風の疑似表現をしてみると良いでしょう。
779デフォルトの名無しさん:04/10/16 00:38:51
>>778
おお〜、なるほどね。
有り難う御座います!

780デフォルトの名無しさん:04/10/16 00:42:22
大学生だったのか。小学生かと思った。
781デフォルトの名無しさん:04/10/16 00:43:59
えー。。。小学生_| ̄|○
これでも、貴族なかんじの大学なのに...
782デフォルトの名無しさん:04/10/16 00:46:15
いいから消えろよ
783デフォルトの名無しさん:04/10/16 00:47:07
自作自演乙
784デフォルトの名無しさん:04/10/16 00:48:13
数学の先生か。
数学のことしか興味がなく、世間知らずでワガママなんだよな。
御愁傷様。
785デフォルトの名無しさん:04/10/16 00:48:41
う”...消えろか...。イタイ
もうちょっとハッキリした答えが来るまで待ちたいんだが。
というか、誰か教えておくれよ
786デフォルトの名無しさん:04/10/16 00:49:04
ヒントは再帰だ
787デフォルトの名無しさん:04/10/16 00:51:09
>>785
C言語なんて要らないんじゃない?
788デフォルトの名無しさん:04/10/16 00:51:30
ちなみに再帰ってのは「二度と再び帰ってくるな」って意味です。
789デフォルトの名無しさん:04/10/16 00:52:23
再帰。。。
あー、情報の先生もそんなこと言ってたかも。
790デフォルトの名無しさん:04/10/16 00:53:18
>>785
煽っても何も出てこないから諦めろ
791デフォルトの名無しさん:04/10/16 00:56:19
>>790
わかってるね。。。
授業中遊ぶか寝るかしかしてなかったもんで(汗

>>785
親切に色々ヒント出してくれて有り難う
でも自分、アフォでごめ。
792デフォルトの名無しさん:04/10/16 01:01:35
ビットフィールドは移植性が無い
といわれますが、何故なんでしょうか
793758:04/10/16 01:01:44
>>757
汚いが、こんなんでどう?
#include <stdio.h>
#include <stdlib.h>

double evaluate(double* a, int N, double x, int level)
{
  return level == N ? *(a + N) : evaluate(a, N, x, level + 1) * x + *(a + level);
}

int main(void)
{
  double *a, x, f;
  int N, i;
  printf("Input degree of a polynomial:");
  scanf("%d", &N);
  a = (double*)malloc(sizeof(double) * N);
  for (i = 0; i <= N; i++)
  {
    printf("Input coefficient of pow(x, %d):", i);
    scanf("%lf", a + i);
  }
  printf("Input x:");
  scanf("%lf", &x);
  f = evaluate(a, N, x, 0);
  printf("value:%lf", f);
  free(a);
  return 0;
}
794デフォルトの名無しさん:04/10/16 01:02:15
>>792
順番が決ってないから。
795デフォルトの名無しさん:04/10/16 01:07:59
全角スペースを判定するマクロを作りたいのですが、

#define IS_SPACE(x) ((unsigned char)(x) == 0xa1)

char* str = " ";
if(IS_SPACE(*str) && /* 1バイト目を比較 */
IS_SPACE(*(str+1)) /* 2バイト目を比較 */ )
{
}

と、いう風にやってみたんですが、うまく判定できません。
どこが間違ってますか?
796デフォルトの名無しさん:04/10/16 01:11:23
全角空白って0xa1a1なん?
つか文字コードは?
797デフォルトの名無しさん:04/10/16 01:12:00
>>793
キタ――――(・∀・)――――!!!

どもどもー!




あれ?実行するとなんか・・・なんか??

数字を入れると答えが出る感じじゃないの?
798デフォルトの名無しさん:04/10/16 01:12:53
他の文字に0xa1はいってたらダメじゃん
799デフォルトの名無しさん:04/10/16 01:13:04
0x8282
800デフォルトの名無しさん:04/10/16 01:14:48
>>795
諦めて素直にstrcmp使うのはだめなん?
801デフォルトの名無しさん:04/10/16 01:16:14
>>795
#define IS_SPACE(x) !strncmp(x," ",2)

char *str=" ";
if(IS_SPACE(str)){
802デフォルトの名無しさん:04/10/16 01:20:02
#define IS_SPACE(x) ((x)[0] == " "[0] && ((x)[1] == " "[1]))

でも、文字列の先頭から真面目にマルチバイト文字の処理していかないと、
誤認識する文字コード系が多い気もする。
803デフォルトの名無しさん:04/10/16 01:21:14
全角スペースを使ってる国って日本以外にあるのか!?
804デフォルトの名無しさん:04/10/16 01:21:44
BIG5とか
805758:04/10/16 01:21:57
>>797
・多項式の次数Nを読み込む
・N+1個の係数a[0]・・・a[N]を読み込む
の2つは満たしているはず。最初に"Input degree of a polynomial:"で次数を、
"Input coefficient of pow(x, n)"でx^nの係数を入力する。次にxを入力すると
xを代入した時の多項式の値が出力される。っていうか、問題の後半から問題文
そのものが意味不明だから、もしやることが間違ってたら参考に作り直しな。
806デフォルトの名無しさん:04/10/16 01:26:24
この場合だとShift_JISなら誤認識はしない、かな?
EUC-JPは、ある漢字の2バイト目と別の漢字の1バイト目が、また別の漢字と同じバイト列に見えたり。
807795:04/10/16 01:28:43
皆さんありがとうございます
>>802の方法でうまくいきました
808デフォルトの名無しさん:04/10/16 01:35:08
struct Tree{
 Hoge data;
 Tree* next; //姉妹Treeへのポインタ
 Tree* child; //子Treeへのポインタ
};

こういう構造体で構成される階層データがあるのですが、
これを再帰無しで全検索するスマートな方法ってあるでしょうか。

スタックがつぶれてしまって…。
809808:04/10/16 01:35:39
しまった、記法がC++ですいません。
810デフォルトの名無しさん:04/10/16 01:42:51
>>806
Shift_JISでも問題は一緒
811デフォルトの名無しさん:04/10/16 01:43:49
>>807
あたりまえだが移植性とかまったく考えてないし、
素直に801のstrncmp版使っとけ
812デフォルトの名無しさん:04/10/16 01:44:28
>>808
アドレスだけスタックに入れて、プログラムの構造はループにする
813デフォルトの名無しさん:04/10/16 01:46:07
>810
一緒じゃない、問題はあるが違うネタ。全てが2バイト文字ならShift_JISは無問題。
使ってる領域見れ。
814デフォルトの名無しさん:04/10/16 01:49:05
>>788
!再起だと思う。
815808:04/10/16 01:59:22
>>812
ありがとうござます、標準ライブラリですよね
試してきます。落ちませんように…
816デフォルトの名無しさん:04/10/16 02:34:04
>>808

どうせ再帰が使えないなら横型探索で。
#include <stdio.h>

#define Q_SIZE 1024

struct Tree {
  int data;
  struct Tree *next;
  struct Tree *child;
};

void search(struct Tree *p)
{
  struct Tree *queue[Q_SIZE + 1] = { p };
  int i, j = 1;

  for (i = 0; p = queue[i]; i++)
    do {
      printf("%d\n", p->data);
      if (p->child)
        queue[j++] = p->child;
    } while (p = p->next);
}

int main(void)
{
  struct Tree root = { 1 };
  search(&root);
  return 0;
}
817デフォルトの名無しさん:04/10/16 02:54:08
標準ライブラリ、特に入出力関数がどう実装されているかを
わかりやすく解説した本ってありませんか?

リダイレクトしたときに、入出力関数の動きがどのような仕組みで
変わるのかを知りたいのですが?
818デフォルトの名無しさん:04/10/16 02:55:47
>>817
そんな事言うと、ソース読めと言われますよ。
819817:04/10/16 02:57:01
本ではなく、WEBページでも結構です。
宜しくお願いします。
820デフォルトの名無しさん:04/10/16 02:57:35
そういうのを知る必要がないしコンパイラごとで違うので誰も知らない


アセンブラコードでも吐かせて見てみるか
821デフォルトの名無しさん:04/10/16 03:00:57
でも煽りじゃなくソース読むのがてっとりばやくないか?
822デフォルトの名無しさん:04/10/16 03:02:38
自分の考えを確かなものにする裏付けが欲しいのだろうか
823デフォルトの名無しさん:04/10/16 03:03:22
824デフォルトの名無しさん:04/10/16 03:03:37
だいたいリダイレクトはC言語じゃなくてシェルの機能だし
825デフォルトの名無しさん:04/10/16 03:05:09
パブリックドメインのprintfやscanfの実装ってありませんかね?
826デフォルトの名無しさん:04/10/16 03:08:34
>>817
>リダイレクトしたときに、入出力関数の動きがどのような仕組みで変わるのか

単にstdoutの指す先が変わるだけじゃないの?
827817:04/10/16 03:09:25
>>818
私、最近勉強始めたばかりで、
ほんとにまだ最初の方で、fprint()、scanf()のところでもう壁にぶち当たっています。

scanf()は、キーボードからの入力を変数に代入する関数であると説明がありますが、
エコーバックは、何がどのようにうやってくれているんだ?
scanf()がやっているのではないのか?
そして、それはリダイレクトするとどうなるんだ?
ってことがわかりません。

簡単な概要を取り敢えず知りたいのですが・・・
828デフォルトの名無しさん:04/10/16 03:09:31
dup2やpopenや、あとなんだろう
829817:04/10/16 03:13:58
>単にstdoutの指す先が変わるだけじゃないの?

出力関数の場合、論理出力装置が変わるだけだと思うのですが、
入力関数の場合、エコーバックしたり、しなかったりという動きの変化は
どなっているのでしょう?
830817:04/10/16 03:16:11
あれ・・・
すみません。「論理出力装置」っていう用語ありませんでしたね。
yahooで検索しても引っかからない。
私の記憶違いでした。
831デフォルトの名無しさん:04/10/16 03:24:53
そこまでくると、C言語の範疇じゃなくなるな
エコーバックはOSが勝手にやっててCがエコーバックしてるわけじゃないし。
//今はINT21とかやらないからなー
832デフォルトの名無しさん:04/10/16 03:29:16
UNIXなら
http://www.slayers.nu/~kumasaka/Gyoumu/kbdhit.html
ここらへんを参考に関係ありそうなキーワードをひたすらググれば出てくるかも
833デフォルトの名無しさん:04/10/16 07:53:25
VC++のcrtのソース見てたら・・・



gotoが・・・・・
834デフォルトの名無しさん:04/10/16 08:32:44
>>833
何か問題でも?
835デフォルトの名無しさん:04/10/16 08:46:04
俺は構わんが
836デフォルトの名無しさん:04/10/16 08:51:45
誰も構わないだろう。
837デフォルトの名無しさん:04/10/16 09:30:11
>>833
オマエのソースだってどーせ break の嵐だろ
838デフォルトの名無しさん:04/10/16 09:45:51
この前見たソース、

for (;;) {
...;
...;
if (...) {
break;
}
...;
...;
break;
}

って感じだった。ループさせる意図が無いならgotoか、
さもなくばswitchかせめてdo whileにして欲しいと思った。
839デフォルトの名無しさん:04/10/16 10:49:09
挿入法のソートのアルゴリズムなんですけど、参考書ではif文のあと
にelse{break;}をいれてるんですけど、これはいるもんなんでしょうか
いれずにしても、ちゃんとソートしました。
#include <stdio.h>
void main(void){
・・・・・int gakusei[]={165,158,170,156,175};
・・・・・int i,j;int temp;
・・・・・・for(i=0; i<5; i++){
・・・・・・for(j=i-1;j>=0;j--){
・・・・・・・if(gakusei[j]<gakusei[j+1]){
・・・・・・・temp=gakusei[j];
・・・・・・・gakusei[j]=gakusei[j+1];
・・・・・・・gakusei[j+1]=temp;}}}

・・・・・for(i=0; i<5; i++){
・・・・・printf("%d\n",gakusei[i]);}}
840デフォルトの名無しさん:04/10/16 10:51:40
>>839
頼むから初心者スレに行ってくれ……
841デフォルトの名無しさん:04/10/16 10:59:30
つか、バブルソートじゃ?
842デフォルトの名無しさん:04/10/16 11:03:20
なぜelse でbreak文がいるんですか?
for文で条件があわなくなったら勝手にぬけるんじゃ?
843デフォルトの名無しさん:04/10/16 11:20:17
>>842
勝手に抜ける前に終了させてるんでしょ。
844デフォルトの名無しさん:04/10/16 11:38:48
>>813
全てが2バイト文字ならEUCも無問題なんだが。
845デフォルトの名無しさん:04/10/16 11:42:19
>>839
どこの参考書だ?それは挿入ソートとは違う。
846デフォルトの名無しさん:04/10/16 11:44:47
>>844
文字の組み合わせで、2バイト目と1バイト目が別の文字と被る、
と、そもそも806のレスがあるでしょうに。
847デフォルトの名無しさん:04/10/16 11:49:46
>>846
全てが2バイト文字なら文字位置が偶数番目か奇数番目かで
2バイト目か1バイト目かがすぐに分かるだろ。
848デフォルトの名無しさん:04/10/16 11:56:33
>>845
まじですか?c言語で学ぶアルゴリズムとデータ構造
って本です。挿入ソートのアルゴリズムでのってました
849デフォルトの名無しさん:04/10/16 11:59:58
解説では一気に挿入位置をきめてるのではなく一つのデータの
挿入位置が決定するまで末尾から先頭にむかって値の交換を
くりかえしていると解説しています。
850デフォルトの名無しさん:04/10/16 12:01:23
よーしパパ2バイト文字しか使わない言語作っちゃうぞー
main() {
  printf(”Hello, World.¥n”);

851デフォルトの名無しさん:04/10/16 12:03:18
改行コードが入ってる
852デフォルトの名無しさん:04/10/16 12:04:12
853デフォルトの名無しさん:04/10/16 12:05:53
>>850
突然「全てが2バイト文字」という前提を持ち出した >>813 がアフォ
854デフォルトの名無しさん:04/10/16 12:18:42
なんで850にフォローしてるんだ?
855悲しい。:04/10/16 12:40:41
http://nakagawamasaharu.hp.infoseek.co.jp/index.html
ちょっとフォローしている人を見ると悲しくなるのは何故でしょうか?
856デフォルトの名無しさん:04/10/16 13:02:05
親衛隊でも出没したのか
857sage:04/10/16 13:20:42
>>838
do { } while(0); だと警告が出るんですよ。VCの/W4だと。
858デフォルトの名無しさん:04/10/16 13:22:01
ふつうUTF-8
859838:04/10/16 14:48:00
>>857
大丈夫、for (;;) {...}でも最後にbreakしたら大抵警告出るから。
do {..} while (0) を使えといっているわけではないことに注意してくれ。
860デフォルトの名無しさん:04/10/16 14:54:56
861デフォルトの名無しさん:04/10/16 15:29:01
警告(857): 頭悪スレへ逝ってよし。
862sage:04/10/16 20:15:42
>>859
>大丈夫、for (;;) {...}でも最後にbreakしたら大抵警告出るから
そんなコンパイラあんのかよ
863デフォルトの名無しさん:04/10/16 20:28:27
warning: warning oriented programming is now obsolete.
864デフォルトの名無しさん:04/10/16 20:39:47
>>859
今、Visual C++とBorland C++ Compilerで試したら出なかったが。
865デフォルトの名無しさん:04/10/16 22:00:07
> do { } while(0); だと警告が出るんですよ。VCの/W4だと。

常識的に for (; ; )

do { } while (1); や while (1) は使わない。

それと同じ理屈だ。
866デフォルトの名無しさん:04/10/16 22:02:28
for(;;)かwhile(1)か、そんなのは何も考えずに会社のコーディング規則に
従えばそれでいいと思うが。
867デフォルトの名無しさん:04/10/16 22:03:14
> 挿入法のソートのアルゴリズムなんですけど、参考書ではif文のあと

っていうか、まずそのまぬけな本の名前を言えよ!

void mainなんていう書き方してる時点でだめだめだし、
初心者が間抜けな勘違いをしそうなインデントをわざわざしてるあたりが
間抜けな本だ。

まず書名を書け!
868デフォルトの名無しさん:04/10/16 22:04:57
まずスレを嫁!
869デフォルトの名無しさん:04/10/16 22:05:25
>>867
空気読め
870デフォルトの名無しさん:04/10/16 22:11:37
#include <stdio.h>
#define MAX 5

main()
{
・・int g[MAX] = {165, 158, 170, 156, 175};
・・int i, j, t;

・・for (i = 0; i < MAX; i++) {
・・・・for (j = i - 1; j >= 0; j--) {
・・・・・・if (g[j] >= g[j + 1])
・・・・・・・・break;
・・・・・・else {
・・・・・・・・t = g[j];
・・・・・・・・g[j] = g[j + 1];
・・・・・・・・g[j + 1] = t;
・・・・・・}
・・・・}
・・}

・・for (i = 0; i < MAX; i++)
・・・・・printf("%d\n", g[i]);
}
こうかけば、そういう間抜けな勘違いをするやつもでてこない。
871デフォルトの名無しさん:04/10/16 22:12:32
> for(;;)かwhile(1)か、そんなのは何も考えずに会社のコーディング規則に

いいえ、どちらもだめです。
872デフォルトの名無しさん:04/10/16 22:28:31
>>871
なんか冴えに欠けるなw
873デフォルトの名無しさん:04/10/16 22:30:43
みんな突っ込みどころ違うんじゃないのか?

do{
}while(0);

間にcontinue入れたらわからんでもないが、
これじゃループにもならんがな('A`)
874デフォルトの名無しさん:04/10/16 22:32:56
>>873
レス読み返せ
875デフォルトの名無しさん:04/10/16 22:58:44
>>862
Solaris2.8のccは警告が出た。
曰く、ループの終端に辿り着けないとさ。
876デフォルトの名無しさん:04/10/16 23:15:38
来年就職し、C言語を使うといわれたのですが
勉強しとくのはVCとかC++でも大丈夫ですか?
何やっとけばいいかわからないんですけど、なにか作ったほうがいいでしょうか?
877デフォルトの名無しさん:04/10/16 23:19:19
>>876
何を作ってる会社かも知らんのか!?
お前の人生それでいいのか!?
878デフォルトの名無しさん:04/10/16 23:22:36
どんなのを作ってるのかは知ってますけど、どうゆう受注でなんの言語を使ったかは知りませんが
普通入社前でも知ってるものなんですか?
879デフォルトの名無しさん:04/10/16 23:23:55
>>876
このへん、おすすめ
http://www.kumei.ne.jp/c_lang/

題材ははっきり言ってえり好みしてても意味がない
所詮は付け焼刃ってとこ忘れていい気になってると一番痛いカウンターもらう

とにかく、色々ちゃらちゃら見て、やりたいのから逝け
有料製品でリッチにやるもよし、フリーでハングリーにいくもよし
まさしくあんたの人生だ、思うようにいけばいい
880デフォルトの名無しさん:04/10/16 23:25:36
>>878
当たり前だ。自分がどんな仕事するかわからん所に行けるか!
881デフォルトの名無しさん:04/10/16 23:28:03
>873

do{ 〜 }while(0)(最後に ; をつけない)なら
複数の文を含む関数っぽく使えるマクロ組むときに使うな。
 #define HOGE(i) { foo(i); bar(j); }
と定義すると
 if(〜)
  HOGE(i);
 else
  piyo();

とするとコンパイルエラーになる
そこで、後に ; がつけられて、ループしないdo{ 〜 }while(0)を使って
 #define HOGE(i) do{ foo(i); bar(j); }while(0)
とやればちゃんとコンパイルできるようになる。
882デフォルトの名無しさん:04/10/16 23:30:19
それ専用
883デフォルトの名無しさん:04/10/16 23:38:02
途中でbreak;かませば最後まで行ってくれる。gotoなし。
884デフォルトの名無しさん:04/10/16 23:44:36
int (*poly[5])[3];
これは、どう読めばいいのでしょうか?
885デフォルトの名無しさん:04/10/16 23:46:27
do{
  一回しか実行しないけど括弧でくくりたい(==breakを書きたい)処理
}while(0);

でいいんじゃないの?
886デフォルトの名無しさん:04/10/16 23:47:17
>>884
ポインタの配列の配列
887デフォルトの名無しさん:04/10/16 23:47:27
>>884
int poly[3]へのポインタの配列(要素数5)
888デフォルトの名無しさん:04/10/16 23:50:10
>>887
それは
int poly[5][3];
かも
889デフォルトの名無しさん:04/10/16 23:51:17
>>888
それはintの配列の配列
890デフォルトの名無しさん:04/10/16 23:54:43
int [3]へのポインタの配列poly(要素数5)と書くべきか
polyは配列名だし
891デフォルトの名無しさん:04/10/17 00:02:28
配列(要素数3)のポインタの配列(要素数5)
892デフォルトの名無しさん:04/10/17 00:03:34
int oreryu[3];
int (*donden)[3]=&oreryu;
int (*daichan[5])[3];
daichan[4]=donden;
893デフォルトの名無しさん:04/10/17 00:07:45
>>886
2次元配列って言いたいのか?
894デフォルトの名無しさん:04/10/17 00:37:41
>>885
何も言わずにただカッコでくくるだけじゃ物足りないの?
{
// 1回だけだよ〜
}
895デフォルトの名無しさん:04/10/17 00:41:13
つまりintポインタの2次元配列?
896デフォルトの名無しさん:04/10/17 00:43:31
>>894
>>881

マクロにしないならそれでいいけど。

>>895
違うって。配列は一次元。
897デフォルトの名無しさん:04/10/17 00:47:59
>>894
breakは?
898デフォルトの名無しさん:04/10/17 00:54:05
>>896
むずい・・
(*poly[5])が3つあるってことだよね。
でも、そのpolyはintポインタが5つ。
899デフォルトの名無しさん:04/10/17 01:05:11
>>898
違う。
配列へのポインタ(配列を指すポインタ)って分かる?
int a[3]で&aとすると得られるものの型なんだけど。
それの5つの配列。

int (*poly)[3];
これが配列へのポインタ(あくまでもポインタで配列ではない)で、それを配列にするとint (*poly[5])[3];


うまく伝わりそうにないなぁ。
900デフォルトの名無しさん:04/10/17 01:18:20
そこでtypedefですよ
901デフォルトの名無しさん:04/10/17 01:22:58
なんでこんな基本的なことでいまさら盛り上がるのか。
C言語が難しい言語なのか、
それともここにいるやつらが馬鹿なのか。
902デフォルトの名無しさん:04/10/17 01:27:26
CなのにC++の//のコメントを書くのが気に入らない。
便利なのは分かるがCではない。
そうだ、Cのソースファイルの // を /* に置き換えて行末に */を追加する処理を
作ってくれないか。ただし、ダブルクォーテーションで囲まれた文字列リテラルは
無視するように。
903デフォルトの名無しさん:04/10/17 01:28:23
【ビギナ】初心者が習うべき言語は? part6【必読】
http://pc5.2ch.net/test/read.cgi/tech/1092932484/
904デフォルトの名無しさん:04/10/17 01:32:22
905デフォルトの名無しさん:04/10/17 01:35:19
>>902
C99
906デフォルトの名無しさん:04/10/17 04:18:21
>>902
簡単だよ。マクロ作ればいいじゃん。

#define //(comment) /* comment */
907デフォルトの名無しさん:04/10/17 04:50:18
プリプロセッサの出力ファイルをまた保存して新たなソースに・・・
余計なところまで展開されて・・・
908デフォルトの名無しさん:04/10/17 05:54:31
struct kouzoutai *kouzoutai

構造体のポインタは

struct kouzoutai kouzoutai

kouzoutai.変数=100;

こういうのはできないの?
909デフォルトの名無しさん:04/10/17 05:59:40
>>908
struct kouzoutai *p;
p->hoge = 100;
910デフォルトの名無しさん:04/10/17 06:38:40
>>909
ぬ、ぬる、
911デフォルトの名無しさん:04/10/17 06:39:17
ぽーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
912デフォルトの名無しさん:04/10/17 06:46:04
>>910-911
正確にはNULLではなく不定なわけだガッ!!
913デフォルトの名無しさん:04/10/17 07:00:39
> CなのにC++の//のコメントを書くのが気に入らない。

いいえ。Cのコメントです。
私はBCPLの時代のくせで//ばかりでしたが、
Cで15年ほど前から//が使えるように拡張されている処理系が多かったのは
うれしかったです。
5年前に標準規格にもとりいれられたのは「いまさら」って感じです。
914デフォルトの名無しさん:04/10/17 07:05:19
↑それ、「C++の真似でそうなってるとか思ってるやつはボケだ! むしろ先祖返り」って、
日下部先生も本に書いてたよね。
915デフォルトの名無しさん:04/10/17 07:07:04
やっぱりコメントは○○じゃなきゃ落ち着かない。
って人も、

#define REM //
#define rem //
#define ' //
#define # //
#define ! //
#define ; //

これで万事解決だね!
916デフォルトの名無しさん:04/10/17 08:03:59
#define Rem //
917デフォルトの名無しさん:04/10/17 08:05:07
char rem;
if (rem != '#') rem='$';
918デフォルトの名無しさん:04/10/17 11:04:53
>>913
ネタニマジレスカコワルイ
919デフォルトの名無しさん:04/10/17 11:38:09
>>916-918

>>915 の最後のオチに気づいてやれよ
920デフォルトの名無しさん:04/10/17 11:59:35
int main(void)
{
char buf[64];
char **p=0;

fgets(buf, 64, stdin);

*p = (char *)malloc(sizeof(char) * 64);
p[0] = strtok(buf, " ");

printf("%s\n", *p);
free(*p);
}
こんな感じでポインタのポインタを使って、動的
に領域を確保したいんですけどどこらへんが
だめなんですかね、プログラムの途中で終
わってしまうんですけど。
921デフォルトの名無しさん:04/10/17 12:03:30
*p = (char *)malloc(sizeof(char) * 64);
の前に一行
p = (char **)malloc(sizeof(char *));
入れとけ
922デフォルトの名無しさん:04/10/17 12:12:45
>>921
親切な人ありがとう。
923デフォルトの名無しさん:04/10/17 12:12:54
>>920
>921したらfree()も忘れずに。
#キーワード抽出にはstrtok()よりもsscanf()使用をお奨め。
924デフォルトの名無しさん:04/10/17 12:39:19
> >>915 の最後のオチに気づいてやれよ

このぼけって、最後の1つしかネタだと思わなかったわけだな...
925デフォルトの名無しさん:04/10/17 12:41:37
*p = (char *)malloc(sizeof(char) * 64);
p[0] = strtok(buf, " ");
     ↓
p[0] == *(p + 0) == *p
     ↓
*p = (char *)malloc(sizeof(char) * 64);
*p = strtok(buf, " ");
...
free(*p)


………あれ?
926デフォルトの名無しさん:04/10/17 12:41:38
> char **p=0;
>
> *p = (char *)malloc(sizeof(char) * 64);

まず、ここで間違い。

> free(*p);

NULLかもしれないものをfreeしてる時点でまちがい
927デフォルトの名無しさん:04/10/17 12:42:04
> これで万事解決だね!

これのことだろ
928デフォルトの名無しさん:04/10/17 12:44:38
p = (char **)malloc(sizeof(char *));
で確保した分はfree(p)
*p = (char *)malloc(sizeof(char) * 64);
で確保した分はfree(*p);で解放。
でいんですか?
929デフォルトの名無しさん:04/10/17 12:45:25
> これのことだろ

ちがうだろ。その上の5行の中の違いに気づかないのかよぼけ
930いんですか?:04/10/17 12:46:03
いんですか?
931教えて:04/10/17 13:31:45
文字列にループで数字を入れていくにはどうすればいいですか?
例えば、file001,file002,file003・・という風につけていきたいのです。
932デフォルトの名無しさん:04/10/17 13:34:45
sprintf()
933デフォルトの名無しさん:04/10/17 13:35:03
>>931
sprintf
934デフォルトの名無しさん:04/10/17 13:35:08
sprintfで我慢してください
935デフォルトの名無しさん:04/10/17 13:35:38
3連コンボワロタ
936教えて:04/10/17 13:39:33
ありがとうございます!!!
937デフォルトの名無しさん:04/10/17 13:43:35
>NULLかもしれないものをfreeしてる時点でまちがい

こいつ ぼけ
938デフォルトの名無しさん:04/10/17 14:23:58
struct test {
int num;
};

struct test *t;

としたとき、tの中のnumのアドレスをとるには、どう記述すればいいですか?
939デフォルトの名無しさん:04/10/17 14:27:12
&(t->num)
940デフォルトの名無しさん:04/10/17 14:40:45
#include <stdio.h>

struct test {
int num;
};

void func(struct test *t)
{
int a = 10;
t->num = a;
printf("%d\n", t->num);
return ;
}

void func2(struct test *t)
{
int a = 10;
&(t->num) = &a;
printf("%d\n", t->num);
return ;
}

int main(void)
{
struct test t;

func(&t);
func2(&t);
return 0;
}

としたとき、func2がエラーになるのはなぜですか?
941デフォルトの名無しさん:04/10/17 14:48:40
>>940
頼むから初心者スレに行ってくれ。
942デフォルトの名無しさん:04/10/17 14:50:36
int i,j;
int *p;
j=1;
で、

i=j;
がOKで
&i=&j;
がNGなのとおなじ。
(変数のアドレスは書き換えられない)

やるなら
p=&j;
943デフォルトの名無しさん:04/10/17 14:51:11
やたら初心者スレ逝けって言ってる奴なんなんだ?
質問スレに何故居るんだ。
944デフォルトの名無しさん:04/10/17 14:52:38
>>943
一応回答しているし、説明するのが面倒なんだろ。
#だったら放置すりゃいいのにとは思うが。
945デフォルトの名無しさん:04/10/17 14:54:52
>>939,942
どうもありがとうございました。
946デフォルトの名無しさん:04/10/17 14:59:49
>>941
ほら質問者に無視されてる。
947デフォルトの名無しさん:04/10/17 15:24:06
まあ、初心者スレ行けと言っておけば、
・自分が回答できないということを言いつつ
・相手より自分のほうが知識があると思わせることが出来る
矮小な自我を守るために必死なんですよ。(・∀・)ニヤニヤしてあげましょう
948デフォルトの名無しさん:04/10/17 15:40:00
つか、宿題スレ行きだろ。
949デフォルトの名無しさん:04/10/17 15:43:48
ニヤニヤ
950デフォルトの名無しさん:04/10/17 15:53:15
>>941はきちんと回答していると思うが…。
951デフォルトの名無しさん:04/10/17 16:01:58
わかったから初心者じゃない高尚な話題ふれよ(・∀・)ニヤニヤ
952デフォルトの名無しさん:04/10/17 16:48:04
あまりにも初心者的な質問は
【初心者歓迎】C/C++室 Ver.10【環境依存OK】
http://pc5.2ch.net/test/read.cgi/tech/1097416187/
こういう名前のスレがあるからこっち逝けって意味なんじゃないの?
953デフォルトの名無しさん:04/10/17 17:12:39
ここのスレは何の話題やるんだ?
954デフォルトの名無しさん:04/10/17 17:13:08
>>920
int main(void)
{
char buf[64];
char *p=0;

fgets(buf, 64, stdin);

p = (char *)malloc(sizeof(char) * 64);
strncpy(p, strtok(buf, " "), 64);

printf("%s\n", p);
free(p);
}

君のやりたいことはこれで充分。
64 はマジックナンバーだから #define すれ。
955デフォルトの名無しさん:04/10/17 17:42:55
ここでstrtokはリエントラントじゃないぞと無意味に絡むのがこのスレの流儀
956デフォルトの名無しさん:04/10/17 17:44:37
>>953
C言語について語るスレですが。
957デフォルトの名無しさん:04/10/17 17:45:42
main関数だろ、なんでリエントラントの話に
958デフォルトの名無しさん:04/10/17 17:58:17
どこでも同じだろ。
959デフォルトの名無しさん:04/10/17 18:00:44
あのソースでリエントラントがあるとどう困るんだ?
960デフォルトの名無しさん:04/10/17 18:09:50
リエントラントになってるほうがうれしい
961デフォルトの名無しさん:04/10/17 18:13:25
テストコードだから、サンプルだから、そう理由をつけて糞コード書く香具師に限って
製品コードでも似たような糞コード書くんだよな。
#つーか、コメントに1秒ウェイトと書いてSleep(2000)なんて書くんじゃねぇよ(鬱
962デフォルトの名無しさん:04/10/17 18:14:29
で、それがこの場合にどう関係するんだ?
963デフォルトの名無しさん:04/10/17 18:14:34
>962
HTなんだよ、きっとw
964デフォルトの名無しさん:04/10/17 18:16:30
>>963
で、HTが何の関係あるんだ?
965デフォルトの名無しさん:04/10/17 18:17:02
リエントラントにこだわることないじゃん。
966デフォルトの名無しさん:04/10/17 18:26:00
return 0; が無いぞと無意味に絡むのはこのスレに相応しいですか?


あ、それはコンパイラが絡んでくれるからいいのか。
967デフォルトの名無しさん:04/10/17 18:28:02
お前はふさわしくない
968デフォルトの名無しさん:04/10/17 18:33:54
大学でC習ってるんですが、今時Cの案件なんかあるんですか?
969デフォルトの名無しさん:04/10/17 18:37:29
>>968
てめえ喧嘩売ってるのかコラ
970デフォルトの名無しさん:04/10/17 18:38:36
>>968
持ってるところは持ってるし、持ってないところは持ってない。
971デフォルトの名無しさん:04/10/17 18:50:30
そうなんですか?
今時Cの案件なんか組み込み系CPUの一部でしかないと思ってました。
禿ですらプログラミング言語C++でCイラネって言ってるんでどんなもんなのかと
972デフォルトの名無しさん:04/10/17 18:52:44
イランと思うなら勉強せず、その単位も捨てとけ。
お前以外の誰も困らない。
973デフォルトの名無しさん:04/10/17 18:56:26
>>971
組み込み系がマイノリティという前提での発言か?
974デフォルトの名無しさん:04/10/17 19:02:32
次スレたててくる。
975デフォルトの名無しさん:04/10/17 19:08:04
976デフォルトの名無しさん:04/10/17 19:08:37
間違った。
こっちだ。
http://pc5.2ch.net/test/read.cgi/tech/1098007606/
977デフォルトの名無しさん:04/10/17 19:09:06
>>975-976
わざとだろw
978デフォルトの名無しさん:04/10/17 20:00:00
実行ファイルのインスタンス数は圧倒的に組み込みの方が多いかも・・・
979sage:04/10/17 20:00:15
>>859
>大丈夫、for (;;) {...}でも最後にbreakしたら大抵警告出るから
なんてコンパイラになんてコンパイルオプション付けたら出んのか書いてみろよ
980デフォルトの名無しさん:04/10/17 20:03:49
>>875は?
981デフォルトの名無しさん:04/10/17 22:15:14
982デフォルトの名無しさん:04/10/17 22:21:44
つまんねぇんだよボケが
983デフォルトの名無しさん:04/10/17 23:49:45
ヘッダを全部合わせて、"all.h"とか作ったら怒られますか?
984デフォルトの名無しさん:04/10/17 23:54:18
>>983
意味が解からない。
想像するには、
hoge1.h
hoge2.h
hoge3.h
というのがあって、
all.hの中身が、

/* all.h */
#ifndef __ALL_H_
#define __ALL_H_

#include "hoge1.h"
#include "hoge2.h"
#include "hoge3.h"

#endif /* __ALL_H_ */

というものを使っても良いか否かということを聞いているのかな。
だとすると、うん、それはもちろんOK。
985デフォルトの名無しさん:04/10/18 01:37:43
本物の大学生は「案件」なんて言わない。
986デフォルトの名無しさん:04/10/18 01:46:20
9bitの2の補数を正しくintに変換するにはどう書けばよいでしょうか?
987デフォルトの名無しさん:04/10/18 01:55:01
>>985
大学生でもいろいろいる。
業界に片足突っ込んだ学生もいるし。
988986:04/10/18 02:02:27
ちなみに元の値はchar *型です。
下位9bitを用いた数値をint型変数に置き換えてプログラムで使用したいと
思ってます。

int new
char *old;

------

new = (int)(old[0] & 9)

とかしても失敗でした。
よろしくです。
989デフォルトの名無しさん:04/10/18 02:12:15
>>988
9の下位9ビットは1なのかね?
990989:04/10/18 02:13:14
そのまえに普通charは8ビットだよな。
991デフォルトの名無しさん:04/10/18 02:17:35
>>990
いいえ。
992デフォルトの名無しさん:04/10/18 02:33:08
>>990
charは7ビットです。
993デフォルトの名無しさん:04/10/18 02:36:32
charは普通8bitだろう
994デフォルトの名無しさん:04/10/18 02:39:53
>>993
いいえ。
995デフォルトの名無しさん:04/10/18 02:46:09
ビットフィールド
996デフォルトの名無しさん:04/10/18 02:56:35
>>993
charは16ビットです。
997デフォルトの名無しさん:04/10/18 03:22:51
記念カキコ v(^o^i)d
998デフォルトの名無しさん:04/10/18 03:53:24
↓999
999デフォルトの名無しさん:04/10/18 03:58:20
↓1000ゲット厨必死だなw
1000デフォルトの名無しさん:04/10/18 03:59:55
(((;;;:: ;: ;;          ;; ;:;::)) ::)
   ( ::: (;;   ∧_,∧   );:;;;)) )::: :; :))
    ((:: :;;  (´・ω・)っ旦;;;; ; :))
     ((;;;  (っ ,r どどどどど・・・・・
          i_ノ┘

 ((;;;;゜;;:::(;;:  ∧__,∧ '';:;;;):;:::))゜))  ::)))
 (((; ;;:: ;:::;;⊂(´・ω・`)  ;:;;;,,))...)))))) ::::)
  ((;;;:;;;:,,,." ヽ旦⊂ ) ;:;;))):...,),)):;:::::))))
   ("((;:;;;  (⌒) |どどどどど・・・・・
         三 `J

         .∧__,,∧   ;。・
       ⊂(´・ω・`)⊃旦
    ☆   ノ   丿 キキッ
      ヽ .ノ  (⌒) 彡
       と_丿=.⌒

         .∧__,,∧ゼェゼェ
        (´・ω・;)
         ( o旦o )))   お茶どうぞ
         `u―u´


C言語なら俺に聞け! Part 93
http://pc5.2ch.net/test/read.cgi/tech/1098007606/
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。