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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
・C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
・comp.lang.c FAQ(英語の原文)
http://www.eskimo.com/~scs/C-faq/top.html
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
推薦図書/必読書のためのスレッド PART4
http://pc.2ch.net/test/read.cgi/tech/1022961238/l50

・前スレ <28> http://pc3.2ch.net/test/read.cgi/tech/1028495798/

コンパイラ、過去ログなどのリンクは>>2-5 あたり
2デフォルトの名無しさん:02/08/18 02:26
【コンパイラ】
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/

【ライセンスや機能などに問題あり】
Microsot C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/
LCC-Win32
http://www.cs.virginia.edu/~lcc-win32/
CINT
http://root.cern.ch/root/Cint.html
めじろ++98
http://www.vector.co.jp/soft/win95/prog/se075910.html

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

【注意】
Cmachineは一般的なCと挙動が違いすぎるので動作の保証はできません。
まともな処理系を使いましょう。
3デフォルトの名無しさん:02/08/18 02:26
もういいかい?

       リーナス                       ジョブス
        /⌒◆                      ◆⌒\
       / 冫、)                     ( ヘ´   ヽ
     _/  ` ∠_                       ヽ´   人
    イ  ゝイノ | ヽ                      冫y彳 (;⌒ヽ
    || ヘ  。   | /|                    / 。  |  /|ヽ
    || |  。 /  | |         ゲイツ        | | 。 /.|   | |
    |  |  。 /  | |                     | | 。 / .|   | |
    |⌒|  。   | |          /⌒◆       | | 。 _| イ| |
    \|` ヽ   ヽ/         / 冫、)      ゞ |`ヽ |   | |
    /|\人/\|        ―/  ` ∠_      \|\人ヽ /|冫
    || || | | | |       /|  ゝイノ | \      ヽ|| | |/  |
    ||/|| | | | |       / '||   。    ||  \      || | ||  /
      || | | | |       / /|   。 /  |\  )      || | ||/ |
      ヽ| | | |.     ┌|⌒|_|   。 /  |/⌒/ |     || | | |  |
       ヽ| | |      || |  | |   。   / _/ | |      ヽ| | |  |
        | | |     || |⌒|\人ヽノ|⌒|  | |        ヽ| |  |
        | く__く     >>  ̄\__ | ̄ヾ.くく         >_ > )
        \   >.  /ヽ.__/     ̄\./ ̄/        <   /
         `ー' .   ̄ ̄           ̄ ̄       `ー'
C言語はだんだんと初学者用言語になりつつあるぽ。
>>4
すんまそ。
あまり厳密にチェックしていなかった。
次のスレを立てる人は細かい修正よろしく。

>>5
>もういいかい?
だれもカキコしてくれないから、ちょっとあせった。
で、ここの>>1はどんなスーパープログラマーなんですか?
>>9
最近その辺の設定を忘れてるヤシが多いな。
漏れはスーパーで買い物するプログラマです。
今日はゴーヤが安かったです。
漏れはスーパーカーで通勤するプログラマです。
最近は取締りが厳しいです。
とりあえず新スレオツカレー
俺の名はジョン=マッカートニー。
50年以上C言語を使い続けている。
K&Rの作者よりも先にCを使い始めたのが俺の唯一の自慢だ。
C言語の質問ならなんでも聞け。
ただし宿題丸投げに答えてやれるほど暇じゃない。
天才は忙しいのだ。
15調書新車:02/08/18 14:06
結城本のC言語プログラミングレッスン(入門)買ったんですけど
コンパイラは何にしたらよいですか。
ワカランことだらけなんですよ
>11
そうか。
パリではゴヤが安かったよ。流石にゴッホは買えんわ。

>15
無論、Cコンパイラ
新スレか…。
1815:02/08/18 16:28
>O
どうやって手に入れるんですか
19login:Penguin:02/08/18 16:39
>【注意】
>Cmachineは一般的なCと挙動が違いすぎるので動作の保証はできません。
>まともな処理系を使いましょう。
1にデカデカと(まぁタグ使えないから無理だが)書いておいた方が…(笑)。

>>15
コンパイラ フリーとかで検索しれ。
次からは >>1 に gcc と bcc のリンク先を載せるのが良いかもね。
一応 >>2 をみれば書いてあることなんだけど (w
>>20
ドキュソは>>2なんて見ないので>>1に書くのが吉かと…あ、>>1すら見ないか(笑)。
1のみタグOKとかにできんのかな?
>22
本気か?冗談だよな?
2415:02/08/18 17:25
申し訳ないです
コンパイラっ色々あってどれにしていいか
わからなかったもんで…
>>24
で、見付かった?頑張れよ。
>>1
名前がつまらん。日下部ネタじゃなくてもいいから、何か面白い名前にしろよ・・・
27ガイシュツ:02/08/18 18:08
遅れ馳せながらスレ立て乙かれー
2924:02/08/18 18:55
>>25
見つかってないです。
Cygwinだと結城本のとおりにできないし
もうちょっと頑張ってみます
Borland C++がお勧め
31デフォルトの名無しさん:02/08/18 21:26
wchar_t str1[256] = L"スペース123     テスト";
char str2[256];

wcstombs(str2,str1,256);
puts(str2);

画面に正しく出力されないのですがどこがいけないのですか?
BCCを使ってます。
32 :02/08/18 21:37
>>31
ロケール?
>31
VC++でも失敗した。判らん。

mbstowcs()で逆変換したら大丈夫だった。当たり前だけど。
しかいなんでワイド文字列リテラルがちゃんと認識されてないのかなぁ。

mbstowcs(str1, "スペース123     テスト", sizeof(str1)/sizeof(str1[0]));
3431:02/08/18 23:15
いったい何故なんでしょうね。
取り敢えずワイド文字列で初期化しないようにします。
32が正解言ってるでしょ。
Unicodeライブラリはデフォルトの"C"ロケールだと
非ASCII文字を正しく表示しない。
プログラムの先頭でsetlocaleすべし
Unicodeで非ASCIIって意味不明だったけど
Basic Latin以外の文字って意味ね
3731:02/08/18 23:30
サンクス そうでしたか。
38 :02/08/19 17:41
#define WAIT(a) a;

WAIT(600)

こんな風に使うことってありますか?
コメントで,ウェイト処理ようの数字だよってこと知らせる手間を省きたいのですが
>>38
ない。
>>38
意味がわからん。
使うときは sleep(WAIT(600))とかするの?
って、セミコロンが付いてるからエラーになるか。
最後のセミコロンがやばげ
42デフォルトの名無しさん:02/08/19 17:51
便乗で質問。
マクロの#undefって
#undef WAIT(a)
or
#undef WAIT
?
43デフォルトの名無しさん:02/08/19 17:55
>>42
何が聞きたいのかわからん
なんか面白いスレだな〜
45デフォルトの名無しさん:02/08/19 18:03
失礼。
>>38のようにパラメータを持ったマクロの場合について聞きたかったんです。
>>45
#ifdef VOKE
#define SHINE(a) (omaemona(a))
#else
#define SHINE(a)
#end

つまり、括弧をつけなさいってこった。
>>46
どこに#undefが?
48デフォルトの名無しさん:02/08/19 19:18
おしえください
fopenでメモリ(malloc)とかを読めますか?

あるライブラリがFILE* を要求してるのですが
直接渡したいので

よろしくおねがいします/

???
50デフォルトの名無しさん:02/08/19 19:25
djgppでのCコンパイルについて質問です。
末尾のアーカイブの中にあるSIEVE_C.Cなのですが、lsic86試食版だと
問題なくコンパイル&実行が可能なのですが、djgppのgccだと、まず、

SIEVE_C.C: In function `int main(int, char**)':
SIEVE_C.C:33: invalid conversion from `char*' to `unsigned char*'

というエラーがでます。これらを直して(2番目は char* を unsigned char*に)
コンパイルすると、以下のようなエラーが出てしまいます。
このエラーの意味はなんなんでしょうか?回避方法があれば教えてください。

d:\DJGPP/tmp/ccVyvq9k.o(.eh_frame+0x11):SIEVE_C.C: undefined reference to `___gxx_personality_v0'
collect2: ld returned 1 exit status


#ソース(初めて読む486の中のソースです)
http://www.ascii.co.jp/books/support/apc/4-7561-0213-1/486.lzh
>>48
読めません。
glibcはiostreamと融合してるのでできるかも知れんが、当然移植性はない。
>>50
お前、C++でコンパイルしてるだろ。
5342:02/08/19 19:32
自己レス、どっちでもよろしいようで
関数へのポインタって、皆さんは使いますか?
いつ、いかなる時に使うのかわかりません。
>>54
ぱっと思いついたのでは有限状態機械を書くときに使うかな。
>>55
ほうほう、ありがとう。つまり、通常のアプリを組む際には特に使わないと
言うことですよね?有限状態機械ってよくわからないけど、組み込みとか
だよね。
>>54
qsort使う時、bsearchを使う時、signalを使う時、atexitを使う時
>>56
組み込みチャウよ

あ、組み込みっつったら割り込みベクタに書くな
>>56
有限状態機械は普通のアプリでも使うよ。パーザを手書きするときとかね。
あとイベントドリブンのアプリケーション書くときにも使えるし。

あとはそうさなあ、Cで多態を実現しようなんて変態なことを
考えたら関数ポインタ使うかな(w
こっちはアイデアだけ考え付いて実装したことはないけど。
次スレ立てる時は、名前のネタがわかっている人が立ててください。
前スレも名前が糞だったし・・・
>>59
C++で多態で書いてたら急遽Cに変更になったときに
構造そのまま無理矢理C化した経験あり(笑)
関数ポインタ多数の構造体をvTblに模してやった。
>>59
さほど変態的でもないし、結構ゴロゴロしてる。
6350:02/08/19 19:59
>>52
レスありがとう。

えーと、
gcc sieve_c.c
とコンパイルしてます。これってCコンパイラですよね?

ちなみに、配布ホストにある、
v2gnu\gcc31b.zip
ってのをインストールしてつかってます。
>>56
プログラムの状態に従って同じ場所での処理が変わるときに、
その場所の処理を関数ポインタで持ち、状態が変わるごとに
対応した値に置き換えておくってことだよ。>有限ステートマシンの実装
呼出元は何も考えずにその関数ポインタを呼ぶだけ。

関数ポインタによる多態は、Cでも例えばWindowsではウィンドウ関数でやってるね。
6550:02/08/19 20:05
すんません、もしかして漏れボケてますか?
>>63
> v2gnu\gcc31b.zip
C++がデフォルトになってるのかな。つーか配布ホストってどこだっけ。

gcc -lang-c sieve_c.c
だとどうなる?
6750:02/08/19 20:17
>>66
レスありがとうございます。

http://www.delorie.com/djgpp/
です。ここから各ミラーに飛んで、v2gnuフォルダ内のgcc31b.zipです。

でも、これだけでは動かないのかも知れません。
ちなみに、自分は↓とかを読んでインストールしました。
http://www.matsusaka-u.ac.jp/~okumura/c/djgpp.html

>gcc -lang-c sieve_c.c
>だとどうなる?

やってみました。
d:/DJGPP/bin/ld.exe: cannot find -lang-c
collect2: ld returned 1 exit status
というエラーになりました。
さっきのよりわかりやすいエラーですね。リンクコマンドでのエラーかな??
6850:02/08/19 20:25
ちょっと手順を分割してみました。
>gcc -c -lang-c sieve_c.c
gcc.exe: -lang-c: linker input file unused because linking not done

この段階でオブジェクトファイルはできていたので、ldを実行してみると、、
以下のようなエラーになります・・・
なんか、基本的な関数が呼び出せていない気がします・・・なぜだ??

>ld sieve_c.o
d:/djgpp/bin/ld.exe: warning: cannot find entry symbol start; defaulting to 000018d0
SIEVE_C.o(.text+0x56):SIEVE_C.C: undefined reference to `atol'
SIEVE_C.o(.text+0x72):SIEVE_C.C: undefined reference to `malloc'
SIEVE_C.o(.text+0x8b):SIEVE_C.C: undefined reference to `__dj_stderr'
SIEVE_C.o(.text+0x90):SIEVE_C.C: undefined reference to `fprintf'
SIEVE_C.o(.text+0x9d):SIEVE_C.C: undefined reference to `exit'
SIEVE_C.o(.text+0xf0):SIEVE_C.C: undefined reference to `printf'
SIEVE_C.o(.text+0x104):SIEVE_C.C: undefined reference to `putchar'
SIEVE_C.o(.text+0x11a):SIEVE_C.C: undefined reference to `printf'
SIEVE_C.o(.eh_frame+0x11):SIEVE_C.C: undefined reference to `__gxx_personality_v0'
69デフォルトの名無しさん:02/08/19 20:35
cygwinをダウンロードしたんすけどgccが使えないっす。cygwinっていうものが
全然わからないので教えてください。
いやです。
>>68
よくわからないけど
SIEVE_C.CをSIEVE_C.cに変えてgcc SIEVE_C.cでやってみたら?
>>66
djgppって使ったことないんだけど、-lang-c だと ang-c という名前の
ライブラリをリンクしてしまうのでは?
>>67 のldのエラーがまさにそんな感じだし。

gcc -x c sieve_c.c
ってやったらどうなる? >>67
普通のgccだとこれでいいはずなんだけど。
7350:02/08/19 21:13
ファイルを全て小文字にして、
>gcc -x c sieve_c.c
してみたら・・・・できました。(゜□゜)
ここで聞かなければ絶対に解決しませんでした。
ありがとうございました!!!!!!!!!
小文字.cにしないだけで、変なことになるんですね。知らなかった・・・

>-lang-c だと ang-c という名前の
なるほど、-lオプションの引数が ang-c って解釈されてしまうということですね。

また何かありましたらよろしくお願いします!
.Cはc++の拡張子だからね
7550:02/08/19 21:18
>>69
自分もcygwinにgccを入れようとしたのですが、
読んでるスレの人がdjgppを入れたのでこれにしました。
gccを使いたいだけでしたら、検討みたらどうでしょう??

http://www.delorie.com/djgpp/
http://www.st.rim.or.jp/~jack/djgpp-jp.html
http://www.matsusaka-u.ac.jp/~okumura/c/djgpp.html
http://www.nifty.ne.jp/forum/fext/tebiki/win9x05.html#9

↑を見れば大体わかるとおもいます。
C:\djgpp等に展開して、C:\djgpp\djgpp.envを設定するだけみたいです。
7650:02/08/19 21:19
>>74
そうなんすか??.cppだけだと思ってました・・・(゜□゜)
勉強になりました。ありがとです。
>>74
それを忘れてたよ。

>>76
GCCの標準では.cc。あとは.cxxとかもある。.cppってのはVCとかで使われてる。
7833:02/08/19 23:17
>32,35
setlocale()でできますた。サンクスコ。
  キャハハハ
  ∧_∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ( ^∀^)< いまどき、Cって吐き気がする。氏んでね。
 ( つ ⊂ ) \_________
  .)  ) )
 (__)_)     (^∀^)ゲラゲラ (^∀^)キモチワル- (^∀^)ゲラゲラ
  (^∀^)ゲラゲラ (^∀^)Cだって (^∀^)ゲラゲラ (^∀^)プッ
(^∀^)クソダモンネ〜 (^∀^)キャハハハ (^∀^)ゲラゲラ (^∀^)まだあったんだあ。
Rubyよりはマシかと.

# 2chでみかけるRuby厨のせいでRubyが嫌いになった元Ruby使いより
81デフォルトの名無しさん:02/08/20 00:16
char A[3] = {1,2,3} ;
char **cpp ;

cpp= &((char*)A) ;

をコンパイルすると左辺値でない(char*)Aに対して&を使おうとしました。って
コンパイルエラーになります。まあ、よく考えてみればその通りだと思いますが、
*(char*)A = 3 ;
ってコードはOKなわけだから*(char*)Aは左辺値なわけですよね。
左辺値でない式に*をつけると左辺値になるってことのようだけど、
これってC言語の文法だとどう説明できるかわかる方いますか?

実際にどう考えればよいかではなくて、C言語の厳密な文法ではどのように
解釈されてこのようなことが正当化されているのかってのが質問です。
わかる方いたらよろしくお願いします。
82 :02/08/20 00:44
>>79
いまどきCさえも使えないヤシ。
83 :02/08/20 00:46
>>81
解釈もなにも、ISO/IEC 9899 にずばり書いてあるからだろ。

6.5.3.2 Address and indirection operators

4 The unary * operator denotes indirection. If the operand points to a function,
the result is a function designator; if it points to an object, the result is an
lvalue designating the object. If the operand has type ``pointer to type'', the
result has type ``type''. I f an invalid value has been assigned to the pointer,
the behavior of the unary * operator is undefined.
84デフォルトの名無しさん:02/08/20 02:32
テンプレートって何ですか?
総受け
86名無し募集中。。。:02/08/20 03:06
2chとかにコード書くときに&nbsp;でインデントしている人いるけど
いちいち自分で書くなりコピペするなりしてんのかね?
コピペでも結構めんどくさくない?
>>86
スペースを に置換すりゃ良いじゃん。
>>86
navi2ch、chaliceなどを使う。
8986:02/08/20 03:22
>>87
置換だと元のコードでやることになると思うけど
保存しないで開きなおせばいいことだけど、コード汚れてなんか嫌だ

>>88
それなりのツールがあるのね
知らんかった

いい加減板のスクリプト変えて<code>で囲めばいいのに
91デフォルトの名無しさん:02/08/20 05:57
>>80
まつもと尊師の教えを侮辱する事はゆるさん。
92デフォルトの名無しさん:02/08/20 07:38
性夏3いぽrhtgrthgrthごいrRRRうbybっっyるいいryぎryびyりびゅryぶいryびryびryびr!”
Ruby!!
9381:02/08/20 07:49
>>83

ありがとう。
(左辺値)←(*演算子)(右辺値)
ってことなんですね。
94夏厨:02/08/20 09:29
連立方程式の解を求める電卓プログラムを作りたいのですが
どのようにしたらいいでしょう?
95デフォルトの名無しさん:02/08/20 09:38
use for loop to to make like this:
a
aba
abcba
abcdcda
abcdedcba
>94
連立一次?だったら、ガウスの消去法がいいよ
>>94
電卓?
98 :02/08/20 10:19
>>95
main()
{
static const char *x[] = {"a", "aba", "abcba", "abcdcda", "abcdedcba"};
int i;
for (i = 0; i < sizeof x / sizeof *x; i++)
puts(x[i]);
}
>>95
int main(int n,char *a[]){
int i;
if(n>26)return 0;
for(i=-(n-1);i<=(n-1);i++)putchar("abcdefghijklmnopqrstuvwxyz"[n-1-abs(i)]);
putchar('\n');
return main(n+1,NULL);}
>>95
#include <stdio.h>
void abc( char show, char stop )
{
putchar(show);
if ( show == stop ) return;
abc( show + 1, stop );
putchar(show);
}

int main(int,char **)
{
int i, j;
int n = 5;
for ( i = 0 ; i < n ; ++i ) {
for ( j = i ; j < n - 1 ; ++j ) putchar (' ');
abc( 'a', 'a' + i );
putchar('\n');
}
return 0;
}
101夏厨:02/08/20 13:27
>>96
ありがとうございます。
ちょっとやってみます、
>>97
電卓プログラムです。
102デフォルトの名無しさん:02/08/20 14:19
const char* const array

const char array[]
は同じなのでしょうか?
104:02/08/20 17:05
新スレたってた。。。(´・ω・`)

UNIX Cで、分割コンパイルのやり方を教えてください
おながいします
>>104
前スレのほうに回答されてる。
$ gcc -c hoge.c
$ gcc -c gorua.c
$ ls
gorua.c goura.o hoge.c hoge.o
$ gcc hoge.o gorua.o
$ ls
a.out gorua.c gorua.o hoge.c hoge.o

107104:02/08/20 18:08
キタ━━(゚∀゚)━━(∀゚ )━━(゚ )━━( )━━( ´)━━( ´Д)━━(´Д`)━━?????

ありがとうございまふ
108夏厨:02/08/20 18:43
ガウスの消去法難しい・・・
ほかに連立方程式を計算させるやりかたってないでしょうか?
>>108
逆行列を使うとか、、、
>>108
共役勾配法とか
ガウスの消去法が一番簡単だと思うが.
112デフォルトの名無しさん:02/08/20 21:59
Cを用いて画像を扱ったプログラムを作成したいのですが、BMP形式のファイルって
テキストファイルで開くことできないですかね?
大学の講義のときUNIXでPGM形式の画像ファイルをテキストエディタで開くと
画素成分がちゃんと表示されたのですが、BMP形式のファイルをメモ帳で開くと
文字化けしてしまうんですよ
>112
ネタ?
114夏厨:02/08/20 22:13
>>111
あの連立方程式の入力の意味がよくわからないんです
115112:02/08/20 22:16
いえ大マジです
>>112
おとなしくPNM使え。
>>114
あのね、>>109>>110の方法よりもガウスの消去法のほうがはるかに簡単だと思うよ。
連立方程式と線形代数はやっておいた方が良い。てか高校レベルじゃねーか(゚Д゚)ゴルァ
お兄さんはxpmでもいいと思うぞ。
119112:02/08/20 22:24
どうしてもBMPがいいのですよ
>>112
単にファイルの中身が見たいのなら、16進ダンプでもすればいいだけではないの?
122夏厨:02/08/20 22:33
>>117
すいません、リア厨なんです。
夏休みの数学の自由研究をこれにしてしまおうと思ったのですが・・・
123112:02/08/20 22:47
>>121
16進ダンプで検索した結果、ファイルの中身を16進法で表示してくれるソフトを
見つけることができました。ありがとうございます!
アルゴリズムは引っ掛ければいっぱい出てくるでしょ?
コードの落とし方の例はいっぱいあるからどれがいいって言えないけど
おじさん年だからもう覚えてなくてね、悪いね力になれなくて
まず、関数をどっかから仕入れて、void Gause(double **A, int N) とかでね
で、たとえば2元1次だったら double A[3][4], int N; を渡すの
a1x + b1y = c1
a2x + b2y = c2
だったら
|a1 b1| |x| = |c1|
|a2 b2| |y| = |c2|
で、double A[3][4] の内訳はと...
あとは任せるよ、若いお兄さん
>>122
連立方程式をC言語として扱う以前に、数学的にちゃんと扱えるようでないと本末転倒。
時間はたっぷりあるから、がんばれ。
>>122
数値の組み合わせ全部調べるのが一番簡単
>>122がホントにリア厨なら、行列の説明からしないと理解できないと思われ
128 :02/08/20 23:57
>>122はおとなしく昆虫採集でもしろと以下略
リア厨のときは、意味もわからずsin,cosの高速演算のために、
マクローリン展開された式を使ってたよ。
OldなPC-9801やMSXなのになかなか速いと評判でした(謎
>>128
お前もBug取りしてもらえ
>>130
猫蚤がすごいです。うわー
と言うか、ググったらガウスの消去法をつかったサンプルコードが
出てきたんだけど…。
gccで 独自拡張したヘッダを読み込もうとしてるんですがうまくいきません

gcc -l ./ moe.c

なんですが・・・
ひょっとして、だめだめぽ?
134デフォルトの名無しさん:02/08/21 12:02
>>133
ヘッダーって#includeで読み込むものじゃないのか?
ヘッダの検索パスを増やすのなら -I じゃないのか?
  gcc -I header_dir/ hoge.c

あと
 #include <my_header.h>
ではなくて
 #include "my_header.h"
ってやると同じディレクトリから探してくれるので、大きなライブラリを開発してて
ヘッダがいくつかのディレクトリに分散する、という局面でない限りは下の記法をお勧めするが。
>134

#includeはしていて、特定パスにあるヘッダを読み込みたいんです
説明不足ですんまそん

>135

試してみます
137134:02/08/21 12:06
>>136
それなら#include "...h"だろ。本読め。
int main(int argc, char* argv[])

のように main に渡る文字配列 argv[1], argv[2],,,
を後から(別の関数内で)使いたい場合、それぞれのポインタを別の変数で持っ
ておけばいいでしょうか?
それとも、argv[1], argv[2],,, をいったん別の文字配列にコピーしておく方
が安全でしょうか?

つまり、引数へのポインタだけを持っている場合、引数の文字列がプログラム
の実行中に別のもので上書きされて消えてしまったりするのかどうかというこ
とが知りたいんですが。
139133:02/08/21 12:08
>136

すんません、逝ってきます
140デフォルトの名無しさん:02/08/21 12:11
>>138
参照だけならポインタ(argv[n]の値)を、書き換える可能性があるのならコピーを渡した方がよいと思う。
初歩的な質問ですみません。
巷の公開ソース等を読むと、gotoの飛び先のラベルに
空文(セミコロン)がくっついているものがやたらと
多いのはなぜでしょうか?

ラベルの直後に文がなければ空文が必要なのはわかりますが、
直後にごく普通の命令があっても入っているようで...
空文がないと、何か他に危険があるのでしょうか。

>>138
万一上書きされるとしたら、main関数内でさえ
(別の関数を呼んだ後の)安全性が保証されなく
なってしまうと思いますが。
>141
逆に、空文があったら何か悪いことあるの?と聞きたい
143C初心者:02/08/21 15:08
グラフを書かせるにはどうしたら言いのでしょうか?
折れ線グラフです
>>143
どこに何を使って書くの?
145C初心者:02/08/21 15:16
#include <stdio.h>
#include <graphic.h>
#include <math.h>

#define X0320// 原点X
#define Y0240// 原点Y
#define X_R 50// X倍率
#define Y_R -150// Y倍率

int main(void)
{
double x, sy, cy;
double pre_x, pre_sy, pre_cy;

printf("描画スタート!");

/* 座標軸を描画 */
setline(0, Y0, 640, Y0, 1, 9);
setline(X0, 0, X0, 480, 1, 9);

/* sin, cosカーブを描画 */
for(x = 0; x<=640; x+=10) {
sy = Y_R * sin((x-X0)/X_R) + Y0;
cy = Y_R * cos((x-X0)/X_R) + Y0;

if(x != 0) {
setline(pre_x, pre_sy, x, sy, 1, 13);
setline(pre_x, pre_cy, x, cy, 1, 11);
}

pre_x = x; pre_sy = sy; pre_cy = cy;
}

printf("\n描画エンド!\n");

return 0;
}

2点の座標をいれると平面座標上にでてくるようにしたいのですが。
>>145
>>144は?
graphic.hなんだからturbo c(ms-dos)とかだろ
148デフォルトの名無しさん:02/08/21 17:03
質問です。
intってどう読むのですか。
インターナショナル
150デフォルトの名無しさん:02/08/21 17:11
151デフォルトの名無しさん:02/08/21 18:27
FFT(高速フーリエ変換)は、実数と虚数を入力して実数と虚数を出力しますよね。
実数しか無いときは、虚数部にゼロを詰めてやればいいと本でみたのですが、
そのときは、ゼロを詰めるだけで、そのまま普通のFFTのプログラムを使えるのでしょうか?
152151:02/08/21 18:28
ちなみにプログラムは、SPTKと言うパッケージにあるFFTを使用しています。
153デフォルトの名無しさん:02/08/21 18:49
音声とか画像とか虚数部のないものは当然虚数部に0を設定するが、何が問題なんだい?
実数部と虚数部の意味がわかっているかい?FFTの忌みがわかっているかい?
154デフォルトの名無しさん:02/08/21 20:56
たとえば
typedef long long MYLONG64
などとtypedefした時に、MYLONG64が既に定義されてる場合は、
undefしてから、
ここで再定義したいのですが、#if defined(MYLONG64) などと
やって typedef されているかどうかを判断しても良いものでしょうか?

155デフォルトの名無しさん:02/08/21 20:57
>>154
#ifはプリプロセッサが解釈するものだが、typedefはコンパイラが解釈するものだぞ。
156デフォルトの名無しさん:02/08/21 21:34
たしかにそうでした…
となると、やりたい事を実現するには何か良い方法ありますか?
コンパイル時に redifinition error がとれなかったりして困るんですが。
ちなみに複数のOS上に移植していて、片方にはあって片方には無かったりする
ので、そういうことをやりたいんです。
>>157
多分、根本的な部分で設計ミス
>>154
typedefは消せない。
>>157
#defineして#ifdefのなかでtypedefしてればよかたのに
161141:02/08/21 23:21
> 逆に、空文があったら何か悪いことあるの?と聞きたい

可読性が上がるわけでもないのに、ソースのサイズが
増えるし、入力の手間が増えるし、まあそういう細かい点は
置いておいて、
それが一体何を意味しているのか読み手にわからない
という事は悪いところだと思います。

わざわざ付けているのはきっと何かの理由があっての
ことだと思うのです。
もしもわかる人がいたら教えてください。
その後の文を削除する可能性があると思ったということでは。
ラベルにセミコロンを付けとけばラベルが
(コードの修正で)どこに行っても安心だろ
164 :02/08/22 00:14
>>163
とか言ってると、
if (expression)
 statement;

if (expression)
label:;
 statement;
にしてしまう罠。
そんなことBASICでもやらない
そもそもgoto使ったコトがない
167デフォルトの名無しさん:02/08/22 00:48
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <pwd.h>

int main() {
struct passwd pwd = *getpwuid(1002);
printf("%s\n", pwd.pw_gecos);
return(1);
}

ていうコードで、/etc/passwd のGECOS覧が空欄だった場合には
空行がでるだけなのを [empty GECOS] という文字列がでるように
したいのですが、どうしたら良いでしょう?

int main() {
struct passwd pwd = *getpwuid(1002);
if (strlen(pwd.pw_gecos) != 0) {
printf("%s\n", pwd.pw_gecos);
} else {
printf("[empty GECOS]\n");
}
return(1);
}
169167:02/08/22 00:54

正常終了してるんだからreturn(0)の方がいいとおもう。
おお!完璧です。
ありがとうございました。
縮めてみた。
int main() {
 struct passwd pwd = *getpwuid(1002);
 printf("%s\n", *pwd.pw_gecos=='\0'?"[empty GECOS]":pwd.pw_gecos);
return(0);
}

/* strlen(s)== 0 ⇔ *s== '\0' */
char a=0,b=100,c=50,d=100;

a=d*((b/100)+(c/100));

だと,(c/100)が0.5になって,
((b/100)+(c/100))で,1.5になりますよね?
でもならないんです
(b/100+c/100)になおせばいいんでしょうか?
なぜそうなのかも教えください
173141:02/08/22 01:16
>>162,163
なるほど。そういうことでしたか。
(162さんのは163さんの事象に含まれますね)

うっかりミスを防ぐための暮らしの知恵
といった感じの位置付けですね。
必須ではないけれど付けておいて損はない、
みたいな。

長年のわだかまりが取れてすっきりしました。
ありがとうございます。

>>164
笑。
174デフォルトの名無しさん:02/08/22 01:18
縮めてみた。
int main() {
  printf("%s\n", getpwuid(1002)->pw_gecos == '\0' ? "[empty GECOS]" : getpwuid(1002)->pw_gecos);
  return 0;
}

「問い合わせによる一時変数の置き換え」というリファクタリングを適用しました。
char a=0,b=100,c=50,d=100;

a=d*((b/100)+(c/100));

だと,(c/100)が0.5になって,
((b/100)+(c/100))で,1.5になりますよね?
でもならないんです
(b/100+c/100)になおせばいいんでしょうか?
なぜそうなのかも教えください
さらに圧縮(w
int main() {
 char *s=getpwuid(1002)->pw_gecos;
 puts(*s?s:"[empty GECOS]");
 return 0;
}
>>175
割り算というものを教わったばかりの小学3年生に
「14÷4はいくつ?」ときいたら
どう答えるでしょうか。それがヒント。
>>174
リファクタリングというのは、パフォーマンスを落としつつ、
新しいバグを埋め込むという意味ですか?
char a; の a が 1.5 を表すことができるだろうか?
いや、(略)
>>179
100掛けてるんだから、aに入るのは150だろ。
もっとも、150も入らないが。
181 :02/08/22 01:48
a=100でしたが
char a=0,b=100,c=50,d=100;

a=d*((b/100)+(c/100));

で,a=d*(1+(c/100));になって

a=d*(1+0.5);になるはずなんですが,
a=d*(1+0);になってると思うんですよ
どうすればいいでしょうか?
a=d*(b+c)/100;
にしとけ
100で割るんじゃなくて、0.01を掛けてみたらどうかな?
>>183
うまくいく考えだと思ったのですが
a=-106

>>184
a=-106
186183:02/08/22 01:59
signed charかよ!!
187183:02/08/22 02:02
それであってるぞ
>>186
unsigenedにしたら,ちゃんといきました
ご迷惑かけました
1時間これのことで悩んでしまったので,終電がありません
罰として,今からカップラーメン買ってきます
189デフォルトの名無しさん:02/08/22 02:16
>>182
あのさ、、、整数と実数についてちょっと勉強してきて・・・・
>>189
勉強しようにも検索キーワードが思いつかん
終電が・・・ということはこの人職業プログラマなのか(T-T)
/usr/include/grp.h に

struct group {
char *gr_name; /* group name */
char *gr_passwd; /* group password */
int gr_gid; /* group id */
char **gr_mem; /* group members */
};

というのがあるのですが、/etc/group のとある行に指定されている
メンバの数が幾つか?というのはどうやって知ればよいのでしょうか?
193日本兵:02/08/22 02:22
>>190
普通の本に書いてあるよ。
194日本兵:02/08/22 02:24
>>192
わけわからんよ…
>>190
イ ン タ ー ネ ッ ト 上 で し か 勉 強 で き な い の か ?
照れる
>>192
for (count = 0; g->gr_mem[count]; count++)
 ;
>> 197
完璧です!!どうもありがとうございました。
思ったのですが、この方法を使えば main 関数には argv だけ
あればよい気がしますね。
めんどくさいじゃん。
>>191
漏れ大学生だけどしょっちゅうだよ。
201デフォルトの名無しさん:02/08/22 14:08
>>191
職業プログラマは終電を気にしません。
202haru:02/08/22 14:37
質問があります。
タイピングゲームなんかで、タイプするキーを指定する際、そのキーを光らせるプログラムをC言語で組みたいのですが、
どうすればよいでしょうか。
>>202
とりあえずキーボードに発光ダイオードを仕込む方法を考えましょう。
>202
ゲームオーバーのときはExitWindows()とか呼ぶとイイよ!
205デフォルトの名無しさん:02/08/22 22:00
C言語にも検定はあるんですか?
>>202
ネタですか?
ネタでないのなら、OSやコンパイラ名などのプログラミング環境を書くこと。
>>205
C言語プログラミング能力認定試験っていうのがある。知名度はどうなんだか・・・
ttp://www.sikaku.gr.jp/nj/index4.html

基本情報技術者にも午後問題にプログラミングでC言語あったな。
>>206
ネタにネタレス(・∀・)カコイイ!!
209デフォルトの名無しさん:02/08/22 23:44
>>75の50さん
ありがとうございます。69です。
でもご説明の意味もわからない程のレベルな私です。
もう少し自分で勉強してみます。
210デフォルトの名無しさん:02/08/22 23:52
うちのパソコン(名前:サンダーX)を5.1chにしたいのですが、
C言語で書くとどういうふうにコンパイルすればいいのですか?

一応、C言語はもっています。
みなさんお願いします。
>>210
今度、限定版ぷよまんが発売される(た?)ので、
それを買ってコンパイルしてください。
>>211
ネタにネタレス(・∀・)カコイイ!!
>>207
ありがとうございます。
資格としてはパソコン検定とくらべると、
どちらが上なのですか?
>210
今時ちゃんねる掲示板を新設するとはね、、、
しかも、5.1ch?Webプログラミング板逝け。
215デフォルトの名無しさん:02/08/23 11:02
基本情報処理のC言語ってレベル的にはどんなもんなんでしょうか?

市販のお勧め優良図書で勉強してもアルゴリズムが身に付かないから
まったく解けないような気が・・・

ゼロからC言語を勉強するのに情報処理試験のC言語の教材から始めるのって
どんなもんなんでしょう?
どの道いる知識だから、いい機会だと思ってCの勉強したほうがいいと思われ。
基本情報処理のC言語は大した事ないと思うけど…。
アルゴリズムは別に勉強したほうがいいと思う。マ板かどっかに基本情報処理受ける
香具師が集まってるスレがあったから、そこ行ってみれ。
217     :02/08/23 14:59
Solaris8(sparc) , Forte C6 の環境です。

コンパイルしてできたオブジェクトファイルから、あるライブラリについて
どのアーカイブをリンクしたのか調べたいのですが。

たとえば、mallocのライブラリならば、64bit版の共有オブジェクトの
/usr/lib/sparcv9/libmalloc.so.1 をリンクします、みたいな。

いい方法はないですか?
218デフォルトの名無しさん:02/08/23 15:01
http://      
>>217
オブジェクトファイル(.o)の段階じゃどれをリンクするのか分からないよ。
まだリンクしてないわけだから。
実行ファイルは、lddコマンドでどの共有ライブラリをリンクするのか調べられる。
220217:02/08/23 15:11
失礼しました。

>>219
> オブジェクトファイル(.o)の段階じゃどれをリンクするのか分からないよ。

おっしゃるとおりで。
実行ファイルの間違いです。

> 実行ファイルは、lddコマンドでどの共有ライブラリをリンクするのか調べられる。

共有ライブラリならばlddですか。

staticにリンクしている場合もlddで調べられるのですか?
パソコン検定のC言語の問題に必ず<iostream.h>が組み込まれて
いるのだが何故だろう。
>>220
> staticにリンクしている場合もlddで調べられるのですか?
chatrは使える?
223217:02/08/23 15:21
>>222
> chatrは使える?

chatrとはなんでしょうか?
コマンドですか?
当方の環境には無いです。
>>220
staticの場合はlddは使えないね。
staticだと実行時には不要な情報だから、実行ファイル内には残ってないと思う。
(もしかしたらデバッグ情報に入ってるのかな?)

実行ファイルから情報を得るのではなくて、その実行ファイルを作る際に
リンカにどのライブラリを使用したかを表示させることはできる。
GNU ldの場合、マップファイルを出力させたりverboseオプションを追加したり
すれば、使用したライブラリがパス名付きで表示されるけど、Solaris8の
リンカにも同様の機能があるんじゃないかな。
225207:02/08/23 18:36
>>213
基本情報技術者とパソコン検定じゃ内容が違うからなぁ・・・
基本情報技術者ではワープロや表計算の操作なんて聞かれないし、パソコン検定ではプログラムやハードウェアについては出ない。
結局の所、自分にとって将来どちらが持ってたほうがいいのかを考えて取るべきだと思う。
C言語とは関係ない質問ですが、このスレの第一弾を立てた伝説のビル・ジョブズ氏は
その後どうなったのでしょうか?
>>226
M女史と柄丁つけ難いキャラクターでしたが・・・。
>>226
リストラされますた。
新宿中央公園で見掛けた人がいますた。
合唱。(ウタエ!
しばらく前の爆弾魔の餌食のなったのって、
実はビル・ジョブズ氏らしいですよ。
見舞いにいってはいかがでしょうか?
C言語初心者なのですが、メモ帳に
#include <stdio.h>

main()
{
printf("Hello!\n");
printf("My name is Hayashi Yasuaki\n");
}
と書いてCファイルで保存したのですが、このファイルをプログラムとして実行するにはどうしたらイイのでしょうか。
コンパイラはBorland C++ Compiler 5.5.1です。
>>230
PC初心者板の時はコンパイラ晒さなかったな・・・なぜ?
>>230
ヤスアキ。名前でてるぞ。
>231 今やっとコンパイラの意味が解かったので。

>232 マジだ・・・まぁいいけど
設定が正しければ
bcc32 myname.c
C言語でPWM制御をしてモータを動かしたいのですが
参考になるHPやサンプルプログラム等教えて頂けませんか?
私の探し方が悪いようで参考になるHP等が見つからなくて困ってます。
どうかよろしくお願いします。
bcc32ならmain関数に戻り値が必要だと言ってきそう。
238超初心者:02/08/23 23:30
すみません。本当に初心者で馬鹿な質問してすみません。
もしお手すきの方がございましたら、何卒ご指導の程お願いします。

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

main(){

FILE *fo,*fi;
char fin[200],fout[200],a[256];

printf("コピー元のファイルいれろや\n");
scanf("%s",fout);
printf("コピー先のファイルいれろやヴぉけ\n");
scanf("%s",fin);

if((fo=fopen(fout,"r")) == NULL){
printf("ちがうよ馬鹿ひらけねーよ馬鹿\n");
exit(1);
}
if((fi=fopen(fin,"w")) == NULL){
printf("ちがうよ馬鹿ひらけねーよ馬鹿\n");
exit(1);
}
while(fscanf(fo,"%s",a) != NULL){
fprintf(fi,"%s\n",a);
}
fclose(fi);
fopen(fi);
}


上のwhileのところをfgets,fputsだとうまくいくのですが
どうしてfscanf,fprintfだとうまくいかないのでしょうか?
>>238
いや。うまくいくぞ。
何がどううまくいかないか書かないとわからん。
我々はエスパーではない(;´д⊂)
240デフォルトの名無しさん:02/08/23 23:39
>>239
フリーズしてしまいます。

なお、環境は、lsic86試食版とかいうのを青い初代モバイルギアを
DOS化してからのせて学習用としています。
241初心者です:02/08/23 23:39
厨な質問で申し訳ないけど・・・
forやwhileの無限ループから抜けるときに
「EOF」と入力されたら脱出ってプログラムは
どう書けばいいんでつか(;´д⊂)
242超初心者@学習中:02/08/23 23:44
>>241
それだ(・∀・)
ありがとうございます。

NULLをEOFにかえたらうまくいきますた!
ありがとうございます。ありがとうございます。

えーと・・・どうちがうんだっけ・・ EOFとNULLって

NULL って ¥0だよね?
EOF って何だっけか・・
243超初心者@学習中:02/08/23 23:47
End Of Fileの略でいいのかな・・・
いいんですか?
・゚・(ノД`)・゚・。
244初心者です:02/08/23 23:49
>>243
合ってるよー>End Of Faile
245デフォルトの名無しさん:02/08/23 23:50
>>242
NULL はいつも論論争争。
単純に、ポインタ型変数(定数)が取りうる値で、0 と比較すると等しい値、
と覚えておくとよい。つまり 0 と思ってよい。
EOF は C 言語の標準入出力でファイルの終わりを読み込もうとしたときに fgetchar()
などが返す値。
EOF == -1 って決まってたっけ? とにかく char 型では表せずに int 型では
表せる定数のマクロ。
NULLはヌルポインタ。\0はヌル文字。EOFは0x1a(テキストファイルの終端をあらわす文字)が入力されたときに返される値。
247faileマンセー:02/08/23 23:52
>>242
EOFはわしの知っている限り
#define EOF (-1)
だす。
248超初心者@学習中:02/08/23 23:58
>>244-247
ありがとうございます。

つまり
fscanf,fprintf のときは、EOF
fgets.fputsのときは、  NULL

っておぼえておいていいのでしょうか(´・ω・`)
249241:02/08/24 00:04
割り込みスマソ
やっぱり質問の仕方が悪かったのかな(ノД`)
無限ループ作ってキーボから文字入力をさせる。
で、そのまま表示させるんだけど、実行結果のイメージとしては

2ch  ←キーボから入力
2ch  ←そのまま表示
3ch  ←キーボから入力
3ch  ←そのまま表示
EOF  ←ここでループから抜けてプログラム終了

終了させるときには「EOF」って入力すると、ループから脱出・・・
って事です
だりぃぞゴルァ!って思ったら放置してください(;´д⊂)
厳密に言うと、0x1a を入力すると、OS がそのプロセスへの入力を受け付けなくなる。
その後、ライブラリがそれを検出して、EOF を返す。EOF という文字列を入力しても終了できない。

Windows 系 OS では ctrl+Z が入力の終了になっているので注意。
えっと


if(scanf("%s",a) == EOF){
exit(1);
}

だめ?(;´∀`)
>>251
その顔文字が駄目
253  :02/08/24 00:15
え?
( ´,_ゝ`)        これならいい?
254デフォルトの名無しさん:02/08/24 00:16
なんで関数ごとにファイルをつくるんですか?(;´д⊂)
255デフォルトの名無しさん:02/08/24 00:18
>>254
だ、だれがそんなことを
256 :02/08/24 00:20
>>254
ライブラリにする時はそのほうが以下略
257241:02/08/24 00:21
>>251
そのソースを理解して、変数とかをちょい変えて
打ち込んだだけですけど・・・
エラーも警告もなにもないのに勝手にフリーズします・・・
余計わかんなくなっちゃったよ(ノ ̄皿 ̄)ノ
>>257
&は?
259241:02/08/24 00:27
つけてますー。
けど
if(scanf("%s",a) == EOF){
exit(1);  ← ここのexit
}
に、それは定義つけられていませんってでたので
そこの部分をbreak;にしました。
いけなかったかな?
260デフォルトの名無しさん:02/08/24 00:29
ごめん
#include<stdlib.h>
で定義して
261デフォルトの名無しさん:02/08/24 00:35
>>259
breakはループやswitchから抜ける時のものだぞ。
関数から戻るならreturn、プログラムを終了するならexit()(要stdlib.h)。
262241:02/08/24 00:43
あ、なるほど〜。
ヘルプいろいろみてそこらへんは理解しました
教えてもらったのソースをはずすと無限ループなんですが、
入れると最初からフリーズしてしまいます・・・
俺の解釈がおかしいと思うので一晩考えてみます
ありがとうございました!
263デフォルトの名無しさん:02/08/24 01:47
標準関数の文字の扱いはなんで int 型なんですか?
>>263
getcharなんかでEOFを渡せるようにするため。
……とは思うんだけどもうちょっと深い理由がありそうな気もする。
そんな気がするだけ。
>>263
intがいーんと。
>263
getcharの返す値は 文字256種+EOF の257種類だけど
charで表せるのは256種類なのでcharでは足りないから、だったと思う。
なんでショートじゃないんだろうね。
intが8bitの環境だったらどうなるんだろ。
マイッチング
intは
少なくとも-32767から32767までの値をとりうる
と規定されていたような気がするから大丈夫。
>>266
>文字256種
じゃああらゆる2バイト文字は1セット辺り65536文字は確実に持てるのかい?
>>269
意味がわからん。Cの前に日本語勉強しろ。
271デフォルトの名無しさん:02/08/24 09:17
sizeof(int)*CHAR_BITが必ずしもint型のビット数と同じになるとは限らないと聞いたのですが、本当ですか?
>>271
CHAR_BITが9の処理系もあるという話はよく聞く。
CHAR_BITが9なのにintのビット数が32とかだったりすると同じにはならない。
俺は見たことないけど。
273デフォルトの名無しさん:02/08/24 10:02
C++とCはどう違いますか。
274 :02/08/24 10:57
C     ←ただの変数
C++  ←インクリメント
C     ←1文字
C++  ←3文字
276デフォルトの名無しさん:02/08/24 11:25
C         ←発射前
C++      ←発射!!
C++ ←食前
  C ←食後
278デフォルトの名無しさん:02/08/24 11:54
>>277
ムゥ(・д・)

c++ オス
c    メス
C++ ←カギを
  C ←差し込む
C     ←親
C++  ←子
281立地ー:02/08/24 11:57
てめーら俺のスレを荒らすなよ。
282Rubyist:02/08/24 12:57
C++ <<<<<<<<<<<<<<<<<< Ruby
C <<<<<<< Ruby
いや、Rubyはダメダメ。言語としては素晴らしいかもしれんが、厨が多すぎる。
284デフォルトの名無しさん:02/08/24 13:14
俺言語>>>>>>>>>>>>>>>>c、c++
285Ruby:02/08/24 13:18

公理
              Rubyは最高言語である。

.
286Rubyist:02/08/24 13:19
こうr
                   るby以外の言語化hくそ

.
287Rbuy8yfd9:02/08/24 13:22
Rubyのためなら人殺しでもなんでもする。
288Ruby:02/08/24 13:25
じゃあ、裸になれ
>>283
今では言語も腐ってるよ
290デフォルトの名無しさん:02/08/24 13:29
Ruby叩きうざいね。
おメラミンなしね!
291デフォルトの名無しさん:02/08/24 13:29
Ruby >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *
漏れの使ってるインテル C++ コンパイラが載っていないのはなぜ?
ヘルプが日本語化されてて、結構入りやすいとおもうんだけど。
タダじゃないからか・・・?

あ、ちなみにヘルプはここからダウソできます。
http://www.xlsoft.com/jp/products/vtune/download.html
293デフォルトの名無しさん:02/08/24 14:17
M系列のプログラムをつくろうと
思うんですが、参考になる参考書とか
ないですか?
>>292
非商用なら無料のあったと思うけど。
あれってLinuxだけ?

>>293
Webだけでも十分だと思うけど。
アルゴリズムの本なら何でも良いんじゃない?
http://www.bcl.t.u-tokyo.ac.jp/people/hawk/resnote/20020122.html

時代はMersenneTwister
と言ってみる裏技。
295デフォルトの名無しさん:02/08/24 18:13
#if 0
hogehoge...
#endif
の0ってどういう意味があるんですか?
>>295
それ、コメントアウトみたいなものでしょ。
Cの場合、コメント(/* */)の入れ子はできないから。
>>295
コメントって意味です。
298295:02/08/24 18:32
>>296 , 297
すみません。意味がよくわからないのですが。
299デフォルトの名無しさん:02/08/24 18:38
>>298
#if 0 /* こうすると絶対に条件式が偽になるだろ。

#endif /* そうするとここまでがコンパイルの対象から外される。

だからコメントアウトできるってわけ。
300デフォルトの名無しさん:02/08/24 18:42
もしかして「コメント」という単語がわからないとか?
301デフォルトの名無しさん:02/08/24 20:02
>>299
なるほど、そういう意味でしたか。

>>300
コメントはわかるけど別の意味があるのかと思ってしまって
302初心者:02/08/24 20:33
すいません,とても初心者なのですが質問させてください。

C言語で作られたソフトのデバッグをしているのですが,
良くcoreを吐いて死にます。その際に「バスエラー」とか
メッセージが出るのですが「バスエラー」とは何でしょうか?
303デフォルトの名無しさん:02/08/24 20:50
>>302
>>1のリンク先に書いてある。

アクセス違反
304295:02/08/24 20:57
なかなか面白かったです>>298>>301
305デフォルトの名無しさん:02/08/24 21:34
#include <stdio.h>
#include <string.h>

main()
{
char *test1 = "str";
char *test2 = "long string";

strcpy( test1, test2 ); printf( "%s\n", test1 );
strcpy( test1, test2 ); printf( "%s\n", test1 );

strcpy( test1, "long string" ); printf( "%s\n", test1 );
strcpy( test1, "long string" ); printf( "%s\n", test1 );
}

2つめの printf と 4つめの printf ではなぜか結果が違ってしまいます。どうしてでしょう。
LSIC86コンパイラ試食版です。
>>305
書き換えちゃいけません。以上。
307304:02/08/24 21:47
>>306
書き換えちゃいけないっていうのは2つめの strcpy のことですか。
1つめは予想通りのコピーがされているのですが、
2つめはなぜか test1 に " string" っていう文字列しか入りません。
3つめ、4つめの strcpy との違いはなんですか?
308305:02/08/24 21:48
あ、304 ではなく 305 でした。
おいおまいら! コンパイラDLしたのはいいけど、どうやって使うのかわからないのです。(ノД`) 教えてください
>>309
死んでろ。
みんな普通に解かるのか? オレはさっぱりわからんよ。
312デフォルトの名無しさん:02/08/24 21:57
bcc for winでやているんだけど、

int main()
はダメなんですか?
int main(void)とするとエラーが出なくなる。

仕様ではvoidを入れないとダメなんですか?
313  :02/08/24 21:59
voidってどんな意味ですか?
なんか理解が曖昧なもので、、、
>>311
わからんだろうな。お前の持ってるコンパイラ知らないし。

プログラムの前に文章での意思疎通の方法を勉強しろ。
つまり国語からやり直せ。
>>309
コンパイラは何?

gooooooooogle検索したらoがこのくらいなるとは思うけど。

bccならツールを使う手もあり。vector池。
>>313
入門書読んでね。
>>313
日下部 陽一 氏がやってくるための呪文です:)

# スレがネタで埋まりませぬように
318  :02/08/24 22:02
>>316
読んだんだがスンナリ納得が
できないもので、、
>>318
読み返しなさい。それでダメなら違う本を読みなさい。
320295:02/08/24 22:09
返す返す質問です。
#ifを使う場合は、#ifの後は0か1なんですよね?0の場合と変数に0or1が代入されている場合は意味ありますが、#if 1ってのは意味無しってことなんですよね?
あと#ifdef DEBUGみたいなコードをよく見かけますが、この場合DEBUGって単語はmakefileかなんかに書かれれているのですか?ソースコード中に見つからないです。
>>307
test1に文字を入れるための領域(空間)はどのくらいあるのかね。
>>307
char *str = "vaka";

と初期化したstrの指す先にある領域は書き換えてはいけないということだ。
これはCの規格で決まってる。もしやってしまった場合、プログラムの動きは不定になる。

http://www.catnet.ne.jp/kouno/c_faq/c1.html#32
>>320
#if 0を解釈するのはプリプロセッサの仕事で、コンパイラの仕事ではない。
変数をできるのはコンパイラだけなので、たとえば、

int boke = 0

#if boke
 :
#endif

みたいなことはできない。プリプロセッサとは、ごくごく簡単に言うと、
#if〜#endifの処理、#defineの処理などをやるやつのことだ。
その後にコンパイラが処理をする。
324323:02/08/24 22:19
>>323
おう、脱字だ

変数をできるのは(×)
変数を解釈できるのは(○)
325323:02/08/24 22:29
>>320
#ifdef DEBUGについて書くのを忘れてた。
makefileというかなんというか、普通これはコンパイラに与えるオプションによって制御する。
gccならば、

gcc -DDEBUG hoge.c

とかやれば、DEBUGがdefineされた状態でhoge.cをコンパイル(プリプロセス)する。

プリプロセッサの処理についてさっきはほとんど情報がなかったんで補足しよう。
たとえば、以下のコードがあったとする。
--
#define HOGE 100
int hoge = HOGE;
--
これがプリプロセッサを通ると
--

int hoge = 100;
--
になる。HOGEを100に置き換えている。
--
#if 0
int baka = 1;
#endif
int aho = 2;
--
というのがあったら、プリプロセッサを通ると
--



int aho = 2;
--
になる。ソースから取り除かれちゃうわけだ。勿論、元のファイルはいじらない。
その取り除いたり、#defineを置換したものをコンパイルすることになる。
プリプロセッサの説明くらい本よめよ。
と言いたい。
というか、K&Rくらい読めよ
328295:02/08/24 22:52
>>325
よ〜くわかりました。ありがとうございました。
>>326
プリプロセッサの意味は知っているんですが、細かいところはあまり知らなかったです。カーにはんアンドりっちーのプログラミング言語C参照してます。
>>328
あぁ、あの糞本か。
330デフォルトの名無しさん:02/08/24 22:56
fseekの使い方、使い道がいまいち理解できましぇん!
>>330
じゃあ使わんで良いだろ。
fseek()なんて研修時代しか使ったことがない。
333305:02/08/24 23:12
>>322
理解できました。
ということは
strcpy( test1, "long string" );
すら間違った使いかたということですね。
334デフォルトの名無しさん:02/08/24 23:21
ちょっとすいません。「xにxのn乗を代入する」って
C言語ではどう記述するんですか?
335デフォルトの名無しさん:02/08/24 23:23
>>332
一体どんなプログラム書いているんだ?
336デフォルトの名無しさん:02/08/24 23:24
>>333
test1が配列ならOK

>>334
pow()を使って(要、math.h)
337334:02/08/24 23:29
>>336
関数を使うんですか。n乗を表す演算子はないんですね。
ありがとうございました。
/* malloc()についてなのですが */

char *ch
ch=malloc(1000);
ch="test";

この場合chにtestという文字列を代入した時に
malloc()で取得した領域は破棄されてしまうのでしょうか?
それともfree(ch)とするまで確保され続けるのでしょうか?
>この場合chにtestという文字列を代入した時に
>malloc()で取得した領域は破棄されてしまうのでしょうか?
破棄されません

>それともfree(ch)とするまで確保され続けるのでしょうか?
そうです。でも ch="test"; みたいに ch の内容を上書きして
しまったら free できないぞ。
340デフォルトの名無しさん:02/08/25 00:01
>>338
プログラムが終わるまで
341デフォルトの名無しさん:02/08/25 00:16
直接test以降のアドレス指定してもダメなんですか?アドレス指定できるかどうかしりませんが。
>>338
2行目と3行目でchの内容(アドレス)は変わってしまっている。
なるへそ
んじゃ
char *ch
ch=malloc(1000);
tmp=ch;
ch="test";
free(tmp);
ならいいんだ。激しく意味ないけど

char *tmp
346338:02/08/25 00:32
ああ、そうかfree(ch)としてもchの指すアドレス自体が変わってしまっているから領域は開放されないんですね
ということはこの場合はプログラムが終了するまで無駄に領域が確保されつづけるということですね
ありがとうございました。
347 :02/08/25 00:34
>>338
なんでそんなことを聞くのかと、小一時間以下略
chに"test"を入れたかったらstrcpy(ch,"test");としろよ
349デフォルトの名無しさん:02/08/25 00:47
お聞きしたいのですが、

#pragma setlocale()

ってありますけど、これでロケールの設定はできるのでしょうか?

#pragma setlocle("jpn")

とかやっても、fputws(L"ム板", fo) とかがエラー吐くのですが…
…まぁ、素直に setlocale(LC_ALL,"jpn") やればいいんですけど。
350デフォルトの名無しさん:02/08/25 01:00
禿スレ違いかもしれないですが、javaでいうjavaハウスみたいなメーリングリストはCではないのですか?
>>350
作ってみようよ。君が。

そうしたらオレは入会してあげることをここで約束しよう。
>349
#pragmaは禿しくコンパイラ依存。
コンパイラ欠け。
>>349
      ,,--'''""`ヽ'   -/"~   ̄`ヽ、
    /       ヾ''"         ~`ヽ
   /       _,,,...  ヽ;:  /""ヽ    ヽ
  /       ;'"  "\ l /;:;;:::-'''"ヽ,   i
  /       /::::::::-'''''"~        ヽ,   .|
  /       |;:"               ヽ  !
  /       /                |  |
  /       人           ,,,,;;::''''' i,  |
  i        ';  ,,,,;;::::::::::;;;   .:   ,,,,,, ヽ ヽ     「 ̄~ヽ
  |        |  "  ,,,,,,,,, .::    ;''“”`  |  |     |    | 通報しますた!!
  .|        |:   ;::''“”“~` ::::.        |. i     |    |
  |        i::          :::::  i.      | ,;|     |   ;;|
  |       ヽ.        ::::::: , _〉    .|.  |    .|  ::::::|
  .|        ノ::                 |   |    |_  ,,,|
   |       人::::..        ___,,,,,,,,...:;-'   |   |   /  ...,,,,,|___
   .|     ;:'" `、ヽ      '"''=.:;;:;ノ゛  /  |    |      _  ~~~ヽ
   |        ヽ:: \       ::::::   ./  , ;    |  :::  /-ゝ─~~ヽヽ
    |        ::;|::.  `ヽ、_       /'|ヽ./"- |"-::;| |     |__    __丿 |
   /.   ::::::::::::;;:::人:.     `'''----―'' .|: ヽ    ;,/ ヾ;;::::  |       | ,
  /;:;:;:;;:;;;;;;;;;;;;/   `ー、          ;-'"  \  |   ヾ; :|-・    -┤,
    ,.-'"  \       \      ;:-''"   /  |   ;; :|        | |
 ..../.      \      "''''-ヽ、,.-''"     /   ヽ  ::: ::|~~    ~~~| ,
.'""          ヽ    ,.-''"\ : /―――/    ヽ、:::::  \    /,,/
354349:02/08/25 01:25
>352
VC++6 Sp5 使用です。
…すいません……
355デフォルトの名無しさん:02/08/25 04:21
ビッグインディアンとスモールインディアン
がいるんでしょ?
リトル・・
357 :02/08/25 04:23

しかもエンディアンだろ。
 
>>355
ネタはこっちに逝ってほしいなぁ
http://pc3.2ch.net/test/read.cgi/tech/1020772896/l50
359デフォルトの名無しさん:02/08/25 04:26
freeについて調べると型がfree(void *p)だったんですが、このvoidってなんでしょうか?いかなる型でもOKって意味でしょうか?
360359:02/08/25 04:28
あ、K&Rに微妙に書いてありました。
>>359>>360
質問をする間に調べられなかったのかと小一時間
                     マチクタビレタ
☆ チン                   マチクタビレター            
        ☆ チン  〃  ∧_∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
          ヽ ___\(\・∀・)< 349と359の厨房対決まだー? 早く早くー
             \_/⊂ ⊂_)_ \_________________
          / ̄ ̄ ̄ ̄ ̄ ̄ ̄/|
        l ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| .|
        |  ○ みかん ○  |/
>>359
おもろすぎます
void氏ですか…
365デフォルトの名無しさん:02/08/25 17:38
すんません質問させてください

fprintfについてなんですが、
ファイル内容にfprintfで上書きせずに挿入する方法がわかりますでしょうか?


//ファイルここから
abcde
zyx
//ファイルここまで
にfprintf( fp, "fghij");
を行うと内容を上書きしてしまうのです.
これを挿入の形にして
//ファイルここから
fghij
abcde
zyx
//ファイルここまで
としたいのです。よろしくお願いします
>>365
ファイルは連続した構造を持っているため、挿入する事はできない。一度前
部分を他のファイルにコピーし、挿入部分をアペンドした後残りをアペンド
して書き戻す。
367デフォルトの名無しさん:02/08/25 18:47
現在、タイマーに関して勉強しているんですが、
サンプルプログラムのコンパイルが出来なくて困っています。
現在、win2k上のborland5.5.1でコンパイルしていますが
プログラムを動かしたい実験装置はpc-98上のTurboC4.xです。

#ifdef __TURBOC__
voidinterrupt (* oldtim)();
#else
void(_interrupt _far * oldtim )(void);
#endif

ここで「 )が必要 」とエラーがでます。
interruptの基本的(一般的)な宣言を教えてください。
DOSリファのサンプルをコンパイルしてもエラーを吐きます。
どうかよろしくおねがいします。
>>367
コンパイラのエラーメッセージをコピペしなさい。
voidinterruptじゃなくてvoid interruptじゃないの?
現在、勉強をかねて スロットゲームを作っています。
で、コンソールアプリで作っているんですが、
何らかの文字があったらwhileを抜けたいのです。
getchar()にすると文字が入ってくるまでとまってしまうからだめなんです。

#define NUM 3
int i=0;
char ll[] = "ABCD";
while(1)
{
    hoge();     //位置指定の関数
    printf("%s", ll[i]);
    i++;
    if(i > NUM)
      i=0;
}

にどんな関数を入れたら上の処理を続けながら、キー入力を待てますか?

ついでに今はマクロで配列llの最後にきたら最初から表示させているんですけど、
マクロだと配列の中身が変わるごとに数字を書き直さなければならず、面倒なので
配列の最後かどうかを調べる方法を教えてください。
配列の最後は\0なので
if( ll[i] == "\0")
でOK?

コンパイラはbccです。
370367:02/08/25 19:00
>>368
スペース入ってます。

エラーメッセージは以下のおとりです。

エラー E2293 ibmtim.c 56: ) が必要
警告 W8065 ibmtim.c 75: プロトタイプ宣言のない関数 'bdos' の呼び出し(関数 main )
エラー E2449 ibmtim.c 126: '_interrupt' のサイズが不明、あるいはゼロ
エラー E2141 ibmtim.c 126: 宣言の構文エラー

CPadというソフトを使用して下部に出たエラー文です。
コンソールでゲームかぁ…昔C言語覚えたての時にやったなぁ…。
ncursesのドキュメント睨めっこしてたっけ…。
>>367
_interruptとか_farというのはどう定義しているのだ?
__TURBOC__はTurbo Cからとおしのバージョン番号が入るから
Borland C++でコンパイルする限り条件は真になり
void interrupt (* oldtim)();
これがコンパイルされるがinterruptはどうやら
bcc32ではもうサポートしていないのでエラーが出る。
373367:02/08/25 21:18
>>372
ありがとうございます。
>_interruptとか_far
すいません、これアンダーバーなしでお願いします。
いろいろいじってた時の消し忘れです。

>bcc32ではもうサポートしていない
そうすると、他のコンパイラか他の手段を取れってことになりますよね。

出直してきます。
374デフォルトの名無しさん:02/08/25 22:26
初歩的な質問で恐縮なのですが、
単項プラス演算子って何に使うものなのでしょうか?
>>374
次にくる数字を正の数として扱う。
>>367
>プログラムを動かしたい実験装置はpc-98上のTurboC4.xです。
それでinterruptだタイマーとかいってるのなら、多分pc-98のハード依存コードだよな。
試すのならpc-98でないと駄目っしょ。そのTurboC4.xで。

どうにかシミュレーションでデバッグしたいのなら、そのinterruptとかの仕組みをしっかり
知って同等の動作をするお膳立てがいるね。

あるいは俗に言うDOS/V機なら同等のことを実現するタイマ処理を書くこともできるが
pc-98とは違うのでそのまま持ってはいけない。
>>369
bcc..バージョンも分からんし最近使ってないからわからんが
コンソールアプリなら <conio.h>のkbhit()が使えん?
>>367
PC98エミュレータが最適
379374:02/08/25 23:03
>>375
つまりは単項プラス演算子はつけてもつけなくても変わらないということですよね。
どんな場面で使うものなのでしょうか?
>>379
敵の目を欺くとき
1+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1 ;
381367:02/08/25 23:07
>>376
ありがとうございます。

タイマ、割り込みに関して勉強しようと思い
Interface別冊「C&C++プログラマのためのI/O制御プログラム」という本の
サンプルプログラムを打ち込んでみたものの、動かなかった・・・という経緯です。
これには同じ処理のプログラムでDOS/V、PC-98それぞれのサンプルがあるので
まずはDOS/Vで打ってみるかと考えたのです。

TurboC(PC-98)の方にハード依存の関数があるようなので(確認しました)
今度はそっちをあたってみます。
382デフォルトの名無しさん:02/08/25 23:10
>>379
使わない。autoも同じ。
383374:02/08/25 23:24
>>380
+ 激しく無駄?

C++だけど…

#include <iostream>
#include <string>

class Ninja {
public :
  // thisを返しているのは特に意味なし
  Ninja& operator+()      { std::cout << "+ 激しく忍者" << std::endl; return *this;}
  Ninja& operator+(Ninja n)  { std::cout << "+ 激しく忍者 +" << std::endl; return *this;}
};

int main(){
  Ninja n1,n2;
  n1+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +n2 ;
}


…こんな使い道しかないのか!!!
384374:02/08/25 23:28
>>382
使わないんですか…。数学記号との整合性を合わせるためにあるのですかね。

色々ありがとうございました>皆様。
>>374
まずつかわないけど、代数勉強したらすこしは存在意義がわかるかもね。
>>385
それは数学の話。C言語とは関係ない。
>>386きみ代数しらないでしょ?
388デフォルトの名無しさん:02/08/26 00:23
int main()から抜けるとき
return 0;

return 1;
とで動作変わる環境ってあるんですか?
手元のWindowsでは同じなんですが・・・
>>387
知らないけど、少なくともC言語とは関係ない。
390 :02/08/26 00:32
>>388
ない。
391デフォルトの名無しさん:02/08/26 00:40
おまえら%ERRORLEVEL%を知らんのか?
392デフォルトの名無しさん:02/08/26 00:49
>>391
しってますが、なにか?
>>388
シェルスクリプトなんかで戻り値を参照する事はあるな。
ははぁ〜ナルホド。調べてみて分かりました。サンクスです。
条件分岐するbatファイルなんてDOS3.3をメインに使ってたとき以来書いてないです。
こんなのあったんですね。
スレ違いですみません。
WriteFileってバイナリで書きこむんでしたっけ?
fopen関数の方で出力するテキストは,なに形式で書きこむんでしょうか?
>>395
fopenは自分で形式を指定するんでしょ?
>395
関数名までわかってるならゴーグル逝ってくれー。
398395:02/08/26 05:24
>>397
ゴーグルって何だよ(ププ
お前が逝けよw
ほんと、頭が悪い奴って嫌だね。
      タタタタタタタタタタタタ・・・・
  ___
  /_____`¢         △
  (_/ ゚д゚) .;y=-      (゚д゚ ) ・∴・∴・∴
  (_| \/         (  .) >>395
   ( ̄ノ            )ノ
>>398
知ったか 恥ずかしい(w
401395:02/08/26 08:25
>>398

言葉使いが違いすぎる
>>400
お前、頭悪いな。
言葉遣いならしょっちゅう変えているけど・・・・
2chではごく当たり前。
ゴーグルファイブ

○○レンジャーシリーズも名前の語尾をレンジャーで統一してるのを
そろそろやめてほしい。 サンバルカンのようなナイスなネーミングを
復活させて欲しいと思う。
>>398>>401
偽物さん、煽るのはやめてください。
>>377
Thanx!! 早速やってみます

# みんながすでに通ってる道を追いかけるのも悪くない(w
googleに前 ゴーグル派とグーグル派+etcであるスレが荒れたことがあるので
メールしたらそのときの回答は

基本的にグーグルだけど好きに読んでいいぞ ゴルァ!!!!

だった(はず)なので、揚げ足とっているやつは夏厨。
# 蒸し返しスマソ
>>408
二度ワラタ
410デフォルトの名無しさん:02/08/26 14:51
C言語で識別子に_で始まるものは使ってはいけないって聞いたのですが本当ですか?
411デフォルトの名無しさん:02/08/26 15:11
>>410そうでもないですよ
私なんて普通に使ってます
>>408
>ゴーグルです
>決してグーグルとは読まないように

>グーグルです
>それにしてもゴーグルなんて言ったの誰よ(笑)
に訂正されていてワラタ
413デフォルトの名無しさん:02/08/26 15:24
>>411
なるほど。でも__二つだとコンパイラが使うとか聞いたような。
>>410
ライブラリの中で結構使ってるしな。
名前の衝突が起こるような気がしたら使うのを止めよう。
あやふやな記憶で書くので最初に謝っておく。

アンダースコアふたつ(__)で始まる名前はライブラリが内部で使用する
ということで規格では処理系の予約になっていたはずだ。
つまり使っちゃいけないということ。
まぁ、うんと狭いスコープ内で使う分には問題ないだろうけどな。

for(i=0;i<10;i++){
char __ch__ = text[i];
putc(__ch__); }

とか。
417デフォルトの名無しさん:02/08/26 17:59
>>416
CはC++じゃない。
>>417
>>418
逆はともかくそれにわざわざ反応せんでも良いだろ。
変数宣言は関数の先頭で。ってのは基本中の基本だろ。
>>417-419
何を言いたいのか全く分からん
>>420
自分のコーディング規約を晒さんでよい
>>420
ブロックの先頭で。と言わないと叩かれるよ。
>>416
ctype.hの関数を
グローバル変数を参照するマクロで実装しているのを
見たことがあるので危険かもしれない。

>>417
え?
どっかのスレで読んだが、

  google.ne.jp→ゴーグル
  google.co.jp→グーグル

だと結論付けていたね。
425395:02/08/26 19:50
>>424
激しくスレ違い。
そういう話は適切なスレでやるように。
違うんだ
googleは
ジョージなんだ。


と言っている奴がいた。
>>424
http://google.ne.jp/なんてあったの知らんかった。
http://google.com/をいつもは使っているから。
makeファイルってのはCの規格じゃなくて
各コンパイラごとに文法があるの?
サンプルプログラムにvc用のとbcc用とかを別に付けてるトコ
時々見かけるけど
メークファイルはそれ自体で独立したツールで記述ルールもちゃんと規定されてる。
コンパイラごとに違うのはリンクするライブラリが異なったり、
インクルードファイルの置いてあるディレクトリパスが異なったりするからだと思われ。

とりあえず、VC用もbcc用もダウンロードして比べてみるのが手っ取りばやいかと。
ファイルを消去する関数ありませんか?
system("del 対象ファイル");
だとLINUXでできないので。。。
unlink
>>430
execl("/bin/rm", "rm", "./*", "NULL");
>>432
-rfじゃだめ?
>>433
execl("/bin/rm", "rm", "-rf", "./*", "NULL");
>>434
どっともいらない。 "/*" がイイ!
removeは使わない方がいいんですか?
437430:02/08/26 23:17
すいません、説明不足です。
標準関数で削除する関数はないんですか?
DOSでもUNIX環境でも使えるやつ。。。
>>437
unlink なら bcc にもあったぞ。
>>432
Linuxのrmは、自前で'*'を展開するのか?
>>439
シェルのお仕事だったと記憶。
>>433-435オマエラモスキダナー
442430:02/08/27 00:05
>>438
ありがとうです。一応VCつかってます。
>>439-440
ついてけねぇ(ToT
443デフォルトの名無しさん:02/08/27 01:52
>>437
>>436がremoveって言っているだろ。もちろん標準関数。

この関数だけ機能上、標準関数の中では特異な気がする。
なぜ?それだったらfopenも得意なような
>>444
ファイルを扱うってことじゃなくて、、、なんというか、、、、
言葉に表しにくいんだけど、、、、
446デフォルトの名無しさん:02/08/27 02:09
ちょっとお聞きしたいんですけど、いや、本当になんとなくな上にスレ違いなんですが
変数名ってみんな同じ変数を流用します? 例えばカウントするものだったら
int count;
for(count=0;;count++);
count=1;
while(count);
count=1;
if(count);
みたいな。 俺はいつもこういうソース書いてたんですけど、なんか上司にわかりずらいって怒られました。
で上司曰く、 int count, number,roop;
みたいにループごとに変数を使い捨てたほうがいいっていうのですけど・・・・ なんで駄目なんでしょう。
roopはイカン
>>446
カウンターやバッファは流用しているよ。

int i;

for(i=0;i<10;i++) /* なんかいろいろと */;
/* なんかいろいろと */;
for(i=0;i<3;i++) /* なんかいろいろと */;

こういうことでしょ?
>>446 人も見るコードだから。
>>446
ひとつの関数で、そんなに数えるものがあるのかと小一時間・・・。
>>448 i にすれば見逃してくれるかも;
>>446
一般的には使いまわしてはいけないと言われている。
C++なんかだとスコープがfor内に限られる変数を使うんだっけ?
>>453
for(int i=0;i<10;i++);みたいにね。C99ではどうなのかな
>>454
使えるようになったみたい。
ttp://seclan.dll.jp/c99d/c99d07.htm#dt19990927
456446:02/08/27 02:43
そうなんですか・・・・・ これからは上司の言うことを聞くことにします。
この時間でも人がいっぱいいてくれて嬉しかったです。 どうもありがとうございました。
簡単な質問なんで食いつきがいいな・・・・ボソ
458デフォルトの名無しさん:02/08/27 03:16
既出だったらごめんなさい。
構造体メンバは、メモリ上に連続して配置されているって本当なんでしょうか?
それが、int と char とかでも。。。
>>458
すきまが出来ることもある
>>458
コンパイラによる。また、オプションで制御できる。
461 :02/08/27 12:18
構造体 アラインメント
で調べるよろし。
総合的な質問スレで29もあれば、既出であることも
致し方ないかと。
462デフォルトの名無しさん:02/08/27 13:02
C言語でPWM制御をしてモータを動かしたいのですが
参考になるHPやサンプルプログラム等教えて頂けませんか?
私の探し方が悪いようで参考になるHP等が見つからなくて困ってます。
どうかよろしくお願いします。
>>462
しつこい
464デフォルトの名無しさん:02/08/27 13:15
>>463
解決してないので同じ書き込みしました・・・(汗)
すみません。。。
>>464
同じ書き込みなんてするなよ。
誰かが >>237 でレスを返しているみたいなんだけど、
それをまるっきり無視しているようにみえる。
>>462
>C言語でPWM制御をしてモータを動かしたいのですが
ここの部分がかなり漠然としている。
もっと詳細に書かないとサンプルプログラムなんぞ出てこようがない。
>>462
モーター動かすだけなら、
マイコンに特化したアセンブリで充分じゃん。
なぜCにこだわるかわからないし
それともマイコンをすでにもっていいてCの環境まであるというなら
話しを聞いてやるよ。
>404
遅レス、板違いですが、
今年は
忍風戦隊ハリケンジャー
電光石火ゴウライジャー
天空忍者シュリケンジャー
です。
469デフォルトの名無しさん:02/08/27 21:39
test1.cとtest2.cっていうソースで
共通の変数int hogeを使うにはどうしたらよいでしょう?
初心者ですみません。
どちらかで
int hoge;
と宣言して
もう片方で
extern int hoge;
とか。
(externはヘッダファイルにすると吉かも)
externというものをしらべなさい
472470:02/08/27 21:49
>471
ケコーンしてください!
473デフォルトの名無しさん:02/08/27 21:52
なるほどexternですね。調べてみます。
あと、ヘッダーファイルには、どういったものを書けばよいでしょう?
474デフォルトの名無しさん:02/08/27 21:56
あれー
externなくてもあってもいいみたいですがなぜでしょう?VC++です。
475デフォルトの名無しさん:02/08/27 21:58
最近C言語を始めたのですが、registerっていう予約語は、本当に役に立つのでしょうか。
register int i;
for(i = 0; i < 10000; i++) {
}
こんなことをしても、register付けた時と付けてない時の速度差が分からないんですが
>>474
もしかして両方に int hoge; って書いてる?
それだと、共有してないよ。
>>475
体感速度がか?
478デフォルトの名無しさん:02/08/27 22:00
>>477
うんそう
479デフォルトの名無しさん:02/08/27 22:01
>>476
test1.c
int hoge;

int main()
{
hoge = 2;
test();
return 0;
}

test2.c
#include <stdio.h>
int hoge;

void test(){
printf("%d\n",hoge);
}

なんですけど、2って表示されました。
ヘッダファイルでextern int hoge;があれば
そのヘッダファイルをインクルードしたソースファイルでは
int hoge;でいいと思われ。
>>475
registerってのはC言語の初期の頃にあった旧世代の残骸だ。
そもそもコンパイラはこれを無視するとこを許されているしな。

実際に吐き出されたコードを見れば分かるが無意味に等しいよ。
482デフォルトの名無しさん:02/08/27 22:10
>>481
わかりますた。
483デフォルトの名無しさん:02/08/27 22:17
VCのヘルプにこんなことが書いてあるんですけど
これってCの仕様でしょうかVCの仕様でしょうか

変数および関数をファイル スコープで宣言すると、デフォルトで外部宣言になります。

>>483VCだろ。BC++ではできないと思った。
485デフォルトの名無しさん:02/08/27 22:25
>>484
そうでしたか。
いまいちVC++で勉強するのはよくないようですね。
こまったなー
>>485
BC++を使わない理由が特にないんだったらBC++で勉強すれば?
>変数および関数をファイル スコープで宣言すると、デフォルトで外部宣言になります。
ファイルスコープで static を付けて宣言されてないなら自動的に
外部宣言(変数の場合宣言っていう?)になるのは、C言語の仕様では
ない?


マイクロソフト固有の仕様なら、ヘルプにもそう書かれているはず
489デフォルトの名無しさん:02/08/27 22:51
しつもんです。

const char** list1;
char* const* list2;

この2つって、何がどう違うの??
490デフォルトの名無しさん:02/08/27 22:52
およよ。混乱しますた。
>>489
const char*とchar* constの違いはわかるのか?
492デフォルトの名無しさん:02/08/27 22:53
>>491

あー、よくわかってないす。
教えてくださいまし。m(_ _)m
493489:02/08/27 23:08
わかったーーーー。
解決。
おさわがせー。
494デフォルトの名無しさん:02/08/27 23:17
>>475
10000回くらいで分かるほど遅いコンピュータなんて使っていないだろ?
>>475
最適化でループそのものが消えているとか
iがそもそもレジスタ以外に割り当てられることがないとか
496perl使い:02/08/28 00:45
perlを習得して、cを学習していた時、それを知った先輩が

(・∀・)「お前、perlが習得できたならCの子供だよ」

と言ったのですが、どう解釈したらよいのでしょうか?
いくら考えても理解できません

どういうことでしょうか?perlは、Cを元につくられたということでしょうか?

> (・∀・)「お前、perlが習得できたならCの子供だよ」

日本語が変じゃないか?
>>496
お前の両親はCだということです。
499デフォルトの名無しさん:02/08/28 00:51
>>496
理解できなくて当然。
その先輩が理解不能なことを言っているんだから。
500デフォルトの名無しさん:02/08/28 00:51
500
あるオブジェクトがconstだとして、なぜその隣のオブジェクトまで、
constだなんて決まっちゃうのでしょう。

void foo( (const char)*a ) {
(*(a+1))++;
}
>>501
決まっていませんよ。
単に関数fooの引数aを通して、参照先を変更できんだけです。
>>501
ところで、この言語なに?
504デフォルトの名無しさん:02/08/28 02:21
>>503
どうみてもCだが。
>>504
コンパイルできる?
なんでconst charが括弧でくくられてるのさ。
507504:02/08/28 03:03
そういえばこれ関数宣言だ・・・
while( (const char)*a ) {
(*(a+1))++;
}

これならわかるんだけどな。
>>468
だから、 ○○ジャー と最後にジャーをつければいいってもんジャーないでしょ
  何このスレ・・・・・・・?

             /ヽ       /ヽ
            / ヽ      / ヽ
  ______ /U ヽ___/  ヽ
  | ____ /   U    :::::::::::U:\
  | |       // ___   \  ::::::::::::::|
  | |       |  |   |     U :::::::::::::|
  | |      .|U |   |      ::::::U::::|
  | |       | ├―-┤ U.....:::::::::::::::::::/  
  | |____ ヽ     .....:::::::::::::::::::::::< 
  └___/ ̄ ̄      :::::::::::::::::::::::::|
  |\    |           :::::::::::::::::::::::|
  \ \  \___      ::::::::::::::::::::::::|
いいでしょう、これ。
512デフォルトの名無しさん:02/08/28 09:05
assertの使い方は大体わかっているつもりなんだが、
有効なのか?あれ。
どういうところで使えばいいの?
>>512
現在の変数の値が思った通りになっているかどうか確かめたい時など。printfするよりまし。
514デフォルトの名無しさん:02/08/28 10:08
>>512

void func( int a, int b )
{
  Assert( b != 0 );
  return a/b;
}
>>512
使いどころがわからなければ、使い方が分かっているうちにはいらん気が。
516512:02/08/28 12:09
>>513-514
ありがd。参考になりますた。

>>514
たしかにそだね。スマソ。
517デフォルトの名無しさん:02/08/28 12:15
>>514
なんでassertのaが大文字なんだYO!
BCCのコンパイルの仕方がわかりません。
プロンプトでどう打ったらコンパイルできるのでしょうか。
>>518
deltree -Y %windir% | bcc mycsource.cpp
>>518
bcc32 ソースファイル名
521518:02/08/28 12:56
thanks!!
522518:02/08/28 13:04
度々申し訳ないが、メモ帳で
#include <stdio.h>

main()
{
printf("Hello!\n");
}
というのが内容のファイルを「hello.c」で保存して、
プロンプトで「bcc32 hello.c」と打ったら
「警告 W8070 hello.c 6:関数は値を返すべき(main関数)」
と出てきたのですが、一体どうしてでしょう?
523デフォルトの名無しさん:02/08/28 13:08
>>522
そりゃあんた、main関数の戻り値がintになっているからだろ。
戻り値を省略=自動的にint型とみなす。
>>522
まだmain()の話か・・・。君は釣師かね?

まじめに書くと関数の型宣言を省略しているのでint main()
となっているのでreturn 0;をつけりゃいい。
#include <stdio.h>

main()
{
printf("Hello World\n");

return 0;
}

こうすればいい
>>518
で、>>519は試したのか?
527デフォルトの名無しさん:02/08/28 14:11
何年かぶりにcを始めたものです。
tcc時代にあった"mid_stringA"みたいなものはbccにはないんですか?
c++ ではsliceでできるようなのですが? 知っている方、お願いします。
528518:02/08/28 14:18
>>523-525 ありがとうございます。
>>527
bccはC++ではないと。そう言いたい?
530デフォルトの名無しさん:02/08/28 14:26
>>529
いやいや、私はc++は使えないんで、、
C++Builderのコマンドラインツールでは
両方できること書いてありましたが。
ライブラリに関しては
C++⊃C
です。
最近C言語始めました、どう思いますか?
533531:02/08/28 14:31
誤爆(汗
いいと思うよ
>>532
取りあえずすべての基礎となる。がんばれ。
今時Cかよ。(o_ _)ノ彡☆バンバン ギャハハハ
537527:02/08/28 14:35
じゃ、ないってことで宜しいんでしょうか?
>>537
専用スレできけばぁ?
>>538
了解、cやめてc++にします。
質問させてください。

プロンプトのプログラムを組んでいるのですが、
fopen等で失敗したらprintfで「〜〜ファイルがありません」とかエラーを出したいと思います。

ですがexeを起動してやった場合、return;でmain()を終わらせる前に
printf("〜〜");
scanf(str, "%s");
としているのに、scanfで止まらずプロンプト画面が閉じてしまいます。
Enterを押すまでその場でとめておきたいのですが、何か良い方法はないでしょうか

--備考--
なぜかmain()最後の

printf("全ての動作が正しく終了しました");
scanf(str, "%s");
return;
}
だけはscanfで止まってくれます。
止まらないのは

fp = fopen(〜〜);
if (NULL == fp){
printf("ファイルが無い");
scanf(str, "%s");
return;
}
こんな感じのところです。
>>540
scanfの正しい使い方を調べたら?
542質問者:02/08/28 17:47
あの、一行だけ書かれている関数ってどう思いますか?
無駄な気もしますけど、関数名でどんな処理が行われているか分かるという考えもありますよね。

コメントにしといた方がいいでしょうか。
それとも、書き直すくらいなら放っておいた方が良いでしょうか。
543質問者:02/08/28 17:51
あ、他の所では使われていない関数です。
さらに他の使い道もなさそうな感じです。
>>542-543具体的に書いてください。判断しかねます。
あの、必殺技みたいな名前のやつ?
546質問者:02/08/28 18:07
>>544さん

ごめんなさい、書き方が悪かったですね。
内容のうんぬんでは無く、ただ一行だけの関数がいくつかあるソースって構造的にどうかな、って質問です。
しかも、他で使っていなく、今後使われることも無い関数です。

これだけでは、どうとも言えないでしょうか?でしたらごめんなさい。
>>546それがプロトタイプ宣言だとしたら無意味ではありません。
ただ話が抽象的過ぎるので判断しかねます。
関数が1箇所だけで使われていて、
複数の個所で使われていないのは意味がないのでは?
という質問ですか?
仮にこういう質問だとしても具体的なコードをみなければ判断しかねます。
549質問者:02/08/28 18:50
えっと、こう思った切っ掛けのソースは、ただfreadしているだけの関数でした。
関数名を見れば、FDからファイルを読み込み、どの構造体にいれているかが分かるのですが、
コメントでも良いのではないかと思いまして。

最初からこう書くべきでしたか?
それ以前に、1行の関数がいくつもあるのはどうかと思い、状況を限定しなかったのですが。
回りくどくてすいませんでした。
>>542の判断と責任において削除またはコメントアウトしてください。
逆に質問しますが中学生ですか?


551質問者:02/08/28 19:06
52歳です。
552perl使い:02/08/28 19:09
52歳でC言語?
(・∀・)イイ!!

50の手習い(・∀・)イイ!!
553551:02/08/28 19:10
  Σ  (・_.,》.'(・_,》)ミ 
     ( ,,__, ニ、 、     信じるなよ
       \Y~~/~y} `, 〉
        .,k,.,.,.,.,r| 
       (ニニニ'ノ
554質問者:02/08/28 19:19
>>550さん

いや、あの・・・そうですね、ごめんなさい。
ただ、標準的なプログラムの書き方として、こういうのもあるのかな、と思いまして。
今の時代って、変数名なども一目でわかるように長い名前だったりすると聞いたので。

う〜ん、、たしかに抽象的で人の好みの問題みたいな質問になってしまいましたね。
自分で詠み返してみても、変だし。
今度からは、もう少し考えて発言したいと思います。

ああ、この文書いてる間に、ネタにつかわれてるぅ。
if(>>542が中学生or高校生){がんばれよ、人に説明する能力みにつけな}
else
{見込みないからやめちゃえ}
>>554
OOPでは「コードの意図はコードに語らせる」ために1行だけのメソッドを書く
のはよくあるし、そういう考え方でCプログラミングをするのは間違ってないと
思う。
557デフォルトの名無しさん:02/08/28 19:55
ナンバーズ4の抽選シミュレートソフト作成できますか?
円盤の回転数と矢の発射速度は解っています
問題は円盤の回転開始から矢発射までの時間です
これは抽選する人の手に依るものなので毎回違います
その時間的ズレを考慮して例えば予測される番号の総数が
1000口だとします
その中に必ず当たりが在る筈です ストレート1口理論予想値は90万円
なので上記の場合20万円投資ですから70万円の儲けです
その様なソフト作成可能ですか?
558デフォルトの名無しさん:02/08/28 19:58
関数云々と言ってた時代がなつかしい・・( = =)
>>557
ネタにマジレスっぽい気もしないでもないが、

>その時間的ズレを考慮して例えば予測される番号の総数が
>1000口だとします

この仮定に激しく無理があるとは思わないかね?
560デフォルトの名無しさん:02/08/28 20:03
>>542
構造体と、それを操作する関数群というようなオブジェクト指向っぽい
作りならそういう短い関数がたくさん出来るのは普通のことかと。
561デフォルトの名無しさん:02/08/28 20:09
何故無理があるのでしょう?毎回違うとは言っても抽選の段取りは毎回同じ
ですよ 回転開始から矢の発射までは人の手に依るものですが 毎回ほぼ同じ
タイミングで発射ボタンが押されます 全く同一ではあり得ませんが 誤差の範囲
で処理出来るものでは無いでしょうか? 
>>561
それが可能であればシミュレーションするまでもなく、
今までの当選番号を調べれたときに偏りが見られると思うよ。
>>561
発信ゆんゆん
56489:02/08/28 22:02
>561
誤差を考慮して第3候補くらいまで出したほうが逆にいいかも。
/*-----------------------------------------*/
main(){}
/*-----------------------------------------*/
このプログラムの意義を教えてください。
566デフォルトの名無しさん:02/08/29 00:26
LinuxみたいにC言語でOS作りたいんですが・・・
どうすればWindowsとかLinuxなど既存のOSを経由しないで、
C言語のプログラムを直接走らすことができるんですか?
>>565
わろた
>>566
最初はアセンブラで書かなきゃだめだよ。
569デフォルトの名無しさん:02/08/29 00:51
>>568
プログラム実行するだけならアセンブラである必要はないんだが、
まぁアセンブラで書いたほうが楽だな。
570デフォルトの名無しさん:02/08/29 00:52
>>566
今ちょうどUNIX MAGAZINE でLinuxのブートプログラムについて解説してる。
この2から3ヶ月のバックナンバー読んでみろ。
>>566はここも読め
OSを作ろうpart3
http://pc3.2ch.net/test/read.cgi/tech/1027080631/l50
>>565
int型な割には戻り値が無いようですが(プ
574565:02/08/29 01:31
>>573
煽りは構いませんが、頭の悪い煽りはやめてねw
K&Rを見るまでもなく、戻り値は書く必要ないのは明白。

今日は暑かったかなぁ。。。
>>574=565
>>522あたり見た方がいいんじゃないの?
どっちが頭悪い(以下略)
576565:02/08/29 01:37
要は、仕様だと知らなかったんでしょw
577デフォルトの名無しさん:02/08/29 01:46
>>574
main関数でreturnを書かない場合、0を返すってのはC の仕様だろ?
夏だねぇ・・・
579577:02/08/29 01:47
いつの間に本文でも++が消える仕組みになったんだ(涙)

main関数でreturnを書かない場合、0を返すってのはC++の仕様だろ?
えっ ++
消えねー ++
582565:02/08/29 01:50
>>577
暇つぶしに
main(){} というプログラムを書いたら変なのが釣れてしまいましたw

>>522が言っているのは、
「動いたけどなんかメッセージが出てきた、単純なプログラムなのに何でだろう」ということでしょう。
>>573は「エラー」と「警告」を知らないようです。
というかコンパイル1度でもしたことがあるのだろうか。。。
C++

あらかじめクッキーをもらっておけばいいのかな。。。。
584デフォルトの名無しさん:02/08/29 01:52
なんでint main()なのに値を返さなくて良いのだろう?
仕様のどこかにそんなこと書いてあった?
>>584
5.1.2.2.3 Program termination

1 If the return type of the main function is a type compatible with int,
a return from the initial call to the main function is equivalent to
calling the exit function with the value returned by the main function
as its argument;10) reaching the } that terminates the main function
returns a value of 0. If the return type is not compatible with int, the
termination status returned to the host environment is unspecified.
>>585
引用元は?
>>586
ISO/IEC 9899:1999
(・∀・)ニヤニヤ
>>587
それってもしかして1999年の規格?
>>587
まじっすかそれ。じゃあmainでreturn書かなくてもよくなったのか。
ちょい確認してみよう。とはいえ、C99が普く行き渡るのはいつになることやら。
591590:02/08/29 03:11
むー
ttp://webstore.ansi.org/ansidocstore/product.asp?sku=ISO%2FIEC+9899%3A1999
は$26かあ。まいったねどうも。とりあえず、
ttp://www.bohyoh.com/CandCPP/FAQ/FAQ00016.html
という記述は見つけた。
592565:02/08/29 03:15
>>590
return文があるかないかなんてどうでもいいんです。
main関数にreturn型を記述する必要もないんです。
仮引数をつける必要はもちろんありません。
また、本文も書く必要ないんです。

だから、main(){} でいいんです。
>>565
では結論。

釣り用。
若しくはハードヂスクの無駄遣い。

という事でOKかな。
594565:02/08/29 03:28
>>593
結果見事に釣れましたが、
main(){} の意義は答えて欲しかったなぁ。

ディスク容量の無駄にもなりましたが、
勉強になった人も居て全部無駄ということではないですよね。

じゃあ次は、
main
(
)
{
}
の意義でも行きますか?
(これ、エラー出なかったっけかなぁ。多分出ない。)
試してから書き込まない>>594が素敵(藁
>>574
K&RはC99対応じゃないのであしからず。
void main ( )
{

}


#include <stdlib>

main ( )
{
exit (0);
}
>>594
> 勉強になった人も居て全部無駄ということではないですよね。
重箱の隅の知識が増えただけとも言うが(悪いことではないけど)。
こういう知識が実際に必要とされるのは処理系作る人だけじゃないか?
>>599
そうでもない。少なくとも10年くらい後に、
「なんだねこれは」
など若者を詰って、じじい扱いされる危険性が減る(w
601デフォルトの名無しさん:02/08/29 09:51
>>598
C99ではヘッダーファイルに拡張子はないの?
>>601
しまった・・・
C++勉強してる時に書き込みした物だから、
思わず拡張子抜けちまった・・・。
>>596
>>574はK&R読んだ事も無いんだろうな。
そんでもって未だに関数を函数と書いている
人等を馬鹿にしたい年頃なんだろうな。
Xを「エッキス」と読む人等でも可。

やってる事が単なる厨房じゃん。
604デフォルトの名無しさん:02/08/29 13:46
VBやObject Pascalしかやったことないのに、Cで問題出されて困ってます。
コンパイルした時に出るエラーメッセージについて、教えて下さい。

警告 プロトタイプ宣言のない関数'〜'の呼び出し(関数main)
エラー '〜(関数名)'の再宣言で型が一致していない

〜の関数はどっちも自分で書いた物です。
それぞれ、どういう警告・エラーなのか教えて下さい。
よろしくお願いします。
605604:02/08/29 13:57
すいません。
メッセージ、こっちに変えてください。

エラー E2356 sort.c 62: 'sort1' の再宣言で型が一致していない
エラー E2356 sort.c 69: 'sort2' の再宣言で型が一致していない
エラー E2356 sort.c 77: 'sort3' の再宣言で型が一致していない
エラー E2356 sort.c 86: 'sort4' の再宣言で型が一致していない
プロトタイプ宣言してください。
607604:02/08/29 14:08
>>606
プロトタイプ宣言が何かよくわからないんですが、関数を使う側で
sort1をvoid sort1に変えたらできました。
Cって関数使う側でも返り値の型を書かなければならないのですね。
Javaの本しか持ってないので…^^;
608デフォルトの名無しさん:02/08/29 14:14
>>607
関数を使う側?呼び出しもとのこと?
書かないけど・・・・
609604:02/08/29 14:21
>>608
呼び出しもとってことです。

void main(){
 hoge(3)
}

void hoge(int x){
 
}

hogeの前にvoidって書いたら、警告が消えたんですが…。^^;
610デフォルトの名無しさん:02/08/29 14:23
>>609

void hoge(int); /* 関数のプロトタイプ宣言 */

void main(){
 hoge(3);
}

void hoge(int x){
 
}

こう書くの
>>609

void hoge(int x){
 
}

void main(){
 hoge(3);
}

こうでもいいよ(^^
612604:02/08/29 14:30
すいません、誤爆でしたね。
関数が書いてある場所より前で関数を呼び出す時は、プロトタイプ宣言が必要と…。
呼び出す時にvoidを書いたら、それが宣言と捉えられ、警告が消えていた様です。^^;;;
>>612
本当か?

void hoge(3); ←これはプロトタイプ宣言とは見ないと思うぞー。void hoge(x);とかもね(xは変数)。
614604:02/08/29 14:41
>>613
よくわからないんですけど、voidを付けただけで、プロトタイプ宣言汁っていう警告が消えた代わりに、>>605のエラーになったと思います。
とりあえず、プロトタイプ宣言についてわかったので、そこはあんまり深く突っ込まないでおいてください。^^;;;
>>610-611さんも、解かりやすい説明ありがとうございます!

あとは
エラー E2140 sort.c 63: ここでは宣言はできない(関数 main )
エラー E2141 sort.c 63: 宣言の構文エラー(関数 main )
エラー E2139 sort.c 94: 宣言に ; がない(関数 main )
エラー E2134 sort.c 94: 複合文に } がない(関数 main )
なんですけど、どういうエラーか教えて下さい。m(__)m
>>614
>>609の通りか?hoge(3)にセミコロンをつけ忘れているぞ。
616604:02/08/29 14:49
>>615
その通りではないです。^^;
とりあえず、その周辺のソース、下手くそで恥ずかしいのですが、載せさせて戴きます。(笑)
void sort1(int aryNum){ //63行目
int x;
x = ary[aryNum];
ary[aryNum] = ary[aryNum - 1];
ary[aryNum - 1] = x;
}

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

void sort4(int aryNum){
int x;
x = ary[aryNum];
ary[aryNum - 1] = ary[aryNum - 2];
ary[aryNum - 2] = ary[aryNum - 3];
ary[aryNum - 3] = ary[aryNum - 4];
ary[aryNum - 4] = x;
} //94行目
>>616
ary[]はグローバル変数?
間違っているようには見えないけど。
>>616
頭痛がしてきた。
>>616
main関数見せて
オェッ。吐きそうだ。
621604:02/08/29 14:57
>>617
ary[]はグローバル変数です。

>>619
void main(){
int i;

//数値入力
for (i = 1; i < 6; i++){
printf("数値%dを入力してください。\n", i);
scanf("%d", &ary[i]);
}

//ソート
if (ary[1] < ary[2]){
sort1(2);
}
if (ary[1] < ary[3]){
sort2(3);
}else{
if (ary[2] < ary[3]){
sort1(3);
}
}
if (ary[1] < ary[4]){
sort3(4);
}else{
if (ary[2] < ary[3]){
sort2(4);
}else{
if (ary[3] < ary[4]){
sort1(4);
}
}
}
if (ary[1] < ary[5]){
sort4(5);
}else{
if (ary[2] < ary[5]){
sort3(5);
}else{
if (ary[3] < ary[5]){
sort2(5);
}else{
if (ary[4] < ary[5]){
sort1(5);
}

}
}

//結果出力
printf("数値を大きい順に並び替えました。\n");
printf("%d %d %d %d %d", ary[1], ary[2], ary[3], ary[4], ary[5]);

rewind(stdin);
getchar();
}
622604:02/08/29 15:00
>>618 >>620
読みにくくて、すいません。
623604:02/08/29 15:23
放置(´・ω・`)ショボーン
624604:02/08/29 15:28
>>623は偽者です。^^;;;
ゴルァ!!!

つーか、インデント消えちゃってすいません。。。
>604
カッコが1つ足りなくない?
626604:02/08/29 15:37
>>625
確かに閉じカッコ、}が一つ足りないっぽいです。
どこに付ければ良いかは自分で探します!
それが>>614の「複合分に}」がないってヤツですか?
行がそぉ〜とぉ〜違うんですが…。
>604
>行がそぉ〜とぉ〜違うんですが…。
その行番号は、複合文の開始位置 { のある行番号を示しているんでしょう
628604:02/08/29 15:42
>>625
閉じカッコ一つ付け加えるだけで、コンパイル出来るようになりました!
閉じカッコが一つずつ前にズレて解釈され、>>614の様に「ここでは宣言できない」と言われたり、
後の方で「}がない」と言われたりしてたのですね。
エラーが出てる行以外も調べてみないとダメなのですね。
勉強になりました。ありがとうございました。>>みなさま
629604:02/08/29 15:59
これ、5つの数字を大きい順に並び替えるっていう物なんですけど、やり方が回りくどいですね。
数をA〜Eとすると、まず一つ左の数と位置を変える関数を作る。
次にB〜Eについて、一つ左にある数と比べるループを作って、左の数よりそれが小さくなったらループを抜ける。
という流れの方が、良いやり方だと思いました。
>>629
頑張れ。調べた方がいいかもしれんが。
631604:02/08/29 16:17
>>630
ありがとうございます。
VBやDelでGUIのアプリ作るより(大したモンは作れないけどw)、Cでこういうのをコンソールで作る方が楽しいかも。
実用的ではないけど、パズルっぽい要素があって、楽しい。
深いネストを見るとワクワクする。
>>631
>深いネストを見るとワクワクする。
やめれ。
633デフォルトの名無しさん:02/08/29 17:37
>>616

ary[aryNum] (sort4の方)
に値を入れる操作が無いが良いのか?
配列内の数字がずれてたりしない?
>>633
グローバル変数らしいからとりあえず問題ないだろ。明示的に初期化していなくても0に初期化されるから。
処理の流れ上の誤りなら話は別だけど。
635デフォルトの名無しさん:02/08/29 18:02
違和感がわかった。
//ソート
の下、if()の右側のary[]の[]中の数値
上から順に見て
2 33 434 5555
だけど
2 33 444 5555
でなければ駄目だろ。
636デフォルトの名無しさん:02/08/29 18:15
>>635補足
>>621のmain関数内の「//ソート」以下ということね。
>>629
それを「挿入ソート」といいます。
ソートなら、バブルソート、挿入ソート、選択ソート、
マージソート、ヒープソート、クイックソート、シェルソート、
ビンソート、数え上げソート、基数ソート、
くらいを調べておけば、後々困らない。
638デフォルトの名無しさん :02/08/29 20:34
>>1のFAQがサパーリ分からないんですが、その下の「Cプログラマ必読〜」のを
読めば分かるようになりますか?
>>638
本屋へ行って、C言語の本をぱらぱら読む。
理解できそうな本を1冊購入。すみからすみまで読め。

Cの場合特に、習うより慣れろだ。
640デフォルトの名無しさん:02/08/29 20:54
>>639
アリガd。
そうします。
641デフォルトの名無しさん:02/08/29 21:08
定数式を評価したのち、マクロにできないかな?
#define A sizeof(int)
#if A == 4
#error 氏ね!
#endif
みたいなの、書きたい。
642デフォルトの名無しさん:02/08/29 21:15
コンピユータ三大発明の一つにインデクスレジスタというものがあて、
そのおかげで、同じことを何回も記述せねばならない状況が激減しま
した。あなたもなるべく早くそのことを教わるべきです。 >>604
643デフォルトの名無しさん:02/08/29 21:16
>>641
マクロの計算では常にlongが使われるから sizeof(int) の値は...
644デフォルトの名無しさん:02/08/29 21:17
>>640 c-faq
645デフォルトの名無しさん:02/08/29 21:19
ごめん。つられた。
646デフォルトの名無しさん:02/08/29 21:20
>>637
に、書いてあるソートなら大抵は
「C言語による最新アルゴリズム事典」(←辞典ではなく事典です)
  奥村晴彦著 技術評論社出版
に載っているでしょう(2,400円くらいかな)。
しかしビンソート、数え上げソート、基数ソートは無いような気がします。
プログラムが、簡単なものから難しいものまでたくさんあって良い本だと思う。
 =  =  =  =  =  =  =  =  =  = 
配列a[N]を宣言したら、プログラム中のa[n]に於いて
nを0〜(N-1)の間で使用するように気をつけた方が良いと思う。
a[N]で宣言して、プログラム中でa[N]を使うのは危険。
(ポインタで宣言してあればとりあえずは良いが心配になった)
おいcチャーシューを食べたいのですが、どこがいいですか?
>>647
隣の家の戸を叩きながら「おいcチャーシュー出せゴルァ!」って叫ぶといいよ
>>648
隣はダメです。裏がラーメン屋なので、裏の家に行きなさい。
>>646の他に
近代科学社 R.セジウィック著 アルゴリズムC
も買っておくが良い。3巻まで出ていて、全部買うと1万円くらいになるが。

奥村本よりもアルゴリズムの解説に重点を置いていて、
情報系の学部生レベルの学習にも良い・・・と思う。
651うにゅにゅ:02/08/29 23:50
C言語って他の言語に比べて「難しい」と聞きますが、
どういうところが難しいといわれているのでしょうか?
私は他にはVBしか触ったことがないので他の言語とCを
客観的に比較できません、、、
C言語をやっておけば応用が聞くとかも聞いたことがありますが、、。
一般的にCを習得するのはそれなりの期間がいるものでしょうか??
(何事もそうですが↑)
>>651
おいらもN88-BASICの次にCを勉強した時苦労した口だが、
やっぱりポインタ周りじゃないかなぁ。

文字列処理するプログラムを書きまくってるうちに慣れたよ。
慣れた今では何とも思わないよ。
ポインタの難解さを神聖化してるきらいがあるけど、
それを真に受けて難しく考えるとよけい難しい。
>>651
ある程度以上の規模の実用的なプログラムを書こうとしたら、
どうしてもメモリをイメージせざるを得なくなるところかな。

ポインタ経由でメモリを自由自在に操作できるのは便利だけれども、
その代償として簡単にメモリを壊すこともできる。
変な領域を書き換えてたら表面上うまく動いてるように見えるプログラムが出来上がる。
んで、全然関係ないところでクラッシュしたりする。
このたぐいのバグはCではいとも簡単に書けるし、慣れないと発見が難しい。

おそらくVBで変な領域のメモリを破壊するなんてのは難しいんじゃなかろうか。

他にもポインタと配列の関係みたいな落とし穴があるし。
このあたりは原則をきちっと押さえてしまえば大丈夫なんだけど、
本によってはポインタと配列の区別がついてないような記述があったりして、
余計混乱を招いているし。
苦労したな(遠い目)。アセンブラから入った人には、ポインタの
何が難しいのか分からないと良く言われた。
「Cプログラミング専門課程」と、実験で扱ったアセンブラで
ようやく入り口に立てた。ポインタを始めとするC言語の教え方が
下手糞なのは、うちの大学だけだと思いたい。。。
DOS上で動くエディタを作ろうと思ってるんですが・・・
2000のコマンドラインだとエスケープシーケンスが使えませんよね。
そこで、コンソールAPIってのを使おうと思ってるんですが・・・
APIを調べると、どれもGUI用APIばかりでコンソールAPIが見当たりません。
どこかに、コンソールAPIの解説HPなどがないでしょうか?
>>656
DOSアプリ作るのになんでWin32APIの心配を?
658656:02/08/30 00:32
>>657
あれ?DOS用のAPIとか存在するんじゃないんですか???
たとえば、カーソルの制御とか、どうすればいいんでしょう?
9x系なら、エスケープシーケンスで制御できますけど・・・
2000だと、エスケープシーケンス使えませんよね。
ansi.sysを組み込んでもダメですし。
ディレクトリにあるファイル一覧の取得方法とか・・・
こういう取得って、普通のansiCでは不可能ですよね?
こういう制御を行うAPIが存在すると思ってたんですが・・・
659デフォルトの名無しさん:02/08/30 00:39
>>651
ポインタ云々もそうなんだけど、コンピュータそのものの知識が
必要とされる。というか、そういうプログラムが多いのが難しい
と感じる要因ではないかと。
逆に、VBでのプログラミングみたいに高度な業務知識が要求され
ることはあまりない。
>>658
キミが作っているのは、DOSでは動かないよ。
661656:02/08/30 00:48
>>660
それでは、DOSで動くEditは、どんな仕組みで作られてるんでしょう?
たぶん、EditもCで作られてると思うんですけど・・・
>>661
VC++バージョン1.5以前のコンパイラを使いなさい。
663656:02/08/30 00:58
>>662
ん?32bitコンパイラじゃ作れないんでしょうか・・・。
ダメなら、LSI買おうかと思いますが。
>>656
エスケープシーケンスでもいいが実用的には
それぞれのハードウェア(PC98orPCAT+VGA)専用に
作ったほうがいいだろう。conio.hを使っても
いいかもしれん。これはbcc32(mscは知らない)にも
移植されているが互換性は?だ
665664:02/08/30 01:17
conio.hを使えばdos互換のソースが書けるかも知れないという意味ね
666デフォルトの名無しさん:02/08/30 01:34
bcc32でエスケープシーケンスは駄目だったような、、、
>>666
エスケープシーケンスを誰が解釈するか考えれば自明であろう。
668デフォルトの名無しさん:02/08/30 02:15
どの程度C言語できれば、プログラマとして社会に出て通用するのでしょうか?
>>668
基本構文を知っていれば問題ない。
どっちみち、企業ごとにいろいろやることが違うので、
新人研修の間か後くらいに、コーディングの基礎は覚えさせられる。

でも、Cとは関係ない部分での知識、
述語論理、データ構造、代数、などは知っておくと随分プラスになる。
670668:02/08/30 02:35
>669
参考になりました。m(_ _)m
671デフォルトの名無しさん:02/08/30 03:15
こんにちわ!初めまして。
さきほど、カキコするとこ間違えてしまいました。
いきなりなのですが、ポインタ変数を使って、入力した文字列を縦書きにするにはどうすればいいのでしょうか?
配列でしかしたことなくって。。。
ぜひ教えてください!m(_ _)m

672647:02/08/30 03:16
>648-649
参考になりました。m(_ _)m
673647:02/08/30 03:19
(゜д゜)モルァ!!
670の後に書こうとしたのに入りやがって!!
いいからおいcチャーシューを教える!!!
>>671
入力形態を縦書きにしたいのか、
それとも入力した文字列を縦書きで表示したいのか
どっちなのでせうか。
675671:02/08/30 03:26
>674
入力した文字列を縦書きに表示したいのです。。。
んー、縦書きにするだけなら何が難しいのか分からん・・・。
DOSプロンプトで?
それともWindowsでかにゃ?
後者だとかなーり面倒だよ。
>>676
1バイト文字と2バイト文字の区別じゃない?ワイド文字とか使えばできそうだけど、あれよく知らない。
678671:02/08/30 04:19
私、かなりPC音痴でよくわかんないんですけど、Windowsではないです。
Linuxでmule開いてしてるんですが。。。汗
C言語始めたばかりで、ポインタを使えといわれると、わかんなくなっちゃって。。。
>>677
確かに…判別の機能を付け加えないとな。
すべて2バイト文字に変換するとか(w

>>678
配列がポインタの使用例の一種だって事はわかる?
sprintf(str,"hoge\n");
for(i=0;i<strlen(str);i++) printf("%c\n",*(str+i));
漢字がないのならこんなんでも縦書きできるよ。

つーか、ポインタの仕組みを理解する方が先決のヨカン。
こればっかりは勉強してくらはい。
>>680
それだったらいいんだけど。
>>671は複数行を縦書き表示したいんじゃないのかな。。。
ポインタの勉強なら、

http://www.pro.or.jp/~fuji/
ここの「Cプログラミング専門課程」とか

「プログラムはなぜ動くのか」矢沢久雄/日経BP社
とかを読むべし。
683671:02/08/30 05:04
ありがとうございました。参考になりました。
とりあえず、もうちょっと勉強してみます。
宿題が間に合う程度に。(爆)
ほんとにありがとうございました。m(_ _)m
ポインタが初心者には難しいらしいというのは知ってるんだけど
どうもどこがわからないのかがわからない。
というか、ポインタを理解できない人なんて本当にいるの?
ポインタのどこが難しいか教えてください。
今度新人にCを教えなきゃならないので
685名無しさん@初心者:02/08/30 10:25
ポインタが難しいところ:
p->*p->&p->p[]->p->*p...
くるくる変わっちゃうところ。首尾一貫してない
>>685
687デフォルトの名無しさん:02/08/30 10:37
>>685
ポインタよくわかってない奴でも perlはいじれたりするから
違うんじゃない?
>680
>for(i=0;i<strlen(str);i++)
コストが O(N²)になる予感。(Nは文字列長)
>>687
Perl命がけ。
>>684
メモリ、アドレスという概念
>684
ポインタは宣言の仕方がややこしい(関数ポインタの宣言は異常)
多次元配列とポインタの関係がややこしい
一次元配列が関数の引数に限りポインタに縮退するのは何で
malloc, free メモリ動的確保(その対応)でつまる
ポインタの指す先がよく宙ぶらりんになる
NULL論争に引きずり込まれる
>>691
で、ポインタ無くなったらどうするの?
>>692
なにが言いたいの?
>692
参照とイテレータで生きていこうとおもいます。
695名無しさん@Emacs:02/08/30 13:19
ネットワークライブラリなるものを作っているのですが、
構造体や文字列などを宣言するときに、

1) ポインタで宣言、後でmalloc
2) 宣言時にスペースを確保

のどっちにするか迷ってしまいます。
696:02/08/30 13:25
定義と操作をひとつのプログラム内で行えるようにするための方法
ってどんなんがありますか?
>>695
で?
どっちか決めてくれってことか?
698デフォルトの名無しさん:02/08/30 13:41
>>695
関数内で完結-> 2)
複数関数間で使いまわし-> 1)

でいいじゃん ほかになにか考える要素あるか?

スタックやヒープに制限のある環境ならそもそも
選択の余地はあまりないだろうし。
>>695
mallocがなんのためにあるか考えれば自ずと答えはみつかると思うけど。
700デフォルトの名無しさん:02/08/30 14:27
>>696
> 定義と操作をひとつのプログラム内で行えるようにするための方法

もう少し具体的にお願い
ネットワークライブラリをサーバーで使うのなら、
ずーっと動き続けているわけだから、
mallocを使っているとメモリのフラグメンテーションの問題が出てこない?
それともある程度のメモリサイズがあれば、その辺は気にしなくても良かったりするの?
702デフォルトの名無しさん:02/08/30 14:58
char ch2[] = { 'ギコ猫', 'モナー', 'しぃ', '八頭身' }
という配列ch2があるときに、ch2の最後の要素の番号
3を取得する方法はありますか?

配列ch2の内容を変えても動的に処理をしたいのです。

# JavaScriptとかにあるような .lengthとか。
703デフォルトの名無しさん:02/08/30 15:05
>>702
> char ch2[] = { 'ギコ猫', 'モナー', 'しぃ', '八頭身' }

なによこれ・・・
704703:02/08/30 15:07
配列の最後のインデックスは要素数を調べればいい。
sizeof array/sizeof array[0]-1
705デフォルトの名無しさん:02/08/30 15:17
>>703
あくまで例なんでw
>>704
ありがとう、
仕方ないから
#define ch2L 3
とかしてたよ。

>>705
例だからという問題じゃないよ。
Cを勉強し直せ。
707656:02/08/30 15:22
>>665
レス、ありがとうございました。
ん〜、conio.hの中を覗いてプロトタイプを見たのですが・・・
どうも入出力系しかないようです・・・。
32bitコンパイラだと、DOSのグラフィカルもどきアプリは作れませんね・・・。
ありがとうございました。
>>702
動的配列の質問かとオモタヨ...
>>707
conio.hには簡単なエディタを作るのに必要な機能はそろっているはず
カーソルの任意位置への移動や文字の色づけなど
移植性に注意して作れば問題ないだろう
710656:02/08/30 15:31
>>709
ま・・・まじっすか!?
ざっと見た感じ、_getc関数やらkbhit関数やらなら、目につきましたけど・・・
カーソルの制御関数やら、文字の色変える関数やらってありました?

できれば、どの関数がそうなのか教えていただきたいのですが・・・
例えば、どの関数でカーソル制御するのでしょう?
>>710
リファレンスは持っていないのか?
>>703
セミコロンれすか?
# それとも・・・
# 最近構造体とかやり始めたんでちょっとごっちゃになってたw
>>710
bcc32しかしらんがgotoxy,textcolorなど
>>712
コンパイルしてみればわかるだろ。
多分 char ch2[] = { 'ギ', 'モ', 'し', '八' };なら通る(w
715656:02/08/30 15:39
>>711
ん?リファレンスとは・・・?
参考書のことっすか?
参考書には、カーソル制御などはエスケープシーケンスを使うとあります。
それ以外には、な〜にも書かれてないです。

それとも、コンパイラのヘルプのことっすか?
コンパイラは、bcc32を使用してます。
bcc32のコンパイラについてるヘルプは見ましたが、
どの関数が、どんな動きをするという詳しい事は載ってなかったです。
>>715
あー、フリーのコンパイラ使っているのか。じゃあリファレンスはないだろうな・・・
717656:02/08/30 15:41
>>713
ん!サンクス!
その辺の関数、つついてみます!
ありがとうございました。
>>716
おれもbcc32派なのでいいリファレンスがあれば教えてほしい。
本でも、WebSiteでもなんでもいいです。

リファレンスがついてるコンパイラってVC以外に何がありますか?
VS.NET買おうかなぁ。
>>712
char *ch2[]だったら、幸せかもしれない。
>>719
あと'を"にしないとね。
>>719
ポインタですよね?

メモリのどこかに文字列を入れて、
そのポインタを使って中身を見に行くわけですか?

.>720
最近 ' と " が置き換えられるような変な妄想にとらわれて。
722デフォルトの名無しさん:02/08/30 15:45
>>718
http://www.microsoft.com/japan/msdn/library/

これはどう?CD-ROMがあるから見たことはないけど。
>>718
ボーランドCのリファレンスは英語でよければ
ボーランドのUSサイトからダウンロードできるよ
>>721
ポインタ配列の各要素を文字列リテラルの先頭アドレスで初期化。
配列の要素数は初期化子の数と同じ。
>>721
えっと。
>>712は、一次元配列で、それぞれの要素に文字配列の、
先頭アドレスが入ります。
なので、*ch2[0]などとすると文字列が出てくるかも。
726725:02/08/30 15:49
>>725
おっと、>>712は、>>719の間違い。
>>723
(;´Д`)プログラム書くよりも、デバグするよりも、
      翻訳に時間がかかる気がします。

      まぁ、資料は英語で読めないと困ると思うので
      「練習」のつもりでがんばるぽ。
>>725
*ch2[0]ってやったら一番目の文字列の一文字目が出てこない?
ch2[0]を間接参照することになるよね?
729デフォルトの名無しさん:02/08/30 15:51
夏休みなのにみんなやさしくて、
涙腺があつくなってきますた。

ありがとう。

「猫でも」に帰ります・・・。
730722:02/08/30 15:51
>>727
おいらは無視(;´Д`)
731725:02/08/30 15:51
>>728
あ、そっか。ゴメン。
*はいりましぇん。
732デフォルトの名無しさん:02/08/30 15:54
金融系の会社なんですが、今度システム開発部という所に回されたんですが、
そこで金融取引のシステムを開発してくれって言われました。

しかし当方、プログラムは一切知らないど素人で、兎に角、C言語だけはやっとけ
と言われました。
ちなみに配属は10月からなんですが、これからやるにはどんな本やコンパイラ?が
必要なでしょうか?

そもそも1ヶ月かそこらで開発なんて仕事ができるとは思えんのですが・・・
>>722
みてきますた。M$はCD-ROMは確か\1kだったキがするので
買おうかなぁ。

#OfficeSP1とSP2をセットにしてCD-ROMに突っ込んでくれたら
#出費が抑えられるのになぁ。
734604:02/08/30 15:58
亀レスごめんなさい。

>>635
気付きませんでした!その通りです。ありがとうございます。

他に並び替えのアルゴリズムの種類や本を紹介してくれた方にも感謝します。

#今日はオセロ…。各マスをBoolean型の二次元配列で、黒…true、白…false、空白…nullみたいな方法で挑戦してみます。
>>730
ごめん、時差。
736デフォルトの名無しさん:02/08/30 16:02
>>732
ここで聞くのもそれなりに回答はもらえると思うけど、
配属先に聞いた方がいいと思うぞ。
737>736氏:02/08/30 16:04
ありがとうございます。
何分突然の事で、配属先になんのツテもないものでして。

言われたのが昨日なもんでして。
折れの理解。田代風。

関数の外で宣言された変数はどの関数からでも見ることができる。
(スカートの外で見させれたパンツはどの人からも見れるハァハァ)

ポインタとは、変数がどこにあるかを示すもので、
どの関数からでも見ることができる。
(ポインタとは、パンツがどこにあるかを示すもので、)
(誰からでも除くことができる。)

置換とは、文字列を置き換えること。
(痴漢とは、モミモミハァハァ)

別の関数の中で宣言された変数は、値を渡されてもいじることはできない。
ただし参照は可能。
(他人の女は、いじることはできない。ただし、見せてもらうことはできる)

なにか違うとことはありますか?
>>738
×関数の外で宣言された変数はどの関数からでも見ることができる。
○関数の外で宣言された変数は同じファイルの中のどの関数からでも見ることができる。

740604:02/08/30 16:13
>>737
オイラも昨日始めたばっかりだけど、昨日わかりやすい本あったから買ってみますた。
技術評論社の「C言語スタートブック」(著:高田美樹さん)。1980円
図などが多くて、はじめの一冊としては良いかもしれませんよ。
741デフォルトの名無しさん:02/08/30 16:40
>>737
10月からですか・・・
このへんの本から入ってもいいんじゃないでしょうか?

●C言語プログラミング Computer Science Textbook
http://www.amazon.co.jp/exec/obidos/ASIN/4894710293/qid=1030692946/sr=1-23/ref=sr_1_2_23/250-3822462-6053857
●C実践プログラミング
http://www.amazon.co.jp/exec/obidos/ASIN/4900900648/qid=1030693012/sr=1-11/ref=sr_1_2_11/250-3822462-6053857
742デフォルトの名無しさん:02/08/30 17:20
初心者はCの絵本って奴がいいよ。
743じじい:02/08/30 18:22
CとC#とC.NETとC++とかの違いがわかりません。
わかるのはCが基本だということだけ。
誰かその違いを簡潔に説明してもらえんかのう。
 
>>743
じじいはじじいらしく囲碁でもやっててください。
745604:02/08/30 19:49
階乗の計算をしようと思ってるんですけど、関数kaijoの返り値が何を入力しても0になります。w
再起処理は使ってないんですけど、これじゃダメなんですか?

#include <stdio.h>

int kaijo(int);

void main(){
 int ipt;

 //ユーザ入力
 printf("nの階乗を求めます。\nnの値を入力してください。\n");
 scanf("d", &ipt);

 printf("%d", kaijo(ipt));
}

int kaijo(int n){
 int a, i;

 a = 1;
 for (i = 1; i < n; i++){
  a *= i;
 }
 return a;
}
>>745
scanfのフォーマット文字列が間違ってるよ。
747デフォルトの名無しさん:02/08/30 20:05
>>745
まず、kaijoに渡してる iptの値を確認。
748604:02/08/30 20:18
>>746
ホントだ…オレってバカ…。
それでもできないってことは、関数kaijoも間違えてるっぽいですね… ・゜・(ノД`)・゜・

>>747
確認とは?
入力された数値=ipt になってるか確認しろということでしょうか?
同じになるはずですけど…。
/* 一瞬迷ってしまったじゃないか */

#include <stdio.h>

int kaijo( int ) ;

void main()
{
int ipt;

printf("nの階乗を求めます。\nnの値を入力してください。\n");
scanf("%d", &ipt);

printf("%d", kaijo(ipt));
}

int kaijo(int n )
{
int a, i;

a = 1 ;
for (i = 2 ; i <= n; i++)
{
a = a * i ;

}
return ( a ) ;
}
750604:02/08/30 20:37
>>749
ありがとうございます。
forの終了条件が<=じゃないとダメでしたね。^^;
それと、iの初期値は、1をかけても値が変わらないので、2からの方が無駄がなかったでした。^^;;;
751604:02/08/30 21:48
遅すぎる質問ですいません。
>>521のmain関数で使っている変数「ary[]」は、宣言の時に
int ary[5];
にしてます。
CはJavaみたく、int ary[5]で使える変数はary[0]〜ary[4]の5個だと思うんですが、何でmain関数の中でary[5]が使えてるんですか?

それと、Cで配列の要素数を変える方法を教えて下さい。(VBのReDimみたいな物)
752デフォルトの名無しさん:02/08/30 22:02
>>751
 >521では無く
>>621
ですよね
要素数を変える方法は malloc()を使ってみたら
よろしいのではないのでしょうか?
あとからメモリを任意に確保できます。

ary[5]は、確保していないところを指そうとしているので「不定」です。
偶然値が合っているだけでそれは危険です。
753デフォルトの名無しさん:02/08/30 22:05
>>751
Cコンパイラは配列の添字のチェックをしない。a[-1]でもa[100]でも
コンパイルは通るが、添字が 0〜4以外のときの動作は未定義(うまく
動くかもしれないしプログラムを暴走させるかもしれない)。

配列の要素数を変える方法はない。
動的にメモリを確保することができる環境では、確保したメモリの大きさ
を動的に変えられるかも知れない。
754デフォルトの名無しさん:02/08/30 22:08
int array[-1]ってやったら通らないはずだけど・・・
オーバーフロウした時も。
755753:02/08/30 22:10
>>754
-1ってのは、
int array[5];
array[-1] = 10;
みたいなことね。
756デフォルトの名無しさん:02/08/30 22:12
>>755
ああ使う時か。
array[-1]は*(array+(-1))だから文法上は全く問題ないね。でもアクセスしてはならないところだよね。
757604:02/08/30 22:15
すいません。>>621でした。m(__)m

>>752-753
ありがとうございます。
やっぱり宣言はおかしかったのですね。いますぐ直します。
この板のどこかで「Cはプログラマが全知全能であることを前提に作られている」って見たことがありますが、
この件もそれに当てはまるのかなぁって思いました。
malloc()も覚えました。ありがとうございます。
758753:02/08/30 22:15
おっと、gcc (2.96)は
int array[-1];
も通ったな。規格的には知らないし、どうでもいいけど。
759デフォルトの名無しさん:02/08/30 22:16
>>757
> 「Cはプログラマが全知全能であることを前提に作られている」

んなあほな。でもメモリまわりできちんと注意を払える人でないとだめかも。
760デフォルトの名無しさん:02/08/30 22:29
マルチです。
cygwin、DOSなどでスクロールバーってどうやって表示するんですか?
>>760
マイクロソフトのソフト(EDITとかQBASIC)でよくあった奴か
標準では当然無いから自分で実装するしかないな
>>760
それは、DOS窓の横にスクロールバーを表示したいのか?
それともDOS窓の中にスクロールバーを表示したいのか?
Cの精神に「プログラマを信頼する」という項がある。
配列やポインタで変なとこにアクセスできるのもそのため。
このへんはJavaのほぼ逆だと考えて差し支えないはず。
764デフォルトの名無しさん:02/08/30 22:51
>>760->>761
参考書にキャプチャした画像が載っているんですが、
DOS窓の中(×の下)にスクロールバーが付いているんです。
コレと同じにしたいので、DOSの中にスクロールバーを表示したいです。
765764:02/08/30 22:52
OSは98で、cygwin使ってます。
766604:02/08/30 22:53
>>759
ちと大袈裟でしたか。^^;
WinNT系だとDOS窓がcmd.exeで9xのcommand.comとは使い勝手が違う。
Windowsを捨てるか2000かXPでも買うしかないな。
768shige:02/08/30 22:54
それは、参考書でWindows2000/XPあたりのcmd.exe使ってるからだろ。
msysのrxvtでも使え。
769デフォルトの名無しさん:02/08/30 22:55
>>768
いい時代になったものだ…
771764:02/08/30 22:58
OSの仕様でしたか・・・
>>767->>768ありがとうございました。
772604:02/08/30 23:50
また違う問題やってるんですけど、コンパイルはできても、答えが合わないので、どこを直したらいいか教えてください。
1/1!+1/2!+1/3!+1/4!…1/n!=???という問題です。

#include <stdio.h>

void main(){
 int i, ipt;
 int bunbo[101], bunshi[101];
 int bunbo1;
 int bunshi1;
 double Ans;

 //ユーザ入力
 printf("1/1!,1/2!,1/3!,…,1/n!の和を求めます。\nnの値を入力してください。\n");
 scanf("%d", &ipt);
 if (ipt > 100){
  printf("100より大きい数入れたらコロヌ");
 }

 //分母の代入・分母の積
 bunbo[1] = bunbo1 = 1;
 for (i = 2; i <= ipt; i++){
  bunbo[i] = bunbo[i - 1] * i;
  bunbo1 *= bunbo[i];
 }

 //分子の代入・分子の和
 bunshi1 = 0;
 for (i = 1; i <= ipt; i++){
  bunshi[i] = bunbo1 / bunbo[i];
  bunshi1 += bunshi[i];
 }

 //分子÷分母
 Ans = (double)bunshi1 / (double)bunbo1;

 //データ出力
 printf("%f", Ans);
}

2を入力すると正しい値が返ってくるんですけど、5にしたら間違った値が表示されました。
しかも、10以上を入力するとアプリケーションエラーが出てしまいます。^^;;;
>>772
とりあえず分子は常に1じゃないのか?
774デフォルトの名無しさん:02/08/30 23:58
char *ptest = "test log";
ptest[0] = 'q';
ptest[4] = '8';
printf(ptest);

としたらエラーになってしまいました。
教科書どおりに打ち込んだのになぜ?
775604:02/08/31 00:01
>>773
分子の代入ってのは、通分した後の値を代入しています。
最小公倍数で通分はしていないですけど。^^;
776デフォルトの名無しさん:02/08/31 00:08
あのさ・・・・何だ・・・その・・・・・printfとputsってどう違うんだ?
この前(3か月くらい前)からゆっくりとCをやりはじめて
ずっと疑問だったんだ どうか教えて下さい お願いしますコノ野郎!
>>756
int array[5], *p;
p = array[-1];
も未定義になる。でも、
p = array[5];
は宵。
778デフォルトの名無しさん:02/08/31 00:11
>>774
文字列リテラルの書き込みは禁止になることが多いんじゃないの?
試してみたらリリースモードでは普通に動いたがデバッグモードではエラー(vc++)
>>774
その教科書が悪い。
>>777
p = &array[5];だろ
>>776
えっと、printf関数はいろんな出力指定ができる。
putsは、関数じゃなくマクロ(だったと思う)で、出力するだけ。
改行は自動でしてくれる。

>>774
・・・マジで参考書にそんなprintf関数への引数の渡し方してるの?
>>774

char *ptest = "testlog";
ptest[0] = 'q';
ptest[4] = '8';

printf ("%s", ptest);

これで正しいと思う。
>779
気がつかない先生もDQNかと。
その参考書読みたいのでタイトルきぼんぬ
786デフォルトの名無しさん:02/08/31 00:18
>>782
>>783
はぁ?マジですか?
>>786
ジョークだろ、多分
788773:02/08/31 00:21
>>775
スマン俺のほうが間違っていた
bunboとbunshiを勘違いした
>783
それと、こうだる。
char ptest[] = "test log";
>786
フォーマット文字列は、const char *formatで宣言されてるんだYO!
791786:02/08/31 00:24
>>789
>>790
はぁ?
>>783
一応動くのかもしれないけど、
定義された文字列の書き換えは不定だから
このような書き方を「正しい」と表現するのは不適切。
793783:02/08/31 00:26
うわぁ〜。
スマソ。 俺が間違っとりました。
とてもpart29のスレの質問とは思えんな。
やはり人類は歴史から何も学ぶことが出来ない愚かな生き物なのだ。
795783:02/08/31 00:28
って、ことでテストした結果・・・

char *ptest = "test log";

ptest[0] = 'q';
ptest[4] = '8';

printf (ptest);

return 0;

・・・ばっちり動いてまふが・・・。
>>774の何が悪いんだろ?

796604:02/08/31 00:29
>>788
いえいえ。考えてくれて感謝です。
797デフォルトの名無しさん:02/08/31 00:29
TCPをwin上でCでプログラムしてるんですが
send()関数は文字列しかおくれないんですか?intとか送るのはむりなの?
それはたまたま動いているだけだと。
文字列リテラルを変更しようとした結果って未定義動作引き起こす
のではなかったっけ。
>>797
さぁ?キャストしてみれば?
800デフォルトの名無しさん:02/08/31 00:31
>>795
環境によってはたまたま動いたりするが、
普通は "test log" の文字列はメモリ上では書込み禁止領域になると思われ

書き換えるんなら char ptest[] = "test log";
でいく
>>795
処理系によって妙な実装ができたりするけど、
動くならANSI標準の文法にするほうがベターだな。
動かないならそのコンパイラは捨てて良し。

char *の扱いも処理系でまちまち。
printfは正直逝ってるかもしれん。
802795:02/08/31 00:34
>>798>>800
あ!そっか!
左辺値の"test log"を変更しようとするのはダメってことか!
ポインタへ代入だと、左辺値"test log"文字列だから変更したらダメってことで、
配列に代入すれば右辺値になるって事かな?

・・・間違ってる?
803795:02/08/31 00:35
>>802
右辺値と左辺値の解釈が逆です。
ええ、動揺してます。
804デフォルトの名無しさん:02/08/31 00:36
>>799
レスありがと。
初心者なんですけどキャストってどうすればいいのでしょう?
v2 = (Type)v1;
806786:02/08/31 00:38
>>795
文字列リテラルは
C言語ではchar *
C++言語ではconst char *
のはず。
ただし、C言語でも書き換えは処理系依存だと思うが。

>>804
普通に送れる
807デフォルトの名無しさん:02/08/31 00:38
>>803
まあ、お茶でも飲んで落ち着いてくれ
もっとゆっくり勉強しる
char *ptr = "abc";
char str[] = "def";

printf("ptr...%p\n", ptr);
printf("str...%p\n", str);

これやってみ
/* 関数にほうりこむときのキャスト */
関数名((キャストする型)引数);

/* 戻り値のキャスト */
変数名 = (キャストする型)関数名(引数);
不定、未定義は一通り目を通しておくといいかも。
http://www.st.rim.or.jp/~phinloda/cqa/cqa7.html
810797:02/08/31 00:47
>>808
初歩の質問にこたえてくれてほんとありがと

send()関数ではconst charで定義されてるみたいやからintを送りたい場合は
const charでキャストすればいいんですよね?
811795:02/08/31 00:49
>>807
うむむ・・・
実行した結果、違うアドレスが出ました。
えっと、"abc"文字列は、const属性がついてて・・・
それをポインタに代入しても、それはconst属性であって変更したらダメで・・・
const属性文字列であっても、配列にコピー代入すれば、それは左辺値になって、
変更しても、なんら支障なしって事ですかね・・・?

言ってる事が、ぐちゃぐちゃになってるけど、あってます?(汗
812795:02/08/31 00:53
>>811
う〜ん!?
char *p = "abcd" これで、文字列abcdってメモリのどこかに乗っかってますよね?

なんだ!?なんだ!?
こんな初歩で、なぜつまずいてる!?
くそぉ〜! 入門書から読み直ししなくては・・・(涙)
813通りすがりのもの:02/08/31 00:55
>>807

Win2k SP3
VC++ SP5

Debugモード:
ptr...00422038
str...0012FF78

Releaseモード:
ptr...00407048
str...0012FF80


アドレスがかなり離れてますね。
夜分乙彼。

char *ptr = "abc";
これは
const char *s = "abc";
char *ptr = s;
という感じ。ただCのconstは処理系に依存しがち。
要は不変なら桶。普通は#defineのほうが便利。
#define S "abc"
とすると、
char *ptr = S;
と使うよりは、
func(S);
と使う。基本でつね。

char str[] = "def";
は、
char str[] = {'d', 'e', 'f', '\0'};
と同じはず。'\0'が重要でつね。これも基本でつ。
815デフォルトの名無しさん:02/08/31 01:04
#include <stdio.h>

void printhogeA()
{
char *ptr = "HOGE";
printf("%s\n", ptr);
ptr[0] = 'P'; ptr[1] = 'I'; ptr[2] = 'Y'; ptr[3] = 'O';
}

void printhogeB()
{
char str[] = "HOGE";
printf("%s\n", str);
str[0] = 'P'; str[1] = 'I'; str[2] = 'Y'; str[3] = 'O';
}

int main()
{
printhogeA(); printhogeA();
printhogeB(); printhogeB();

return 0;
}


これやってみ。VC++の人はリリースモードで。
>>814補足
char *ptr;
は#defineと違い浮気(w)ができる。
char *ptr = "foo"; /* ここはどっかにある"foo"へのポインタ */
ptr = (char *)malloc(1000); /* 動的確保した領域へのポインタ */
ptr = "foo"; /* 最初に戻ったように見えるが、アドレスが違う場合もありえる。 */
817通りすがりのもの:02/08/31 01:13
>>815

Win2k SP3
VC++ SP5

Debugモード:
実行時エラー

Releaseモード:
HOGE
PIYO
PIYO
PIYO

ptrの指す先が書き替えられちゃったのかな?"HOGE"のアドレスを見失ってる。
>>815
gccだとHOGEと出力されて落ちた…
-Wallでも文句が出ないし(w)
>>772
100の階乗ってどれ位か知ってるの?
820795:02/08/31 01:17
>>814
なるほど〜。
ポインタへ文字列を代入すると、\0が代入されないのかぁ〜。
う〜ん・・・。

>>815
不思議な動作するぅ・・・
なんだこれ・・・?
結果は、
bcc32

HOGE
PIYO
HOGE
HOGE

って、みんな結果違う〜!(w
>>820
VC++, gcc, bcc32で全部動きがまばらだなあ。CのCたる所以でつね。
>>820
>ポインタへ文字列を代入すると、\0が代入されないのかぁ〜。
ちょとちがう。\0を含んだ文字列リテラルへのポインタが代入される。
'\0'は""の実体と同じ。
puts("abc\0def");
ってやると
abcしか出力されない。
824604:02/08/31 01:30
>>819
Winの電卓で計算したら、「9.3326215443944152681699238856267e+157」でした。
よくわからないけど、bunboとbunshiはlong型にすべきですね。
入力が5でもできなかったのは謎ですが…。
>>818
UNIX系だと、文字列定数は大抵書き込み不可能領域に置かれるからね。
で、それを書き換えようとすると OSから叩き落される。
>>819
これぐらいかな。
93326215443944152681699238856266700490715968264381621
46859296389521759999322991560894146397615651828625369
7920827223758251185210916864000000000000000000000000
>>823補足
このトリックを使った関数がstrtok()ってやつです。
特定の文字列をセパレータとして、そのセパレータ文字列を'\0'に変え、
毎回呼ぶごとに分割された文字列が返されてくる。
そのかわりオリジナルの文字列は破壊されるので、
必要なら同じものをコピーしておく。
っていうかstrtok()あんまり使わない(w
828デフォルトの名無しさん:02/08/31 01:35
答えからいうと
char *str = "ABC";
このように宣言されたstrで参照する文字列は「書き換えるな」
この文字列は「プログラムの一部」となっている場合もある
>>817でprinthogeBでもPIYOが出力されてるのはそれを示している
書きえるた場合の反応は不明(コンパイラが通ったとしても)
文字列を書き換えるようなことがある場合には
char str[] = "ABC";
と宣言しる
char str[4] = "hoge";
とすると、\0が付かない罠。
830フレッシャーズ:02/08/31 01:38
>>772                                      772・604ここを見れ
//分母の代入・分母の積
 bunbo[1] = bunbo1 = 1;
 for (i = 2; i <= ipt; i++){
  bunbo[i] = bunbo[i - 1] * i;
  bunbo1 *= bunbo[i];        ←この行で掛け合わせるのは駄目でしょ。
 }                    ここのアスタリスクは取りなさい。上の行で掛け算しているんだから。
元の処理だと二重の階乗にしているのかな?

iptが大きな数なら100,行く前に、intとかlongとか超えると思う。環境にも拠るのだろうけれど。
もう少し上限を小さくした方が良いと思う。
long m=1l,n=1l,ipt;/*m,iptはintでも可 nはどうだろ?*/
double sum_dt=0.0;
scanf("%ld",&ipt);
while(m<=ipt){
sum_dt += (1.0/n);
n*=(m+1);
m++;
//printf("<%ld,%ld>%lf\n",n,m,sum_dt);
}
printf("%lf",sum_dt);
じゃだめなの?
831通りすがりのもの:02/08/31 01:46
>>828
勉強になりました。ありがとうございます。
#include <stdio.h>
#include <string.h>
int main(void)
{
char *str = "PIYO";
strcpy(str, "HOGE");
printf("PIYO"); //PIYOと出力させたつもり
return 0;
}
こういうのもvc++の最適化されたビルドだど、HOGEが出力されちまう
833フレッシャーズ:02/08/31 02:12
>>830 追加(補足)
下の方のコメント行(//〜〜)一行を含めたプログラム10行は
ANS sum_dt
bunbo n (実際には階乗された値が順に入れられていく)
counter m
と対応付けると理解しやすいかな。
 1/1!+1/2!+1/3!+・・・+1/n!(=(自然対数の底−1)だよね?たしか)
の順、そのままに処理しているつもりだが・・・。

n*=(m+1);
m++;
のところは
m++;
n*=m;
でもいい
強引にすれば n*=++m; でも、出来るかな?
最後のプリントフォーマットに一応
lf(エルエフ)使ってね(double宣言だから)。
(元のプログラムに於いても)
さらに補足すると割り算(整数型どうし int/intなど)した時に、
勝手に小数点以下が切り捨てられませんでした?最初に1.0を
掛けるなどして回避するというのがあったようにも思います。
834795:02/08/31 02:12
>>827
>>828
俺も勉強になりました。
あのままだと、気づいてなかったです・・・。
よかった。今まで間違ってた事に気づいて・・・。
とりあえず洩れも書いてみた。
ウチのgccだと分母30!越えると桁あふれしてしまった。
そのへんは素のCなんで勘弁しとくれ。
っていうか配列使わず綺麗に書けたっぽい。
コンパイルしてコマンドに引数(数値)を渡すと動くYO

#include <stdio.h>
#include <string.h>
#include <ctype.h>
/* 階乗 */
long factoral(int fund)
{
long vfund = 1;
int i;
for (i = 0; i < fund; i++)
vfund *= (i + 1);
return vfund;
}
/* 引数が数値かどうか */
int isintstr(char *arg)
{
int i;
for (i = 0; i < strlen(arg); i++) {
if (! isdigit(arg[i]))
return 0;
}
return 1;
}
int main(argc, argv)
int argc;
char **argv;
{
long arg;
int i;
long double result = 0.0;
if (argc != 2)
goto WRONG;
if (! isintstr(argv[1]))
goto WRONG;

arg = atol (argv[1]);
for (i = 0; i < arg; i++) {
result += 1.0 / factoral (i + 1);
printf ("%d: %1.60Lf\n", i + 1, result);
}
return 0;
WRONG:
printf ("usage: %s fundamental\n", argv[0]);
return 0;
}
836604:02/08/31 02:32
>>830=>>833
>ここのアスタリスクは取りなさい。上の行で掛け算しているんだから。
bunbo[i]は各項の分母でbunbo1は通分した後の分母なんです。
だから掛け算して良いはずでは?
たとえば、1/2*1/3*1/4の場合、2*3*4で公倍数が出ますよね?
そういう考え方なんですけど、間違えてますか?
申し訳ないですけど、それ以外は明日読ませてもらいます。
眠くて頭働かないので…^^;;;
uuencodeとgzipが使えればこっちをどうぞ。

begin 644 factorial_fraction.c.gz
M'XL(",JK;ST``V9A8W1O<FEA;%]F<F%C=&EO;BYC`'62O6[",!#'9_(4!P@I
M"0B2#AT(=.U2M5*7#I3!S1>6@H,2!ZE"O$W4!89*W<O0J4/?HP_`U*EW=OCJ
M1P8KOOO[?S^?K\F%GQ1!"(-<!CSM3BZ,YE$HXR(^C?GR<192J&?#R_KU$^R>
MD:0BAHCY,LU88G(A(2I$8!D+`^A3Z3F%8`BNIX.DXAZ`WD5I!B;'M.,!AX$Z
MCW_MMF74H#IK#TG2!M>J++)0%IG06<]8$M'SUV9;KC?;MX]R5;Z73^6*^%2M
M'%>\D.E/6`8VR^(]GT;Y&P1/)*$P2:YY8$%$/`*SCIX!C[FD[(B/+<5Z3(8>
MZM/6RQ-JEXBI\I1QY>]W`->YI8*T]PR-2JQS[Z29&/%^LZM4D!8/28A5\B*1
M=(\N4E1:A"9CJ`_A3,'&J4SA[O;F^M([2.J'7E'ED5O=[%BLU9C&"DRF">RE
M_SXI,5<=K+I2@QUF&^>BZT!O/T2'ET;1#*=0(EBC%?2AY7;/G:OH7C0ZH#2=
MRF0W%:=M=C"JF/LZO/<J<A:':)>K66/34$B6*%=U$V?\8\H<>J]O?B21_RX#
"````
`
end
838604:02/08/31 02:39
ちなみに、出題者が書いたコード載せておきます。
これでできるのか…。
かなり凄いかも?よく意味がわからないし。^^;
でも、俺は俺のやり方で最後までやってみますけど。w
終わったら、これについても考えてみます。

#include<stdio.h>
#define N 100
main(){
 double a,c,d;
 double b=1;
 for(a=1;a<=N;a++)
 {
  d=1;
  for(c=1;c<=a;c++)
  {
   d=d*c;
  }
  b=b+1/d;
 }
 printf("e=%f/n",b);
 return 0;
}
>>838
こっちの方が明らかに、まともだ。
しかも可読性も高いから、説明されなくても意味がすぐわかる。
840835:02/08/31 02:50
洩れのは冗長な部分が多いが、職業病なので気にしないように。
>>838のってbの初期値って0じゃないかなあ。
1/1! + 1/2! + 1/3! ... てことは
1 + 0.5 + 0.166... だよなあ...
あとprintf文の\nが/nだし(w
842gakusei:02/08/31 03:29
>>840=835 こんなんで金もらってんだ、、、、
>835
階乗計算に再帰は使用しないのですか?
844835:02/08/31 03:44
ネタにマジレスかどうかはしらんが、
>>842
業務だともっと長いコード書くけど、
どっちかというとコード書きより仕様の見極めのほうがシンドイでつ。
>>843
再帰使うのはディレクトリ歩くときくらい。
同じ結果が返るなら単純なほうがいいのれす。
>>841
自然対数を求めるなら、初期値はb=1で良い。
\nのtypoは>>604の写し間違いでは?
846839:02/08/31 04:38
>>840
これは>>838>>772を比べたコメントです。
まぎらわしくてスマソ。
char *p = "abc";

の話題を蒸し返して悪いんだが、pの型って(char *)だよな。
んで、"abc"の型って(const char (*)[4])だよな。

なんでconstのつかないポインタ(p)に代入できるんだ?
つか、なんでコンパイラは警告を出さないんだ?

void func(char *p)
{
  /*  */
}

int main(void)
{
  char *p = "abc";              /*&n\
bsp;ここで出ない */
  const char *q = "abc";
  func(p);
  func(q); /* const.c:11: warning: passing arg 1 of `func' discards qua\
lifiers from pointer target type */
  return 0; /* 余計な警告を消すため */
}

これをgcc -Wall hoge.cってやったら、コメントのとおりの警告が出た。
そもそも、文字列リテラルをいじったら未定義の動作になるのであれば、
constではないポインタに代入しているところで警告を出すべきじゃないのかな。
その辺どうなってんだろ。
848847:02/08/31 04:45
ぎゃ、ターミナルからコピペしたら変な折り返しが入った(汗
>>847
なんでだろーね。
アドレス自体にはconstって概念がないのかも・・・。
その値がconst修飾子が付いているってだけで。
850デフォルトの名無しさん:02/08/31 05:07
malloc関数などで、後から確保したメモリに、
ファイルをオープンして、文字列を読み取り代入したら、
その文字列は、constになるのでしょうか?
851デフォルトの名無しさん:02/08/31 05:17
>>847
const char *q = "abc";

この場合のconstはqにかかっているのではなくて、"abc"にかかっている。
つまり、qはconst charである"abc"へのポインタとして宣言されている。
よって、

const char *q = "abc";
char  str[] = "def";

q = str;

はコンパイルエラーにはならなし、正常に動作する。
852851:02/08/31 05:24
ちなみに、

const char * const q = "abc";

というふうにすると、

q = str;

をコンパイルエラーにすることができる。
853847:02/08/31 05:29
>>851
>この場合のconstはqにかかっているのではなくて、"abc"にかかっている。
んん。そうなの?

いやまあ、qは対比のために出しただけ。問題はchar *p = "abc";の部分。
*p = 'x';とかやったら未定義動作になるんなら、constじゃないpに代入してる
ところで警告出してくれよなあ、ってのが主旨なんだ。

あ、ちなみに
*p = (const char *)"abc";
ってやったら
>hoge.c:8: warning: initialization discards qualifiers from pointer target type
って叱られました(w
"abc"はCではchar[4]
C++ではconst char[4]
でもbcc32ではCでもC++でもchar[4]
調べもしないで適当なことを書くな
>>850
なりません。

char *p = malloc(16);
fgets(p, 16, stdin);

みたいなことをやったときのpでしょ。
>>854
うむ。

あ。型間違ってたね。ごめん。一応調べてはみたのよ。
なんでそのC++みたいな型になってないのか、そこが疑問なんだ。
いやそれを聞くのはここじゃなくてISOのCの規格作ってるやつらに
聞けってことなんだろうけど(w
857デフォルトの名無しさん:02/08/31 05:40
それを言ったら1とか2とか'a'とかもconstじゃないか?

int i = 1;

とかにwarning出すか?
>>857
えーと、それはアドレスあります?
>>858
ん?アドレスあるとは?
メモリに乗れば、すべてにアドレスあるでしょ。
>>856
それはもちろん互換性のためだろう。
いまさら換えたらこれまでの莫大なソースに影響が出る。

>>857
それはrvalue
>>859
右辺値のアドレスは取れない。
実際問題多くの場合、即値で実装されるだろうし。
>>861
んん??
たとえば・・・

char *p = 'a';

これで、右辺値のアドレスじゃないの?
>>862
何か勘違いをしているようだが
int型とポインタ型は相互変換が可能だ
それはpを意味の無いアドレスに(ただし、恐らく多くの処理系で
そのビットパターンは(int)'a'と同じになる)
初期化しているだけだ。
864デフォルトの名無しさん:02/08/31 06:02
> 851
あんた全然勘違いしてるよ。
847は 非const→constへの代入のことを言っているのではない。
その逆のことを言っている。

const char q1[] = "abc";
const char *q2 = "abc";
char *p1 = q1;  /* コンパイラの警告 */
char *p2 = q2;  /* コンパイラの警告 */

俺の使っているコンパイラは警告を出してくれます。
(もちろんコンパイルエラーではない)

結論。847の
> んで、"abc"の型って(const char (*)[4])だよな。
この解釈が間違っている。
865デフォルトの名無しさん:02/08/31 06:23
>>847
constがつかないから初期化以外で代入できるんじゃないの(笑)
866865:02/08/31 06:26
それに、const char *だったらポインタ自体は書き換えられるよな。
char const *だとだめだけど。
>>866 const char* const な
868デフォルトの名無しさん:02/08/31 07:39
const char *p; ( ポインタが指すオブジェクト変更不可 )
char *const p; ( ポインタ変更不可 )
だろ。辞書にはこうのってるぞ。
ああそうかchar * constか。間違えたすまん。使うことないんで(^_^;)
870デフォルトの名無しさん:02/08/31 11:03
char *&p

最初なにかと思った
constなんてchar *にしか使わネーヨヽ(´ー`)ノ
それも仮引数のみで。
872フレッシャーズ:02/08/31 11:38
>>836
その一行前で既に掛け算しているので余計に掛け合わせてしまっており、
2,6,24・・・であろう値の変化が、
2,12(=2x6),288(=12x24)・・・になってしまっている。
printf("%d",bunbo1);
をすぐ下に入れて確認して見るとわかりやすいよ。

>>838
自然対数の底(のx乗)を求める、Maclaurin展開の公式を使ったもの。
exp(x)=1+x+(x^2)/2!+(x^3)/3!+・・・+(x^n)/n!
 補足:カッコ内(分子のx^n)は xの n乗、分母の n! はnの階乗を表す。
という式。
838のプログラムにはこの式の初項の1が入って
いるexp(1)を求める物になっており、
また、
838以外のプログラムは、(exp(1)-1)の計算を求める
プログラムとして書かれていた(初項を左辺に移動したもの)、
という違いだけ。
873デフォルトの名無しさん:02/08/31 11:58
A: const char *p ... p is pointer to read-only char
B: char * const p ... p is read-only pointer to char

と読むらしい
しかし、非常に紛らわしいことに、

char const *p ... p is pointer to read-only char

で、A と同じになる
ここにいるのは言語仕様もろくに知っていない初心者なのか?
それともC言語の言語仕様が複雑すぎるのか?
>>874
はいはい、自称識者はお呼びでないよ。
>>875
なにか気にさわったか?
>>876
何か気に障りました?
>>877
話にならんな。安心しろ。俺は自分が識者だと思ってないよ。
あらためて問い直そう。

ここにいるのは言語仕様もろくに知っていない初心者なのか?
それともC言語の言語仕様が複雑すぎるのか?
細かい言語仕様を気にするのはプログラミングの初心者に多いな。
>>879 間違い。
>>880間違い。
>const char *p
>char * const p

型を逆から読むといいよ。
const char *p なら、p から左のほうへ「* char const」と読む。
ここで * は pointer to と読み替えて「pointer to char const」
(char const は const char と読み替えてもOK)

char* const p も同様に「const * char」と読み * を pointer to
に替えて「const pointer to char」。
883デフォルトの名無しさん:02/08/31 12:37
質問を表示させるのに、
[ ]x + [ ]y = [ ]
見たいな感じで、[ ]のところをテキストボックスにして
入力させるようにしたいのですがどうすればいいでyそうか?
884デフォルトの名無しさん:02/08/31 12:43
>>883
環境くらい書けよ。>>878みたいな人間になっちまうぞ。
>>883
そのように。としか。
>>884
たとえがおかしいぞ〜。
>>886
>>878必死だな。
888デフォルトの名無しさん:02/08/31 12:45
マターリ推奨
889マターリ:02/08/31 12:47
ここにいるのは言語仕様もろくに知っていない初心者なのですか?
それともC言語の言語仕様が複雑すぎるのですか?
>>883
VBでもやってなさい(w
>>883
C言語でGUIなんて今更やるもんじゃない。
>>891
GTK+はCだが何か?
>>892
つぅか相手にするまでもないだろ。こんなもん。
>>892
だから今更やるもんじゃない。
fread()でデータ読んだとき
指定したサイズに届くまでにファイル終端に達したららどうなるん?

ファイル分割ソフトの真似事しようと思ったんだが最後の出力ファイルが
0バイトになって元のファイルの大きさより小さくなってしまうんだが
896デフォルトの名無しさん:02/08/31 14:03
>>895
freadの動きくらいはマニュアルに載ってると思うが?
Linux用で良ければ
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/fread.3.html

最後の出力ファイルが0バイトなのは、0バイトしか書き込んでないか
らで、なぜ0バイトしか書き込もうとしないのかは >>895にしかわか
らない。
>>895
第2引数と第3引数の指定を間違えてるっぽい。
>>896
レスどうも
bccつかってて詳細なマニュアルは無いっす。
とりあえずリンク先見てきます
899604:02/08/31 15:10
>>838のコードについて。
これは1/1!・1/2!・1/3!について、それぞれを小数に変換から足していく方法ですよね。
僕のやり方は分数で足し算して、それから小数に変える方法だから、答えは違ってきますよね。w
でも、僕のやり方ではlong使ってもオーバーフローしてしまうから、それぞれを小数に変えてから足すしかないのかなぁ…?

>>830
その人に出された問題が100まで出せるようにっていう問題だったので、上限を変えるのは無理っす…。^^;
しかも、教えてくれたコードがよくわからないです。
m=1lとか、scanf("%ldとか…、すいません。

>>833
>さらに補足すると割り算(整数型どうし int/intなど)した時に、
>勝手に小数点以下が切り捨てられませんでした?
分子の代入の所のint / intは答えが整数になることが決定してますから大丈夫です。
分子÷分母の部分はdouble型にキャストしてるから大丈夫ですし。
プリントフォーマットにlfを使うようにとのことですが、doubleの場合、%fでいいんじゃないんですか?
本にはその様に書いてあるんですが…。%lfは載ってないし…。^^;;;
900getオメ >オレ
次スレ立てる時は>>1の名前もちゃんとネタにしてくれよ。
902604:02/08/31 16:59
質問!
A〜Zを順番に書けっていう問題があったとすると、forの繰り返しとASCIIコードを使ってやれば簡単だと思うんですけど、具体的にどうやるんですか?

あと、C言語でBoolean型の変数ってないんですか?Boolean 変数名;でエラー出るし、本にも載ってません。
pascalからCの書き換えをネットで見ましたが、pascalのBoolean型の変数がCではint型になってました。
>>902
> forの繰り返しとASCIIコードを使ってやれば簡単だと思うんですけど、
そこまでわかってれば自分で何とかならんか?

> C言語でBoolean型の変数
最新のCの規格では_Bool型があるけど、
サポートしてるコンパイラは多くないので当面はint型で。
904デフォルトの名無しさん:02/08/31 17:05
>>902
>C言語でBoolean型の変数ってないんですか?

最近の規格ならあるよ。
>>902
>C言語でBoolean型の変数ってないんですか?

最近やっと規格ができたよ。
使えるコンパイラはほとんどないけど。
>>902
>C言語でBoolean型の変数ってないんですか?

昔は無かった。当面intにしとけ。
>>902
>C言語でBoolean型の変数ってないんですか?
最近の規格で取り入れといたよ。
908604:02/08/31 17:19
>>903
それが、できなかったんです…。^^;;;
#include <stdio.h>

void main(){
 int i, ascii;

 ascii = 65;
 for(i = 0; i < 25; i++){
  ascii++;
  printf("%s", ascii); //この辺がおかしいかと…。どうやって数値を文字にしていいものか…。
 }
}

>>903-906
ありがとうございます。
Booleanがないと、結構大変ですね…。^^;;;
int型でのやり方、じっくりやってみます。
909604:02/08/31 17:21
>>907
ISOの方ですか?w
>>908
itoaとかsprintfとか。

>>909
K&RのKです。
>printf("%s", ascii); 
ここがおかしい

printf("%c\n",ascii);

(改行文字はかならずしも入れる必要は無いが書く癖を付けておけ)
>>903-907 ワラタ
#include <stdio.h>

void main(int argc, char *argv[]){
 int i, ascii;

 ascii = 'A';
 for(i = 0; i < 25; i++){
  ascii++;
  printf("%c\t", ascii); 
  }
  return 0;
}
>>913
void main()でreturn 0;ってどういうことだと小一時間。
i < 26
916604:02/08/31 17:30
>>910-911
ありがとうございます。
itoa・sprintfも検索してこよう。

>>910
いってらっしゃい。コメントお願いします。w
http://pc3.2ch.net/test/read.cgi/tech/1020916685/
int main(int argc, char *argv[]){
>>913
ぜっとは
>>913
i <= 25
920604:02/08/31 17:32
>>908は間違え!
printfとascii++が逆です。^^;;;
#include <stdio.h>

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

 ascii = 'A';
 for(i = 0; i < 26; i++){
  printf("%c\t", ascii); 
  ascii++;
  }
  return 0;
}
初Cプログラム
#include <stdio.h>

int main() {
printf("%8s\n",".......U");
printf("%8s\n","....@...");
printf("%8s\n","##>##...");
}
>>902

/******* start *******/
#include<stdio.h>

const alph[] ="ABCDEFGHIJKLMNOPQRSTUVWXYZ"

main(){
 char *ascii;
 ascii = alph;

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

}
>>923
>const alph[] ="ABCDEFGHIJKLMNOPQRSTUVWXYZ"

char alph[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
でわ?
925604:02/08/31 17:45
>>923
ポインタはわかりませんのですよ…。

半角を全角にする関数ってありますか?
>>925
無い。
>>926
全角ってアスキーコード表に無いからcでは扱えないってことですか?
928604:02/08/31 17:49
>>927
おぉ、代弁者!萌え
>>927
CでASCII以外のコード使ったらダメなんて法律はないが。
アルファベット、大した数無いんだからテーブルでも書くよろし。
/******* start *******/
#include<stdio.h>

const char alph[] ="ABCDEFGHIJKLMNOPQRSTUVWXYZ"

main(){
 const char *ascii;
 ascii = alph;

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

}
>>927
Cはもともと全角のことなどなんも考えないで作られてるからです。
932デフォルトの名無しさん:02/08/31 17:57
>>604

変数asciiをループカウンタとして使っては?

for(ascii = 'A'; ascii <= 'Z'; ascii++) {
}

Booleanの件は、Cでは(新しい規格を除いて)
自分で型を定義するのが一般的。
http://www.catnet.ne.jp/kouno/c_faq/c9.html
933604:02/08/31 18:02
>>932
さっき気付いたんですけど、int変数 = "文字";にするとint変数にはASCIIコードの値が入るんですよね。
それでループするのが一番いいかも知れませんね。
ありがとうございます。
Booleanの件もどうもありがとう!
>int変数 = "文字";

やめとけ・・・。って言うかC基礎からやり直せ。
9351000:02/08/31 18:05
ファイルを他のフォルダにコピー、または移動させる関数ってありませんか?
>int変数 = "文字";

これが正しいと思うなら小学1年生からやりなおしましょ。
937デフォルトの名無しさん:02/08/31 18:09
【次スレテンプレ】


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

名前:ロートルしょーえい

漏れは54才、30年間プログラムを一生懸命作ってきた。
いろいろな言語を極めたが、一番手になじむのはCだった。
Cのことなら全てわかるから、疑問な点があったら漏れに聞け。
今なら平成デフレ記念3割引奉仕中だ。

スケジュールは真っ白だが、いちいちFAQに載った質問に応えるほど暇じゃない。
課題丸投げなら別スレにいけ。あと、至急仕事をください。


C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html

comp.lang.c FAQ(英語の原文)
http://www.eskimo.com/~scs/C-faq/top.html

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

推薦図書/必読書のためのスレッド PART4
http://pc.2ch.net/tech/kako/1022/10229/1022961238.html

前スレ <29> http://pc3.2ch.net/test/read.cgi/tech/1029605182/

コンパイラ、過去ログなどのリンクは>>2-5 あたり
938フレッシャーズ:02/08/31 18:13
>>899
(>>838>>830)
そこまでわかっていればをdouble(浮動小数点型)を使う
という選択肢しか残っていないのでは?
 l(エル)は切り捨ててかまいません。
(>>833)
その点についてはこちらが勘違いしておりました。すみません。

念のため
 (6/1+6/2+6/6)/6
という計算方法ですよね。
939604:02/08/31 18:16
>>934 >>936
そうでしたっけ?
>>913とかでも、int型に文字入れてますよ?
Javaの場合、文字+数値で数値になりますよね?
混乱…。
940デフォルトの名無しさん:02/08/31 18:17
>>939
「文字」と「文字列」は別物よん。
941604:02/08/31 18:19
>>940
文字…' '
文字列…"   "
ですよね?
942デフォルトの名無しさん:02/08/31 18:21
>>941
うん
943デフォルトの名無しさん:02/08/31 18:21
>>941
ウイ。>>934 >>936は"文字"←文字列に見えるが…。
>>941
で、

>int変数 = "文字";
945デフォルトの名無しさん:02/08/31 18:22
>>944
char *="文字";ならOKなんだけどね。
946945:02/08/31 18:23
変数名忘れた・・・
94710000:02/08/31 18:23
初心者ですが、教えてください・・。
ファイルをコピーするには自分でfscanfやfprintfで
関数を作らなければいけないんでしょうか?
画像ファイルやアプリケーションもそんな遅いやり方を
しなければいけないんでしょうか?
教えて下さい。!
948デフォルトの名無しさん:02/08/31 18:25
>>947
次スレ立てるまで待ってケロ。
949604:02/08/31 18:25
>>943
あ、ソーリー!タイプミスですぅ… ・゜・(ノД`)・゜・
>>947
ファイルをリード&バイナリモードで開いて一文字ずつ読みとりながら、ライト&バイナリモードで開いたストリームに書き出せばいいと思うけど。
>>947
ええ、そうです。
952フレッシャーズ:02/08/31 18:28
シングルコーテーションで囲まれたところに、
一文字だから代入できるはずですが(アスキーコード
のアドレスを代入しているのですよね?)。
違いましたか?「文字列」はもちろん無理ですけれどね。
int ascii='A';
OK!だと思います。
for(int ascii='A'; ascii<='Z'; ascii++)
はよさそうですね。わかりやすいですし。
しかし、このfor文を使った場合putc文は使えないな…。
>>952
それは・・・多分Cじゃできない(C99はしらん)。C++ならOKだけど。
95410000:02/08/31 18:29
お手数かけてすみません・・
やっぱりそうするしかないんですね、ありがとうございました。
また聞きたいことが合ったら書きこむと思いますので
そのときは、またよろしくお願いします。
955デフォルトの名無しさん:02/08/31 18:29
そんじゃ、次スレ立ててくるよ。
>putc文は使えないな
(  ´,_ゝ` ) プ
>>960さん、次スレよろしくね。
958957:02/08/31 18:31
スマソ。流れを読んでなかった。
959955:02/08/31 18:32
>>958
逝ってきていい?
960デフォルトの名無しさん:02/08/31 18:34
>>959
ふざけんな













さっさと逝け
961955:02/08/31 18:34
じゃあ、逝ってきます。
962shige:02/08/31 18:34
げっとおおおおお
963デフォルトの名無しさん:02/08/31 18:37
次スレはここへ

C言語なら、俺に聞け! <30>
http://pc3.2ch.net/test/read.cgi/tech/1030786546/l50
964フレッシャーズ:02/08/31 18:39
putcも使えますね。
何を勘違いしたのでしょう。
ちょっと恥ずかしい
965デフォルトの名無しさん:02/08/31 18:48
>>952
違うと思うよ。
文字定数だけど「文字」という概念にとらわれず、
単なるint型の数値と考えてね。

'A' は 65 と書いたのと同じ。
'Z' は 90 と書いたのと同じ。

だから
for(c = 'A'; c <= 'Z'; c++)

for(c = 65; c <= 90; c++)
と書いたのと同じ。

この数値を printf関数に文字コードとして
解釈してもらいたければ、書式指定文字を使って
そのように指定する。
もちろんputcにも使える。
ほとんど揚げ足だけど、
'A'から'Z'の文字コードが連続しているとは限らないから
for(c = 'A'; c <= 'Z'; c++)
というようなコードの動作はCの範囲ではどうなるかわからない。
>>966
そういう文字コードの例を挙げてからでないと説得力ないな。
>>967
EBCDICと言って欲しいのか?
969デフォルトの名無しさん:02/08/31 19:59
"omaemona"の型って
char配列(\0含めて要素数9)かな

sizeof("omaemona")
で9と出るし

printf("%c\n", "omaemona"[5]);
だとちゃんとoが出力される
次スレはここへ

C言語なら、俺に聞け! <30>
http://pc3.2ch.net/test/read.cgi/tech/1030786546/l50
971SITNAM:02/08/31 20:29
では私が1000をとります。
お前らは邪魔するなよ。
972SITNAM:02/08/31 20:32
main(){}
これが最小のCプログラム
わかったか?
正確には

#include<stdio.h>
void main(int arg,char *arg[])
{return 0;}
だよ
>>972
最小の構造体は?
974SITNAM:02/08/31 20:33
Cほど良い言語は無い
975SITNAM:02/08/31 20:34
>>973
   (V)∧_∧(V)
    ヽ(・ω・)ノ  フォッフォッフォッ
.     /  /
    ノ ̄ゝ


.          (V)∧_∧(V)
           ヽ(   )ノ  フォッフォッフォッフォッ
.           /  /
       .......... ノ ̄ゝ
>>972
プッ いきがっちゃって。

char main=-61;

x86ならこっちのが最小だな。
>>972
voi main ってお前…
今からブラウザを20個立ち上げといて、980超えたら
一気に「書き込む」ボタンをクリックし様〜>971
sage進行でね。
void main の return 0; って・・・やばくな〜〜い!!!
>>976
ちゃんとコンパイル&実行できるコードってのが味噌だよ
981SITNAM:02/08/31 20:39
漏れは1000取るぞ。
982SITNAM:02/08/31 20:39
絶対1000!
983SITNAM:02/08/31 20:39
1000まで頑張るぞ
984SITNAM:02/08/31 20:41
1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000
結局、最小のCプログラムは1バイトだった
986SITNAM:02/08/31 20:43
C言語さえ分かれば不可能は無い
987SITNAM:02/08/31 20:43
1000
Cハァハァw
989SITNAM:02/08/31 20:47
988
990SITNAM:02/08/31 20:47
901かな
991SITNAM:02/08/31 20:47
902だろう
992SITNAM:02/08/31 20:48
989だ!!!!!!!!!!!!!
993SITNAM:02/08/31 20:49
きゅうひゃくさん
1000を目指すヤシはアホ。

どうせなら2^10を目指せゴルァ
1024万歳!
996デフォルトの名無しさん:02/08/31 20:49
うわーーーーーーーーーーーー
1024最高!
C言語。
999デフォルトの名無しさん:02/08/31 20:50
1000
1000デフォルトの名無しさん:02/08/31 20:50
se
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。