トップページ⇒tech
1001コメント294KB

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

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさんNGNG
・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 あたり
0002デフォルトの名無しさんNGNG
【コンパイラ】
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と挙動が違いすぎるので動作の保証はできません。
まともな処理系を使いましょう。
0003デフォルトの名無しさんNGNG
27 http://pc3.2ch.net/test/read.cgi/tech/1027160374/
26 http://pc3.2ch.net/test/read.cgi/tech/1026048820/
25 http://pc.2ch.net/tech/kako/1024/10249/1024918442.html
24 http://pc.2ch.net/tech/kako/1024/10240/1024033400.html
23 http://pc.2ch.net/tech/kako/1023/10230/1023024817.html
22 http://pc.2ch.net/tech/kako/1022/10224/1022402165.html
21 http://pc.2ch.net/tech/kako/1022/10220/1022045622.html
20 http://pc.2ch.net/tech/kako/1021/10214/1021459016.html
19 http://pc.2ch.net/tech/kako/1021/10214/1021459016.html
18 http://pc.2ch.net/tech/kako/1020/10202/1020260813.html
17 http://pc.2ch.net/tech/kako/1019/10193/1019372139.html
16 http://pc.2ch.net/tech/kako/1018/10184/1018453690.html
15 http://pc.2ch.net/tech/kako/1018/10184/1018453690.html
14 http://pc.2ch.net/tech/kako/1015/10152/1015286974.html
13 http://pc.2ch.net/tech/kako/1015/10152/1015286974.html
12 http://pc.2ch.net/tech/kako/1012/10123/1012348974.html
11 http://pc.2ch.net/tech/kako/1009/10094/1009499565.html
10 http://pc.2ch.net/tech/kako/1009/10094/1009499565.html
9 http://pc.2ch.net/tech/kako/1007/10072/1007272267.html
8 http://pc.2ch.net/tech/kako/1007/10072/1007272267.html
7 http://pc.2ch.net/tech/kako/1003/10034/1003418249.html
6 http://pc.2ch.net/tech/kako/1003/10034/1003418249.html
0004デフォルトの名無しさんNGNG
すれ立て乙です。
ついでに補完。>>3は重複があったりして少しバグがありまふ。
1 http://piza.2ch.net/tech/kako/967/967985026.html
2 http://piza.2ch.net/tech/kako/979/979529893.html
3 http://piza.2ch.net/tech/kako/989/989929288.html
4 http://piza.2ch.net/tech/kako/992/992357382.html
5 http://piza2.2ch.net/tech/kako/994/994908590.html
6 http://piza2.2ch.net/tech/kako/999/999617524.html
0005デフォルトの名無しさんNGNG
もういいかい?
0006デフォルトの名無しさんNGNG

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

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

>15
無論、Cコンパイラ
0017デフォルトの名無しさんNGNG
新スレか…。
001815NGNG
>�O
どうやって手に入れるんですか
0019login:PenguinNGNG
>【注意】
>Cmachineは一般的なCと挙動が違いすぎるので動作の保証はできません。
>まともな処理系を使いましょう。
1にデカデカと(まぁタグ使えないから無理だが)書いておいた方が…(笑)。

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

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

画面に正しく出力されないのですがどこがいけないのですか?
BCCを使ってます。
0032 NGNG
>>31
ロケール?
0033デフォルトの名無しさんNGNG
>31
VC++でも失敗した。判らん。

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

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

WAIT(600)

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

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

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

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

0049デフォルトの名無しさんNGNG
???
0050デフォルトの名無しさんNGNG
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
0051名無しさん@カラアゲうまうまNGNG
>>48
読めません。
glibcはiostreamと融合してるのでできるかも知れんが、当然移植性はない。
0052名無しさん@カラアゲうまうまNGNG
>>50
お前、C++でコンパイルしてるだろ。
005342NGNG
自己レス、どっちでもよろしいようで
0054デフォルトの名無しさんNGNG
関数へのポインタって、皆さんは使いますか?
いつ、いかなる時に使うのかわかりません。
0055デフォルトの名無しさんNGNG
>>54
ぱっと思いついたのでは有限状態機械を書くときに使うかな。
0056デフォルトの名無しさんNGNG
>>55
ほうほう、ありがとう。つまり、通常のアプリを組む際には特に使わないと
言うことですよね?有限状態機械ってよくわからないけど、組み込みとか
だよね。
0057デフォルトの名無しさんNGNG
>>54
qsort使う時、bsearchを使う時、signalを使う時、atexitを使う時
0058デフォルトの名無しさんNGNG
>>56
組み込みチャウよ

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

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

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

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

関数ポインタによる多態は、Cでも例えばWindowsではウィンドウ関数でやってるね。
006550NGNG
すんません、もしかして漏れボケてますか?
0066名無しさん@カラアゲうまうまNGNG
>>63
> v2gnu\gcc31b.zip
C++がデフォルトになってるのかな。つーか配布ホストってどこだっけ。

gcc -lang-c sieve_c.c
だとどうなる?
006750NGNG
>>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
というエラーになりました。
さっきのよりわかりやすいエラーですね。リンクコマンドでのエラーかな??
006850NGNG
ちょっと手順を分割してみました。
>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'
0069デフォルトの名無しさんNGNG
cygwinをダウンロードしたんすけどgccが使えないっす。cygwinっていうものが
全然わからないので教えてください。
0070デフォルトの名無しさんNGNG
いやです。
0071デフォルトの名無しさんNGNG
>>68
よくわからないけど
SIEVE_C.CをSIEVE_C.cに変えてgcc SIEVE_C.cでやってみたら?
0072デフォルトの名無しさんNGNG
>>66
djgppって使ったことないんだけど、-lang-c だと ang-c という名前の
ライブラリをリンクしてしまうのでは?
>>67 のldのエラーがまさにそんな感じだし。

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

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

また何かありましたらよろしくお願いします!
0074デフォルトの名無しさんNGNG
.Cはc++の拡張子だからね
007550NGNG
>>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を設定するだけみたいです。
007650NGNG
>>74
そうなんすか??.cppだけだと思ってました・・・(゜□゜)
勉強になりました。ありがとです。
0077名無しさん@カラアゲうまうまNGNG
>>74
それを忘れてたよ。

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

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

cpp= &((char*)A) ;

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

実際にどう考えればよいかではなくて、C言語の厳密な文法ではどのように
解釈されてこのようなことが正当化されているのかってのが質問です。
わかる方いたらよろしくお願いします。
0082 NGNG
>>79
いまどきCさえも使えないヤシ。
0083 NGNG
>>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.
0084デフォルトの名無しさんNGNG
テンプレートって何ですか?
0085デフォルトの名無しさんNGNG
総受け
0086名無し募集中。。。NGNG
2chとかにコード書くときに&nbsp;でインデントしている人いるけど
いちいち自分で書くなりコピペするなりしてんのかね?
コピペでも結構めんどくさくない?
0087デフォルトの名無しさんNGNG
>>86
スペースを に置換すりゃ良いじゃん。
0088デフォルトの名無しさんNGNG
>>86
navi2ch、chaliceなどを使う。
008986NGNG
>>87
置換だと元のコードでやることになると思うけど
保存しないで開きなおせばいいことだけど、コード汚れてなんか嫌だ

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

0090デフォルトの名無しさんNGNG
いい加減板のスクリプト変えて<code>で囲めばいいのに
0091デフォルトの名無しさんNGNG
>>80
まつもと尊師の教えを侮辱する事はゆるさん。
0092デフォルトの名無しさんNGNG
性夏3いぽrhtgrthgrthごいrRRRうbybっっyるいいryぎryびyりびゅryぶいryびryびryびr!”
Ruby!!
009381NGNG
>>83

ありがとう。
(左辺値)←(*演算子)(右辺値)
ってことなんですね。
0094夏厨NGNG
連立方程式の解を求める電卓プログラムを作りたいのですが
どのようにしたらいいでしょう?
0095デフォルトの名無しさんNGNG
use for loop to to make like this:
a
aba
abcba
abcdcda
abcdedcba
0096デフォルトの名無しさんNGNG
>94
連立一次?だったら、ガウスの消去法がいいよ
0097デフォルトの名無しさんNGNG
>>94
電卓?
0098 NGNG
>>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]);
}
0099デフォルトの名無しさんNGNG
>>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);}
0100デフォルトの名無しさんNGNG
>>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;
}
0101夏厨NGNG
>>96
ありがとうございます。
ちょっとやってみます、
>>97
電卓プログラムです。
0102デフォルトの名無しさんNGNG
const char* const array
と
const char array[]
は同じなのでしょうか?
0103デフォルトの名無しさんNGNG
>>102
違うよ。
http://www.catnet.ne.jp/kouno/c_faq/c6.html
0104げNGNG
新スレたってた。。。(´・ω・`)

UNIX Cで、分割コンパイルのやり方を教えてください
おながいします
0105名無しさん@カラアゲうまうまNGNG
>>104
前スレのほうに回答されてる。
0106デフォルトの名無しさんNGNG
$ 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

0107104NGNG
キタ━━(゚∀゚)━━(∀゚ )━━(゚ )━━( )━━( ´)━━( ´Д)━━(´Д`)━━?????

ありがとうございまふ
0108夏厨NGNG
ガウスの消去法難しい・・・
ほかに連立方程式を計算させるやりかたってないでしょうか?
0109デフォルトの名無しさんNGNG
>>108
逆行列を使うとか、、、
0110デフォルトの名無しさんNGNG
>>108
共役勾配法とか
0111デフォルトの名無しさんNGNG
ガウスの消去法が一番簡単だと思うが.
0112デフォルトの名無しさんNGNG
Cを用いて画像を扱ったプログラムを作成したいのですが、BMP形式のファイルって
テキストファイルで開くことできないですかね?
大学の講義のときUNIXでPGM形式の画像ファイルをテキストエディタで開くと
画素成分がちゃんと表示されたのですが、BMP形式のファイルをメモ帳で開くと
文字化けしてしまうんですよ
0113デフォルトの名無しさんNGNG
>112
ネタ?
0114夏厨NGNG
>>111
あの連立方程式の入力の意味がよくわからないんです
0115112NGNG
いえ大マジです
0116名無しさん@カラアゲうまうまNGNG
>>112
おとなしくPNM使え。
0117デフォルトの名無しさんNGNG
>>114
あのね、>>109や>>110の方法よりもガウスの消去法のほうがはるかに簡単だと思うよ。
連立方程式と線形代数はやっておいた方が良い。てか高校レベルじゃねーか(゚Д゚)ゴルァ
0118デフォルトの名無しさんNGNG
お兄さんはxpmでもいいと思うぞ。
0119112NGNG
どうしてもBMPがいいのですよ
0120デフォルトの名無しさんNGNG
>>112
これでも使ってる!
http://www.text2music.com/hima/doc/hajimete/draw.htm
0121デフォルトの名無しさんNGNG
>>112
単にファイルの中身が見たいのなら、16進ダンプでもすればいいだけではないの?
0122夏厨NGNG
>>117
すいません、リア厨なんです。
夏休みの数学の自由研究をこれにしてしまおうと思ったのですが・・・
0123112NGNG
>>121
16進ダンプで検索した結果、ファイルの中身を16進法で表示してくれるソフトを
見つけることができました。ありがとうございます!
0124デフォルトの名無しさんNGNG
アルゴリズムは引っ掛ければいっぱい出てくるでしょ?
コードの落とし方の例はいっぱいあるからどれがいいって言えないけど
おじさん年だからもう覚えてなくてね、悪いね力になれなくて
まず、関数をどっかから仕入れて、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] の内訳はと...
あとは任せるよ、若いお兄さん
0125デフォルトの名無しさんNGNG
>>122
連立方程式をC言語として扱う以前に、数学的にちゃんと扱えるようでないと本末転倒。
時間はたっぷりあるから、がんばれ。
0126デフォルトの名無しさんNGNG
>>122
数値の組み合わせ全部調べるのが一番簡単
0127デフォルトの名無しさんNGNG
>>122がホントにリア厨なら、行列の説明からしないと理解できないと思われ
0128 NGNG
>>122はおとなしく昆虫採集でもしろと以下略
0129デフォルトの名無しさんNGNG
リア厨のときは、意味もわからずsin,cosの高速演算のために、
マクローリン展開された式を使ってたよ。
OldなPC-9801やMSXなのになかなか速いと評判でした(謎
0130デフォルトの名無しさんNGNG
>>128
お前もBug取りしてもらえ
0131デフォルトの名無しさんNGNG
>>130
猫蚤がすごいです。うわー
0132デフォルトの名無しさんNGNG
と言うか、ググったらガウスの消去法をつかったサンプルコードが
出てきたんだけど…。
0133デフォルトの名無しさんNGNG
gccで 独自拡張したヘッダを読み込もうとしてるんですがうまくいきません

gcc -l ./ moe.c

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

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

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

>135

試してみます
0137134NGNG
>>136
それなら#include "...h"だろ。本読め。
0138デフォルトの名無しさんNGNG
int main(int argc, char* argv[])

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

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

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

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

>>138
万一上書きされるとしたら、main関数内でさえ
(別の関数を呼んだ後の)安全性が保証されなく
なってしまうと思いますが。
0142デフォルトの名無しさんNGNG
>141
逆に、空文があったら何か悪いことあるの?と聞きたい
0143C初心者NGNG
グラフを書かせるにはどうしたら言いのでしょうか?
折れ線グラフです
0144デフォルトの名無しさんNGNG
>>143
どこに何を使って書くの?
0145C初心者NGNG
#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点の座標をいれると平面座標上にでてくるようにしたいのですが。
0146デフォルトの名無しさんNGNG
>>145
>>144は?
0147デフォルトの名無しさんNGNG
graphic.hなんだからturbo c(ms-dos)とかだろ
0148デフォルトの名無しさんNGNG
質問です。
intってどう読むのですか。
0149デフォルトの名無しさんNGNG
インターナショナル
0150デフォルトの名無しさんNGNG
>>148
http://www.cjn.or.jp/docs/dic/unix-term-dic.html
0151デフォルトの名無しさんNGNG
FFT(高速フーリエ変換)は、実数と虚数を入力して実数と虚数を出力しますよね。
実数しか無いときは、虚数部にゼロを詰めてやればいいと本でみたのですが、
そのときは、ゼロを詰めるだけで、そのまま普通のFFTのプログラムを使えるのでしょうか?
0152151NGNG
ちなみにプログラムは、SPTKと言うパッケージにあるFFTを使用しています。
0153デフォルトの名無しさんNGNG
音声とか画像とか虚数部のないものは当然虚数部に0を設定するが、何が問題なんだい?
実数部と虚数部の意味がわかっているかい?FFTの忌みがわかっているかい?
0154デフォルトの名無しさんNGNG
たとえば
typedef long long MYLONG64
などとtypedefした時に、MYLONG64が既に定義されてる場合は、
undefしてから、
ここで再定義したいのですが、#if defined(MYLONG64) などと
やって typedef されているかどうかを判断しても良いものでしょうか?

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

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

わざわざ付けているのはきっと何かの理由があっての
ことだと思うのです。
もしもわかる人がいたら教えてください。
0162名無しさん@カラアゲうまうまNGNG
その後の文を削除する可能性があると思ったということでは。
0163デフォルトの名無しさんNGNG
ラベルにセミコロンを付けとけばラベルが
(コードの修正で)どこに行っても安心だろ
0164 NGNG
>>163
とか言ってると、
if (expression)
 statement;
を
if (expression)
label:;
 statement;
にしてしまう罠。
0165デフォルトの名無しさんNGNG
そんなことBASICでもやらない
0166デフォルトの名無しさんNGNG
そもそもgoto使ったコトがない
0167デフォルトの名無しさんNGNG
#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] という文字列がでるように
したいのですが、どうしたら良いでしょう?
0168デフォルトの名無しさんNGNG

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);
}
0169167NGNG

正常終了してるんだからreturn(0)の方がいいとおもう。
0170デフォルトの名無しさんNGNG
おお!完璧です。
ありがとうございました。
0171デフォルトの名無しさんNGNG
縮めてみた。
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' */
0172デフォルトの名無しさんNGNG
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)になおせばいいんでしょうか?
なぜそうなのかも教えください
0173141NGNG
>>162,163
なるほど。そういうことでしたか。
(162さんのは163さんの事象に含まれますね)

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

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

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

「問い合わせによる一時変数の置き換え」というリファクタリングを適用しました。
0175デフォルトの名無しさんNGNG
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)になおせばいいんでしょうか?
なぜそうなのかも教えください
0176デフォルトの名無しさんNGNG
さらに圧縮(w
int main() {
 char *s=getpwuid(1002)->pw_gecos;
 puts(*s?s:"[empty GECOS]");
 return 0;
}
0177デフォルトの名無しさんNGNG
>>175
割り算というものを教わったばかりの小学3年生に
「14÷4はいくつ?」ときいたら
どう答えるでしょうか。それがヒント。
0178デフォルトの名無しさんNGNG
>>174
リファクタリングというのは、パフォーマンスを落としつつ、
新しいバグを埋め込むという意味ですか?
0179デフォルトの名無しさんNGNG
char a; の a が 1.5 を表すことができるだろうか?
いや、(略)
0180デフォルトの名無しさんNGNG
>>179
100掛けてるんだから、aに入るのは150だろ。
もっとも、150も入らないが。
0181 NGNG
a=100でしたが
0182デフォルトの名無しさんNGNG
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);になってると思うんですよ
どうすればいいでしょうか?
0183デフォルトの名無しさんNGNG
a=d*(b+c)/100;
にしとけ
0184デフォルトの名無しさんNGNG
100で割るんじゃなくて、0.01を掛けてみたらどうかな?
0185デフォルトの名無しさんNGNG
>>183
うまくいく考えだと思ったのですが
a=-106

>>184
a=-106
0186183NGNG
signed charかよ!!
0187183NGNG
それであってるぞ
0188デフォルトの名無しさんNGNG
>>186
unsigenedにしたら,ちゃんといきました
ご迷惑かけました
1時間これのことで悩んでしまったので,終電がありません
罰として,今からカップラーメン買ってきます
0189デフォルトの名無しさんNGNG
>>182
あのさ、、、整数と実数についてちょっと勉強してきて・・・・
0190デフォルトの名無しさんNGNG
>>189
勉強しようにも検索キーワードが思いつかん
0191デフォルトの名無しさんNGNG
終電が・・・ということはこの人職業プログラマなのか(T-T)
0192デフォルトの名無しさんNGNG
/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 のとある行に指定されている
メンバの数が幾つか?というのはどうやって知ればよいのでしょうか?
0193日本兵NGNG
>>190
普通の本に書いてあるよ。
0194日本兵NGNG
>>192
わけわからんよ…
0195デフォルトの名無しさんNGNG
>>190
イ ン タ ー ネ ッ ト 上 で し か 勉 強 で き な い の か ?
0196デフォルトの名無しさんNGNG
照れる
0197デフォルトの名無しさんNGNG
>>192
for (count = 0; g->gr_mem[count]; count++)
 ;
0198デフォルトの名無しさんNGNG
>> 197
完璧です!!どうもありがとうございました。
思ったのですが、この方法を使えば main 関数には argv だけ
あればよい気がしますね。
0199名無しさん@カラアゲうまうまNGNG
めんどくさいじゃん。
0200デフォルトの名無しさんNGNG
>>191
漏れ大学生だけどしょっちゅうだよ。
0201デフォルトの名無しさんNGNG
>>191
職業プログラマは終電を気にしません。
0202haruNGNG
質問があります。
タイピングゲームなんかで、タイプするキーを指定する際、そのキーを光らせるプログラムをC言語で組みたいのですが、
どうすればよいでしょうか。
0203デフォルトの名無しさんNGNG
>>202
とりあえずキーボードに発光ダイオードを仕込む方法を考えましょう。
0204デフォルトの名無しさんNGNG
>202
ゲームオーバーのときはExitWindows()とか呼ぶとイイよ!
0205デフォルトの名無しさんNGNG
C言語にも検定はあるんですか?
0206デフォルトの名無しさんNGNG
>>202
ネタですか?
ネタでないのなら、OSやコンパイラ名などのプログラミング環境を書くこと。
0207デフォルトの名無しさんNGNG
>>205
C言語プログラミング能力認定試験っていうのがある。知名度はどうなんだか・・・
ttp://www.sikaku.gr.jp/nj/index4.html

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

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

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

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

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

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

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

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

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

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

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

staticにリンクしている場合もlddで調べられるのですか?
0221デフォルトの名無しさんNGNG
パソコン検定のC言語の問題に必ず<iostream.h>が組み込まれて
いるのだが何故だろう。
0222デフォルトの名無しさんNGNG
>>220
> staticにリンクしている場合もlddで調べられるのですか?
chatrは使える?
0223217NGNG
>>222
> chatrは使える?

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

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

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

>232 マジだ・・・まぁいいけど
0234デフォルトの名無しさんNGNG
設定が正しければ
bcc32 myname.c
0235デフォルトの名無しさんNGNG
C言語でPWM制御をしてモータを動かしたいのですが
参考になるHPやサンプルプログラム等教えて頂けませんか?
私の探し方が悪いようで参考になるHP等が見つからなくて困ってます。
どうかよろしくお願いします。
0236デフォルトの名無しさんNGNG
bcc32ならmain関数に戻り値が必要だと言ってきそう。
0237デフォルトの名無しさんNGNG
>>235
http://www.google.co.jp/search?hl=ja&lr=lang_ja&q=PWM%90%A7%8C%E4+%83%82%81%5B%83%5E%81%5B+C%8C%BE%8C%EA
組み込みばかりひっかかるけど当然か
0238超初心者NGNG
すみません。本当に初心者で馬鹿な質問してすみません。
もしお手すきの方がございましたら、何卒ご指導の程お願いします。

#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だとうまくいかないのでしょうか?
0239デフォルトの名無しさんNGNG
>>238
いや。うまくいくぞ。
何がどううまくいかないか書かないとわからん。
我々はエスパーではない(;´д⊂)
0240デフォルトの名無しさんNGNG
>>239
フリーズしてしまいます。

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

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

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

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

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

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

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

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

Windows 系 OS では ctrl+Z が入力の終了になっているので注意。
0251デフォルトの名無しさんNGNG
えっと


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

だめ?(;´∀`)
0252デフォルトの名無しさんNGNG
>>251
その顔文字が駄目
0253  NGNG
え?
( ´,_ゝ`)        これならいい?
0254デフォルトの名無しさんNGNG
なんで関数ごとにファイルをつくるんですか?(;´д⊂)
0255デフォルトの名無しさんNGNG
>>254
だ、だれがそんなことを
0256 NGNG
>>254
ライブラリにする時はそのほうが以下略
0257241NGNG
>>251
そのソースを理解して、変数とかをちょい変えて
打ち込んだだけですけど・・・
エラーも警告もなにもないのに勝手にフリーズします・・・
余計わかんなくなっちゃったよ(ノ ̄皿 ̄)ノ
0258デフォルトの名無しさんNGNG
>>257
&は?
0259241NGNG
つけてますー。
けど
if(scanf("%s",a) == EOF){
exit(1);  ← ここのexit
}
に、それは定義つけられていませんってでたので
そこの部分をbreak;にしました。
いけなかったかな?
0260デフォルトの名無しさんNGNG
ごめん
#include<stdlib.h>
で定義して
0261デフォルトの名無しさんNGNG
>>259
breakはループやswitchから抜ける時のものだぞ。
関数から戻るならreturn、プログラムを終了するならexit()(要stdlib.h)。
0262241NGNG
あ、なるほど〜。
ヘルプいろいろみてそこらへんは理解しました
教えてもらったのソースをはずすと無限ループなんですが、
入れると最初からフリーズしてしまいます・・・
俺の解釈がおかしいと思うので一晩考えてみます
ありがとうございました!
0263デフォルトの名無しさんNGNG
標準関数の文字の扱いはなんで int 型なんですか?
0264デフォルトの名無しさんNGNG
>>263
getcharなんかでEOFを渡せるようにするため。
……とは思うんだけどもうちょっと深い理由がありそうな気もする。
そんな気がするだけ。
0265デフォルトの名無しさんNGNG
>>263
intがいーんと。
0266デフォルトの名無しさんNGNG
>263
getcharの返す値は 文字256種+EOF の257種類だけど
charで表せるのは256種類なのでcharでは足りないから、だったと思う。
0267デフォルトの名無しさんNGNG
なんでショートじゃないんだろうね。
intが8bitの環境だったらどうなるんだろ。
マイッチング
0268デフォルトの名無しさんNGNG
intは
少なくとも-32767から32767までの値をとりうる
と規定されていたような気がするから大丈夫。
0269デフォルトの名無しさんNGNG
>>266
>文字256種
じゃああらゆる2バイト文字は1セット辺り65536文字は確実に持てるのかい?
0270デフォルトの名無しさんNGNG
>>269
意味がわからん。Cの前に日本語勉強しろ。
0271デフォルトの名無しさんNGNG
sizeof(int)*CHAR_BITが必ずしもint型のビット数と同じになるとは限らないと聞いたのですが、本当ですか?
0272デフォルトの名無しさんNGNG
>>271
CHAR_BITが9の処理系もあるという話はよく聞く。
CHAR_BITが9なのにintのビット数が32とかだったりすると同じにはならない。
俺は見たことないけど。
0273デフォルトの名無しさんNGNG
C++とCはどう違いますか。
0274 NGNG
C     ←ただの変数
C++  ←インクリメント
0275デフォルトの名無しさんNGNG
C     ←1文字
C++  ←3文字
0276デフャHルトの名無しbウんNGNG
C         ←発射前
C++      ←発射!!
0277デフォルトの名無しさんNGNG
C++ ←食前
  C ←食後
0278デフォルトの名無しさんNGNG
>>277
ムゥ(・д・)

c++ オス
c    メス
0279デフォルトの名無しさんNGNG
C++ ←カギを
  C ←差し込む
0280デフォルトの名無しさんNGNG
C     ←親
C++  ←子
0281立地ーNGNG
てめーら俺のスレを荒らすなよ。
0282RubyistNGNG
C++ <<<<<<<<<<<<<<<<<< Ruby
C <<<<<<< Ruby
0283デフォルトの名無しさんNGNG
いや、Rubyはダメダメ。言語としては素晴らしいかもしれんが、厨が多すぎる。
0284デフォルトの名無しさんNGNG
俺言語>>>>>>>>>>>>>>>>c、c++
0285RubyNGNG

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

.
0286RubyistNGNG
こうr
                   るby以外の言語化hくそ

.
0287Rbuy8yfd9NGNG
Rubyのためなら人殺しでもなんでもする。
0288RubyNGNG
じゃあ、裸になれ
0289デフォルトの名無しさんNGNG
>>283
今では言語も腐ってるよ
0290デフォルトの名無しさんNGNG
Ruby叩きうざいね。
おメラミンなしね!
0291デフォルトの名無しさんNGNG
Ruby >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *
0292デフォルトの名無しさんNGNG
漏れの使ってるインテル C++ コンパイラが載っていないのはなぜ?
ヘルプが日本語化されてて、結構入りやすいとおもうんだけど。
タダじゃないからか・・・?

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

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

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

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

だからコメントアウトできるってわけ。
0300デフォルトの名無しさんNGNG
もしかして「コメント」という単語がわからないとか?
0301デフォルトの名無しさんNGNG
>>299
なるほど、そういう意味でしたか。

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

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

アクセス違反
0304295NGNG
なかなか面白かったです>>298,>>301
0305デフォルトの名無しさんNGNG
#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コンパイラ試食版です。
0306デフォルトの名無しさんNGNG
>>305
書き換えちゃいけません。以上。
0307304NGNG
>>306
書き換えちゃいけないっていうのは2つめの strcpy のことですか。
1つめは予想通りのコピーがされているのですが、
2つめはなぜか test1 に " string" っていう文字列しか入りません。
3つめ、4つめの strcpy との違いはなんですか?
0308305NGNG
あ、304 ではなく 305 でした。
0309デフォルトの名無しさんNGNG
おいおまいら! コンパイラDLしたのはいいけど、どうやって使うのかわからないのです。(ノД`) 教えてください
0310デフォルトの名無しさんNGNG
>>309
死んでろ。
0311デフォルトの名無しさんNGNG
みんな普通に解かるのか? オレはさっぱりわからんよ。
0312デフォルトの名無しさんNGNG
bcc for winでやているんだけど、

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

仕様ではvoidを入れないとダメなんですか?
0313  NGNG
voidってどんな意味ですか?
なんか理解が曖昧なもので、、、
0314デフォルトの名無しさんNGNG
>>311
わからんだろうな。お前の持ってるコンパイラ知らないし。

プログラムの前に文章での意思疎通の方法を勉強しろ。
つまり国語からやり直せ。
0315デフォルトの名無しさんNGNG
>>309
コンパイラは何?

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

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

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

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

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

int boke = 0

#if boke
 :
#endif

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

変数をできるのは(×)
変数を解釈できるのは(○)
0325323NGNG
>>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を置換したものをコンパイルすることになる。
0326デフォルトの名無しさんNGNG
プリプロセッサの説明くらい本よめよ。
と言いたい。
0327デフォルトの名無しさんNGNG
というか、K&Rくらい読めよ
0328295NGNG
>>325
よ〜くわかりました。ありがとうございました。
>>326
プリプロセッサの意味は知っているんですが、細かいところはあまり知らなかったです。カーにはんアンドりっちーのプログラミング言語C参照してます。
0329デフォルトの名無しさんNGNG
>>328
あぁ、あの糞本か。
0330デフォルトの名無しさんNGNG
fseekの使い方、使い道がいまいち理解できましぇん!
0331デフォルトの名無しさんNGNG
>>330
じゃあ使わんで良いだろ。
0332デフォルトの名無しさんNGNG
fseek()なんて研修時代しか使ったことがない。
0333305NGNG
>>322
理解できました。
ということは
strcpy( test1, "long string" );
すら間違った使いかたということですね。
0334デフォルトの名無しさんNGNG
ちょっとすいません。「xにxのn乗を代入する」って
C言語ではどう記述するんですか?
0335デフォルトの名無しさんNGNG
>>332
一体どんなプログラム書いているんだ?
0336デフォルトの名無しさんNGNG
>>333
test1が配列ならOK

>>334
pow()を使って(要、math.h)
0337334NGNG
>>336
関数を使うんですか。n乗を表す演算子はないんですね。
ありがとうございました。
0338デフォルトの名無しさんNGNG
/* malloc()についてなのですが */

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

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

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

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

#pragma setlocale()

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

#pragma setlocle("jpn")

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

TurboC(PC-98)の方にハード依存の関数があるようなので(確認しました)
今度はそっちをあたってみます。
0382デフォルトの名無しさんNGNG
>>379
使わない。autoも同じ。
0383374NGNG
>>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 ;
}


…こんな使い道しかないのか!!!
0384374NGNG
>>382
使わないんですか…。数学記号との整合性を合わせるためにあるのですかね。

色々ありがとうございました>皆様。
0385デフォルトの名無しさんNGNG
>>374
まずつかわないけど、代数勉強したらすこしは存在意義がわかるかもね。
0386デフォルトの名無しさんNGNG
>>385
それは数学の話。C言語とは関係ない。
0387デフォルトの名無しさんNGNG
>>386きみ代数しらないでしょ?
0388デフォルトの名無しさんNGNG
int main()から抜けるとき
return 0;
と
return 1;
とで動作変わる環境ってあるんですか?
手元のWindowsでは同じなんですが・・・
0389デフォルトの名無しさんNGNG
>>387
知らないけど、少なくともC言語とは関係ない。
0390 NGNG
>>388
ない。
0391デフォルトの名無しさんNGNG
おまえら%ERRORLEVEL%を知らんのか?
0392デフォルトの名無しさんNGNG
>>391
しってますが、なにか?
0393デフォルトの名無しさんNGNG
>>388
シェルスクリプトなんかで戻り値を参照する事はあるな。
0394デフォルトの名無しさんNGNG
ははぁ〜ナルホド。調べてみて分かりました。サンクスです。
条件分岐するbatファイルなんてDOS3.3をメインに使ってたとき以来書いてないです。
こんなのあったんですね。
0395デフォルトの名無しさんNGNG
スレ違いですみません。
WriteFileってバイナリで書きこむんでしたっけ?
fopen関数の方で出力するテキストは,なに形式で書きこむんでしょうか?
0396デフォルトの名無しさんNGNG
>>395
fopenは自分で形式を指定するんでしょ?
0397デフォルトの名無しさんNGNG
>395
関数名までわかってるならゴーグル逝ってくれー。
0398395NGNG
>>397
ゴーグルって何だよ(ププ
お前が逝けよw
ほんと、頭が悪い奴って嫌だね。
0399デフォルトの名無しさんNGNG
      タタタタタタタタタタタタ・・・・
  ___
  /_____`¢         △
  (_/ ゚д゚) .;y=-      (゚д゚ ) ・∴・∴・∴
  (_| \/         (  .) >>395
   ( ̄ノ            )ノ
0400デフォルトの名無しさんNGNG
>>398
知ったか 恥ずかしい(w
0401395NGNG
>>398
偽
言葉使いが違いすぎる
0402デフォルトの名無しさんNGNG
>>400
お前、頭悪いな。
0403デフォルトの名無しさんNGNG
言葉遣いならしょっちゅう変えているけど・・・・
2chではごく当たり前。
0404デフォルトの名無しさんNGNG
ゴーグルファイブ

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

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

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

だった(はず)なので、揚げ足とっているやつは夏厨。
# 蒸し返しスマソ
0408デフォルトの名無しさんNGNG
>>407
http://www.google.co.jp/search?q=cache:QFTaZM24KyAC:members.jcom.home.ne.jp/maochan/link/link.htm+%E3%82%B0%E3%83%BC%E3%82%B0%E3%83%AB%E3%81%A8%E3%81%AF&hl=ja&ie=UTF-8
http://members.jcom.home.ne.jp/maochan/link/link.htm
0409デフォルトの名無しさんNGNG
>>408
二度ワラタ
0410デフォルトの名無しさんNGNG
C言語で識別子に_で始まるものは使ってはいけないって聞いたのですが本当ですか?
0411デフォルトの名無しさんNGNG
>>410そうでもないですよ
私なんて普通に使ってます
0412デフォルトの名無しさんNGNG
>>408
>ゴーグルです
>決してグーグルとは読まないように
が
>グーグルです
>それにしてもゴーグルなんて言ったの誰よ(笑)
に訂正されていてワラタ
0413デフォルトの名無しさんNGNG
>>411
なるほど。でも__二つだとコンパイラが使うとか聞いたような。
0414デフォルトの名無しさんNGNG
>>410
ライブラリの中で結構使ってるしな。
名前の衝突が起こるような気がしたら使うのを止めよう。
0415デフォルトの名無しさんNGNG
あやふやな記憶で書くので最初に謝っておく。

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

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

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

>>417
え?
0424デフォルトの名無しさんNGNG
どっかのスレで読んだが、

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

だと結論付けていたね。
0425395NGNG
>>424
激しくスレ違い。
そういう話は適切なスレでやるように。
0426デフォルトの名無しさんNGNG
違うんだ
googleは
ジョージなんだ。


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

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

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

int i;

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

こういうことでしょ?
0449デフォルトの名無しさんNGNG
>>446 人も見るコードだから。
0450デフォルトの名無しさんNGNG
>>446
ひとつの関数で、そんなに数えるものがあるのかと小一時間・・・。
0451デフォルトの名無しさんNGNG
>>448 i にすれば見逃してくれるかも;
0452デフォルトの名無しさんNGNG
>>446
一般的には使いまわしてはいけないと言われている。
0453デフォルトの名無しさんNGNG
C++なんかだとスコープがfor内に限られる変数を使うんだっけ?
0454デフォルトの名無しさんNGNG
>>453
for(int i=0;i<10;i++);みたいにね。C99ではどうなのかな
0455デフォルトの名無しさんNGNG
>>454
使えるようになったみたい。
ttp://seclan.dll.jp/c99d/c99d07.htm#dt19990927
0456446NGNG
そうなんですか・・・・・ これからは上司の言うことを聞くことにします。
この時間でも人がいっぱいいてくれて嬉しかったです。 どうもありがとうございました。
0457デフォルトの名無しさんNGNG
簡単な質問なんで食いつきがいいな・・・・ボソ
0458デフォルトの名無しさんNGNG
既出だったらごめんなさい。
構造体メンバは、メモリ上に連続して配置されているって本当なんでしょうか?
それが、int と char とかでも。。。
0459デフォルトの名無しさんNGNG
>>458
すきまが出来ることもある
0460デフォルトの名無しさんNGNG
>>458
コンパイラによる。また、オプションで制御できる。
0461 NGNG
構造体 アラインメント
で調べるよろし。
総合的な質問スレで29もあれば、既出であることも
致し方ないかと。
0462デフォルトの名無しさんNGNG
C言語でPWM制御をしてモータを動かしたいのですが
参考になるHPやサンプルプログラム等教えて頂けませんか?
私の探し方が悪いようで参考になるHP等が見つからなくて困ってます。
どうかよろしくお願いします。
0463デフォルトの名無しさんNGNG
>>462
しつこい
0464デフォルトの名無しさんNGNG
>>463
解決してないので同じ書き込みしました・・・(汗)
すみません。。。
0465デフォルトの名無しさんNGNG
>>464
同じ書き込みなんてするなよ。
誰かが >>237 でレスを返しているみたいなんだけど、
それをまるっきり無視しているようにみえる。
0466デフォルトの名無しさんNGNG
>>462
>C言語でPWM制御をしてモータを動かしたいのですが
ここの部分がかなり漠然としている。
もっと詳細に書かないとサンプルプログラムなんぞ出てこようがない。
0467デフォルトの名無しさんNGNG
>>462
モーター動かすだけなら、
マイコンに特化したアセンブリで充分じゃん。
なぜCにこだわるかわからないし
それともマイコンをすでにもっていいてCの環境まであるというなら
話しを聞いてやるよ。
0468デフォルトの名無しさんNGNG
>404
遅レス、板違いですが、
今年は
忍風戦隊ハリケンジャー
電光石火ゴウライジャー
天空忍者シュリケンジャー
です。
0469デフォルトの名無しさんNGNG
test1.cとtest2.cっていうソースで
共通の変数int hogeを使うにはどうしたらよいでしょう?
初心者ですみません。
0470デフォルトの名無しさんNGNG
どちらかで
int hoge;
と宣言して
もう片方で
extern int hoge;
とか。
(externはヘッダファイルにすると吉かも)
0471デフォルトの名無しさんNGNG
externというものをしらべなさい
0472470NGNG
>471
ケコーンしてください!
0473デフォルトの名無しさんNGNG
なるほどexternですね。調べてみます。
あと、ヘッダーファイルには、どういったものを書けばよいでしょう?
0474デフォルトの名無しさんNGNG
あれー
externなくてもあってもいいみたいですがなぜでしょう?VC++です。
0475デフォルトの名無しさんNGNG
最近C言語を始めたのですが、registerっていう予約語は、本当に役に立つのでしょうか。
register int i;
for(i = 0; i < 10000; i++) {
}
こんなことをしても、register付けた時と付けてない時の速度差が分からないんですが
0476デフォルトの名無しさんNGNG
>>474
もしかして両方に int hoge; って書いてる?
それだと、共有してないよ。
0477デフォルトの名無しさんNGNG
>>475
体感速度がか?
0478デフォルトの名無しさんNGNG
>>477
うんそう
0479デフォルトの名無しさんNGNG
>>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って表示されました。
0480デフォルトの名無しさんNGNG
ヘッダファイルでextern int hoge;があれば
そのヘッダファイルをインクルードしたソースファイルでは
int hoge;でいいと思われ。
0481デフォルトの名無しさんNGNG
>>475
registerってのはC言語の初期の頃にあった旧世代の残骸だ。
そもそもコンパイラはこれを無視するとこを許されているしな。

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

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

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


0488デフォルトの名無しさんNGNG
マイクロソフト固有の仕様なら、ヘルプにもそう書かれているはず
0489デフォルトの名無しさんNGNG
しつもんです。

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

この2つって、何がどう違うの??
0490デフォルトの名無しさんNGNG
およよ。混乱しますた。
0491デフォルトの名無しさんNGNG
>>489
const char*とchar* constの違いはわかるのか?
0492デフォルトの名無しさんNGNG
>>491

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

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

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

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

0497デフォルトの名無しさんNGNG
> (・∀・)「お前、perlが習得できたならCの子供だよ」

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

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

これならわかるんだけどな。
0509デフォルトの名無しさんNGNG
>>468
だから、 ○○ジャー と最後にジャーをつければいいってもんジャーないでしょ
0510デフォルトの名無しさんNGNG
  何このスレ・・・・・・・?

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

void func( int a, int b )
{
  Assert( b != 0 );
  return a/b;
}
0515デフォルトの名無しさんNGNG
>>512
使いどころがわからなければ、使い方が分かっているうちにはいらん気が。
0516512NGNG
>>513-514
ありが�d。参考になりますた。

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

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

まじめに書くと関数の型宣言を省略しているのでint main()
となっているのでreturn 0;をつけりゃいい。
0525デフォルトの名無しさんNGNG
#include <stdio.h>

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

return 0;
}

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

プロンプトのプログラムを組んでいるのですが、
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;
}
こんな感じのところです。
0541デフォルトの名無しさんNGNG
>>540
scanfの正しい使い方を調べたら?
0542質問者NGNG
あの、一行だけ書かれている関数ってどう思いますか?
無駄な気もしますけど、関数名でどんな処理が行われているか分かるという考えもありますよね。

コメントにしといた方がいいでしょうか。
それとも、書き直すくらいなら放っておいた方が良いでしょうか。
0543質問者NGNG
あ、他の所では使われていない関数です。
さらに他の使い道もなさそうな感じです。
0544デフォルトの名無しさんNGNG
>>542-543具体的に書いてください。判断しかねます。
0545デフォルトの名無しさんNGNG
あの、必殺技みたいな名前のやつ?
0546質問者NGNG
>>544さん

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

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

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


0551質問者NGNG
52歳です。
0552perl使いNGNG
52歳でC言語?
(・∀・)イイ!!

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

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

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

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

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

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

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

main関数でreturnを書かない場合、0を返すってのはC++の仕様だろ?
0580デフォルトの名無しさんNGNG
えっ ++
0581デフォルトの名無しさんNGNG
消えねー ++
0582565NGNG
>>577
暇つぶしに
main(){} というプログラムを書いたら変なのが釣れてしまいましたw

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

あらかじめクッキーをもらっておけばいいのかな。。。。
0584デフォルトの名無しさんNGNG
なんでint main()なのに値を返さなくて良いのだろう?
仕様のどこかにそんなこと書いてあった?
0585デフォルトの名無しさんNGNG
>>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.
0586デフォルトの名無しさんNGNG
>>585
引用元は?
0587デフォルトの名無しさんNGNG
>>586
ISO/IEC 9899:1999
0588デフォルトの名無しさんNGNG
(・∀・)ニヤニヤ
0589デフォルトの名無しさんNGNG
>>587
それってもしかして1999年の規格?
0590デフォルトの名無しさんNGNG
>>587
まじっすかそれ。じゃあmainでreturn書かなくてもよくなったのか。
ちょい確認してみよう。とはいえ、C99が普く行き渡るのはいつになることやら。
0591590NGNG
むー
ttp://webstore.ansi.org/ansidocstore/product.asp?sku=ISO%2FIEC+9899%3A1999
は$26かあ。まいったねどうも。とりあえず、
ttp://www.bohyoh.com/CandCPP/FAQ/FAQ00016.html
という記述は見つけた。
0592565NGNG
>>590
return文があるかないかなんてどうでもいいんです。
main関数にreturn型を記述する必要もないんです。
仮引数をつける必要はもちろんありません。
また、本文も書く必要ないんです。

だから、main(){} でいいんです。
0593デフォルトの名無しさんNGNG
>>565
では結論。

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

という事でOKかな。
0594565NGNG
>>593
結果見事に釣れましたが、
main(){} の意義は答えて欲しかったなぁ。

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

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

}


0598デフォルトの名無しさんNGNG
#include <stdlib>

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

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

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

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

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

void main(){
 hoge(3)
}

void hoge(int x){
 
}

hogeの前にvoidって書いたら、警告が消えたんですが…。^^;
0610デフォルトの名無しさんNGNG
>>609

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

void main(){
 hoge(3);
}

void hoge(int x){
 
}

こう書くの
0611デフォルトの名無しさんNGNG
>>609

void hoge(int x){
 
}

void main(){
 hoge(3);
}

こうでもいいよ(^^
0612604NGNG
すいません、誤爆でしたね。
関数が書いてある場所より前で関数を呼び出す時は、プロトタイプ宣言が必要と…。
呼び出す時にvoidを書いたら、それが宣言と捉えられ、警告が消えていた様です。^^;;;
0613デフォルトの名無しさんNGNG
>>612
本当か?

void hoge(3); ←これはプロトタイプ宣言とは見ないと思うぞー。void hoge(x);とかもね(xは変数)。
0614604NGNG
>>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
0615デフォルトの名無しさんNGNG
>>614
>>609の通りか?hoge(3)にセミコロンをつけ忘れているぞ。
0616604NGNG
>>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行目
0617デフォルトの名無しさんNGNG
>>616
ary[]はグローバル変数?
間違っているようには見えないけど。
0618デフォルトの名無しさんNGNG
>>616
頭痛がしてきた。
0619デフォルトの名無しさんNGNG
>>616
main関数見せて
0620デフォルトの名無しさんNGNG
オェッ。吐きそうだ。
0621604NGNG
>>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();
}
0622604NGNG
>>618 >>620
読みにくくて、すいません。
0623604NGNG
放置(´・ω・`)ショボーン
0624604NGNG
>>623は偽者です。^^;;;
ゴルァ!!!

つーか、インデント消えちゃってすいません。。。
0625デフォルトの名無しさんNGNG
>604
カッコが1つ足りなくない?
0626604NGNG
>>625
確かに閉じカッコ、}が一つ足りないっぽいです。
どこに付ければ良いかは自分で探します!
それが>>614の「複合分に}」がないってヤツですか?
行がそぉ〜とぉ〜違うんですが…。
0627デフォルトの名無しさんNGNG
>604
>行がそぉ〜とぉ〜違うんですが…。
その行番号は、複合文の開始位置 { のある行番号を示しているんでしょう
0628604NGNG
>>625
閉じカッコ一つ付け加えるだけで、コンパイル出来るようになりました!
閉じカッコが一つずつ前にズレて解釈され、>>614の様に「ここでは宣言できない」と言われたり、
後の方で「}がない」と言われたりしてたのですね。
エラーが出てる行以外も調べてみないとダメなのですね。
勉強になりました。ありがとうございました。>>みなさま
0629604NGNG
これ、5つの数字を大きい順に並び替えるっていう物なんですけど、やり方が回りくどいですね。
数をA〜Eとすると、まず一つ左の数と位置を変える関数を作る。
次にB〜Eについて、一つ左にある数と比べるループを作って、左の数よりそれが小さくなったらループを抜ける。
という流れの方が、良いやり方だと思いました。
0630デフォルトの名無しさんNGNG
>>629
頑張れ。調べた方がいいかもしれんが。
0631604NGNG
>>630
ありがとうございます。
VBやDelでGUIのアプリ作るより(大したモンは作れないけどw)、Cでこういうのをコンソールで作る方が楽しいかも。
実用的ではないけど、パズルっぽい要素があって、楽しい。
深いネストを見るとワクワクする。
0632デフォルトの名無しさんNGNG
>>631
>深いネストを見るとワクワクする。
やめれ。
0633デフォルトの名無しさんNGNG
>>616
で
ary[aryNum] (sort4の方)
に値を入れる操作が無いが良いのか?
配列内の数字がずれてたりしない?
0634デフォルトの名無しさんNGNG
>>633
グローバル変数らしいからとりあえず問題ないだろ。明示的に初期化していなくても0に初期化されるから。
処理の流れ上の誤りなら話は別だけど。
0635デフォルトの名無しさんNGNG
違和感がわかった。
//ソート
の下、if()の右側のary[]の[]中の数値
上から順に見て
2 33 434 5555
だけど
2 33 444 5555
でなければ駄目だろ。
0636デフォルトの名無しさんNGNG
>>635補足
>>621のmain関数内の「//ソート」以下ということね。
0637デフォルトの名無しさんNGNG
>>629
それを「挿入ソート」といいます。
ソートなら、バブルソート、挿入ソート、選択ソート、
マージソート、ヒープソート、クイックソート、シェルソート、
ビンソート、数え上げソート、基数ソート、
くらいを調べておけば、後々困らない。
0638デフォルトの名無しさん NGNG
>>1のFAQがサパーリ分からないんですが、その下の「Cプログラマ必読〜」のを
読めば分かるようになりますか?
0639デフォルトの名無しさんNGNG
>>638
本屋へ行って、C言語の本をぱらぱら読む。
理解できそうな本を1冊購入。すみからすみまで読め。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ありがとう。

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

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

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

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

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

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

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

言われたのが昨日なもんでして。
0738デフォルトの名無しさんNGNG
折れの理解。田代風。

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

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

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

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

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

0740604NGNG
>>737
オイラも昨日始めたばっかりだけど、昨日わかりやすい本あったから買ってみますた。
技術評論社の「C言語スタートブック」(著:高田美樹さん)。1980円
図などが多くて、はじめの一冊としては良いかもしれませんよ。
0741デフォルトの名無しさんNGNG
>>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
0742デフォルトの名無しさんNGNG
初心者はCの絵本って奴がいいよ。
0743じじいNGNG
CとC#とC.NETとC++とかの違いがわかりません。
わかるのはCが基本だということだけ。
誰かその違いを簡潔に説明してもらえんかのう。
 
0744デフォルトの名無しさんNGNG
>>743
じじいはじじいらしく囲碁でもやっててください。
0745604NGNG
階乗の計算をしようと思ってるんですけど、関数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;
}
0746デフォルトの名無しさんNGNG
>>745
scanfのフォーマット文字列が間違ってるよ。
0747デフォルトの名無しさんNGNG
>>745
まず、kaijoに渡してる iptの値を確認。
0748604NGNG
>>746
ホントだ…オレってバカ…。
それでもできないってことは、関数kaijoも間違えてるっぽいですね… ・゜・(ノД`)・゜・

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

#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 ) ;
}
0750604NGNG
>>749
ありがとうございます。
forの終了条件が<=じゃないとダメでしたね。^^;
それと、iの初期値は、1をかけても値が変わらないので、2からの方が無駄がなかったでした。^^;;;
0751604NGNG
遅すぎる質問ですいません。
>>521のmain関数で使っている変数「ary[]」は、宣言の時に
int ary[5];
にしてます。
CはJavaみたく、int ary[5]で使える変数はary[0]〜ary[4]の5個だと思うんですが、何でmain関数の中でary[5]が使えてるんですか?

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

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

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

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

んなあほな。でもメモリまわりできちんと注意を払える人でないとだめかも。
0760デフォルトの名無しさんNGNG
マルチです。
cygwin、DOSなどでスクロールバーってどうやって表示するんですか?
0761デフォルトの名無しさんNGNG
>>760
マイクロソフトのソフト(EDITとかQBASIC)でよくあった奴か
標準では当然無いから自分で実装するしかないな
0762デフォルトの名無しさんNGNG
>>760
それは、DOS窓の横にスクロールバーを表示したいのか?
それともDOS窓の中にスクロールバーを表示したいのか?
0763デフォルトの名無しさんNGNG
Cの精神に「プログラマを信頼する」という項がある。
配列やポインタで変なとこにアクセスできるのもそのため。
このへんはJavaのほぼ逆だと考えて差し支えないはず。
0764デフォルトの名無しさんNGNG
>>760->>761
参考書にキャプチャした画像が載っているんですが、
DOS窓の中(×の下)にスクロールバーが付いているんです。
コレと同じにしたいので、DOSの中にスクロールバーを表示したいです。
0765764NGNG
OSは98で、cygwin使ってます。
0766604NGNG
>>759
ちと大袈裟でしたか。^^;
0767デフォルトの名無しさんNGNG
WinNT系だとDOS窓がcmd.exeで9xのcommand.comとは使い勝手が違う。
Windowsを捨てるか2000かXPでも買うしかないな。
0768shigeNGNG
それは、参考書でWindows2000/XPあたりのcmd.exe使ってるからだろ。
msysのrxvtでも使え。
0769デフォルトの名無しさんNGNG
http://www.leverage.jp/bloom/qry/search.qry?function=search
0770デフォルトの名無しさんNGNG
>>768
いい時代になったものだ…
0771764NGNG
OSの仕様でしたか・・・
>>767->>768ありがとうございました。
0772604NGNG
また違う問題やってるんですけど、コンパイルはできても、答えが合わないので、どこを直したらいいか教えてください。
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以上を入力するとアプリケーションエラーが出てしまいます。^^;;;
0773デフォルトの名無しさんNGNG
>>772
とりあえず分子は常に1じゃないのか?
0774デフォルトの名無しさんNGNG
char *ptest = "test log";
ptest[0] = 'q';
ptest[4] = '8';
printf(ptest);

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

0782デフォルトの名無しさんNGNG
>>774
・・・マジで参考書にそんなprintf関数への引数の渡し方してるの?
0783デフォルトの名無しさんNGNG
>>774

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

printf ("%s", ptest);

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

char *ptest = "test log";

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

printf (ptest);

return 0;

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

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

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

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

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

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

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

これやってみ
0808デフォルトの名無しさんNGNG
/* 関数にほうりこむときのキャスト */
関数名((キャストする型)引数);

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

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

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

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

Win2k SP3
VC++ SP5

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

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


アドレスがかなり離れてますね。
0814デフォルトの名無しさんNGNG
夜分乙彼。

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'が重要でつね。これも基本でつ。
0815デフォルトの名無しさんNGNG
#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++の人はリリースモードで。
0816デフォルトの名無しさんNGNG
>>814補足
char *ptr;
は#defineと違い浮気(w)ができる。
char *ptr = "foo"; /* ここはどっかにある"foo"へのポインタ */
ptr = (char *)malloc(1000); /* 動的確保した領域へのポインタ */
ptr = "foo"; /* 最初に戻ったように見えるが、アドレスが違う場合もありえる。 */
0817通りすがりのものNGNG
>>815

Win2k SP3
VC++ SP5

Debugモード:
実行時エラー

Releaseモード:
HOGE
PIYO
PIYO
PIYO

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

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

HOGE
PIYO
HOGE
HOGE

って、みんな結果違う〜!(w
0821デフォルトの名無しさんNGNG
>>820
VC++, gcc, bcc32で全部動きがまばらだなあ。CのCたる所以でつね。
0822デフォルトの名無しさんNGNG
>>820
>ポインタへ文字列を代入すると、\0が代入されないのかぁ〜。
ちょとちがう。\0を含んだ文字列リテラルへのポインタが代入される。
0823デフォルトの名無しさんNGNG
'\0'は""の実体と同じ。
puts("abc\0def");
ってやると
abcしか出力されない。
0824604NGNG
>>819
Winの電卓で計算したら、「9.3326215443944152681699238856267e+157」でした。
よくわからないけど、bunboとbunshiはlong型にすべきですね。
入力が5でもできなかったのは謎ですが…。
0825デフォルトの名無しさんNGNG
>>818
UNIX系だと、文字列定数は大抵書き込み不可能領域に置かれるからね。
で、それを書き換えようとすると OSから叩き落される。
0826デフォルトの名無しさんNGNG
>>819
これぐらいかな。
93326215443944152681699238856266700490715968264381621
46859296389521759999322991560894146397615651828625369
7920827223758251185210916864000000000000000000000000
0827デフォルトの名無しさんNGNG
>>823補足
このトリックを使った関数がstrtok()ってやつです。
特定の文字列をセパレータとして、そのセパレータ文字列を'\0'に変え、
毎回呼ぶごとに分割された文字列が返されてくる。
そのかわりオリジナルの文字列は破壊されるので、
必要なら同じものをコピーしておく。
っていうかstrtok()あんまり使わない(w
0828デフォルトの名無しさんNGNG
答えからいうと
char *str = "ABC";
このように宣言されたstrで参照する文字列は「書き換えるな」
この文字列は「プログラムの一部」となっている場合もある
>>817でprinthogeBでもPIYOが出力されてるのはそれを示している
書きえるた場合の反応は不明(コンパイラが通ったとしても)
文字列を書き換えるようなことがある場合には
char str[] = "ABC";
と宣言しる
0829デフォルトの名無しさんNGNG
char str[4] = "hoge";
とすると、\0が付かない罠。
0830フレッシャーズNGNG
>>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);
じゃだめなの?
0831通りすがりのものNGNG
>>828
勉強になりました。ありがとうございます。
0832デフォルトの名無しさんNGNG
#include <stdio.h>
#include <string.h>
int main(void)
{
char *str = "PIYO";
strcpy(str, "HOGE");
printf("PIYO"); //PIYOと出力させたつもり
return 0;
}
こういうのもvc++の最適化されたビルドだど、HOGEが出力されちまう
0833フレッシャーズNGNG
>>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を
掛けるなどして回避するというのがあったようにも思います。
0834795NGNG
>>827
>>828
俺も勉強になりました。
あのままだと、気づいてなかったです・・・。
よかった。今まで間違ってた事に気づいて・・・。
0835デフォルトの名無しさんNGNG
とりあえず洩れも書いてみた。
ウチの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;
}
0836604NGNG
>>830=>>833
>ここのアスタリスクは取りなさい。上の行で掛け算しているんだから。
bunbo[i]は各項の分母でbunbo1は通分した後の分母なんです。
だから掛け算して良いはずでは?
たとえば、1/2*1/3*1/4の場合、2*3*4で公倍数が出ますよね?
そういう考え方なんですけど、間違えてますか?
申し訳ないですけど、それ以外は明日読ませてもらいます。
眠くて頭働かないので…^^;;;
0837デフォルトの名無しさんNGNG
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
0838604NGNG
ちなみに、出題者が書いたコード載せておきます。
これでできるのか…。
かなり凄いかも?よく意味がわからないし。^^;
でも、俺は俺のやり方で最後までやってみますけど。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;
}
0839デフォルトの名無しさんNGNG
>>838
こっちの方が明らかに、まともだ。
しかも可読性も高いから、説明されなくても意味がすぐわかる。
0840835NGNG
洩れのは冗長な部分が多いが、職業病なので気にしないように。
0841デフォルトの名無しさんNGNG
>>838のってbの初期値って0じゃないかなあ。
1/1! + 1/2! + 1/3! ... てことは
1 + 0.5 + 0.166... だよなあ...
あとprintf文の\nが/nだし(w
0842gakuseiNGNG
>>840=835 こんなんで金もらってんだ、、、、
0843デフォルトの名無しさんNGNG
>835
階乗計算に再帰は使用しないのですか?
0844835NGNG
ネタにマジレスかどうかはしらんが、
>>842
業務だともっと長いコード書くけど、
どっちかというとコード書きより仕様の見極めのほうがシンドイでつ。
>>843
再帰使うのはディレクトリ歩くときくらい。
同じ結果が返るなら単純なほうがいいのれす。
0845デフォルトの名無しさんNGNG
>>841
自然対数を求めるなら、初期値はb=1で良い。
\nのtypoは>>604の写し間違いでは?
0846839NGNG
>>840
これは>>838と>>772を比べたコメントです。
まぎらわしくてスマソ。
0847デフォルトの名無しさんNGNG
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ではないポインタに代入しているところで警告を出すべきじゃないのかな。
その辺どうなってんだろ。
0848847NGNG
ぎゃ、ターミナルからコピペしたら変な折り返しが入った(汗
0849デフォルトの名無しさんNGNG
>>847
なんでだろーね。
アドレス自体にはconstって概念がないのかも・・・。
その値がconst修飾子が付いているってだけで。
0850デフォルトの名無しさんNGNG
malloc関数などで、後から確保したメモリに、
ファイルをオープンして、文字列を読み取り代入したら、
その文字列は、constになるのでしょうか?
0851デフォルトの名無しさんNGNG
>>847
const char *q = "abc";

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

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

q = str;

はコンパイルエラーにはならなし、正常に動作する。
0852851NGNG
ちなみに、

const char * const q = "abc";

というふうにすると、

q = str;

をコンパイルエラーにすることができる。
0853847NGNG
>>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
0854デフォルトの名無しさんNGNG
"abc"はCではchar[4]
C++ではconst char[4]
でもbcc32ではCでもC++でもchar[4]
調べもしないで適当なことを書くな
0855デフォルトの名無しさんNGNG
>>850
なりません。

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

みたいなことをやったときのpでしょ。
0856デフォルトの名無しさんNGNG
>>854
うむ。

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

int i = 1;

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

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

char *p = 'a';

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

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

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

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

最初なにかと思った
0871デフォルトの名無しさんNGNG
constなんてchar *にしか使わネーヨヽ(´ー`)ノ
それも仮引数のみで。
0872フレッシャーズNGNG
>>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)の計算を求める
プログラムとして書かれていた(初項を左辺に移動したもの)、
という違いだけ。
0873デフォルトの名無しさんNGNG
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 と同じになる
0874デフォルトの名無しさんNGNG
ここにいるのは言語仕様もろくに知っていない初心者なのか?
それともC言語の言語仕様が複雑すぎるのか?
0875デフォルトの名無しさんNGNG
>>874
はいはい、自称識者はお呼びでないよ。
0876デフォルトの名無しさんNGNG
>>875
なにか気にさわったか?
0877デフォルトの名無しさんNGNG
>>876
何か気に障りました?
0878デフォルトの名無しさんNGNG
>>877
話にならんな。安心しろ。俺は自分が識者だと思ってないよ。
あらためて問い直そう。

ここにいるのは言語仕様もろくに知っていない初心者なのか?
それともC言語の言語仕様が複雑すぎるのか?
0879デフォルトの名無しさんNGNG
細かい言語仕様を気にするのはプログラミングの初心者に多いな。
0880デフォルトの名無しさんNGNG
>>879 間違い。
0881デフォルトの名無しさんNGNG
>>880間違い。
0882デフォルトの名無しさんNGNG
>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」。
0883デフォルトの名無しさんNGNG
質問を表示させるのに、
[ ]x + [ ]y = [ ]
見たいな感じで、[ ]のところをテキストボックスにして
入力させるようにしたいのですがどうすればいいでyそうか?
0884デフォルトの名無しさんNGNG
>>883
環境くらい書けよ。>>878みたいな人間になっちまうぞ。
0885デフォルトの名無しさんNGNG
>>883
そのように。としか。
0886デフォルトの名無しさんNGNG
>>884
たとえがおかしいぞ〜。
0887デフォルトの名無しさんNGNG
>>886
>>878必死だな。
0888デフォルトの名無しさんNGNG
マターリ推奨
0889マターリNGNG
ここにいるのは言語仕様もろくに知っていない初心者なのですか?
それともC言語の言語仕様が複雑すぎるのですか?
0890デフォルトの名無しさんNGNG
>>883
VBでもやってなさい(w
0891デフォルトの名無しさんNGNG
>>883
C言語でGUIなんて今更やるもんじゃない。
0892デフォルトの名無しさんNGNG
>>891
GTK+はCだが何か?
0893デフォルトの名無しさんNGNG
>>892
つぅか相手にするまでもないだろ。こんなもん。
0894デフォルトの名無しさんNGNG
>>892
だから今更やるもんじゃない。
0895デフォルトの名無しさんNGNG
fread()でデータ読んだとき
指定したサイズに届くまでにファイル終端に達したららどうなるん?

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

最後の出力ファイルが0バイトなのは、0バイトしか書き込んでないか
らで、なぜ0バイトしか書き込もうとしないのかは >>895にしかわか
らない。
0897デフォルトの名無しさんNGNG
>>895
第2引数と第3引数の指定を間違えてるっぽい。
0898デフォルトの名無しさんNGNG
>>896
レスどうも
bccつかってて詳細なマニュアルは無いっす。
とりあえずリンク先見てきます
0899604NGNG
>>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は載ってないし…。^^;;;
0900デフォルトの名無しさんNGNG
900getオメ >オレ
0901デフォルトの名無しさんNGNG
次スレ立てる時は>>1の名前もちゃんとネタにしてくれよ。
0902604NGNG
質問!
A〜Zを順番に書けっていう問題があったとすると、forの繰り返しとASCIIコードを使ってやれば簡単だと思うんですけど、具体的にどうやるんですか?

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

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

最近の規格ならあるよ。
0905デフォルトの名無しさんNGNG
>>902
>C言語でBoolean型の変数ってないんですか?

最近やっと規格ができたよ。
使えるコンパイラはほとんどないけど。
0906デフォルトの名無しさんNGNG
>>902
>C言語でBoolean型の変数ってないんですか?

昔は無かった。当面intにしとけ。
0907デフォルトの名無しさんNGNG
>>902
>C言語でBoolean型の変数ってないんですか?
最近の規格で取り入れといたよ。
0908604NGNG
>>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型でのやり方、じっくりやってみます。
0909604NGNG
>>907
ISOの方ですか?w
0910デフォルトの名無しさんNGNG
>>908
itoaとかsprintfとか。

>>909
K&RのKです。
0911デフォルトの名無しさんNGNG
>printf("%s", ascii); 
ここがおかしい

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

(改行文字はかならずしも入れる必要は無いが書く癖を付けておけ)
0912デフォルトの名無しさんNGNG
>>903-907 ワラタ
0913デフォルトの名無しさんNGNG
#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;
}
0914デフォルトの名無しさんNGNG
>>913
void main()でreturn 0;ってどういうことだと小一時間。
0915デフォルトの名無しさんNGNG
i < 26
0916604NGNG
>>910-911
ありがとうございます。
itoa・sprintfも検索してこよう。

>>910
いってらっしゃい。コメントお願いします。w
http://pc3.2ch.net/test/read.cgi/tech/1020916685/
0917デフォルトの名無しさんNGNG
int main(int argc, char *argv[]){
0918デフォルトの名無しさんNGNG
>>913
ぜっとは
0919デフォルトの名無しさんNGNG
>>913
i <= 25
0920604NGNG
>>908は間違え!
printfとascii++が逆です。^^;;;
0921デフォルトの名無しさんNGNG
#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;
}
0922デフォルトの名無しさんNGNG
初Cプログラム
#include <stdio.h>

int main() {
printf("%8s\n",".......U");
printf("%8s\n","....@...");
printf("%8s\n","##>##...");
}
0923デフォルトの名無しさんNGNG
>>902

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

const alph[] ="ABCDEFGHIJKLMNOPQRSTUVWXYZ"

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

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

}
0924デフォルトの名無しさんNGNG
>>923
>const alph[] ="ABCDEFGHIJKLMNOPQRSTUVWXYZ"

char alph[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
でわ?
0925604NGNG
>>923
ポインタはわかりませんのですよ…。

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

const char alph[] ="ABCDEFGHIJKLMNOPQRSTUVWXYZ"

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

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

}
0931デフォルトの名無しさんNGNG
>>927
Cはもともと全角のことなどなんも考えないで作られてるからです。
0932デフォルトの名無しさんNGNG
>>604

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

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

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

やめとけ・・・。って言うかC基礎からやり直せ。
09351000NGNG
ファイルを他のフォルダにコピー、または移動させる関数ってありませんか?
0936デフォルトの名無しさんNGNG
>int変数 = "文字";

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


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 あたり
0938フレッシャーズNGNG
>>899
(>>838>>830)
そこまでわかっていればをdouble(浮動小数点型)を使う
という選択肢しか残っていないのでは?
 l(エル)は切り捨ててかまいません。
(>>833)
その点についてはこちらが勘違いしておりました。すみません。

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

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













さっさと逝け
0961955NGNG
じゃあ、逝ってきます。
0962shigeNGNG
げっとおおおおお
0963デフォルトの名無しさんNGNG
次スレはここへ

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

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

だから
for(c = 'A'; c <= 'Z'; c++)
は
for(c = 65; c <= 90; c++)
と書いたのと同じ。

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

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

printf("%c\n", "omaemona"[5]);
だとちゃんとoが出力される
0970デフォルトの名無しさんNGNG
次スレはここへ

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

#include<stdio.h>
void main(int arg,char *arg[])
{return 0;}
だよ
0973デフォルトの名無しさんNGNG
>>972
最小の構造体は?
0974SITNAMNGNG
Cほど良い言語は無い
0975SITNAMNGNG
>>973
   (V)∧_∧(V)
    ヽ(・ω・)ノ  フォッフォッフォッ
.     /  /
    ノ ̄ゝ


.          (V)∧_∧(V)
           ヽ(   )ノ  フォッフォッフォッフォッ
.           /  /
       .......... ノ ̄ゝ
0976デフォルトの名無しさんNGNG
>>972
プッ いきがっちゃって。

char main=-61;

x86ならこっちのが最小だな。
0977デフォルトの名無しさんNGNG
>>972
voi main ってお前…
0978デフォルトの名無しさんNGNG
今からブラウザを20個立ち上げといて、980超えたら
一気に「書き込む」ボタンをクリックし様〜>971
sage進行でね。
0979デフォルトの名無しさんNGNG
void main の return 0; って・・・やばくな〜〜い!!!
0980デフォルトの名無しさんNGNG
>>976
ちゃんとコンパイル&実行できるコードってのが味噌だよ
0981SITNAMNGNG
漏れは1000取るぞ。
0982SITNAMNGNG
絶対1000!
0983SITNAMNGNG
1000まで頑張るぞ
0984SITNAMNGNG
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
0985デフォルトの名無しさんNGNG
結局、最小のCプログラムは1バイトだった
0986SITNAMNGNG
C言語さえ分かれば不可能は無い
0987SITNAMNGNG
1000
0988デフォルトの名無しさんNGNG
Cハァハァw
0989SITNAMNGNG
988
0990SITNAMNGNG
901かな
0991SITNAMNGNG
902だろう
0992SITNAMNGNG
989だ!!!!!!!!!!!!!
0993SITNAMNGNG
きゅうひゃくさん
0994デフォルトの名無しさんNGNG
1000を目指すヤシはアホ。

どうせなら2^10を目指せゴルァ
0995デフォルトの名無しさんNGNG
1024万歳!
0996デフォルトの名無しさんNGNG
うわーーーーーーーーーーーー
0997デフォルトの名無しさんNGNG
1024最高!
0998デフォルトの名無しさんNGNG
C言語。
0999デフォルトの名無しさんNGNG
1000
1000デフォルトの名無しさんNGNG
se
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。