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

C言語なら俺に開け! Part 〈54〉

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさんNGNG
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限Googleで検索を。

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

コンパイラを探しているなら >>2-13 を。

上記を逸した場合の結果は激しく未定義だゴルァ!!

  ∧_∧
 ( ´∀`)< ぬるぽ

C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
0002デフォルトの名無しさんNGNG
>>1
使えない上司・先輩
0003デフォルトの名無しさんNGNG
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>1
0004デフォルトの名無しさんNGNG
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>1

0005デフォルトの名無しさんNGNG
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>1
0006>>1ちゃんとリンク貼れやボケNGNG
【過去ログ】
53 http://pc2.2ch.net/test/read.cgi/tech/1048995232/
52 http://pc2.2ch.net/test/read.cgi/tech/1047275669/
51 http://pc2.2ch.net/test/read.cgi/tech/1046104909/
50 http://pc2.2ch.net/tech/kako/1044/10449/1044938752.html
49 http://pc2.2ch.net/test/read.cgi/tech/1042646178/
48 http://pc3.2ch.net/tech/kako/1041/10411/1041127646.html
47 http://pc3.2ch.net/tech/kako/1040/10400/1040048202.html
46 http://pc3.2ch.net/tech/kako/1039/10393/1039328710.html
45 http://pc3.2ch.net/tech/kako/1038/10384/1038405432.html
44 http://pc3.2ch.net/tech/kako/1037/10377/1037796472.html
43 http://pc3.2ch.net/tech/kako/1037/10372/1037281411.html
43 http://pc3.2ch.net/tech/kako/1037/10371/1037134356.html
42 http://pc3.2ch.net/tech/kako/1037/10371/1037101156.html
41 http://pc3.2ch.net/tech/kako/1036/10368/1036876790.html
40 http://pc3.2ch.net/tech/kako/1036/10366/1036673739.html
39 http://pc3.2ch.net/tech/kako/1036/10364/1036409391.html
38 http://pc3.2ch.net/tech/kako/1035/10357/1035729526.html
37 http://pc3.2ch.net/tech/kako/1035/10356/1035623265.html
36 http://pc3.2ch.net/tech/kako/1035/10352/1035211039.html
35 http://pc3.2ch.net/tech/kako/1034/10343/1034337064.html
34 http://pc3.2ch.net/tech/kako/1033/10332/1033240509.html
33 http://pc3.2ch.net/tech/kako/1032/10326/1032606064.html
32 http://pc3.2ch.net/tech/kako/1031/10319/1031905402.html
31 http://pc3.2ch.net/tech/kako/1030/10307/1030786546.html
30 http://pc3.2ch.net/tech/kako/1030/10307/1030786546.html
29 http://pc3.2ch.net/tech/kako/1029/10296/1029605182.html
28 http://pc3.2ch.net/tech/kako/1028/10284/1028495798.html
27 http://pc3.2ch.net/tech/kako/1027/10271/1027160374.html
0007( ´∀`)< ぬるぽNGNG
26 http://pc.2ch.net/tech/kako/1026/10260/1026048820.html
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/1020/10207/1020756993.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/1016/10165/1016519243.html
14 http://pc.2ch.net/tech/kako/1015/10152/1015286974.html
13 http://pc.2ch.net/tech/kako/1013/10139/1013990673.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/1008/10083/1008300863.html
9 http://pc.2ch.net/tech/kako/1007/10072/1007272267.html
8 http://pc.2ch.net/tech/kako/1005/10058/1005811510.html
7 http://pc.2ch.net/tech/kako/1005/10058/1005811510.html
6 http://piza2.2ch.net/tech/kako/999/999617524.html
5 http://piza2.2ch.net/tech/kako/994/994908590.html
4 http://piza.2ch.net/tech/kako/992/992357382.html
3 http://piza.2ch.net/tech/kako/989/989929288.html
2 http://piza.2ch.net/tech/kako/979/979529893.html
1 http://piza.2ch.net/tech/kako/967/967985026.html
0008( ´∀`)< ぬるぽ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

0009デフォルトの名無しさんNGNG
このゴミが!
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>1
0010デフォルトの名無しさんNGNG
スレタイにぬるぽが入ってないだけでもマシか。
0011デフォルトの名無しさんNGNG
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>3>>4>>5>>9と>>1の11,12行目
0012デフォルトの名無しさんNGNG
すいません、誰かこのプログラム教えてください。
初心者には再帰が難しくて。

typedef struct CELL *LIST;
struct CELL {
int element;
LIST next;
};

リスト型を引数とする、
リストのセルがelementとして整数1500を
含んでいるなら1を返し
含んでいないなら0を返す再帰的関数です。
どうかお願いします
0013デフォルトの名無しさんNGNG
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>1
リンクくらい晴れ!
0014デフォルトの名無しさんNGNG
>>12
int contain_1500(const List l)
{
if (l->element == 1500) return 1;
return contain_1500(l->next);
}
0015デフォルトの名無しさんNGNG
int foo(const LIST lst)
{
 if (! lst) { return 0; }
 if (lst->element == 1500) { return 1; }
 return foo(lst->next);
}
0016デフォルトの名無しさんNGNG
>>14
まずった。
if (!l) return 0;
を先頭に追加してくれ。
0017デフォルトの名無しさんNGNG
          __,,,,,,___
        (⌒ヽ:::::::::::'''''-,,
      <´・\  ::::::::::::::::::ヽ
       l 3 ハ::::::::::::::::::::::.ヽ,
   ∫  .<、・_ (         )
   旦 (⌒ ̄  ̄ ̄ ̄ ̄ ̄ ̄⌒) これで何したらいいんだろう・・・
    ____
    |\  \  \
    |  | ̄VC  ̄|
    |  |academic|
   \.|____|
0018デフォルトの名無しさんNGNG
自動変数はスタックに配置されるというのはCの規格で決まっているわけではないですよね。
0019デフォルトの名無しさんNGNG
必ずしもスタックがあるとは限らんし。
ただし、再帰を考えるとスタック的な何かは必須。
0020デフォルトの名無しさんNGNG
音声処理プログラムでマイクに向かってしゃべって
「検索せよ」、「閉じる」、「開く」等の10−20程度の単語を
認識させたいと思っています。
音声処理を一からやっていたらさすがにムリなので、
そのようなAPIかなにか公開されてないものかと思って探しています。
もちろん有料のものでかまわないのでご存知の方いたらお教えください。
0021デフォルトの名無しさんNGNG
>>20
Microsoft Voice なんとか
0022デフォルトの名無しさんNGNG
>>20
大袈裟すぎるか?

ttp://www.scansoft.co.jp/naturallyspeaking/sdk/
ttp://www-6.ibm.com/jp/voiceland/dev/develop.html
0023デフォルトの名無しさんNGNG
>>19
そういう機能を提供するものを一般的にスタックと呼ぶんじゃなかろうか。
連続してようが双方向リストで提供されてようが。
0024デフォルトの名無しさんNGNG
>>19
ヒープでスタック実装できるじゃん。
0025デフォルトの名無しさんNGNG
     __________
  /o [地獄逝き特別急行] o\
  |┃──────────┃|/
  |┃             ∧_∧ ┃|  ぬるぽ ぉぉぉぉぉぉぉぉん!
  |┃           (´∀` ) ┃| \
  |┃__________┃|
  |┃__________┃|
  | \___________________/ |
  |========================|
  |========================|
   |ヽ[■]___________[■]/|
    |_三三三三三三三三三三_|
   |     | [=.=] |     |
   \ ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄/
      ̄ ̄        ̄ ̄
      /        \
   Delphi.NET、安値でゲットォーーー!!
    ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄(´´
        ∧∧   )      (´⌒(´
   匚⊂ミ゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
  /        ̄ ̄  (´⌒(´⌒;;
/                    \
0026デフォルトの名無しさんNGNG


                \ │ /
                 / ̄\   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
               ─( ゚ ∀ ゚ )< ぬるぽぬるぽ!
                 \_/   \_________
                / │ \
                    ∩ ∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\∩ ∧ ∧ \( ゚∀゚)< ぬるぽぬるぽぬるぽ!
ぬるぽ〜〜〜〜!   >( ゚∀゚ )/ |    / \__________
________/ |    〈 |   |
              / /\_」 / /\」
               ̄     / /
0027デフォルトの名無しさんNGNG
struct { enum { A , B } e : 1; } x;
x.e = B;
assert( x.e == B );

今の仕事で使っている、とある古めのコンパイラで
このassertが失敗してびびったのですが、
規格で許された動作なのでしょうか?
0028デフォルトの名無しさんNGNG
>>27
俺は符号拡張とかなんとかが面倒なので、ビットフィールドは
unsignedでしか使わないことにしてる。
0029デフォルトの名無しさんNGNG
メモリのない環境もあるし。
0030デフォルトの名無しさんNGNG
>>27-28
ただのunsignedだとsignedとの比較で悲惨なことになるから
unsigned shortあたりにしといたほうがいいんじゃないか?
0031デフォルトの名無しさんNGNG
>>30
ビットフィールドには int/signed int/unsigned int しか指定できない。
0032デフォルトの名無しさんNGNG
>>31
マジかよ。
俺が何気なく使ってたこの機能はVCの勝手な拡張だったのか・・・。
0033デフォルトの名無しさんNGNG
>>30
っていうか、unsigned とsignedで問題起こるのを
shortにしたからって、なにがどうなるの?
003427NGNG
>>27のassertが通ることを保証しているのはC++の規格でした。
Cだと、enumと互換性を持つ型がどれかで動作が決まるので、処理系依存ってことらしいです。
↓Googleでみつけたところ。
maths.newcastle.edu.au/~rking/R/devel/01a/0098.html

結論は、Cではenumにビットフィールド指定するな、ということで。
C++なら(コンパイラが規格に従う限り)大丈夫らしい。
0035デフォルトの名無しさんNGNG
>>32
なんでまたint以外を使うの?
0036デフォルトの名無しさんNGNG
>>33,35
unsigned intだと負数との比較のときとか厄介じゃん?

範囲チェックしたいときとかさ、

struct
{
 unsigned int value: 4;
} border;

int checked_value = 何か;

if ( border.value<=checked_value )
{
 checked_value unsigned int に格上げされるので、負のとき危険
}
003735NGNG
>>36
俺の言ったintにはunsigned intも含むんだけど。
なんでcharとかdoubleのような(unsigned)int以外を使うのかなと。
0038デフォルトの名無しさんNGNG
>>37
unsigned short us = 0;
unsigned int ui = 0;
int i = -1;
assert( us > i );
assert( ui < i );
0039デフォルトの名無しさんNGNG
そもそもunsignedとsignedを比較するほうがどうかしていると思うのだが。
0040デフォルトの名無しさんNGNG
>>36
で、unsigned int を unsigned short にしたからって、なにがどうなるの?
004135NGNG
>>38
ビットフィールド使っていないじゃん!
0042デフォルトの名無しさんNGNG
>>40
正しく計算できる
unsigned int と signed int -> unsigned int に格上げ = 符合が失われる
unsigned short と signed int -> signed int に格上げ = だいたいshort>int(環境依存だけど)だから何も失われない

>>41
MSコンパイラの拡張機能なのでどうでもいいことだけど、ビットフィールドでも同様のことが起こるのよ。
004342NGNG
ごふ
short<int
0044デフォルトの名無しさんNGNG
>>42
そんなことを気にするなら、ビットフィールドに限らずunsignedを
使うときには常にshortにしろって話になると思うが。
0045デフォルトの名無しさんNGNG
そもそも1ビットのビットフィールドでsignedを使うのが阿呆。
そもそもunsigned int signed intを直接比較するのが阿呆。
0046デフォルトの名無しさんNGNG
たまにプログラムで Build# のようにビルドした回数を表示してるものがありますが、
ああいう事はどうやれば出来るんでしょうか。
VC++を使っています。
0047前スレ 983NGNG
ここがあったのに・・・

いろいろ試したつもりですが
精度的な問題がつかめませんでした。
結果は同じ、速度は掛け算の方が7倍(以上)?のような気がします。
もしかしてつかえる?
と思ったのですがやっぱり問題がありそうな気がして恐いです。

ガウスの消去法による、逆行列の計算が
早くなるかと思って期待をしているわけなのですが。
0048デフォルトの名無しさんNGNG
本を読んでて疑問に思ったことがあったので質問です。
typedef struct stack{
int data[1];
int top;
int size;
}stack_t;
と言うスタック構造体があって、データをポップする関数があります。
そこで関数の最後に
return stack->data[--stack->top];
という記述があるのですが、これはトップのデータをリターンして、
トップを1つ下げるという意味なのでしょうか?
それともトップを1つ下げたところにあるデータをリターンするという意味なのでしょうか?
確か、記号の優先順位は--よりも[]の方が上だったような気がするのですが、やはり前者でしょうか?
ご教授お願いします。
0049デフォルトの名無しさんNGNG
return stack->data[--stack->top];

--stack->top;
return stack->data[stack->top];

data = stack->data[stack->top];
--stack->top;
return data;
この3パターンを試してみたら?
0050デフォルトの名無しさんNGNG
>>48
この場合--と[]の優先順位は関係ないよ。
0051デフォルトの名無しさんNGNG
>> 46
これでいいか? でなければ、他のやりかたで何とか汁
実行するとリソース(FileVersion)を書き換えてビルドするマクロ

ttp://www.codeguru.com/devstudio_macros/build_number.shtml

005248NGNG
>>49,50
ご返信ありがとうございます。
後者の方だと考えると物理的にポップが変になってしまう気がするんですが。
とにかく自分で色々と試してみますね。
0053デフォルトの名無しさんNGNG
>>51
それでいいです。ありがとうございました。
0054デフォルトの名無しさんNGNG
よく見るとヒラケだし
0055デフォルトの名無しさんNGNG
良スレ上げ
0056デフォルトの名無しさんNGNG
>>48
前置デクリメント
キーワード:後置、インクリメント
0057厨NGNG
win32apiでCopyFile、DeleteFile使い
ファイルを移動させると
やたらがりがり音がするので
Cで移動させたいのです。どうすればよいですか?
0058デフォルトの名無しさんNGNG
>>57
標準ライブラリは結局CopyFileやDeleteFile読んでるから、
標準ライブラリを使わないで作ることになるね。
ドライバ用命令つかったりハードウェアを直接操作したり。
うん。あんたには無理だ。
0059デフォルトの名無しさんNGNG
  ∧_∧
 ( ´∀`)< ぬるぽ
0060厨NGNG
>>58
ありがとう。同じ事なら止めときます。
0061デフォルトの名無しさんNGNG
構造体のメンバに
char *
を用意して(他にもbool int floatもある)

構造体自体を
mallocで任意の配列として確保します。
で、その後にメンバの
char *
を使って、任意の文字列をmallocしたいのです。
文字列の確保、格納、使用までは上手く行ってますし
アドレスをデバッグにかけてみても、メモリが壊れてる気配も有りません。
…しかし、freeする段階で(ちゃんと、確保した順と逆に開放してます。)
エラーが出ます。
DAMAGE debug heap.cだったと思います。
ヒープ領域で何かが起っているのでしょうか?
直し方の見当も付きません。
0062デフォルトの名無しさんNGNG
>>61
おそらく書いたコードに間違いがあります。
0063デフォルトの名無しさんNGNG
移動してからfreeしている?
0064デフォルトの名無しさんNGNG
>>57
MoveFile()
0065デフォルトの名無しさんNGNG
とりあえず解放してるとこのコードをコピペしる
0066デフォルトの名無しさんNGNG
free(malloc(12345);
0067デフォルトの名無しさんNGNG
free(malloc(12345));
0068デフォルトの名無しさんNGNG
typedefvoid(*FUNC)( . . .);
として、
FUNC FuncTbl[]={ hoge1,hoge2,hoge3, };
と関数テーブルをつくり、
hoge1() などは戻り値を返す関数であるとした場合、
long retval=FuncTbl[0]( );
のような事は出来ないのでしょうか。

要約すると、関数テーブルの関数を実行して戻り値を得ることが出来ますか、
ということなんですが・・・。

0069デフォルトの名無しさんNGNG
戻り値なしの関数を指すポインタなんだから、戻り値を返す関数(のアドレス)は代入できないし、それを呼んで戻り値を得ることもできないでしょ。
・・・・・・・多分。
0070デフォルトの名無しさんNGNG
typedef long (*FUNC)(.);
0071デフォルトの名無しさんNGNG
>>68
typedef long (*FUNC)(...); ならできる。
0072デフォルトの名無しさんNGNG
longは最低でも128bitにしてほしかった。
007368NGNG
みなさまレスどうもです。
そのまんまでしたね。
ありがとうございました。
0074デフォルトの名無しさんNGNG
>>68,71
一応、ellipsisだけでプロトタイプとして有効なのはC++。と突っ込んでおく。
0075デフォルトの名無しさんNGNG
シネヤ!
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>59
0076デフォルトの名無しさんNGNG
>>70-71ケコーン
0077デフォルトの名無しさんNGNG
memsetは危険だから使うなと聞いたのですが。
0078デフォルトの名無しさんNGNG
memset()が危なくて使えないようならCは使うな。
PerlとかVBでも使え。
0079デフォルトの名無しさんNGNG
>>78
そうします(T_T)
0080デフォルトの名無しさんNGNG
誰から?
0081デフォルトの名無しさんNGNG
標準関数の中で絶対に使ってはならないのはgetsだけ?
0082デフォルトの名無しさんNGNG
(σ・∀・)σ ゲッツ!
0083デフォルトの名無しさんNGNG
プッツ!
0084デフォルトの名無しさんNGNG
>>81
strcpyとかもさけるべき
strncpyを使う
0085デフォルトの名無しさんNGNG
>>84
strcpy使いまくってますが何か?
0086デフォルトの名無しさんNGNG
>>84
また話を蒸し返すのか?
0087デフォルトの名無しさんNGNG
strlcpy か astring を使おう。
0088デフォルトの名無しさんNGNG
strncpyは '\0' を付加しない仕様を知っていれば
危険じゃないだろう。
0089デフォルトの名無しさんNGNG
先頭に'\0'を入れてstrncat
0090デフォルトの名無しさんNGNG
ここは酷い釣堀ですね
0091デフォルトの名無しさんNGNG
基本的な質問なんですが、
今更C言語なんて何がいいんですか?
0092デフォルトの名無しさんNGNG
言葉遊び
0093デフォルトの名無しさんNGNG
保守
0094デフォルトの名無しさんNGNG
>>91  はぁ? 何言語と比べて?
プログラミング言語は色々あるからさぁ、
そんな質問じゃあどうしようもない。
0095デフォルトの名無しさんNGNG
ジエンウザ
0096デフォルトの名無しさんNGNG
95 デフォルトの名無しさん:03/04/12 15:47
ジエンウザ
0097デフォルトの名無しさんNGNG
>>47
普通は問題になるとは思いません。

1/b がレジスタに確保されれば、丸め誤差すら存在しないと思います。
少なくとも Intel 系 CPU の内部では 80 bits の精度で計算してますから。
0098デフォルトの名無しさんNGNG
C言語のおかげで毎月80万円の給料をもらっている。
明日からC言語が消滅したら・・・JavaかC++でも使うかな(でも給料は半減だ)
0099デフォルトの名無しさんNGNG
使いこなせない言語だと仕事こなせなくて給料下がるよね。
0100デフォルトの名無しさんNGNG
100ゲッツ!!!!
0101デフォルトの名無しさんNGNG
⊂⌒~⊃。Д。)⊃[NULL]
ヌルポゲッツ!!!!
0102デフォルトの名無しさんNGNG
   ( ・∀・)   | | ガッ 
  と    )    | |
    Y /ノ    人
     / )    <  >_∧∩
   _/し' //. V`Д´)/ ← >>101
  (_フ彡        /
0103デフォルトの名無しさんNGNG
n*n行列の計算をしようと思って
scanf("%d",&n);
int A[n][n],B[n][n],C[n][n];
としたら
エラー E2313 arb.cpp 10: 定数式が必要(関数 main() )
と出てきてしまいました
予め大きな数(10)を取っておいて
int A[10][10],B[10][10],C[10][10];
とするしかないのでしょうか?
0104デフォルトの名無しさんNGNG
>>103
"malloc 二次元配列" ぐらいでググれ。
0105デフォルトの名無しさんNGNG
>>103
10x10 程度なら、そうするのがいいでしょうね。
0106103NGNG
ありがとうございます
0107デフォルトの名無しさんNGNG
ここで質問する人ってのは、
自分で調べることも出来ない無能なんですか?
0108デフォルトの名無しさんNGNG
>>107
50% ぐらいはそう。
10% ぐらいは調べてもわからないから質問してる奴。
残り、40% はお前や俺みたいに C言語に関係ないことを書いてるアフォ。
0109結果の違う理由は?NGNG
#include <stdio.h>

void main( )
{
char a;
unsigned char b;

a = 0xFF;
b = 0xFF;

printf( "a = %X\n", a );
printf( "b = %X\n", b );
}
0110デフォルトの名無しさんNGNG
char aがsigned charとして扱われているから。
unsigned charとして扱われる処理系なら結果は等しい。
0111デフォルトの名無しさんNGNG
>>108
ぬるぽとかぬるぽ叩きとかな。
0112デフォルトの名無しさんNGNG
printf インテグラルプロモーション 符号拡張 ゼロ拡張
0113107NGNG
>>108
つまりその10%の人たちは調べても分からない無能なんですね。
0114デフォルトの名無しさんNGNG
>>113
つまり、質問者が無能かどうか、調べても分からない>>107は無能なんですね?
0115デフォルトの名無しさんNGNG
>>113
そういう意味では、無能だよ。
それがどうかしたのか ?
0116デフォルトの名無しさんNGNG
無能だっていいじゃない!
この子が元気ならそれでいいじゃない!
0117デフォルトの名無しさんNGNG
140 デフォルトの名無しさん:03/04/13 15:37
本のタイトルに「C言語」と入っている本はよくない、みたいなレスを見かけるんですが、
どうしてよくないんでしょうか?

スレ立てるまでもない質問でこんあのあったよ。 
誰か答えれる?
0118デフォルトの名無しさんNGNG
>>117
日本語だから。
0119デフォルトの名無しさんNGNG
ワラタ 
0120デフォルトの名無しさんNGNG
>>117
C言語は糞だからその解説本も糞だらけ
つまり良本なんて無いってこった

C言語と入ってない本の著者が遠まわしに宣伝してるだけかもしれんが
0121デフォルトの名無しさんNGNG
初心者です。

#include<stdio.h>
#include<math.h>


main()
{

double th,s;

th=1.57;
s=sin(th);
printf("%f\n",s);
}


でコンパイルすると

/tmp/ccSjmpTh.o: In function 'main':
/tmp/ccSjmpTh.o(.text+0x3d):undefined reference to 'sin'
collect2: ld returned 1 exit status

と表示されてしまいコンパイルできません。
どうすればよろしいでしょうか?
0122デフォルトの名無しさんNGNG
>>121
-lm
0123121NGNG
>>122様

ありがとうございます。できました。
-lmについて調べてみます。
0124デフォルトの名無しさんNGNG
初心者です。

グラフィックライブラリを使用する際の
#include<???.h> この???には何を入れればよいでしょうか?

それとコンパイル時の -??  この??には何を入れればよいでしょうか?
0125デフォルトの名無しさんNGNG
scanfって一般的になんて読まれてるんですか?
0126デフォルトの名無しさんNGNG
>>125
スキャンファンクション
0127デフォルトの名無しさんNGNG
>>125
すきゃんえふ
0128デフォルトの名無しさんNGNG
>125
スケァネフ
0129デフォルトの名無しさんNGNG
BMPの表示プログラムソースをヘッターまで読み出せるのですが
イメージデータがうまく読み出せません。
0130デフォルトの名無しさんNGNG
それはおきのどくに。
0131デフォルトの名無しさんNGNG
がんばれ。
0132デフォルトの名無しさんNGNG
初心者にはPascalを勧めようよ。
その方がいいよきっと。
0133デフォルトの名無しさんNGNG
昔はミリバールだったな。
0134デフォルトの名無しさんNGNG
おまえら優しいな
0135デフォルトの名無しさんNGNG
strncpyの使い方を教えてください。
0136デフォルトの名無しさんNGNG
>>129
もう少し情報がないと答えられない。
それと、これはC言語の問題なの?
0137デフォルトの名無しさんNGNG
>>120
10点。

>>120がC言語は糞と思う理由が述べられてない。
何言語より糞なのかも不明
最終行・・・さらに意味不明。
0138デフォルトの名無しさんNGNG
135 デフォルトの名無しさん:03/04/13 23:20
strncpyの使い方を教えてください。
0139デフォルトの名無しさんNGNG
(*(int (*)(char*,char*))strncpy)(s,s2);
0140デフォルトの名無しさんNGNG
>>135
「strncpyの使い方を教えてください。」と発言するときに使う。
0141デフォルトの名無しさんNGNG
Palmの辞書ソフト「KDIC」用に辞書ファイルのファイルサイズを減らそうとしているのですが
困ったことに。
コンバート元のフォーマットは

hoge /// piyo
hoge2 /// piyo2

のように見出し語とデータが「 /// 」で区切られている形になっています。で、
「hoge」の部分が11文字以上ならその行は削除するという方針で以下のように組んでみま
した。
が、これを走らせると出力サイズが8MBを超えたあたりで「"read"になることは
できませんでした」のエラーが出てしまいます。ちなみに変換元のテキストデータは20MB強。
fgetsなんかは、扱えるファイルサイズの上限なんかがあるんでしょうか?

int main()
{
FILE *rfp, *wfp;
char buf[4089];

wfp = fopen("d:\\convert.txt", "w");
if (rfp = fopen("D:\\eijirou\\waeiji.txt", "r")) {
while (fgets(buf, 4089, fp)) {
if ((strstr(buf, " /// ") - buf) <= 10) {
fprintf(wfp, buf);
}
}
}
fclose(rfp);
fclose(wfp);
}

0142デフォルトの名無しさんNGNG
>>141
 fprintf(wfp, buf);
は
 fprintf(wfp, "%s", buf);
か
 fputs(buf, wfp);
にするべし。
% を含む文字列があった場合に変になる。
多分、それで変なメモリ領域を読み出そうとして
そういうエラーになったんだと思う。
つまり、"read" はファイルの読み出しじゃなくて、
メモリアクセスの方のなのでは。
0143デフォルトの名無しさんNGNG
>>142
Win2000とかで出るやつだな。直訳らしいが酷い訳だよなぁ。

>>141
>>142の言うように、printf系関数のフォーマット文字列には定数を与えるのが鉄則。
0144143NGNG
> if ((strstr(buf, " /// ") - buf) <= 10) {

strstrの戻り値を確認していないのが気になる。
" ///"がなかった場合NULLが返るけど、NULLからあるポインタを引いた答えって決まっているのかな?
Win2000+VC++6.0の組み合わせでは上の条件式は" ///"が見つからなかった場合、真になるね。
0145143NGNG
真になっても構わないのならいいんだけど(^_^;)
0146デフォルトの名無しさんNGNG
>>141
while (fgets(buf, 4089, fp)) {

この部分は、
while (fgets(buf, 4089, rfp)) {
だな。
0147デフォルトの名無しさんNGNG
>>141
1行は4089で足りる? オーバーする行があったらどうなるか考えた?

#sedでもawkでも、perlでもできるような気がするんだけど...
0148デフォルトの名無しさんNGNG
>>141
つっこみどころ満載だなー!
0149デフォルトの名無しさんNGNG
#include <stdio.h>

void main( )
{
signed char a;
unsigned char b;

a = 0xFF;
b = 0xFF;

printf( "a = %X\n", a );
printf( "b = %X\n", b );
}

結果
a = FFFFFFFF
b = FF

どうして結果が違いますか?
0150デフォルトの名無しさんNGNG
>>149
ネタ?
-1と255を代入してそれをprintf()でintに変換して表示してるからだよ。
0151デフォルトの名無しさんNGNG
>>149
charをshort にしたら同じになるよ(w
0152デフォルトの名無しさんNGNG
long型の変数に入っている数値を
文字列に変換したいのですが、
何か簡単にできる方法はありませんか?

1桁づつアスキーコードに変換するという方法は思いつくのですが
よろしくお願いします
0153デフォルトの名無しさんNGNG
>>152
sprintf
0154デフォルトの名無しさんNGNG
>>153
サンクス
0155141NGNG
レスどうもでした。
>>142さんの方法で無事解決です。

総ツッコミ受けているように明らかに酷いソースなんですが、自分の環境下で一回満足に
動けばそれでいいというものなのでこんな感じに・・・。こういう場合でもちゃんと作るべき?
0156デフォルトの名無しさんNGNG
>>155=141
そういうときはawkでも使うのが無難。
cで書くにしても、普段からちゃんと書く癖をつけておけばバグが減ると言うものです。
0157デフォルトの名無しさんNGNG
typedef struct CELL *LIST;
struct CELL {
int element;
LIST next;
};
これを用いて
整数のリストを引数とする
再帰的な選択ソートのプログラムを教えてくれませんか?
0158デフォルトの名無しさんNGNG
C/C++の宿題やらせてください。おながいします
http://pc2.2ch.net/test/read.cgi/tech/1045074808/l50
0159157NGNG
すいません。書き込むとこ間違えました。
0160デフォルトの名無しさんNGNG
代入が起るときは
代入先の変数の型に自動で変換される ってことは
イメージ的には代入元を代入先の型にキャストした値が
代入されると考えて良いでしょうか?
0161デフォルトの名無しさんNGNG
型格上げできる組合せは限られてるわけだが、許される組合せに関して言えば
それでいい。
0162160NGNG
>>161 助言ありがとうございました。安心できました。
0163デフォルトの名無しさんNGNG
計算方法がわかりません。

int value1 = 800000;
double value2 = 0.000000125;

として、

printf("result = %d\n", (int)((double)value1 * value2));

とすると、結果は1とならず0となります。
なぜ1にならないのでしょうか?
0164デフォルトの名無しさんNGNG
>>163
800000*0.000000125=0.1ですよ。。。
0165デフォルトの名無しさんNGNG
>>164
あ、8000000でした。すみません。

関係ないけど、スレタイ「開け」になってるね。
0166デフォルトの名無しさんNGNG
>>165
知らなかったよ(TT)
0167163NGNG
同じ計算を0.1×10と行って1桁ずつ増やしていったら
tmp1 = 0.000001;
tmp2 = 1000000;
の時点で結果が0になってしまった。
キャストの問題でしょうか?
0168デフォルトの名無しさんNGNG
http://www.geocities.co.jp/Playtown-Denei/4338/Cprint.html
0169デフォルトの名無しさんNGNG
浮動小数点演算がぴったり整数値になると思っちゃイヤン
0170デフォルトの名無しさんNGNG
>>167
gccだと最適化の程度によって答えが変わる罠。

冗談はさておき、小数の方が2の負のべき乗になっていないために
演算精度の関係で積が(1に極近い)1未満になっていると思われ。
最適化を強くすると事前に積を求めてしまうのでイミディエイトの1になってしまう。

というわけで、キャストのときは精度に注意しましょう。
0171デフォルトの名無しさんNGNG
>>168
そのごみのようなページは何?
0172163NGNG
>>170
具体的にどうキャストすれば、int型で出力できるでしょうか?
0173デフォルトの名無しさんNGNG
>>163

>printf("result = %d\n", (int)((double)value1 * value2));
を
printf("result = %d\n", (int)((double)value1 * value2 + 1e-10));
とでもしてみたら?
0174163NGNG
>>173
1e-10で帳尻が合うのでしょうが、なんか納得いかないです。
すみません。
一旦変数に入れるしか方法は無いかもしれないですね。
0175デフォルトの名無しさんNGNG
%gで1になった・・・
0176デフォルトの名無しさんNGNG
0.000001→double からすでに劣化してるしな・・
0177デフォルトの名無しさんNGNG
>>163
実数演算を厳密にやろうとしたら常に精度に注意を払わないといけなくなる。
例えば、0.1を10回足しても1にはならないという現象も出てくる。
10進数の小数を2進数で表現する以上、避けては通れない道だと思うしか。
0178デフォルトの名無しさんNGNG
>>175
%gだと高々6桁程度の精度で丸めるからな。
>>176
そだね。
逆に、2^(-12)は劣化しないけど。
0179163NGNG
int main(void)
{
int value1 = 8000000;
double value2 = 0.000000125;
double result;

result = (double)value1 * value2;

printf("result = %d\n", (int)result);

}

結局こうしてみました。

>>175
int型で表現したかったので、すみません。。説明不足でした。
>>177
そうですね。今後気をつけます。

皆様ありがとうございました。
0180デフォルトの名無しさんNGNG
単にintにキャストじゃなくて、近い整数に丸めてからの方が安心。
rintかround。
0181デフォルトの名無しさんNGNG
そうそう。intにするときは「丸めない」からね。xx.yyy...という数のxxの
部分をintに入れるだけだよ。だから179のコードでも結果は同じだと思う。
0182デフォルトの名無しさんNGNG
>>179 で解決する理由がわかりません。
単に他の変数に放り込んだだけのように見えます。
本質的に >>163 とどう違うのか、誰か教えてください。
0183デフォルトの名無しさんNGNG
IntelCPU系だと、内部演算の精度がdouble以上あるから
一旦doubleの変数への丸めが入る段階で巧くいくこともある。
勿論、巧くいかないこともあるからεを足す工夫は必要。

round()を使ってもいいが、(int) (double値 + 1e-15)でも充分。
0184デフォルトの名無しさんNGNG
つか、>>163が"%d"で書こうとしていたところを見ると、この乗算結果が
数学的には整数になることが元々予測できてたんじゃないか?
技術系の計算ではたまにあるよね、そういうこと。
そういったシチュエーションだったら、1.e-10とか1.e-15とかいう半端な数を
突然持ち出すより、いっそ「四捨五入」という意味で、
  (int)(double値 + 0.5)
とする方がスッキリ納得してもらえるんじゃない?
0185デフォルトの名無しさんNGNG
質問。
#define fname "data.txt"
....
strcat(buf,fname"がないよ");*/strcpyでも良い/*
....

という第2引数書き方はC言語的にやって良いのでしょうか?
文字列の扱いはあまりよくわからないので・・・。
0186デフォルトの名無しさんNGNG
突込み所満載だな。

文字列は、"abc" "def"のように書くと"abcdef"と解釈される。
なので、
fname "がないよ"は問題なし。
しかし、
・define名は大文字にするのが一般的
・コメントの書き方が変
・一般的にstrcpy()でもstrcat()でもいいなんてことはないはず
・もしそうだとしたらどこかに無駄があるかもしれない
・そもそもsprintf()を使うほうが無難なケースなのかもしれない

とまぁ、このくらい書いておけば後で誰か突っ込んでくれるだろう。
0187デフォルトの名無しさんNGNG
> ・define名は大文字にするのが一般的
これだけ、他のつっこみとレベルがちとズレてるな
とチャチャ入れ
0188デフォルトの名無しさんNGNG
>>185

char sz[] = {"/*
#define fname "data.txt"
....
strcat(buf,fname"がないよ");*/strcpyでも良い/*
....
*/"};

こんな感じになってるなら問題ない。
0189185NGNG
>186
thx! 謎が解けました。
コメントはこのスレ用に書いたものだったけど、どうもやり方間違えたようですな。
sprintfでも良かったんですけど、使ったことの無いやつを試してみたかったのです。(汗
ともあれ、ありがとうございました。
0190デフォルトの名無しさんNGNG
>>188
ありありだろ(w
0191デフォルトの名無しさんNGNG
おおありなごやはしろでもつ
0192デフォルトの名無しさんNGNG
伊勢は津でもつ津は伊勢でもつ
0193デフォルトの名無しさんNGNG
charの練習で以下の文をつくりますた
void change(char* a){
 a = "AAAAAAAAAAAAAAAAAA";
}
int main(){
 char *test1;
 test1 ="HelloWorld.";
 change(test1);
 printf("test1 : %s\n", test1);
 return 0;
}

test1の内容を"AAAAAAAAAAAAAAAAAA"
に変えようとしてるのですが"HelloWorld."
のままです。
なんででしょう?

0194デフォルトの名無しさんNGNG
>>193
void change(char** a){
 *a = "AAAAAAAAAAAAAAAAAA";
}
int main(){
 char *test1;
 test1 ="HelloWorld.";
 change(&test1);
 printf("test1 : %s\n", test1);
 return 0;
}
0195デフォルトの名無しさんNGNG
>>194
それだと動きました。どうもです。
でも、どうしてポインタが2つも必要なんでしょう?
0196デフォルトの名無しさんNGNG
>>195
ポインタ変数に書き込んでもらう必要があるから。

int 変数に書き込んでもらうには...

void change(int *x){
 *x = 123;
}

int main(){
 int a;
 a = 0;
 change(&a);
 ...
}

とするのと同じ。
今回は、たまたまポインタ変数だったから 間接演算子 '*' が2個並ぶ。
0197C初心者NGNG
本当に超初心者的な質問で申し訳ないのですが、神の方教えて下さい。
appleを入力した数の分だけ表示させるというプログラムを作ろうと
思って下のようなソースを書いたのですが、実行すると
no newline at end of fileと出ます。何処がおかしいのでしょうか?
間違ってる箇所がどうしても見つからないので分る方ご教授下さい。
ちなみにコンパイラはgccでCygwinで実行してます。他のソースを実行する
際は問題は起きてません。

#include <stdio.h>
main()
{
int a , b ;
scanf("%d" , &a);
for( b = 0 ; b < a ; b++ )
printf("apple ");
}
0198デフォルトの名無しさんNGNG
>>197
最後に改行でもいれておあげ。
0199デフォルトの名無しさんNGNG
>>197
最後に改行を加える。
0200デフォルトの名無しさんNGNG
なんで最後に改行が無いとwarningになるの?
0201デフォルトの名無しさんNGNG
>>200
ハッカーは改行で終わっていないと気持ち悪くなるらしいです。
0202デフォルトの名無しさんNGNG
>>201
それだけの理由なの!?
0203C初心者NGNG
198,199の方々の神に感謝。
きちんと実行できますた。
こんなくだらないことで2時間も延々と迷ってた自分が恥ずかしくなりました。
やっぱり基礎知識は重要ですね。本当今日が今までで一番2チャンが有効活用できますた。
0204201NGNG
>>202
規格で改行で終わっていなければならないと決められているから。とこのスレか前スレで誰かが書き込んでいたけど、本当かどうかは知らない。
0205デフォルトの名無しさんNGNG
if(ferror(fin)) perror(NULL);
としたいのですが、ferror() によって errnoが書き換えられる事はないのでしょうか?
0206デフォルトの名無しさんNGNG
ない
0207デフォルトの名無しさんNGNG
>>204
ファイルの終了を想定しているのか?
0208デフォルトの名無しさんNGNG
>>203
別に改行いれなくても実行できるっしょ
0209デフォルトの名無しさんNGNG
C そのものはフリーフォーマットでも、プリプロセッサは行処理するから・・・とか?
0210デフォルトの名無しさんNGNG
ホワイトスペースの文字コード(isspaceが真を返す範囲)を得るにはどうしたらよいですか?
# setlocale 対応で
0211デフォルトの名無しさんNGNG
char ch[256];
for( i = 0; i<255; i++) ch[i] = isspace(i);
でとれる。
0212デフォルトの名無しさんNGNG
なんで255を除くの?
0213デフォルトの名無しさんNGNG
>>212
255は、どのロケールでもisspaceで真にならないから。


とボケてみる。
0214デフォルトの名無しさんNGNG
夜分すいません。
WinXP,BCC32で、
--------------------
#include <stdio.h>
void main(void){
char str[15]="abcdefghijk";
int *p;
p=str;
putchar(*p);
putchar(*(p+1));
putchar(*(p+2));
putchar('\n');
}
--------------------
解説書ではabcと出力されるとあるのですが、aeiと出力されました。
変数を変えて+3,+4にしても1ずれるはずのものが4づつずれます。
4飛びになってしまうのはなぜなのでしょう?
0215デフォルトの名無しさんNGNG
それは p が int* だからです。
char* p にすればよろし。
理由は自分で調べれ...
0216デフォルトの名無しさんNGNG
>>215
手がかりThx.
お礼に何か差し上げたいところですが何も無いので跳躍します。
0217デフォルトの名無しさんNGNG
C言語ってなんですか?
どこかの国の言葉ですか?
エスペラントみたいな?
0218デフォルトの名無しさんNGNG
とりあえず名前すらも知らんやつはプログラマじゃないな
0219デフォルトの名無しさんNGNG
>>217
 | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
 | 1点!!!!    |
 |_________|
    ∧∧ ||
    ( ゚д゚)||
    / づΦ
 \ (___ノ
0220デフォルトの名無しさんNGNG
配列を使って縦50、横6で数字を0から並べたいのですがどうすればよろしいでしょうか?
0221デフォルトの名無しさんNGNG
>>220
配列にタテヨコはないが、二次元配列を使えばいい。
0222デフォルトの名無しさんNGNG
ありがとうございます、二次元配列を使って作っているのですが、どうも・・うまく動かないのです。
0223デフォルトの名無しさんNGNG
>>222
ソース晒しキボンヌ
0224デフォルトの名無しさんNGNG
# define MAX_ROWS 6
# define MAX_COLS 50
#include <stdio.h>
int main()
{
int table [MAX_ROWS][MAX_COLS];
int x;
int y;
for (x= 0; x<MAX_ROWS; x++)
for (y= 0; y<MAX_COLS; y++)
{
printf("%d ", table[MAX_ROWS][MAX_COLS]);

}
fflush(stdin);
getchar();

}



超初心者ですみません。
0225デフォルトの名無しさんNGNG
>>224
#define MAX_ROWS 6
#define MAX_COLS 50
#include <stdio.h>
int main()
{
  int table [MAX_ROWS][MAX_COLS];
  int x, y;
  for (x= 0; x<MAX_ROWS; x++) {
    for (y= 0; y<MAX_COLS; y++) {
      printf("%d ", table[MAX_ROWS][MAX_COLS]);
    }
    printf("\n");
  }
  return 0;
}
0226デフォルトの名無しさんNGNG
table[MAX_ROWS][MAX_COLS]は
table[x][y]でしょ。
0227デフォルトの名無しさんNGNG
tableに代入してないよ?
0228デフォルトの名無しさんNGNG
二つのfor文が上下逆さじゃない?
0229デフォルトの名無しさんNGNG
>>223
#define MAX_ROWS 6
#define MAX_COLS 50
#include <stdio.h>

int main(){
int table [MAX_ROWS][MAX_COLS];
int a=0,x,y;

while(a<300){
for(y=0;y<MAX_COLS;y++){
for(x=0;x<MAX_ROWS;x++){
table[x][y]=a;
a++;
printf("%d ",table[x][y]);
}
printf("\n");
}
}
return 0;
}

汚いけど...
0230デフォルトの名無しさんNGNG
>>229
ありゃ?これで...

#define MAX_ROWS 6
#define MAX_COLS 50
#include <stdio.h>

int main(){
int table [MAX_ROWS][MAX_COLS];
int a=0,x,y;

while(a<300){
for(y=0;y<MAX_COLS;y++){
for(x=0;x<MAX_ROWS;x++){
table[x][y]=a;
a++;
printf("%d ",table[x][y]);
}
printf("\n");
}
}
return 0;
}
0231デフォルトの名無しさんNGNG
>>229,>>230
だめぽ...
0232デフォルトの名無しさんNGNG
>>231
while{}は不要。
xとyの二重ループで300回じゃん。
0233デフォルトの名無しさんNGNG
皆さんありがとうございます。難しいですね、プログラミングって
0234デフォルトの名無しさんNGNG
プログラミングは積み重ねだからね。

あ、こういう質問は宿題スレのほうがいいかも。
宿題じゃなくても。
0235デフォルトの名無しさんNGNG
>>232
そういえばそうですね
0236デフォルトの名無しさんNGNG
別に配列使わなくてもループだけでいいのでは。
0237喧嘩王 ◆52.FsIEe7o NGNG
for(y=0;y<MAX_COLS;y++){
  for(x=0;x<MAX_ROWS;x++){
    table[x][y]=a++;
    printf("%d ",table[x][y]);
  }
  printf("\n");
}
プ━( ´,_ゝ`)━( ´,_ゝ)━( ´,_)━( ´,)━( )━m9( ゚,_ゝ゚)プッ!!
0238デフォルトの名無しさんNGNG
>>236
配列使ったのは、たぶんあとで拡張するために。

>>237
%3d にするとケタがそろうよ。
0239デフォルトの名無しさんNGNG
%3dを使うとなぜ桁がそろうようになるのですか?
0240山崎渉NGNG
(^^)
0241デフォルトの名無しさんNGNG
>>239
へるぷ嫁
0242デフォルトの名無しさんNGNG
アドレスからそのアドレスに割り当てられている変数名(文字列)が
取得したのですがどうすればいいですか?

int a;
int b;
int c;
:
:
printf("a=%d",a);
printf("b=%d",b);
printf("c=%d",c); ←こいつらをLOOPさせて1行にできないか?
0243デフォルトの名無しさんNGNG
printf("a=%d b=%d c=%d", a, b, c);
0244デフォルトの名無しさんNGNG
printf("c=%d ", c, printf("b=%d ", b,printf("a=%d ", a)));
0245242NGNG
実際はa,b,cの3種類ではなくて
1万個ぐらいの変数(!=配列)があるんです。
1万行のprintfを書くかしかないのか・・・
0246デフォルトの名無しさんNGNG
設計を見直せ
0247デフォルトの名無しさんNGNG
環境依存で良ければ、int i, a=1, b=2, c=3, *p;
if(a<c)p=&a;
else p=&c;
for(i=0;i<3;i++)
printf("%d ", *(p+i));
0248デフォルトの名無しさんNGNG
>>247 それは何のジョークでつか?
0249デフォルトの名無しさんNGNG
1万もの変数って何の変数?
0250デフォルトの名無しさんNGNG
つうかマルチポストうざい
0251デフォルトの名無しさんNGNG
1マンコぐらいの変数でがたがた言ってる奴って
大規模システムの開発とかやったことないんじゃねぇの?プッ
0252デフォルトの名無しさんNGNG
int i;
while((i = getchar()) != EOF)
printf("printf(\"%c=%%d\",%c)", i, i);

でコードの自動生成はどうだ?
0253デフォルトの名無しさんNGNG
sizeof(int) * 10000 = 40000byte = 40kbyte

ところで、そんなにたくさんの変数の命名規則はどんな感じ?
0254デフォルトの名無しさんNGNG
>252
変数名手打ちするそれの、どこが自動生成なんだと小一時間...(ry
0255デフォルトの名無しさんNGNG
さっさと配列なり適切なものに直せ
0256sageNGNG
>255
例えばお前はソースを追っていて配列の255番目に入ってる値の意味が何なのか
すぐにわかるか?いちいち調べる事になるだろ?
コーディングする時も大変な事になるぞ。
名前からその変数の持つ意味が直感でわかるような変数名が理想なわけ。

素人はすっこんでろ。
0257デフォルトの名無しさんNGNG
>>256
普通インデックスに名前付けるだろ
0258sageNGNG
>>256
だからさっさと直感で分かるような変数名に直せっつってんだよ。

職業アマグラマは素人に戻れ。
0259デフォルトの名無しさんNGNG
>>256
適切な物も選択できないのか。
0260デフォルトの名無しさんNGNG
>>242
やりたいこととコードが合っていないと思うのは俺だけか?
0261260NGNG
つーかCじゃ不可能だろ・・・・
コンパイル&リンクしたらもう変数名なんて無意味なものになるし。
0262デフォルトの名無しさんNGNG
情報を小出しにしないで、もっとちゃんと説明しる。

じゃなきゃ、答えられないって。
0263260NGNG
逆(変数のアドレスを列挙する)ならできなくもないけどね。
int a;
printf("aのアドレスは%pです。\n",&a);
0264デフォルトの名無しさんNGNG
アドレスから変数名を割り出したい時ってどんな時だろう。
0265242NGNG
不可能という事のようですので
1万行書きます・・・

ありがとうございました。
0266デフォルトの名無しさんNGNG
struct{char*name,int*ptr}pee[]={"a",&a,"b",&b,"c",&c,...};
for(i=0;i<sizeof(pee)/sizeof(pee[0]);i++)
printf("%s=%d",pee[i].name,*pee[i].ptr);
こんな感じにしといて、1行目のテーブルは自動生成か人海戦術で作れ。
0267デフォルトの名無しさんNGNG
>>265
ねぇねぇ、どんな状況なの?ものすごく興味があるんだけど。
0268242NGNG
>264
242のように全変数を変数名付きでダンプさせたい時です。
0269デフォルトの名無しさんNGNG
>>268
>>242は変数名と変数の値を列挙しているだけですが。
0270デフォルトの名無しさんNGNG
なんでそんなことをしたいのか聞いているんだと思うけど。
0271デフォルトの名無しさんNGNG
もうほっといてやれよ・・・
0272242NGNG
えーとですね・・
さまざまなシステムから使用される共有メモリ変数があるんです。
(ある領域に連続して宣言されている)
その変数はルール上読み込み専用としてるのですが値が壊れる事があるのです。
で、どこで壊れるのか、どのアドレス位置から壊れているのかを
調べる為に全領域ダンプさせたいのです。

で、今後もこのような事が想定されるので
単純にメモリの中身をダンプするのでは無く
変数名=値
という形でダンプする関数を作りたかったわけです。


0273デフォルトの名無しさんNGNG
>>272
デバッグ情報使えよ。MAPファイルとか。
0274デフォルトの名無しさんNGNG
ソースから変数定義を抜き出すプログラムでもつくってソースつくりゃいいじゃんか
0275デフォルトの名無しさんNGNG
>>272
その壊れた領域のアドレスを元にそれを参照している変数(言い方がおかしいな・・・)の名前を得たいってことか?
0276242NGNG
>>274
当然1万行手打ちとかコピペなんて作業はしてませんよ。

ただ同じようなコードが1万行続くのがスマートじゃないなと思って
質問してみただけなんですよ。

ほかになんかあります?
0277デフォルトの名無しさんNGNG
>>276
そういうツールを探すか作ればよい。
0278242NGNG
>275
アドレスから変数名がわかれば
FOR文で回しながら
変数名=値
をダンプできるなーと思ったんです。

>277
はい、とっくに作って実行済みです。
0279デフォルトの名無しさんNGNG
#include <stdio.h>

typedef struct {
char name[20];
int height;
float weight;
} creature;

int main(void)
{
creature nullpo = {"Nullpo", 60, 30.0};

printf("&nullpo = %p\n", &nullpo);
printf("&nullpo.name =%p\n", &nullpo.name);

printf("nullpo = %u, %p, %c, %s\n", nullpo, nullpo, nullpo, nullpo);

printf("name : %s\n", nullpo.name);
printf("height : %d cm\n", nullpo.height);
printf("weight : %.1f kg\n", nullpo.weight);

return 0;
}
0280279NGNG
//--------------------------------------//
&nullpo = 0064FDE8
&nullpo.name =0064FDE8
nullpo = 1819047246, 00006F70, , (null)
name : Nullpo
height : 60 cm
weight : 30.0 kg
//--------------------------------------//
構造体の勉強に取り掛かったのですが、詰まりますた。
nullpoとnullpo.nameのアドレスは等しいのにnullpoの中身を
見ると、(null)などと出てきて・・・
nullpoの中身の数字は何を表しているのか、教えて下さい。
お願いします。
0281動画直リンNGNG
http://www.agemasukudasai.com/movie/
0282デフォルトの名無しさんNGNG
>>279
nullpo構造体の先頭アドレスだろ。
0283282NGNG
ごめんウソ。
0284282NGNG
つーか、構造体変数の値を参照しようとしたことない。
代入にしか使ったことないや。 nullpo2 = nullpo;
0285279NGNG
レスどうもです。
これは、知る必要の無い事なのでしょうか?
それとも、私は何かとんでもない勘違いをしているのか・・・
とりあえず、勉強を進めまつ。
0286デフォルトの名無しさんNGNG
printf ("nullpo = %c, %s\n", *((char *) &nullpo), (char *) &nullpo);
これで動くでしょ。
0287デフォルトの名無しさんNGNG
>>242
search & replace & #define
0288279NGNG
>>286
ありがとうございます。
わかりました。
0289デフォルトの名無しさんNGNG
if(10==010)
printf("同じ\n");

同じと表示されないんですけど。
0290デフォルトの名無しさんNGNG
010って8進数じゃないの?

10 == 8
0291デフォルトの名無しさんNGNG
>>251
というか、万単位の (おそらく静的な) 変数を
寿命も考えずに維持するというのは
莫迦のすることですよ。
0292デフォルトの名無しさんNGNG
いや莫迦にはできない。並外れた根気が必要だもの。むしろ電波だろ。
0293bloomNGNG
http://www2.leverage.jp/start/
0294デフォルトの名無しさんNGNG
>>291
一つの関数の中に自動変数が一万個以上あるんですが・・・・
ちなみにその関数は43000行程度あります。
0295デフォルトの名無しさんNGNG
その関数をまず捨てろ。
一から書き直せ。
0296デフォルトの名無しさんNGNG
特定のアプリケーションがインストールされていたり、インストールされたら何か反応するプログラムを作りたいのですけど
とりあえずどうすればいいでしょうか?
0297bloomNGNG
http://www2.leverage.jp/start/
0298デフォルトの名無しさんNGNG
#include <stdio.h>
int main()
{
if(fopen("/usr/local/bin/prog","r"))
printf("インストールされているね\n");
else
printf("インストールされていないみたい\n");

return 0;
}
0299デフォルトの名無しさんNGNG
>>295 がいいこと言った!

>>298
あけたらとじようみんなのファイル。
0300デフォルトの名無しさんNGNG
>>299
ファイル閉じる以前の問題があると思わないか?
0301デフォルトの名無しさんNGNG
>>296
C言語にはインストールと言う概念はありません。
OSが特定できればそれを知る手段があるかもしれないけど。

>>300
ネタだから構わないじゃないか。
0302デフォルトの名無しさんNGNG
fcloseしなくても、プログラムが終了すれば自動的に
クローズされるんだけどね。
0303デフォルトの名無しさんNGNG
#include <unistd.h>
#include <stdio.h>

int main ()
{
while (!fopen ("/usr/local/bin/prog", "r"))
sleep (60);
printf ("インストールされているね\n");
return 0;
}

これで何かまずいの?
終了したときにcloseしてくれるとか読んだような気がするんだけど
0304デフォルトの名無しさんNGNG
それはさすがにまずいだろよ
0305デフォルトの名無しさんNGNG
>>304
その理由を書いてくれないと。
0306デフォルトの名無しさんNGNG
>>303
fopen() の挙動について小一時間調べとけ。
0307デフォルトの名無しさんNGNG
Pascal初心者ですが、参考になるサイトなど教えてください。
0308デフォルトの名無しさんNGNG
>>307
何故ここで聞こうとしたのか、教えてもらいたいな
0309デフォルトの名無しさんNGNG
>>307
http://www.yahoo.co.jp/
http://www.google.co.jp/
http://pc2.2ch.net/tech/
この辺が参考になると思うよ。
0310デフォルトの名無しさんNGNG
scanfは空白文字も改行としてしまうので、それを解決するためにwhile、getchar、
getsなんかを組み合わせた2行ぐらいのがあった思いますが、教えてください。
0311デフォルトの名無しさんNGNG
>>310
こんなのはどうだ?

char buffer[256];
fgets(buffer, 256, stdin);
0312デフォルトの名無しさんNGNG
>>310
空白は改行にはならないぞ。
空白を含む文字列を取得したいなら、scanf()のマニュアルをよく読め。

念の為に言っておくが、「printf()とscanf()のフォーマット文字列は
互換性がある」だなんて書いてある入門書は捨てろ。
0313デフォルトの名無しさんNGNG
名前空間の使い方を教えてくだされ。
0314デフォルトの名無しさんNGNG
>1
0315デフォルトの名無しさんNGNG
namespace hoge;
0316デフォルトの名無しさんNGNG
>>276
UNIXのfileコマンドの
magicファイルを自動生成するプログラムじゃ駄目ですか?
0317デフォルトの名無しさんNGNG
>>301
windows
0318310NGNG
お答えありがとうございます。
>>311 変数の宣言を含まずに2行だったような。EOFも使ってたような。
>>312 [\n]とか書くとできるのは知っているのですが、scanfでは無いのが
急に気になりだしてしまったので。
while((c=getchar())!=EOF)
こんなのを含んでたような。思い出せません。
0319デフォルトの名無しさんNGNG
なんだ、改行を探したいのか?
もう少し何がしたいのかはっきりしてくれ。
0320デフォルトの名無しさんNGNG
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define MAX_Q 20 /*表示する問題の個数*/
#define MAX_LINE 128 /*入力行の最大数*/

void main(void);
void kuku(int questno);
void print_result(void);

int good_answers = 0; /*正解の個数*/

/*
* 関数mainは九九の練習をする。
* 問題をMAX_Q回繰り返す。
* 最後に結果を表示する
*/
void main(void)
0321デフォルトの名無しさんNGNG
{
int i;
float rate;

/*現在時刻を使って乱数の「種」を得る*/
srand((unsigned int)time(NULL));

printf("これから九九の問題を %d 問出します。\n",MAX_Q);
good_answers = 0;
for (i = 0; i < MAX_Q; i++) {
kuku(i);
}
rate = good_answers * 100.0 / MAX_Q;
printf("問題は %d 問ありました。\n", MAX_Q);
printf("%d 問は正解したよ(゚〇゚)マルー \n",good_answers);
printf("でも%d 問間違ったよん♪バーカ(゚д゚)マズー \n", MAX_Q - good_answers);
prontf("正解率 %0.1f %%です。\n",rate);
printf("\n");
printf("ごっくろ〜さん♪")
0322デフォルトの名無しさんNGNG
}

/*
*関数 kukuは九九の問題を一問出し、答えを待つ。
*正答、誤答の別を表示する。
*/
void kuku(int questno)
{
int x, y, result;
char buffer[MAX_LINE];

x = rand() % 9 + 1;
y = rand() % 9 + 1;
printf(" [第 %d 問] %d × %d =", questno + 1, x, y,);
fflush(stdout);
gets(buffer);
result = atoi(buffer);
if (x * y == result) {
printf("うむ、それでただしいのだ。\n");
good_answers++;
}
else {
printf("ざ〜んねん(みのもんた風に)\n");
}
printf("\n");
}
0323デフォルトの名無しさんNGNG
mainも宣言するとは珍しいな。
0324デフォルトの名無しさんNGNG
学校で強制的に打たされたプログラムでつ
0325デフォルトの名無しさんNGNG
>>320
そのプログラム、いとも容易く暴走できるな。
0326デフォルトの名無しさんNGNG
static void hoge(void)
という関数があるのですが。
戻り値が static void になっているのは
どういうわけなのか理解できません。

どういう都合があるのでしょう。
0327デフォルトの名無しさんNGNG
>>326
関数内と関数外ではstaticの意味が全く違う(なんでそうしたんだろうね??)。
staticがついているので、そのhoge関数はほかのファイルからは呼び出せない。
0328326じゃないけどNGNG
>>327
おぉー、なるほど。
勉強になった。
0329デフォルトの名無しさんNGNG
externの逆ということでintern(al)にすればよかったのにな。
0330デフォルトの名無しさんNGNG
C言語はなるべくキーワードを増やさない方針なのだ、とどっかで聞いた
0331デフォルトの名無しさんNGNG
autoなんて無意味なキーワードを加えているくせに ゴルァヽ(`Д´)ノ
0332ポインター処女NGNG
ポインターはどんな時使うのか教えろ
0333デフォルトの名無しさんNGNG
ポインターを使うたびに5セントもらってたら今頃俺は大金持ちだぜ。
0334デフォルトの名無しさんNGNG
>>331
auto は、無意味じゃないぞ。
あそこには、static と auto が書けて、省略時解釈が auto になってるだけだ。
0335326NGNG
>>327
ほっほー、わかりました。
0336デフォルトの名無しさんNGNG
>>294
良く出来たコンパイラだな〜。
でも最適化は弱そうな雰囲気。
0337デフォルトの名無しさんNGNG
未経験27歳でPGになります。
PGって、思ったより簡単みたいだね。
みんな!応援してね。
http://school2.2ch.net/test/read.cgi/job/1049610473/
0338デフォルトの名無しさんNGNG
最強の開発言語
http://www.borland.co.jp/delphi/personal/
0339デフォルトの名無しさんNGNG
なんで配列の添え字は符号ありなの?
0340デフォルトの名無しさんNGNG
>>339
配列の添え字にunsignedしか使えなかったら不便じゃん。
0341デフォルトの名無しさんNGNG
size_tは符号なしなのに!!
0342デフォルトの名無しさんNGNG
未経験27歳でPGになります。
PGって、思ったより簡単みたいだね。
みんな!応援してね。
http://school2.2ch.net/test/read.cgi/job/1049610473/
0343デフォルトの名無しさんNGNG
初心者   Delphi
中級者   VB.NET C#.NET
上級者   C++
男根世代  C VB
女子高生  アッセンブラ
乞食     Perl
朝鮮人   Java
0344デフォルトの名無しさんNGNG
Cのrand()関数を呼び出すとき乱数表から順番に取ってきてるんでしょうけど
初期値を変えられないですか?
runした時間によって変えたりしたいんですけど
0345デフォルトの名無しさんNGNG
>>344
srandじゃ。
0346デフォルトの名無しさんNGNG
>>344
一応言っておこう。
rand() 関数は、おそらく乱数表を使ってはいない。
世の中には線形合同法という洒落込んだ名前の付いた乱数生成アルゴリズムがあり、
乱数は計算によって生成されている。
まぁ、どのアルゴリズムを使っているかはコンパイラ次第であり、確実に線形合同法
が使われているかどうかは俺の知識を超えるがな。

でもって、たいていのアルゴリズムでは、乱数を利用するための初期値が必要になる
のだが、そのために srand(int) という関数が標準で実装されている。
話をまとめると、
「rand() を使うプログラムには main() の先頭に srand(time(NULL)) を書け!」
ということだ。マジレス終了。
0347デフォルトの名無しさんNGNG
>>345
>>346
ありが�d
0348デフォルトの名無しさんNGNG
>>346
srandの引数はunsigned intだぞ。
0349デフォルトの名無しさんNGNG
srand(clock()) と言ってみるテスト
0350デフォルトの名無しさんNGNG
環境依存だけど、PIDを種にするのってあかん?
0351346NGNG
>>348
わ。ほんとだ。誤文スマソ。
まーでも time() の戻り値も time_t なワケだしどーでもいーや〜。と逝ってみるテスト
0352デフォルトの名無しさんNGNG
C言語で円を書きたいんですけどグラフィック関数使うんですよね?
図形を書くときって、特別な設定が(何かをインストールするとか)必要なんですか?
0353デフォルトの名無しさんNGNG
>>352
今の環境にそういうライブラリがなければ入手してインストールする。
0354デフォルトの名無しさんNGNG
>>350
(・A・)イクナイ
起動時にスクリプトなんかから自動的に起動されるプロセスの場合、
毎回毎回 PID が同じになる。慣習通り、time と組み合わせるのがいいと思うよ。
0355デフォルトの名無しさんNGNG
PIDとかいうなら、
/dev/randamからもってきたらええやん。
0356デフォルトの名無しさんNGNG
>>339
  int nul[65], *po = &nul[32];
として、添字の範囲を -32〜+32 ということにしたいのでしょう。
0357デフォルトの名無しさんNGNG
randam て。
0358デフォルトの名無しさんNGNG
>>349
clock()はプロセスが起動してからの時間だからやめた方がいいよ。
起動直後に呼ぶと毎回同じ値になる可能性がある。

srand((unsigned)(time(NULL) ^ clock()));でどうよ?
0359デフォルトの名無しさんNGNG
>>352
テキスト画面に描くとか。(計算は自前)
0360デフォルトの名無しさんNGNG
>>358
だから、おとなしく time(NULL) じゃダメなのか。
0361デフォルトの名無しさんNGNG
>>360
暗号には時間関数を使ってはいけない。
0362デフォルトの名無しさんNGNG
>>358
> 起動直後に呼ぶと毎回同じ値になる可能性がある。

なら、

> srand((unsigned)(time(NULL) ^ clock()));

も毎回同じ値になる可能性があるんでは?
0363デフォルトの名無しさんNGNG
初心者です。
自分以外のEXEを実行させるプログラムを
教えてください。
0364デフォルトの名無しさんNGNG
正規表現なんですけど
char で放り込んだ変数の判断なんですが
perlの場合の if($hoge =~ /.jpg$/){}のように
if文書きたいんですけど
Cだとどうかくんでしょうか?
0365デフォルトの名無しさんNGNG
>>363
入門書買ってきてください。
0366363NGNG
3日でわかるC言語には書いてませんでした。
初心者向けの講座があるサイトも結構回ったんですけど
解説してる所はありませんでした。
使う命令だけでもいいんで教えてくれませんか?
0367デフォルトの名無しさんNGNG
if ( !strcmp(hoge,"/.jpg") ){}
0368デフォルトの名無しさんNGNG
>>366
exec
spawn
0369デフォルトの名無しさんNGNG
>>366
system(),fork(),exec*(),pipe()

Windowsなら
ShellExecute(),CreateProssece(),

あたりか

0370363と366NGNG
ありがとうございます。
0371デフォルトの名無しさんNGNG
>>368
なぜ標準のsystemを教えない。
0372デフォルトの名無しさんNGNG
>>369
綴り間違い
CreateProcess
0373デフォルトの名無しさんNGNG
>>367
そりゃちゃうやろ。

>>364
適当な正規表現ライブラリを探すか、自分で作れ。
if($hoge =~ /.jpg$/){} ぐらいなら難しくはない。
0374デフォルトの名無しさんNGNG
sscanfでできないかなぁ。。。。
0375374NGNG
あ、だめだな。
0376デフォルトの名無しさんNGNG
>>364
regex は?
0377364NGNG
うーん 正規表現というか
引数与えて 最後の4バイトを返すやつで判別するほうが
楽かな?
C言語は昨日はじめたばかりでWebとかいろいろ探しているんですけど
難しい・・・
0378デフォルトの名無しさんNGNG
#include <string.h>
int endsWith(const char *str, const char *suffix) {
return (strstr(str, suffix) - str) == (strlen(str) - strlen(suffix));
}
0379363NGNG
#include <process.h>
main()
{
execlp("てすと.exe", "てすと.exe", NULL);
return 0;
}

一応できました。とりあえず正常に動いてるんですが
無駄な部分や、もっと簡略にできる部分がありましたら
ご指摘ください。
0380デフォルトの名無しさんNGNG
if($hoge =〜 /\.jpg$/){} と言ってみるテスト。本質ではない。
0381デフォルトの名無しさんNGNG
>>377
要は拡張子の判定がしたいみたいですが。だったら、

ext = strrchr(path, '.');

で、ext に文字列が入ります。ドットが含まれていない
場合には ext が空っぽなので、直後に if で例外処理を
適当にやってみてくださいな。
0382デフォルトの名無しさんNGNG
>>379
exec は成功したらそこで終了です。
なので return(0); には来ません。来るとしたらそれは
exec に失敗しているので、exit(1); とかじゃないでしょうか?

0383山崎渉NGNG
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
0384デフォルトの名無しさんNGNG
なんでstrrchrはあるのに、strrstrはないのだろう。
0385デフォルトの名無しさんNGNG
>>377
そもそも環境は ?
拡張子を判別したいと言うのなら、環境によってはパス名称を分解するライブラリ/API を持ってたりするから、それ使った方がわかりやすいと思うぞ。
0386デフォルトの名無しさんNGNG
元々gd1.8.3がマシンに
ユーザー権限でgd2.0.12をインストールして
簡単なやつ
# ttp://www.ed.kagu.tus.ac.jp/~tbn/prog/gd.html
みたいのをgccでコンパイルしたいのですがうまくいきません

gcc -o sample -I/home/test/tmp/include -L/home/test/tmp/lib sample.c -lgd -lm
でコンパイルは通るのですが
実行すると
./sample: relocation error: /usr/lib/libgd.so.2: undefined symbol: jpeg_resync_to_
restart
となりうまくいきません

Delphiみたいに実行時のパッケージをつかって構築みたいに
外部ファイルを使わないで実行できるようなコンパイルオプションは
ないのでしょうか?

libjpegやlibpngなどはリンクでかまいませんが とりあえずgdが入って無い
システムでも動くようなバイナリを作るのは無理なのでしょうか?
0387えんぴつNGNG
>山崎渉くん
(僕がブルーだって言ってるのにレスが笑顔でぬるぽ・・・)
(流石だ・・・)
  ∧_∧
 ( ´∀`)< ぬるぽ
0388えんぴつNGNG
すいません、誤爆です…。
0389デフォルトの名無しさんNGNG
-Bstatic って gcc で使えなかったっけ?
0390デフォルトの名無しさんNGNG
#include <stdio.h>
と書くと /usr/include/stdio.h を読みこみますよね。
しかしこれに書いてあるのは宣言だけなんですけど、
定義はどこから持ってくるのでしょうか。
0391デフォルトの名無しさんNGNG
#includeはその場でファイルを展開するんだよって答えで良いのか?
0392デフォルトの名無しさんNGNG
>>390
Lib からだよって答えで良いのか?
0393390NGNG
stdio.h の定義なら
/usr/lib/libc.a でいいのかなあ。
-I や -L でヘッダやライブラリのパスを追加できるって感じですか。
デフォルトのものはどうやって調べるのでしょうか?
0394デフォルトの名無しさんNGNG
>>390
Linux だと標準では
ヘッダーは /usr/include
本体は /usr/lib
あたりかな。

C標準ライブラリだと、 /usr/lib/libc.a とか。

コンパイラオプションの -I -L とか調べてみては?
0395363NGNG
382さん、ありがとうございます。
改良します。
0396386NGNG
とりあえずccでメイクできるようになりました・・・
だけど既存のファイルを読み取って拡大するようなやつを
つくったら汚い汚い・・・GDModuleってこんなもんなの?
なんかカラーのがセピア色になってる・・・
0397デフォルトの名無しさんNGNG
質問です。
K&R本演習3-1,
binsearchのループ内のテストを一回で済ますプログラムを書けというんですが、
if
else if
else
を
if
else
にしろということなんですか?
0398デフォルトの名無しさんNGNG
ゲームボーイアドバスンをパソコンのジョイスティクとして使う標準関数は何ですか?
0399デフォルトの名無しさんNGNG
>>398

joy_gameboy_advacen()で検索してみ
0400デフォルトの名無しさんNGNG
こんど、C++を勉強しようと思ったのですが
その前にCを覚えたほうがいいと思いCの勉強を始めました。
NS−DOS上で動くプログラムの習得、なんか、原始的な勉強を
しているような感じです。
こような考えかたを持つ者は、だめでしょうか。
0401デフォルトの名無しさんNGNG
>398
fopen()だよ
0402デフォルトの名無しさんNGNG
>400
今の時代、Windowsを使った方がいいよ。
メモリモデルとか意識しなくていいしさ。
0403デフォルトの名無しさんNGNG
>>402
400ですが、そうですよね。
0404デフォルトの名無しさんNGNG
>>400
そのMS-DOSってのは本物のMS-DOS?
それともWindowsのMS-DOSプロンプト(コマンドプロンプト)?
0405デフォルトの名無しさんNGNG
>400
MS-DOSならデバイスドライバを介さずに直接ハードウェアにアクセスできる利点はあるけどね。
0406デフォルトの名無しさんNGNG
NS-DOSとは、、、、
~
0407デフォルトの名無しさんNGNG
>>404 WindowsのMS-DOSプロンプトですよ。
0408デフォルトの名無しさんNGNG
>407
んだったら
>403
なにが「そうですよね」だよ
馬鹿にしやがって
0409デフォルトの名無しさんNGNG
>>408
いやいや、16bitコムパイラつかってるなら問題ない。
0410デフォルトの名無しさんNGNG
全ての環境変数を列挙するのは標準機能だけじゃ無理?
0411410NGNG
envpは標準じゃないし、getenvはキーが分からないとだめだし・・・
0412デフォルトの名無しさんNGNG
ていうか、環境変数というモノ自体が標準じゃない
0413410NGNG
>>412
ならなぜgetenvという標準関数があるんですか?
0414デフォルトの名無しさんNGNG
>>397
俺もそれわからんかった。誰かキボンヌ
0415デフォルトの名無しさんNGNG
>>397
問題がわからないが
再帰関数なら次の深さのifで代用?
0416デフォルトの名無しさんNGNG
プログラミングと いいおんな
どっちが すきだ?
0417デフォルトの名無しさんNGNG
>>415
問題は、二分探索で、ループ内の比較を2度ではなく1度しか行わないように変更する。
答:ループを抜けてから1度合致を判定する
0418デフォルトの名無しさんNGNG
どうしてDQNの耳には硬貨が入っていますか?
0419デフォルトの名無しさんNGNG
初心者なんスけど、
ファイルポインタに標準入力(STDIN)をセットするやりかたが分かりません。
どなたか教えてくれませぬか?
0420デフォルトの名無しさんNGNG
FILE *fp;
fp = stdin;
fprintf(fp, "なんでこんなことしたいの?");
0421デフォルトの名無しさんNGNG
FILE *fp = stdin;
0422デフォルトの名無しさんNGNG
でもこれローカル変数じゃないと初期化できないよね。
なんかのソースを修正した記憶がある。
0423デフォルトの名無しさんNGNG
えうー、420はどういう結果を望んでいるんだ(w

>>422
stdinやstdoutが初期化されてないと駄目だからね
0424デフォルトの名無しさんNGNG
fprintf(stderr, ">>420 なんで入力用に開かれたストリームをfprintfに渡すの?");
0425デフォルトの名無しさんNGNG
>>420&421

ども、ありが�d
参考になりますた!!
0426デフォルトの名無しさんNGNG
初心者です。
VC++6.0で、現在Cやってます。

プログラム実行時、
ダラダラと文字が表示されるのが見にくいので、
コマンド入力ごとに画面消去がしたいんです。

いろいろサイト調べたら、
制御コード ESC [2J とか
printf("\033[2J"); /*画面消去*/

ってあったんで、コレダ!と思って加えたんですが、
変な文字が出るだけで消去できませんでした。

消去できない理由を教えてください。
0427デフォルトの名無しさんNGNG
for (i = 0; i < 8192; ++i) putc('\b');
0428デフォルトの名無しさんNGNG
putc?
0429デフォルトの名無しさんNGNG
>>426
>printf("\033[2J"); /*画面消去*/
これはエスケープシーケンス文字列って奴なんだけど
Windows9.x系のOSしか対応してないはずだよ

試してないけどsystem("cls");で出来るかも知れない
0430デフォルトの名無しさんNGNG
ansi.sysが組み込まれていない
0431426NGNG
僕のはXPだからだめだったんですね。
system("cls");
いけました!
答えてくれた皆様、
本当にありがとうございました!
0432429NGNG
テスト終了でし、結果は予想通り。

#include <stdio>

main(){
printf("テストしてみますね\r\n");
printf("適当な文字列生成中もな〜");
system("cls");
printf("あれれ前二行が出力されてないもな\r\n");
printf("CTRL+Cで終了してね");
while(1);
}
0433429NGNG
>>431
あらら、ご本人さまに先を越されてしまったw
つーことで頑張ってね〜
0434デフォルトの名無しさんNGNG
逆にNT系で文字色の変更とかするときはどうすれば良いのやら
0435bloomNGNG
http://homepage.mac.com/tanakataro6/
0436デフォルトの名無しさんNGNG
MS-DOSの場合、コンソールでエスケープシーケンスを使うには
ansi.sys(or ansij.sys)が必要。
これはWindowsになっても変わらない。
0437デフォルトの名無しさんNGNG
>>434
CUIで色変え何て邪道ですぜ
0438デフォルトの名無しさんNGNG
>>434 猫とかに乗ってる物
#include <windows.h>
#include <stdio.h>
int main(void)
{
int a;
for(a=0;a<=255;a++)
{
SetConsoleTextAttribute((HANDLE)GetStdHandle(STD_OUTPUT_HANDLE),a);
printf("0x%02x ",a);
}
getchar();return 0;
}
0439434NGNG
>>438
おお、ども。そんなAPIがありましたか。
0440397NGNG
>>417
なるほど、最後まで繰り返すわけですね。
出来たがしかしあまり意味がないような。
0441ぼぶNGNG
Q0.1,E0.8,E0.4
正しい括弧付けかどうかをテストするプログラムを教えてください。
0442デフォルトの名無しさんNGNG
>>441
びっくりするぐらい情報不足なのは仕様?
0443 NGNG
Q0.1,E0.8,E0.4
正しい括弧付けかどうかをテストするプログラムを教えてください…

>正規表現かどうかを調べるプログラムです

0444デフォルトの名無しさんNGNG
>>443
びっくりするぐらい情報不足なのは仕様?
0445デフォルトの名無しさんNGNG
参考書片手に勉強してるのですが、
とある例題で

ch = getchar();
if(ch < 'f' printf("その文字はfより小さい");

と書いてあるのですが

二行目 'f'とprintfの間に「)」が入るのでは?、と思いました。
この本のhpのミス訂正一覧にも乗ってなかったのでここで質問させていただきます。
教えてエロイ人(;´Д`)
0446デフォルトの名無しさんNGNG
>>445
コンパイラに聞けば答えがわかるのに。
0447デフォルトの名無しさんNGNG
>>445
あんたの言うとおり。
ミスプリなぞしょっちゅう出くわすものだ。いちいちツッコんでいては人生に疲れるぞよ。
0448デフォルトの名無しさんNGNG
なんでエロイ人限定なんだ
0449445NGNG
っほ
自信が無く、不安でしたので・・・。
お二方、ありがとうございました。
0450デフォルトの名無しさんNGNG
しすぷり
0451デフォルトの名無しさんNGNG
>>448
解答を貰ってすっきりしたら夜の相手もお願いしようって魂胆では。
0452デフォルトの名無しさんNGNG
>>448
エロくなかったらCなんて習得できないだろ
0453デフォルトの名無しさんNGNG
MS−DOSプロンプト上の文字のフォントサイズやフォント名を変更する事は
可能なのでしょうか?

可能だとすればどうすれば変更できるのでしょうか?
0454デフォルトの名無しさんNGNG
>>453
Cとは関係ないね。
0455デフォルトの名無しさんNGNG
>>453
確かjpとかusとか打つと出来たんじゃない?
0456453NGNG
Cのコードからは可能でしょうかね?
0457デフォルトの名無しさんNGNG
>>456
やめとけ。
0458453NGNG
どうしてですかね>>457
0459デフォルトの名無しさんNGNG
一部分のフォントを切り替えながら文字を出したいのか
全体的なフォントを変えたいのか。
どちらにしろ、>>457に同感
0460453NGNG
>>459
一部ではなく全部です。
0461デフォルトの名無しさんNGNG
どちらにしろ、スレ違い
0462デフォルトの名無しさんNGNG
みんな、まともに答えてあげようよ・・・
標 準 C で は で き な い 。
>>1 を 見 よ
0463デフォルトの名無しさんNGNG
>>460
全体ならMS-DOSプロンプトのプロパティから変えれば。
0464デフォルトの名無しさんNGNG
あの〜、授業でC言語の基本みたいなのを勉強したものなんですけど、
このC言語でプログラムを組めるとどんなすごいことができるんでしょうか?
今この世に存在してるソフト(ゲーム、PCのアプリケーション、電化製品内の
ソフトフェア)ってみんなC言語なんですか!?
趣味でこんなおもしろいことができるよ!とかあるんでしょうか?
0465デフォルトの名無しさんNGNG
みんなCでできてるわけではないが、Cがよく使われてますね。
0466デフォルトの名無しさんNGNG
>>464
この世に存在してるソフトがみんなCなら
他の言語は何のために存在してるんだよ! プンスカ!

...といっても、Cが多いのは確かだろうけど。

趣味なら、パソコン使ってて不便だと思うことを
プログラムで解決したりとか、
あとは適当にゲームでも作って遊ぶとか。
もっとハマると、ただ何かコード弄ってるだけで楽しくなってきたり...。
0467464NGNG
>>465
>>466
レスありがとうございます!
ではフォートランやアセンブラにはないCのメリットやデメリットってのは
何なんでしょうか?ここまで多いのはなぜ!?
0468デフォルトの名無しさんNGNG
>>467
適材適所。
メリットデメリットなんて、ターゲットにもよるし、人にもよるし。
多いといわれても、何を基準にしているかにもよるから、ナンセンスかな
0469デフォルトの名無しさんNGNG
UNIX厨はCを使いたがるね。
0470デフォルトの名無しさんNGNG
>>464-468
その手の話はここ↓の“THE FUTURE”と“CREATORS ADMIT UNIX, C HOAX”を御参照下さい。
http://www.edfac.usyd.edu.au/staff/souters/Humour/Real.Programmer.Stories.html

つか、ネタ、及び自作自演はは他スレでやってね。











この期に及んで「適材適所」だってよ(プ
おまえらって最後はいつもそれな(ププ
楽しい?
0471デフォルトの名無しさんNGNG
>>470
んじゃ、適材適所じゃない、どんな用途にも使える言語ってのを教えてくれ。
0472デフォルトの名無しさんNGNG
数値計算のコードを書いてるのですが、要求サイズが
大きすぎるのかmallocに失敗してその対処に困っています。
大きな領域を一度に確保する良い方法は無いでしょうか?
0473デフォルトの名無しさんNGNG
>>472
メモリ増設
0474デフォルトの名無しさんNGNG
>>472
何バイトくらい要求しているんだ!?
0475デフォルトの名無しさんNGNG
>>473
うん。つまらんことで悩む時間を考えるとメモリ増設なんて安いもんだ。
どうせ来年あたりにはオンボード1Gbyteが普通になるんだろうし。
0476デフォルトの名無しさんNGNG
とりあえず動作確認用に使ってるテストデータで、
mallocに失敗する要求サイズは25920byteです。
失敗するまでにこの5〜6倍程度の領域を既に
確保しています。
サイズとしてはあんまり大きくないと思うんですけど・・・。

あと、開発に使ってるマシンに積んであるメモリは512MBなので、
余裕はあるはずなんですが。
0477デフォルトの名無しさんNGNG
>>472
まず、どれだけのサイズを確保しようとしてるのかを確認しる。
一度で確保出来ないなら、分割して確保出来るかを確認しる。
デバイスドライバやカーネル周りでも無ければ、
本当に連続した領域が必要な事は少ない。

>>メモリ増設とか言ってる香具師
C言語の範疇では無いのでスレ違い。
8 bitプロセッサでも16bitプロセッサでもCは動く。
まぁ472が組み込み系で無いと思うのは同意だが。
0478デフォルトの名無しさんNGNG
>>475
うちでは32GB積んでいるが、それでも足りない。
0479デフォルトの名無しさんNGNG
mallocが返す領域って連続していると保証されているの??
0480479NGNG
s/が返す/で得られる/
0481デフォルトの名無しさんNGNG
>>476
環境は?
0482デフォルトの名無しさんNGNG
>>481
Pen4 2G Mem 512MB
RedHat 7.3
GCC 2.96
です。
0483デフォルトの名無しさんNGNG
>>482
実行環境も同じだよね?
mallocで失敗するとは思えん・・・
0484483NGNG
mallocがNULLを返しているんだよね?
0485デフォルトの名無しさんNGNG
>>484
開発兼実行環境です。NULLが帰ってきてます。
最初の発言以降mallocと書いてますが、実際は
callocを使ってます。
0486デフォルトの名無しさんNGNG
calloc の呪い
0487デフォルトの名無しさんNGNG
>>482
limitだろ。
ulimit (cshならunlimit) してから実行しなおせ
0488デフォルトの名無しさんNGNG
ああそうか。rlimitがあったか。
0489デフォルト名無しさんNGNG
質問です。ほとんど出来ているのですが、1〜5までの合計(15)を5の横に置きたいのですが最後に表示されちゃいます。
どなたか助けていただけないでしょうか?よろしくおねがいいたします。
#define MAX_ROWS 6
#define MAX_COLS 50
#include <stdio.h>

void rowtotal(int table[][MAX_COLS], int rowadd[]);
int main()
{
int table [MAX_ROWS][MAX_COLS];
int a=1,x,y;
int row[MAX_COLS] = {0};

for(y=0;y<MAX_COLS;y++)
{
for(x=0;x<5;x++)
{
table[x][y]=a;
a++;
printf("%3d ",table[x][y]);
}

printf("\n");
}

rowtotal (table, row);

fflush(stdin);
getchar();
return 0;
}
0490続きNGNG
void rowtotal(int table[][MAX_COLS], int rowadd[])
{
int row;
int col;

for (col = 0; col < MAX_COLS; col++)
{
for(row = 0; row < 5; row++)
rowadd[col] += table [row][col];

}

for (col = 0; col < MAX_COLS; col++)
printf("%d\n", rowadd[col]);
return;
}
 
0491デフォルトの名無しさんNGNG
for(y=0;y<MAX_COLS;y++)
{
    for(x=0;x<5;x++)
    {
    table[x][y]=a;
    a++;
    printf("%3d ",table[x][y]);
    }
    //合計表示はここでしょうに。
    printf("\n");
}
0492デフォルトの名無しさんNGNG
こういう風に表示したいということかな?
1 2 3 4 5 15
6 7 8 9 10 40
11 12 13 14 15 65

だとしたら、各セルを表示するロジックと合計値を表示するロジックが
完全に分離されている現状ではカラム制御しない限り無理。

っていうか、今のロジックって、
main()
{
 値設定と表示ループ
 合計値計算と表示()
}
って作りになっているけど、気持ち悪いし上述の問題があるので
main()
{
 値設定() /* これくらいならループでもいいか */
 合計値計算()
 合計値セルを値セルと連結()
 表示()
}
ってすれば汎用性が高い部品を幾つも作れて楽しいかと。
0493デフォルトの名無しさんNGNG
>>491
C++にしないように。それと、現行ロジックはまったく無視しちゃうわけね。
0494デフォルトの名無しさんNGNG
>>492
は?MAX_COLSが分ってるならtotalの配列も作れるでしょ?
全然Cだし、ロジック殺してないけど?
0495デフォルト名無しさんNGNG
そうです、1 2 3 4 5 15 という感じで表示させたいのです。
table[5][MAX_COLS]の位置に合計を表示させたいんですが。。。
どうも、うまくいきません。ご教授よろしくお願い致します。
0496デフォルトの名無しさんNGNG
int table [MAX_COLS][MAX_ROWS];
int total [MAX_COLS];
こうしたほうがいいんじゃないのかな?

rowtotal(y,table,total);
でこれで処理できるようにする。

あとは>>491を参考に。


rowtotalを一括でやっちゃいたいのなら
make_table(table);
make_total(total,table);
view_matrix(table,total);
と三段階に分けたほうがいいかな。
0497デフォルトの名無しさんNGNG
melon:   100
apple:   70
banana:  50
      ↑このように、特定の位置に頭を揃えて出力する方法はありますか?
0498デフォルトの名無しさんNGNG
いつからCに//なんてキーワードが追加されましたか?
0499デフォルトの名無しさんNGNG
>>497
printf("%6s: %-3d",kajitsu, nedan);で出来ん?
0500デフォルトの名無しさんNGNG
C99ていうくらいだから1999年から?
0501デフォルトの名無しさんNGNG
>>497
sprintf()を駆使しろ。
char buf[適当な長さ];
sprintf(buf, "%-10s%d", "melon:", 100);
:も自動化したかったら,
char buf[適当な長さ];
sprintf(buf, "%s:", "melon");
sprintf(buf, "%-10s%d", buf, 100);
0502デフォルトの名無しさんNGNG
>>497
printf("%10s%d","meron:",100);
printf("%10s%d","apple:",100);
printf("%10s%d","banana:",100);


printf("%-10s%d","banana:",100);
かもしれん。リファレンスみてちょ。
0503デフォルトの名無しさんNGNG
>>499-502
どうもありがとうございます。
0504デフォルトの名無しさんNGNG
>>503
ちょっとだけ凝るなら>>499-502の両方の利点を生かして
sprintf(formatstr, "%%ds: %-%dd", kajitsulen, nedanlen)
printf(formatstr, kajitsu, nedan);
とかやってもいいかも。
0505デフォルトの名無しさんNGNG
>>504
それを書くなら、
printf("%*s:%-*d", kajitsulen, kajitsu, nedanlen, nedan);
だろ?
0506デフォルトの名無しさんNGNG
なぜ文字列処理という簡単なことでまともなコードがかけないんだ?
0507デフォルトの名無しさんNGNG
>>505
いや実際はループしてるんだし先にフォーマットを決めちゃわないと

>>506
正規表現なんて未だに情報処理試験の問題に出てくるらしいし
エンコード、デコード、正規表現・・・文字列を舐めちゃいけない
文字列処理が簡単だったらPERLなんて流行ってないよ
0508デフォルトの名無しさんNGNG
ここでやっている文字列処理は簡単だろ?
0509デフォルトの名無しさんNGNG
>>508
「ここでやっている」って事なら同意。

これはC言語が入門用に勧められてるのが原因じゃないのかな?
C言語に始まりC言語に終わるってのが現状だし。
ビジネスアプリな人はCに戻ってこないけどねw
0510デフォルトの名無しさんNGNG
入門用というのが勉強用。
ビジネスアプリというのが
実用的なアプリということなら同意。
0511デフォルトの名無しさんNGNG
>>498
キーワードではないと思う。演算子もキーワードではないでしょ。
0512デフォルトの名無しさんNGNG
コンパイルに15分もかかってしまうんですが。そんなもの?
0513デフォルトの名無しさんNGNG
マシンとモノによる
昔Xフルビルドすると一晩掛かったもんだ。
0514デフォルトの名無しさんNGNG
>>512
コンパイラにもよるけど一般的にコンパイル速度を上げるには、
・コンパイラが使えるメモリを増やす。
・極大な関数があるなら分割する。
・(C++なら極悪なテンプレートは避ける)
・最適化を省略する。
・Makefileを使っているなら無駄なコンパイルをしてないかチェックする。
といった辺りをチェックしてみてはいかがでしょうか。
0515デフォルトの名無しさんNGNG
>>512
高いマシンを買って-O2オプションを付けてコンパイルすると幸せになれるよ
BCの話だけど
0516デフォルトの名無しさんNGNG
>>514
> ・極大な関数があるなら分割する。

ためしに数万行もある関数をコンパイルしたらVC++がフリーズしたっけな。
0517デフォルトの名無しさんNGNG
> ・(C++なら極悪なテンプレートは避ける)
STLは見逃して
0518デフォルトの名無しさんNGNG
double **u;
の**って何です?
検索しようにもアスタリスクは検索演算子として見られてしまって検索できません。

強化版ポインタか何かですか?
教えてくださった方には山梨県を差し上げますのでどうかお願いします。
0519  NGNG
正しい括弧付けかを判別するプログラムを教えてさい。

例えば
(()())は正しく
)()(や(()))みたいに正しく括弧付けされてないものは誤りである
といったようなことを判別するプログラムを書きたいのですが…
0520デフォルトの名無しさんNGNG
>>519
今ぱっと思いついたのは
1.数えてる途中で')'の数が'('の数を上回らない(同じ数になるのはOK)
2.最終的に'('の数と')'の数が等しい
を満たしてりゃいいんじゃないの?
0521デフォルトの名無しさんNGNG
>>512
Delphiなら一瞬です。
0522デフォルトの名無しさんNGNG
>>519
この間それにつかえるアルゴリズムを勉強したでしょ?
0523デフォルトの名無しさんNGNG
>>519
春の基本情報処理試験に出たね。
0524デフォルトの名無しさんNGNG
>>519
再帰関数を使うと言う手もある。
・文字列に対する参照ポインタを用意する。
・文字列を回して最初に)がきたらエラーを返す。
・最初に(が来るなら参照ポインタを文字列をそのまま自分に放り込む(再帰)
・再帰から抜けたあと、)が無ければエラーを返す。

でも>>520さんの方がスマートかな?
0525デフォルトの名無しさんNGNG
マルチにレスすんなよ
0526デフォルトの名無しさんNGNG
マルチポストかよ
http://pc2.2ch.net/test/read.cgi/tech/1050078087/690
0527デフォルトの名無しさんNGNG
>>524
コンパイラ屋さんとかを目指すならこっちだけどねぇ
==が正しいかとか他の構文解析も追加しやすそうだし
0528デフォルトの名無しさんNGNG
スタックが64バイトしかないの。
0529デフォルトの名無しさんNGNG
>>519

'(' が出てきたら、 count++;
')' が出てきたら、 count--;

途中で count<0 になったら正しくない。
最後まで読みこんで、 count!=0 だったら正しくない。


"〜"、 '〜'、 /*〜*/、 //〜\nの間はカウント停止。
0530デフォルトの名無しさんNGNG
>>479
保証されてないと無茶苦茶困ると思うが。

>>485
calloc/malloc してる所は他にないのか ?
バグでメモリ管理領域が壊されてるに、一票。

>>519
マルチはやめてね。むこうに、>>520 と同様のアルゴリズムで書いといたから見といてくれ。

>>524
単に括弧の対応だけなら、>>520 でいいとおもうけど、括弧の中を解釈する必要があるようなら、再帰の方がいいかも。
0531529NGNG

最後の行はオプショナル
0532デフォルトの名無しさんNGNG
文字列処理が熱いね、簡単なパズル何だけど解答例が複数出たりする。
いっそスクリプト言語開発できるくらいにはなって欲しいね

>>519 でもマルチはダメだよ。
0533デフォルトの名無しさんNGNG
>>518
ポインタのポインタ。検索キーは「ダブルポインタ C言語」あたりで。

>>520-532
何故、>>519ばかり相手にして、>>518の相手をしない?
質問内容は釣りとしか思えんが、最後の二行はむっちゃ面白かったぞ。
0534デフォルトの名無しさんNGNG
>>487
unlimitしてもallocに失敗したんですが、最適化オプションを
外してビルドしてみたらうまくいったようです。
ただ、コードを眺めてみると作りかけの関数を無理やり
呼び出したり、引数がおかしかったりと、コードそのものが
バグだらけなので、その辺を解決しないことには始まらない
話でした。お騒がせしました。

>>530
仰る通りです。バグつぶしに勤しみます。
0535デフォルトの名無しさんNGNG
>>533
> 何故、>>519ばかり相手にして、>>518の相手をしない?

??? 自分で答え書いてるやん...。

> 質問内容は釣りとしか思えん
0536デフォルトの名無しさんNGNG
scanf("%[0-9]","0123456789abcdef");
を
scanf("%[*]","0-9","0123456789abcdef");
見たいにしたいのですが、うまくいきません。
scanf("%.*s",5,"0123456789abcdef");
みたいに整数値ならできるのですが。正しいやり方を教えてください。
0537デフォルトの名無しさんNGNG
できないコードを示されて「こうしたい」と言われてもな。
何がしたいんだよ。
0桁から9桁の整数値を変換したいってのなら「scanf()単独ではできない」と答えておくが。
0538518NGNG
>>533
親切に検索語までお教え頂き、真にありがとうございます。
あとはそれを手がかりに道を模索する事にします。
山梨県は差し上げますので、今後自由にお使いください。
0539デフォルトの名無しさんNGNG
>>536
こういうことならできるけど。

#define REGION_DIGIT "0-9"

char str[128];
sscanf("0123456789abcdef", "%[" FORM_DIGIT "]", str);
puts(str);
0540デフォルトの名無しさんNGNG
エスケープシーケンス \v (垂直タブ) はANSI 規格のはずなのに Windows2000+cygwin
では垂直タブの変わりに変な記号が表示されます。
何が悪いのでしょうか。
0541デフォルトの名無しさんNGNG
>>540
Microsoft
0542デフォルトの名無しさんNGNG
お答えありがとうございました。
>>537 エラーチェックを含めた入力関数を作りたいのです。例えばこんな感じです。
void GetsForOk(char*message,char*errorCheck)
{
char s[256],s2[256];
for(;;puts("入力エラー。やり直し"))
{
puts(message);gets(s);
if(!strlen(s))continue;
sscanf(s2,"*",errorCheck,s);
if(!strcmp(s,s2))break;
}
}
>>539 マクロならできるのですか。ただ、()が無いと言うエラーになってしまいます。
キーワードを元に調べてみます。
0543デフォルトの名無しさんNGNG
>>542
Real programmers don't use `for`.
0544539NGNG
>>542
ごめん。FORM_DIGIT は REGION_DIGIT に変えて。
名前に悩んでたら混ざっちゃった。
0545536NGNG
>>543 戻り値タイプのほうがいいのですか?>>542のだと1発でできるので楽かと。
他にいい方法があるなら教えてください。
>>544 なるほどそうでしたか。名前が違うのは何でだろうと思ってました。
直したらできました。ありがとうございました。
0546デフォルトの名無しさんNGNG
>>543は、なぜforを使うなと言ってるのか聞きたい。
0547デフォルトの名無しさんNGNG
>>546
ネタだろ? >>470 の。
0548デフォルトの名無しさんNGNG
小町算に興味を持ち、プログラムを作成してます。
現在、式文字列の生成は完了して、演算部分の作成を行ってます。
で、質問です。

 "1+2/3*4+557+89"

の様な文字列の計算結果を求めるのに簡単な手法は有るでしょうか?
lex,yacc 等は使える環境にありません。

要素単位にばらして順次処理するしか無いかなぁ...
0549デフォルトの名無しさんNGNG
a 数字と括弧(cを使って)を処理する
b aを呼び出して掛け算と割り算を処理する
c bを呼び出して足し算と引き算を処理する
これでできると思うけど。
0550名無し@沢村NGNG
おまいらよ、すべての変数はグローバルにすべきだよ。
ふつーグローバル変数はどこからアクセスされるかわからないから危険だといわれるが、
危険性はまったくないよ!!
おまいらよ、考えてみろよ、グローバル変数がネットで公開されているのか?
そして不特定多数のネットユーザーがグローバル変数に勝手にアクセスするとでもいうのか?
そんなわけはないだろ!!
グローバル変数なんて開発環境の中にしかなくて、そのプログラムを開発しているものしか使わないんだから、
勝手にアクセスされて危険ということはねーんだよ!
0551デフォルトの名無しさんNGNG
>>550
馬鹿。 それしか言えない。
0552デフォルトの名無しさんNGNG
http://homepage3.nifty.com/coco-nut/
0553デフォルトの名無しさんNGNG
HeapやStackを中級車はやたらと多用したがるが、特にHeap変数はバグの
根源だし、Stackも同様に使い過ぎは毒
よって>>550にも一理あり。
0554デフォルトの名無しさんNGNG
>>550
世の中絶対ということはない。
スーパーハカーならネットワーク経由でグローバル変数に不正アクセスできるかもしれない。


書いていて情けなくなる(鬱
0555名無し@沢村NGNG
>>554
いや、スーパーハカーでもネットにもLANにも接続されていないPCで開発を行なえば不正アクセスはできないよ。
0556デフォルトの名無しさんNGNG
電話線とモデムを失念しているようだな
0557デフォルトの名無しさんNGNG
甘い。CPUやメモリ等が発生するノイズが電線に回り込み、それを
解析すれば、CPUが実行している命令を解析出来るらしい。
起動時から全部チェックすれば、スパイ位は出来るらしい。

(ウソ)
0558名無し@沢村NGNG
>>557
甘い。電線にも接続されてない充電式のノートPCで開発を行なえば、不正アクセスはできないよ。
0559デフォルトの名無しさんNGNG
沢村って誰?ま、いいけどさ。

グローバル変数の危険性は自分が馬鹿をやる可能性があるということ。
それからコンパイラの最適化がしずらくなる可能性がある。

まあ(DISK版)N88BASICでも一生やってなさいということで。
0560デフォルトの名無しさんNGNG
ちょっと聞きたいんですが、

strcmp とmemcmp の違いってなんスか??

どなたか教えてくだせぇ・・・
0561デフォルトの名無しさんNGNG
藻前ら、沢村なんかに釣られんなよ…。
0562デフォルトの名無しさんNGNG
>>560
その前に、あなたが調べた事を書いて下さい。
0563デフォルトの名無しさんNGNG
G(o^−^o)gle <検索しようね
0564デフォルトの名無しさんNGNG
ぐぐれば分かるさ
よく説明を読め
0565デフォルトの名無しさんNGNG
>>560
せめてstr"n"cmpとの違いは?にしようよ。。。
0566デフォルトの名無しさんNGNG
>>548
前に作ったものですが。括弧つき。少数以下は切り捨て。参考にどうぞ。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=999294620&res=63
他にも再起呼び出しでやるのもあるらしいです。
0567デフォルトの名無しさんNGNG
>>548
bcコマンドを呼び出すとか(笑)
0568デフォルトの名無しさんNGNG
>>548
小町算・・・前に2行で書いたらソースが滅茶苦茶汚くなったなぁw
0569デフォルトの名無しさんNGNG
WindowsのVCでコンパイル・実行できたプログラムをUNIXに移すと、
gccでコンパイルはできるんですが実行するとSegmentation faultが出てしまいます。
原因はどんなものが考えられるでしょうか。
0570デフォルトの名無しさんNGNG
>>569
文字列定数("で囲まれたやつ)を書き換えていないか?
0571デフォルトの名無しさんNGNG
バグがある
0572デフォルトの名無しさんNGNG
>>571
正解。

あと二度freeもVC++では落ちなかったような・・・
0573536NGNG
やりたかったことができました。>>539さんのマクロをヒントに関数そのものをマクロに
したらうまくいきました。ありがとうございました。あと、sとs2が逆でした。
sprintfは(s,"%s",s2)s2をsだったので、そのまま使っていたのですが、
sscanfは(s,"%s",s2)sをs2にだったんですね。
#include <stdio.h>
#include <string.h>
//Gets+ErrorCheck MSG:入力を催促するメッセージ SSM:書式指定文字列
#define GETSPP(MSG,SSM) for(;;puts("入力エラー。もう一度入力して下さい")){puts(MSG);gets(s);if(!strlen(s))continue;sscanf(s,SSM,s2);if(!strcmp(s,s2))break;}
int main(void)
{
char s[256],s2[256];
GETSPP("数値を入力して下さい","%[0-9]");
return 0;
}
0574デフォルトの名無しさんNGNG
> if(!strlen(s))
if(*s)でいいじゃん。
0575デフォルトの名無しさんNGNG
>>574
if(!*s)な
0576デフォルトの名無しさんNGNG
#include <stdio.h>

int main(void){
int* a;
*a = 5;
int b = 4;
printf("%d\n",(*a)+b);
return 0;
}

↑これでコンパイルはとおるけど、実行させたら
Segmentation fault (core dumped)
とかでます。
*aでint型のポインタの実体を指しに逝ってるから
いけると思ったんだけど・・・
0577デフォルトの名無しさんNGNG
*a ではなく a の値はナニよ?
つまりint型へのポインタ変数 a はナニを指しているかという
0578548NGNG
>>566
なるほど、算術記号が無くなるまで文字列を変形させる訳か。
バッファを大きめに取れば実数対応できるかな?
参考になりました。
0579デフォルトの名無しさんNGNG
>>574-575
なるほど。getsで何も入力しないで改行を押すと先頭に'\0'が入るから
*sは先頭の値を指すので、ぴったしですね。使わしてもらいます。
0580デフォルトの名無しさんNGNG
>>576
*a=5;の前にa=malloc(sizeof(int));
ちなみにそれは文法違反になるはず。Cでは変数宣言はブロックの先頭にまとめる。C99は知らないけど。

>>575
ありゃ。。。スマソ 長さが0の時に真にするんだよな。。。
0581デフォルトの名無しさんNGNG
>>578
C99でもそれはNGだったはず
0582デフォルトの名無しさんNGNG
>>576
そんな風に使うんならポインタじゃなくていいやん。

int main(void){
int  c, b = 4;
int* a = &c;
*a = 5;
printf("%d\n",(*a)+b);
return 0;
}

なら、おっけー。つまり>>577のいう通りなんだけど。
あるいは>>580
0583デフォルトの名無しさんNGNG
要するに、ただ単純に、ポインターが解ってないだけやんか
0584デフォルトの名無しさんNGNG
0やNULLは偽ですけど、0.0は偽になb驍ニは限らないbナすよね?
0585デフォルトの名無しさんNGNG
いや、なるでしょ?
その前提で結構書いちゃってるけど。
0586584NGNG
>>585
VC++6.0では偽になったんですけど、保証されているのかなぁ・・・・
0587デフォルトの名無しさんNGNG
if (0.0 == 0x00) printf("equal (・∀・)");
で試すがよい。
0588584NGNG
>>587
0がdoubleに格上げ(?)されてイコールってことですか?
イコールになりました。

C++ではC++の本に偽になることを期待したコードがあるんで多分保証されていると思うんですけど。
0589584NGNG
とりあえず偽になると覚えます。
0590588NGNG
なんか変なこといっているな・・・・
0.0は0をdoubleにしたものだから0と0.0は同じ・・・・同じということは0.0も偽となるか。
0591デフォルトの名無しさんNGNG
>>588
何故比較対称が0でなくNULLでもなく、0x00なのかということに着目するといいよ
0592デフォルトの名無しさんNGNG
if(! (int)0.0) printf("false (・∀・)");
0593デフォルトの名無しさんNGNG
>592
キヤストするならそりゃそうだろ。
0594デフォルトの名無しさんNGNG
>>591
なんで?
0595デフォルトの名無しさんNGNG
>>593
そりゃキャストするだろ。アフォ?
>>591
なんで?
0596デフォルトの名無しさんNGNG
>>592
intにキャストする必要は無い
0.0は偽
0597デフォルトの名無しさんNGNG
printfは使用禁止!と言ったらfprintf(stdout,...)にしやがったぜあの馬鹿。
0598デフォルトの名無しさんNGNG
禁止にした理由を言わないからだろこの馬鹿。
0599592NGNG
>>596
そうなんだ
内部的に int にキャストしてると思ってた
0600デフォルトの名無しさんNGNG
>>597
何で代用するのか指定しておかないからだろ、この馬鹿
0601デフォルトの名無しさんNGNG
windowsプログラムとかのソース見てると
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
っていうのがあるけど、これは絶対書かないといけないの?
0602デフォルトの名無しさんNGNG
>>601
コンパイルしてみそ

#include <stdio.h>
#include <windows.h>
int WINAPI WinMain() {
    MessageBox(NULL, (LPCSTR)"(*・Д・)", (LPCSTR)"", MB_OK);
    return 0;
}
0603デフォルトの名無しさんNGNG
printfでlong型の変数の数値を出力したいんだけどintにキャストしなきゃ駄目なの?
intとlongでサイズが違う場合はオーバーフローとかが問題になると思うんだけど。
0604デフォルトの名無しさんNGNG
%ld
0605デフォルトの名無しさんNGNG
>>603
ぬ?printfのフォーマット指定にlong専用のものってあったっけ?
いつも%dしか使って無いからよくわからないけど
0606デフォルトの名無しさんNGNG
可変個の引数の場合は整数はみなintになるんじゃなかった?
0607デフォルトの名無しさんNGNG
>>606
intより小さい整数は格上げされるが、大きい整数が格下げされるわけではない。
printf()のマニュアルくらい読むべきだな。
0608デフォルトの名無しさんNGNG
printfのマニュアルじゃなくて可変個引数についての説明だと思われ。
0609デフォルトの名無しさんNGNG
printf()のマニュアルを読んでも判ることだろ?
0610デフォルトの名無しさんNGNG
#define ERRDEF (-1)
みたいにdefine時の数値は()で括らないと問題あるの?
よく言われる話だけど・・・
既出だったらスマン
0611デフォルトの名無しさんNGNG
あります。
0612見習中NGNG
教えて下さい。

Win2000+cygwinでCの勉強中です。

質問
プログラムの実行時間を計測したいです。
ループ文等を変更して、実行時間がどう変化するか
調べたいです。


ぐぐってみたのですが、

プログラムのプロファイル(詳しい実行内容・時間)をとる
gcc で -pg オプションつきで コンパイルして実行すると
gmon.out というファイルができる. そこで gprof program-name


これは、上記目的をはたすでしょうか?
ほかに、これが良く使われる(一般的)というものがありましたら、
教えて下さい。よろしくお願いします。
0613デフォルトの名無しさんNGNG
>>612
はたす。
0614デフォルトの名無しさんNGNG
初心者ですみません。
int a =3:
int array[a];
のように変数分だけ配列の要素を作ることってできないんでしょうか?
0615見習中NGNG
>>613

ありがとうです!
やってみたら、時間が表示されました。
そのあと、色々なことが書かれています。
もうちょっと調べてみます。
0616デフォルトの名無しさんNGNG
>>614
int a = 3;
int *array;
array = (int *)malloc(sizeof(int)*a)
0617デフォルトの名無しさんNGNG
>>614
mallocはそのためにある。
int *array = malloc(sizeof(int)*a);

でもgccだと拡張機能(array of variable length)で
 int a=3;
 int array[a];
が通ってしまうのはヒミツだ。
0618デフォルトの名無しさんNGNG
>>617
C99にも含まれたけどな。
0619デフォルトの名無しさんNGNG
>>616-617
malloc調べました。ありがとうございます。
0620デフォルトの名無しさんNGNG
>>610 四則演算時に困るからってのが一番の理由

たとえばクラスのテスト5科目の点数の配列があるとして
int *test = malloc( CLASSMATE * 5 * sizeof(int) );
とするならば

#define CLASSMATE 30 + 25 だとどうなるか?
30 + 25 * 5 * 4 だよね?

#define CLASSMATE (30 + 25) だとどうなるか?
(30 + 25) * 5 * 4

さてどっちが正しく処理されるでしょうか?
0621おい!NGNG
C言語でドラえもん作れや!
              ____
           ./, - 、, - 、   ̄ ヽ
          ./-┤ 。|。  |――-、 ヽ
           | ヽ`- ○- ´ /  ヽ  |
           | -   |     ―   |  |
           |  ´  |    `ヽ  . |  |ヽ
  ∩      人`、 _  |    _.- ´ | .|  \
  |  ⌒ヽ /  \  ̄ ̄ ̄     ノノ       \
  |      |´      | ̄―--―― ´ヽ     _  /⌒\
  \_   _/-―――.| ( T )      `l     Τ(      )
       ̄       |   ̄        }      | \_/
             | 、--―  ̄|    /
FUCK YOU

ぶち殺すぞ・・のび太・・・・!

0622デフォルトの名無しさんNGNG
あるCプログラムを
vc++ からビルド・実行、するとちゃんと実行できるのですが
できた実行ファイルを直接実行しても何もおきません、
どこが悪いのか見当つきませんでしょうか。
0623デフォルトの名無しさんNGNG
>>622
プログラムの一番最後にgetchar();を書く。
0624デフォルトの名無しさんNGNG
>>621 感動で泣けよガキ

#include <stdio.h>
#include <windows.h>
int WINAPI WinMain() {
MessageBox(NULL
, (LPCSTR)("                             / ̄ ̄ ̄ ヽ\r\n"
"                __           /ヽ)―- 、   l\r\n"
"           ,―γ ___ヽー、       q`´ハ ミ ヽ  }\r\n"
"       | ̄ ̄|  | |(/),(ヽ)|    | ̄ ̄|   <_))_,  |  /\r\n"
"      |   ヽ  (6  ー  )  ノ    |    ヽ ___/_ノ\r\n"
"      -――  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄――-    (t) ̄ ̄ ̄|\r\n"
"     |  ,―  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ― 、    |    (/_ )/ / |\r\n"
"     |  |                |    |  ( ) ○    |-o\r\n"
"     |  |                 |    |   `ー―― ´\r\n"
"    |  |                  |    |\r\n"
"   |  |                   |   |\r\n")
, (LPCSTR)"", MB_OK);
return 0;
}
0625610NGNG
>>620
ありがとうございます。
納得です。
0626デフォルトの名無しさんNGNG
>(LPCSTR)""
なんでそんなコード書くの?
0627デフォルトの名無しさんNGNG
>>610>>620
-1のような定数を括弧で括る理由の説明になっていない。
#define FOO -1
int a = -FOO;
#define FOOZ (-1)
int b = -FOOZ;
としたときに、前者はエラーになるが後者は正しく処理される。
何故ならば、それぞれ次のように解釈されるから。
int a = --1;
int b = -(-1);
0628デフォルトの名無しさんNGNG
>>624
カンマの位置が激しく気持ち悪い。
英語の勉強したら?
>>626
お察しください。
0629デフォルトの名無しさんNGNG
>>627 ・・・言ってることが激しく620と変わらないのだが?
0630デフォルトの名無しさんNGNG
>>629
式と定数の違い。
0631デフォルトの名無しさんNGNG
>>626=628
適当発言に適当ソースで返した奴にまで一々煽るな
0632デフォルトの名無しさんNGNG
>>630
()で括るのは式を定数化する為だという意味においてまったく違いが無い
1+1は式、-1も式
0633デフォルトの名無しさんNGNG
externについての質問なんですが、

=== file1.c ===
int main(void)
{
int num = 10;

func();
return 0;
}

=== file2.c ===
extern int num;

void func(void)
{
numをごにょごにょ
}


なにがおかしいんでしょうか?
0634bloomNGNG
http://homepage.mac.com/ayaya16/
0635デフォルトの名無しさんNGNG

int num = 10;

int main(void)
{
func();
return 0;
}

=== file2.c ===
extern int num;

void func(void)
{
numをごにょごにょ
}
0636デフォルトの名無しさんNGNG
>>633 externはグローバルだけだよん
0637デフォルトの名無しさんNGNG
>>635-636 
どうもです。
そこで小一時間はまってしまいました。
0638デフォルトの名無しさんNGNG
int main(void)
{
int num;

func(num);
return 0;
}

=== file2.c ===

void func(int num)
{
numをごにょごにょ
}
0639デフォルトの名無しさんNGNG
>>606
intより小さいサイズの整数型・文字型の場合は、
int型と同じサイズに符号拡張され、スタックに積まれる、
が正解(だと思う)。積まれたデータをどう解釈するかは
関数次第だから、「みなintになる」はちょっと表現が
微妙と思われ。
0640デフォルトの名無しさんNGNG
反例:__int64とか、long longとか、昔のlongとかネ。
0641デフォルトの名無しさんNGNG
>>640
何に対する反例?
0642デフォルトの名無しさんNGNG
以下のように関数fooを呼び出して2次元配列を宣言し、
pに格納しようとしたのですが、コンパイルは通るものの
実行時にエラーが出てしまいます。どのように修正したら良いでしょうか。
よろしくお願いします。

int **foo(int a, int b);

main(void){

int **p;
p = foo(2, 4);
}

int **foo(int a, int b){

int **array = malloc(sizeof(int)*(a*b));
  return array;
}
0643デフォルトの名無しさんNGNG
>>642
エラーの内容を書かないという精神を修正したら良いんじゃないかな。
0644デフォルトの名無しさんNGNG
int **って二次元配列じゃないよ。
0645名無し@沢村NGNG
おまいら、ちょっとC言語でプログラム書いてみろ?
できたらおれが見てやるから、見せてみろ。
0646デフォルトの名無しさんNGNG
お前が書け。俺が見てやる。
0647デフォルトの名無しさんNGNG
char *GetBetweenString(char **betweenstring, char *str,
const char *firststring, const char *endstring)
{
char *fpos, *epos;

if((epos = strstr(str, endstring)) == NULL) return NULL;
*epos = '\0';
if((fpos = strstr(str, firststring)) == NULL) return NULL;
*betweenstring = fpos + strlen(firststring);

return epos+1;
}
0648デフォルトの名無しさんNGNG
>>646
ヤツのを見てどうするんだよ
0649デフォルトの名無しさんNGNG
>>642
そのコードだけだと特に問題ないと思うが・・・。
他の部分でアクセス違反とか起きてない?

0650デフォルトの名無しさんNGNG
>>642
これがんばって読みなさい。
http://www.catnet.ne.jp/kouno/c_faq/c6.html#18
0651デフォルトの名無しさんNGNG
>>642
#include <malloc>をちゃんといれてまつか?
漏れのBCCちゃんは通してくれますたよ。
0652デフォルトの名無しさんNGNG
>>651
そういう問題じゃない。
0653デフォルトの名無しさんNGNG
mallocなんてヘッダーファイルはしらないなぁ。
malloc()はstdlib.hだろ。
0654デフォルトの名無しさんNGNG
あるよ。<malloc.h>だけどね。
0655デフォルトの名無しさんNGNG
>>653 いや普通にあるから安心汁
0656デフォルトの名無しさんNGNG
>>655
標準じゃないからああいう言い方しただけだよ(^_^;)
0657656NGNG
VC++には.hのつかないのはないな。C++用か?
0658642NGNG
「問題が起きたため、○○.exeを終了します。ご不便をかけて申し訳ありません。
この問題をmicrosoftに報告してください。」というのがエラーメッセージの内容です。

>>644
あ、間違ってますか??最初int **以外で宣言すると
「間接参照レベルがint*int**で異なっている」とコンパイル時に警告が出たので・・・

>>649
うーん…mainで配列に数値を入れて出力するだけなんで
問題ないと思うんですが・・見直します。

>>650
ありがとうございます。読んでみます
0659デフォルトの名無しさんNGNG
>>657
ん?#includeは拡張子を省略できるはずだけど
0660デフォルトの名無しさんNGNG
できねえよ。
0661デフォルトの名無しさんNGNG
はいはい。どこで聞きかじったんだ?
>>659
0662657NGNG
>>659
ためしに#include <stdlib>ってやったらインクルードファイルをオープンできないと言われたYO
0663デフォルトの名無しさんNGNG
>>658
Microsoftに報告しても解決しねーだろうな(苦笑
0664デフォルトの名無しさんNGNG
拡張子省略できるのは C++ の標準ヘッダファイルな
0665デフォルトの名無しさんNGNG
>>642
>「問題が起きたため、○○.exeを終了します。ご不便をかけて申し訳ありません。
>この問題をmicrosoftに報告してください。」というのがエラーメッセージの内容です。

多分OSはXPだろ?妙に過保護なんだよな…。
0666デフォルトの名無しさんNGNG
>>664
あれは省略してるわけじゃないぞ。
たとえば <iostream> と <iostream.h>は別物だ。
0667664NGNG
だね。書き方が悪かった。
0668デフォルトの名無しさんNGNG
>>632
いまさらだが...

> -1も式

ハァ ?
0669デフォルトの名無しさんNGNG
>>666
正しいんじゃないか?
g++ではstdioなんてファイルがないのに、#include <stdio>はOKだったぞ。gccではだめだけど。
0670669NGNG
Visual C++ 6.0ではC++としてコンパイルしようとしてもだめだけど。。。
0671デフォルトの名無しさんNGNG
>>668
ハァ?
じゃねえよ。正しいよ。お前が馬鹿。
0672デフォルトの名無しさんNGNG
>>669-670
処理系依存なんだから正しいとは言えないだろ。
0673649NGNG
>>642
GCCでコンパイルしてみて実行してみたが
問題なく動いたぞ。
main(void){

int **p;
p = foo(2, 4);
p[0][1] = 5;
printf("%d", p[0][1]);
}
無事5と表示された。
0674669NGNG
>>672
うーむ・・・まあ拡張機能はOFFにしなかったけど・・・
0675デフォルトの名無しさんNGNG
>>673
そりゃ「たまたま」正しく動いただけだ。
0676デフォルトの名無しさんNGNG
>>673
パパあのまま流用したらメモリリークだよ・・・
0677672NGNG
>>674
まぁ「正しい」の定義にもよるけど、標準Cの規則に準じてれば
正しいって解釈でいいよね。だったらg++の例は不適切。
おれがコンパイラつくって(作れないけど)独自に
#unko- <stdio.h>
でもインクルードできることにしてたとして、おれのコンパイラ
で動くから「正しい」って変でしょ?
0678デフォルトの名無しさんNGNG
0-1 という暗黙の展開があるから -1 という「式」が -1 という「値」として扱える
でも何故か 4N という式は 4xN とは展開されない
コンパイラは必ずしも四則演算の要件を満たしてるとは言えないね
0679デフォルトの名無しさんNGNG
int **pはポインタのポインタだろ。
p[a]はポインタになるだろ。
で、ここにきちんとint型のポインタを入れないといけない。
0680デフォルトの名無しさんNGNG
>>678
C言語と数学は違う。ただそれだけのこと。
0681デフォルトの名無しさんNGNG
>>680の言うとおり。
ついでにC言語では4Nは式ではない。
0682デフォルトの名無しさんNGNG
int (*p)[5]=malloc(sizeof(int)*4*5);
0683デフォルトの名無しさんNGNG
4Lだと式だけどな(笑)
0684デフォルトの名無しさんNGNG
>>682
そりゃ正しいけどだめだろ。
>>642はプログラム中で任意の列数・行数を持つ
2次元配列(もどき)を作りたいみたいだから。
0685デフォルトの名無しさんNGNG
>>680 四則演算という規格について言ってるのだから数学云々は別
0686デフォルトの名無しさんNGNG
>>642
int **foo(int a, int b){

int i;
int **array;
array = malloc(sizeof(int)*a);
for(i=0;i<a;i++)
array[i] = malloc(sizeof(int)*b);

return array;
}
0687デフォルトの名無しさんNGNG
int a=7,b=10,i;
void *p1=malloc(sizeof(int)*a*b);
int **p2=malloc(sizeof(int *)*a);
for(i=0;i<a;i++)
p2[i]=p1+i*b;

できないかも。
0688687NGNG
できないな。void *じゃ加算できないって。
0689687NGNG
int a=7,b=10,i;
int *p1=malloc(sizeof(int)*a*b);
int **p2=malloc(sizeof(int *)*a);
for(i=0;i<a;i++)
p2[i]=p1+i*b;

こうかな。
0690デフォルトの名無しさんNGNG
ファイルの指定位置から数バイト消すみたいな関数ありますか?
書くのは一杯知っているのですが。あるなら教えてください。
0691デフォルトの名無しさんNGNG
>>690
メモリに取っておいて切り詰めたい始端終端を取ってリワインドして
あとはガリガリってのではダメ?
0692デフォルトの名無しさんNGNG
>>683
4L は、定数だよ。
0693690NGNG
>>691 それは今使っているやり方なんです。fprintfやfgetsで空入力しても
そのバイト分が消えて、空白や改行の2バイトに変わるだけですし。
0694デフォルトの名無しさんNGNG
>>692
定数だけ書いても式じゃないのか?
0695デフォルトの名無しさんNGNG
>>693
Cはそれほど詳しく無いから分らないけど
ファイルシステムの構造を考えると切り詰めるってのは無いと思う
バッファサイズが気になるならtempファイルを作ってリネームでとか
ごめん、この程度しか思いつかん
0696デフォルトの名無しさんNGNG
>>694 式だね
0697デフォルトの名無しさんNGNG
>>693
ファイルの途中を切り詰めるという関数は標準C(およびPOSIX)にはありません。
システムコールでも * 不 可 能 * です。
0698デフォルトの名無しさんNGNG
末尾を切るのならあるだろうけどなぁ。。。truncateとか。
残す部分だけメモリーに取って上書きじゃ嫌なんだっけ?
0699690NGNG
お答えありがとうございました。
>>697 不可能なんですか。残念です。
>>698 今までは予め上限を決めておいて、セーブロードの時全てのデータを出し入れ
していたのですが、新しく作ろうとしている時そういえばあったっけとなってしまったわけです。
残す部分だけのは嫌ではないのですが、消す方法があるならそのほうがいいので質問しました。
0700山崎トオルNGNG
700ゲット(^^)
0701デフォルトの名無しさんNGNG
なんか自分で考えてるうちに何がなんだかわからなくなってきたので
誰か愛の導きをください。

char *(string[32]);
0 ポインタ
1 ポインタ
2
3
...
31
というようにポインタを入れる32個の配列が確保される、ですよね?
では、char (*string)[32]; この場合はどういう事になるんでしょうか?

前者は、char* string[32];と考えてやればうまく掴めますが、後者がわかりません。
char型の宣言なので、例えば
(*string)[0] 文字
...
(*string)[31] 文字
って事ですかね。
なんか頭の中にメモりの図が描けません。
0702デフォルトの名無しさんNGNG
>>701

char (*string)[32];
char[32]を指すポインタ。二次元配列を指すポインタとでも覚えておけばいいよ。
0703702NGNG
char *string[32]は配列だけど、char (*string)[32]は配列じゃなくてポインタ。指すものが配列。
0704701NGNG
すいません。。。
なんか余計わけわからなくなりました。
これを2次元配列として利用するとしたら、具体的にどんな書式で書くのでしょ
うか?
0705デフォルトの名無しさんNGNG
>>704

void func(char (*string)[32]) // void func(char [][32])でもいいけど
{
// 何か
}

int main()
{
char a[10][32];
func(a);
return 0;
}
0706デフォルトの名無しさんNGNG
× // void func(char [][32])でもいいけど
○ // void func(char string[][32])でもいいけど
0707デフォルトの名無しさんNGNG
%s, %d
のように %記号 で表現するスタイルについて、用語がついていたと思うのですが、
どういう名前か教えてください?

手元の本には記述が見当たらなかったので。
0708デフォルトの名無しさんNGNG
printf()系の書式、scanf()系の書式
0709デフォルトの名無しさんNGNG
>>707
フォーマットじゃなくて%dとかの規格の名前ってこと?
0710デフォルトの名無しさんNGNG
>>708 プッ
0711デフォルトの名無しさんNGNG
激しく今更だが、>>627には適当なことを書くな、と言いたい。
0712デフォルトの名無しさんNGNG
>>711
--1じゃなくて- -1ってことのほかに何かある?
0713れなNGNG
(課題1)
1000以下の正の整数値のうち,素数をすべて計算し,
その結果をファイルに格納するプログラムを作成せよ.
素数とは自分自身と1以外の数値で割り切れない整数のことである.
また、計算の実行の中で乗除(乗算と除算)を行った回数もあわせて表示し、
ファイルに格納すること
おねがい!!たすけてえええ
0714デフォルトの名無しさんNGNG
>>713
宿題スレへどうぞ。
http://pc2.2ch.net/test/read.cgi/tech/1045074808/l50
0715デフォルトの名無しさんNGNG
微妙にスレ違いかもしれませんが質問させてください。
Microsoftの日本のWebサイトの、MSDNライブラリの中には、C標準関数のリファレンスはないのでしょうか?
もし有るのでしたらアドレスを教えていただけないでしょうか?
0716デフォルトの名無しさんNGNG
100+(0.000001)×1000000=100
(0.000001)+100=109.95…

なんじゃこりゃ???
0717デフォルトの名無しさんNGNG
>>715
互換性のところにANSIと書いているのが標準関数なのでは?
0718デフォルトの名無しさんNGNG
>>716 そういうことだ
0719デフォルトの名無しさんNGNG
>>707
変換指定
0720デフォルトの名無しさんNGNG
100+(0.000001)×1000000=100
(0.000001)×1000000+100=109.95…
だった。
両方とも110になるはずなのに、なぜだ??
教えてください。
0721デフォルトの名無しさんNGNG
>>720
実数演算は誤差が出るんだよ。
0722デフォルトの名無しさんNGNG
実数演算じゃないだろ。
0723デフォルトの名無しさんNGNG
100+(10^-6)*(10^6)が110になるわけないやん。
0724デフォルトの名無しさんNGNG
>>722
実数じゃん。
0725デフォルトの名無しさんNGNG
>>720
全角で書くのはどういうことだ? 試させない気か?
0726デフォルトの名無しさんNGNG
問題は実数演算じゃないよ。
0727720NGNG
floatで定義してるんです、これ。
それが関係してると思うのですが…
0728デフォルトの名無しさんNGNG
有効桁数の問題かな。
0729デフォルトの名無しさんNGNG
>>720
上は桁落ちを起こしてるんだろうけど、下はなんだろ?
てかこの程度で桁落ちしたっけ?>float
0730デフォルトの名無しさんNGNG
>>716 OSとコンパイラを教えなしゃい
0731デフォルトの名無しさんNGNG
>>729
有効桁数って6桁くらいじゃなかった?
0732720NGNG
>>730
OSはLINUXで、コンパイラは分かりません!
0733デフォルトの名無しさんNGNG
>>732
分からないってことはないだろう。
CPUはIntel系(32bit)、コンパイラはgccか?
0734733NGNG
あー、、浮動小数点数演算の誤差の話か、、、、
0735デフォルトの名無しさんNGNG
http://school2.2ch.net/test/read.cgi/job/1050853932/l50

ダメ人事の転職相談( ´_ゝ`)

0736720NGNG
>>733
あー、多分それです。
0737デフォルトの名無しさんNGNG
>>729
float? doubleじゃなくて?
0738デフォルトの名無しさんNGNG
x(0.000001)(1000000)(100)*+=
どっちもこう展開されると思うんだけどなぁ・・・
0739720NGNG
floatは何桁まで取れるんですか?
0740デフォルトの名無しさんNGNG
>>737
倍密度浮動小数点数なら桁落ちはまずない(単密度と比べて)
0741デフォルトの名無しさんNGNG
>>720
下はあまりにも誤差が大きすぎる。
どうやって表示したの?
0742デフォルトの名無しさんNGNG
お前ら、情報処理技術者試験(基本情報技術者試験)を受けれ。
0743デフォルトの名無しさんNGNG
>>739
6,7桁くらい
0744デフォルトの名無しさんNGNG
同じような環境でどうやっても101.000000...になる・・・
0745デフォルトの名無しさんNGNG
>>742
そういう君は持ってるんだな?下の原因を教えてくれ
0746720NGNG
#include<stdio.h>

main()
{
float a,i;
a=0;

for(i=1;1<=10000000;i++)
a=a+0.000001;

a=a+100;

printf("%f",a);

}
…確かこんなかんじです。
0747デフォルトの名無しさんNGNG
・・・・・。ループで足していたのかよ・・・・
0748デフォルトの名無しさんNGNG
これはまた誤差が出まくりそうな…
0749デフォルトの名無しさんNGNG
>>746
君のソースにループカウンタへの愛を感じない
0750デフォルトの名無しさんNGNG
まぁマテ、お前らの中で>>738を理解している奴がどれだけいるのか確認したい
これに関連するある国の名を挙げてくれ!
0751747NGNG
じゃなくて、


     無限ループかよ!
0752デフォルトの名無しさんNGNG
>>749
一生ループしまくりだから、愛してるんじゃねーの?
0753720NGNG
>>749
…気づいて自分でわらってしまた。
0754720NGNG
iに直してやってみたら、また109.592110という結果でしたー
0755デフォルトの名無しさんNGNG
>>752 i の恋人は int と決まってるの!親がそう決めたの!
0756720NGNG
int じゃないといかんのですか?
0757デフォルトの名無しさんNGNG
あたしの親も float みたいなかぶいたやつとは付きあわせない
といってました。
0758デフォルトの名無しさんNGNG
floatの有効桁数は6桁
0759デフォルトの名無しさんNGNG
>>754
上は桁落ち、下は情報落ちかな
0760デフォルトの名無しさんNGNG
Real programmers don't use float type.
0761デフォルトの名無しさんNGNG
FORTRANの掟
 先頭1文字目がI,J,K,L,M,N → 整数型 
 先頭1文字目がそれ以外 → 実数型
0762デフォルトの名無しさんNGNG
>>760 今はそうでもないよ
0763デフォルトの名無しさんNGNG
>>761
虚数型は?
0764720NGNG
>>759
情報落ちとは?
0765デフォルトの名無しさんNGNG
僕もC言語勉強してロマサガ2みたいなすごいゲームをつくります(^O^)/
0766デフォルトの名無しさんNGNG
>>764
>>742の試験に落ちること。

あ、これはマ板のあのスレ向けか。
0767デフォルトの名無しさんNGNG
値の極端に小さい実数同士を演算し、有効桁数を越えた部分が無効とされること

>>738はスルーかいw お前ら勉強してないだろ?
0768デフォルトの名無しさんNGNG
>>767
ぎゃくぽ?
0769720NGNG
>>767
おぉ、なんとなく分かるかも。
ありがとうございました。です。
0770デフォルトの名無しさんNGNG
ぎゃくぽのことか?
0771デフォルトの名無しさんNGNG
整数部の大きな数と小数部の大きな数同士で計算した場合の誤差はなんと言うんだっけ。
0772デフォルトの名無しさんNGNG
>>768
Yes、ぎゃくぽ
0773デフォルトの名無しさんNGNG
>>771
桁落ちか、丸め誤差?
0774デフォルトの名無しさんNGNG
>>773
あ、多分後者だ。サンクス。
0775デフォルトの名無しさんNGNG
http://www.i-berry.ne.jp/~kat-sato/fe/H13s/H13s05.htm

この問題ぐらい解けない奴はマジで基本受けとけよ
0776デフォルトの名無しさんNGNG
>>775 上野開設は逆だったのか?よくわからん
0777デフォルトの名無しさんNGNG
情報落ち
 情報落ちとは、大きな値と小さな値を加減算したときに、小さな値が無視されてしまう現象のことです。
コンピュータで扱う浮動小数点では、仮数部に保持できる桁数があらかじめ決められています。そのため、
大きな値と小さな値を加減算すると、有効な数字をもった桁が多くなりすぎるため、正規化する際に
下部の桁が切り捨てられてることになります。
0778デフォルトの名無しさんNGNG
じゃあ>>771が情報落ち?
0779デフォルトの名無しさんNGNG
C言語の基礎を学びたいのですが2日ほどで覚えられますか?
○×ゲームくらい作れるようになりたいのですが。
0780デフォルトの名無しさんNGNG
>>779
女の子なら覚えられる
0781デフォルトの名無しさんNGNG
>>778
YES

アスキーやe-wordsのオンライン辞書には載ってないんだな
合格情報処理の付録の辞書にさえ載ってるのに
0782デフォルトの名無しさんNGNG
二次元の配列をmallocで割り当てるにはどうやればいいですか?
0783デフォルトの名無しさんNGNG
○×ゲームの7行ソースきぼんぬ
0784デフォルトの名無しさんNGNG
>>782
//mallcoは確保したメモリの先頭ポインタを返すんだよ。
//つまり、自分でオフセットとって二次元配列の様に扱いなさいってこった。
int head = 3;
int len = 5;
int *arg;

arg = malloc((head * len));
//これでarg[head][len]の様に自分で扱えば良い。
free(arg);
0785デフォルトの名無しさんNGNG
>>784 はヴァカ。
0786デフォルトの名無しさんNGNG
//分ってなさそうだから参考までにforループsample
//0で初期化(ZeroMemory使えって突っ込みはいらない)
int i, j;
for(i = 0; i < head; i++)
{
for(j = 0; j < len; j++)
{
arg[(i * len) + j] = 0;
}
}
//arg[(i * len)][j]だと思え。
0787784NGNG
for(;;) printf("ヴァカですか?\n");

while(1) printf("アフォですか?\n");
0788山埼渉NGNG
(^^)
0789785NGNG
>>784
どうやって多次元配列の各要素にアクセスするのか、その仕組みを勉強しなさい。
0790bloomNGNG
http://homepage.mac.com/ayaya16/
0791デフォルトの名無しさんNGNG
>>782
>>686あたり
0792デフォルトの名無しさんNGNG
int main() {
signed short x=-1;
signed short z;
z = sizeof(x);
if ( x < z ) printf("aaa \n");
else printf("bbb \n");
if ( x < sizeof(x) ) printf("aaa \n");
else printf("bbb \n");

return 0;
}

./a.out
aaa
bbb

どうして、こうなるのですか?またならないようにする
対処方法は?
0793デフォルトの名無しさんNGNG
よく見ていないが、おおかたxがunsignedになって膨大な数になったからだろ。
釣りだろうな。
0794デフォルトの名無しさんNGNG
int main() {
signed short x=-1;
unsigned short y;
signed short z;
z = sizeof(x);
y = sizeof(x);
if ( x < z ) printf("aaa \n");
else printf("bbb \n");
if ( x < y ) printf("aaa \n");
else printf("bbb \n");
if ( x < sizeof(x) ) printf("aaa \n");
else printf("bbb \n");

return 0;
}
./a.out
aaa
aaa
bbb

>>793 無論、釣りですが、説明がつきません。
0795デフォルトの名無しさんNGNG
>>794
signedとunsignedを比較するとsignedの方はunsignedになる。
sizeofが返す型はsize_tだからunsignedでしょ。
0796デフォルトの名無しさんNGNG
>>795 では、>>794の下の部分は、どう説明するの?
> unsigned short y;
> if ( x < y ) printf("aaa \n");
0797デフォルトの名無しさんNGNG
#include <stdio.h>
int main() {
signed short x=-1;
if ( x < sizeof(x) ) printf("aaa \n");
else printf("bbb \n");
if ( x < (unsigned short) sizeof(x) ) printf("aaa \n");
else printf("bbb \n");
if ( x < (signed short) sizeof(x) ) printf("aaa \n");
else printf("bbb \n");
if ( x < (signed int) sizeof(x) ) printf("aaa \n");
else printf("bbb \n");
if ( x < (unsigned int) sizeof(x) ) printf("aaa \n");
else printf("bbb \n");
return 0;
}
これやってみりゃわかるだろ?
0798デフォルトの名無しさんNGNG
C++を利用してCコンパイラを使う方法がわかりません。誰か教えてください!!
自分で出来たのはvcvars32を自ディレクトリにコピーするところまでです。
0799デフォルトの名無しさんNGNG
>>798
逆ならできるよ、下位互換するシステムなんてそうそうない
0800釣られた?NGNG
>798
vcvars32[.bat]はCやC++自体とは何も関係がないだろ。
何で敢えてコマンドラインでやろうとするの?
0801デフォルトの名無しさんNGNG
質問です。
srand(time(NULL))で初期化してrand()で乱数を取得したのですが
複数のプログラムを動かすときに、同時に起動してしまうと
rand()がすべて同じ数になってしまいます。
別々の乱数にするにはどうしたらよいのでしょうか。
0802デフォルトの名無しさんNGNG
>>801
時間にプロセスIDを足すとか。
0803デフォルトの名無しさんNGNG
>>801
timeが返す値は秒単位だからね。
システムにもっと細かい精度で時間を得られる関数があればそれを使ったら?
0804デフォルトの名無しさんNGNG
>>802-803
ありがとうございます。試してみます。
0805デフォルトの名無しさんNGNG
itoa(int,char*,int)
の第一引数と第三引数の意味を教えてください。
0806デフォルトの名無しさんNGNG
標準ライブラリにはそんなものないんだが。
変換対象と基数か?
0807デフォルトの名無しさんNGNG
>>805
   itoa, ltoa, ultoa - 整数の文字列への変換
書式
   #include <stdlib.h>
   char *itoa(int val, char *buf, int radix);
   char *ltoa(long val, char *buf, int radix);
   char *ultoa(unsigned long val, char *buf, int radix);

解説
   itoa(), ltoa(), ultoa()はvalを文字列に変換してbufに格納します。radixには2から36までの整数で変換の基数を指定します。
   itoa()とltoa()はradixが10のときにはvalを符号付き数として扱います。それ以外では符号なし数として扱います。
   ultoa()はvalを符号なし数として扱います。
リターン値
bufに渡された値をそのまま返します。

>>806
> 標準ライブラリにはそんなものないんだが。
↑初耳だ(ワラ
0808デフォルトの名無しさんNGNG
ん?C99には追加されたのか?
0809デフォルトの名無しさんNGNG
http://seclan.dll.jp/c99d/c99d08.htm
http://seclan.dll.jp/c99d/c99d09.htm

C99にもないじゃない・・・・
それとも「標準ライブラリ」という言葉の意味を間違っていたかな?
Cの標準規格で定められたライブラリという意味だと思っていたけど。
0810デフォルトの名無しさんNGNG
キャスト関数は昔から
0811デフォルトの名無しさんNGNG
atoi と勘違いたとか。
0812805NGNG
>>807
わお、すばらしい。
ありがとうございます。助かりました。
0813デフォルトの名無しさんNGNG
>>807
また一つ賢くなりましたね(ワラ
0814デフォルトの名無しさんNGNG
確かに数値>文字列の処理はCには無いとの文献も見当たりますね
C99かC++のライブラリに追加されたんじゃないかな?
んで、実装自体はCの関数だから下位互換が可能と。
0815>>814NGNG
あ、sprintfは別個ねw <数値文字列変換
0816デフォルトの名無しさんNGNG
ANSI-Cの関数の一覧が乗っていたページを忘れてしまったのですが、
アドレスを教えてください。確かピンクっぽい色で、ヘッダごとに見れたと思います。
0817デフォルトの名無しさんNGNG
>>816
希望のところとは違うけど・・・
ttp://www.personal-media.co.jp/book/c/ansi.html
ある意味ブラクラ(謎
0818816NGNG
>>817 そのページはなくなってしまったんですか?載せていただいたアドレス
は別にブラクラでは無いですが、希望したページと違いますが、いただきます。
ありがとうございました。
0819デフォルトの名無しさんNGNG
fgetc、fgets、fscanf等で標準入力から入力(リダイレクトなどはしないで、キーボードのまま)するとき、
キーを押してもそのまま入力されるわけではなく、
一度画面上で編集(MSDOSプロムプトなら^Hで1文字削除、NT系ならさらに高度な編集機能)
されてから渡されるのですが、
この入力システムはどこのプログラムが提供しているのですか?
デバイスドライバとかですか?
0820デフォルトの名無しさんNGNG
>>819 FILE *stdin だからデバイスだろうねぇ
0821デフォルトの名無しさんNGNG
ヘッダーファイルの#endifとか#ifdefとかって何ですか
0822デフォルトの名無しさんNGNG
>>819
シェルじゃねーかな。
0823ろりえおーばーないとせんせーしょんだんさーりこんNGNG
NULLより 0 の方がいい (プロ言§5.1.1)
http://member.nifty.ne.jp/~masumoto/cpp/topic/#RSEC3
マジっすか?
0824デフォルトの名無しさんNGNG
>>823
#define NULL (0)
0825デフォルトの名無しさんNGNG
NULL PO ?
0826デフォルトの名無しさんNGNG
>>819
端末ドライバ。UNIX(SysV)では STREAMS
0827デフォルトの名無しさんNGNG
>>823
バイブルにもそう書いてあるよ。
0828デフォルトの名無しさんNGNG
NULLの方が良かろう。
ポインタだと分かる。
よって否定派。
0829デフォルトの名無しさんNGNG
ぬるぽの内部表現が 0 にならないことがあるっていうのと
混同しているんでは。内部表現がどうあれソース表記上は
0 (NULL)でなければならなかったような。
0830デフォルトの名無しさんNGNG
>>823
そのページみたけど、

>> 有名なC言語FAQ日本語訳 の質問5.17に NULLポインタに 0以外が割り当てられ
>> てる機種があることを知って以来、 "NULL"と表記するように心掛けてきた私にとっ
>> てはセンセーショナルでした。

こいつなんか勘違いしてるんじゃないか?
NULLポインタのビット表現がオール0じゃない機種だろうと、
0("NULL")はNULLポインタなんだが

Stroustrup が 0 と書くのを勧めてるのが事実なら、
単にC++が糞なだけな気がする
0831ろりえおーばーないとせんせーしょんだんさーりこんNGNG
NULLの人より0の人が多いみたいですね。
でも、猫ちゃんとかよく見るソースにはNULLが多いですねー。
NULLというものも知っておけということでしょうか。
ありがとうございました。
0832デフォルトの名無しさんNGNG
http://member.nifty.ne.jp/~masumoto/cpp/topic/#SEC4
じゃ↑はどうなんですか?
ポインタと混同しそうなんですが。
0833デフォルトの名無しさんNGNG
>>830
NULLがリテラルの0じゃない処理系があるってことだろ。
0834デフォルトの名無しさんNGNG
だからNULLは定義してあるヘッダーを
インクルードするのが面倒だから
俺は使ってないっていってんだろ! 何言ってんだ!
0835ろりえおーばーないとせんせーしょんだんさーりこんNGNG
>>830
C++が糞に見えてくるすばらしい言語を教えてください。
0836デフォルトの名無しさんNGNG
>>835
C言語
0837ろりえおーばーないとせんせーしょんだんさーりこんNGNG
>>836
サンクスコ。
古き良き時代。
0838デフォルトの名無しさんNGNG
すいません。どなたかちょこっとおしえてください。
.NET Microsoft Framework SDK で、C言語のソースを
コンパイルする方法(コマンド等)を教えてください。
0839デフォルトの名無しさんNGNG
>>833
どういう意味?
#define NULL 0xdeadbeaf
とか0以外になってる処理系があるってこと?
0840デフォルトの名無しさんNGNG
>>839
たとえば(void*)0になってるとか。
0841デフォルトの名無しさんNGNG
>>838 CL, BCC32, CC, JAVACのどれか
0842デフォルトの名無しさんNGNG
>>839
ありえない、絶対にありえない
0843デフォルトの名無しさんNGNG
ここれす
http://www.okweb.ne.jp/kotaeru.php3?q=530737
0844デフォルトの名無しさんNGNG
ふーむ
Stroustrup は、NULL が (void *) 0 になってる処理系があるので、
NULLポインタを使いたいときは、0 を使えっていってるの?
へんなの
0845デフォルトの名無しさんNGNG
アロエリーナ、絶対にアロエリーナ
0846デフォルトの名無しさんNGNG
>>844
「C++は型チェックが厳しいから0を使え」みたいな言い方だったような。
0847デフォルトの名無しさんNGNG
>>844

int *p=(void *)0;

これはコンパイルできるか?
0848デフォルトの名無しさんNGNG
>>847
Cなら出来るんじゃない?キャストしないと気持ちわるいけど
0849デフォルトの名無しさんNGNG
>>848
C++では出来ないから0を使うということで  終わり。
0850デフォルトの名無しさんNGNG
void* をキャストなしで他のポインタに代入できない仕様になった時点で
NULL の定義も 0 とするように決めておけば良かったのにな。
0851デフォルトの名無しさんNGNG
NULLテンプレートにすればよかった
0852デフォルトの名無しさんNGNG
>>850,>>851
どうやったところで、ヘッダのインクルードが要るなら現状と同じ。
0853デフォルトの名無しさんNGNG
NULLをキーワードにしちゃえよ
0854デフォルトの名無しさんNGNG
ヘッダのインクルードにやたらとこだわっている人がいるな(w
0855デフォルトの名無しさんNGNG
>>841
さん、ありがと。
cl コマンドででできました。

0856841NGNG
JAVACにツッコミが来なかった・・・もう来ない・・・
0857ろりえおーばーないとせんせーしょんだんさーりこんNGNG
僕の心は揺れています。
1/f
0858デフォルトの名無しさんNGNG
VC++5or6中古買いたいんだが、ヤフーオークションめんどくさい
だれかお助けを!


0859デフォルトの名無しさんNGNG
>>858
お前のタイーホの共犯になれとでも?断る。
0860デフォルトの名無しさんNGNG
>>858
もう一度よく考えるのです。
ほんとうにVC++が必要なのか。
0861デフォルトの名無しさんNGNG
include<stdio.h>
void main(void)
{
int fuck;
fuck=0;
printf("%d"fuck);
}
0862デフォルトの名無しさんNGNG
あのさ、CでGUI作れるの?
何かの本でC++はCの進化系だと書いてあったんだけど。
それとC++ってわざと難しく創られたって本当?
0863デフォルトの名無しさんNGNG
多分多くの処理系で
#ifdef _cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
と定義されていると思うけど。
0864デフォルトの名無しさんNGNG
MS-DOS時代でもGUIとかマルチタスクはあったんだよ
0865デフォルトの名無しさんNGNG
そうだったんですか・・・
0866デフォルトの名無しさんNGNG
>>863
(void *) 0 使ってるのってどの処理系?
普通は、#define NULL 0 でしょ?

ちなみに Solaris8 では、こんなんだった

#ifndef NULL
#if defined(_LP64) && !defined(__cplusplus)
#define NULL 0L
#else
#define NULL 0
#endif
#endif
0867デフォルトの名無しさんNGNG
>>864
一太郎?
0868スレッド直リンNGNG
>>866
gcc,VC++6.0
0869デフォルトの名無しさんNGNG
>>866
VC++ とかだろ

[VC++6 の stdio.h]
/* Define NULL pointer value */

#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif
0870868NGNG
あー名前が・・・・
0871ろりえおーばーないとせんせーしょんだんさーりこんNGNG
#define NULL ((void *)0)
define って、キャストしない場合は int なんでつか?
0872デフォルトの名無しさんNGNG
プリプロセッサ命令に型などない。
0873デフォルトの名無しさんNGNG
>>871
define はキャスト出来ません。
0874デフォルトの名無しさんNGNG
C初心者、勉強中です
BCC5.5を BCC Developer(フリー)で使っているのですが・・。
このBcc Developerについて
何処か良い説明載ってるトコご存知ない?
0875デフォルトの名無しさんNGNG
>>871
int define;と定義すればintだし、char *defineと定義すればchar *
0876デフォルトの名無しさんNGNG
なぜNULLを予約語にしませんか?
0877デフォルトの名無しさんNGNG
>>876
大文字だから
0878877NGNG
× 大文字
○ 全部大文字
0879デフォルトの名無しさんNGNG
>826
てことは、fgetc等でのキーボードからの入力では、履歴機能や挿入入力とかは((システム側に)用意されてなかったら)使えないのですね。
0880デフォルトの名無しさんNGNG
>>879
履歴とか使いたかったら、gnu getline使え。
OSで持っている訳ではない。
但しこれはLGPLではなくGPLなので、プログラム全体が
GPLに矛盾しないライセンスになるので注意。
似たようなライブラリで、BSDライセンスのも有るが、俺は使った事無い。
0881デフォルトの名無しさんNGNG
>880
それは違う
0882デフォルトの名無しさんNGNG
hです。
制すうちを入力しshort型の変数に格納した後
この変数の内部表現をビット列で表示するプログラムを作成せよ・・・
という課題がでました。

integer=>1
0000000000000001
integer=>-2
1111111111111110

といった感じで表示するってとこまでは分かったけど・・・
実際のプログラムが分かりません。助けてください・・・。
0883デフォルトの名無しさんNGNG
>>882
宿題スレへ。
http://pc2.2ch.net/test/read.cgi/tech/1045074808/l50
なんか、最近何度も見た気がするのは気のせいだろうか…
0884デフォルトの名無しさんNGNG
>>883
> なんか、最近何度も見た気がするのは気のせいだろうか…

同じ学校とかじゃねーのかな ?
0885デフォルトの名無しさんNGNG
scanf()って基本的に使わないんですか?
0886デフォルトの名無しさんNGNG
??=とかの3連文字はちゃんと習得しておいた方がいいのでしょうか?
0887デフォルトの名無しさんNGNG
どなたか教えてください。
C言語の本で、実際に実用に使えるような完結したソース
を扱っているC言語応用編みたいないい本はないでしょうか。
練習用の小さなソースだけでは力がつかないような気がしたので、
どなたかちょこっと教えてください。
0888デフォルトの名無しさんNGNG
>>887
作ってわかるC言語 日下部陽一・著
0889デフォルトの名無しさんNGNG
Cをやっているのですが、どんなプログラムが書ければ
脱初心者になれるのですか?おながいします。
0890デフォルトの名無しさんNGNG
>>889
そんな質問をしなくなれば、脱初心者だ。
0891デフォルトの名無しさんNGNG
行列の要素が何個あるかを調べる関数はありますか?
0892デフォルトの名無しさんNGNG
>>891作れ
0893891NGNG
>>892
ありがとう。やってみます。
0894891NGNG
あ、まちがえました。
行列じゃなくて、配列でした。
ありますか?
0895デフォルトの名無しさんNGNG
>>894
#define yousosuuhaikutsudesuka(array) (sizeof array/sizeof array[0])
適当に括弧を付けて。
0896891NGNG
>>895
ありがとうございました。たすかります^^
0897489NGNG
約、一週間が過ぎようといていますが、合計値を横に出すことが出来ても
どうしても、すべて1と表示されてしまいます。ちょっと混乱して分かりません。
どなたか力を貸していただけないでしょうか?よろしくお願いいたします。
初心者ですみません。
0898デフォルトの名無しさんNGNG
fflush(stdin)には誰も突っ込まないんだな。
0899デフォルトの名無しさんNGNG
すいません、ちょっと質問したいんですけど、VCで
インクルードファイルがオープンできませんってエラーが
出るんですけど、このときの設定はどうすればいいんですか?
0900デフォルトの名無しさんNGNG
コンパイラのインストール時の設定を見直す。
0901デフォルトの名無しさんNGNG
>>899
どこにあるなんというインクルードファイルがオープンできないのか判らないと
詳しいことは回答できないと思われ。

ついでに言えば激しくスレ違い。
0902デフォルトの名無しさんNGNG
>>897

#define MAX_ROWS 5
#define MAX_COLS 10
#include <stdio.h>

int main()
{
int table[MAX_ROWS][MAX_COLS];
int i,j,k;
int total;

for(i=1; i<=MAX_COLS; i++){
  for(j=1; j<=MAX_ROWS; j++)
    printf("%3d",j+MAX_ROWS*(i-1));

    total=0;

    for(k=0; k<MAX_ROWS; k++)
      total+=MAX_ROWS*(i-1)+1+k;

    printf("%4d\n",total);

}

return 0;
}
0903902NGNG
インデントの入れ方が良くなかったかな。

#define MAX_ROWS 5
#define MAX_COLS 10
#include <stdio.h>

int main()
{
int table[MAX_ROWS][MAX_COLS];
int i,j,k;
int total;

for(i=1; i<=MAX_COLS; i++){
  for(j=1; j<=MAX_ROWS; j++)
    printf("%3d",j+MAX_ROWS*(i-1));

  total=0;

  for(k=0; k<MAX_ROWS; k++)
    total+=MAX_ROWS*(i-1)+1+k;

  printf("%4d\n",total);

}

return 0;
}
0904デフォルトの名無しさんNGNG
int table[MAX_COLS][MAX_ROWS];
ではいかんのか?
0905902NGNG
コピペ→編集 してたから気づかなかったけど、

int table[MAX_ROWS][MAX_COLS];

は要らなかったな。
0906デフォルトの名無しさんNGNG
>>489 >>897 配列になぜいれるのかが分かりません。その機能を別の所
で使うのだと思うのですが。表示するだけなら↓。
#include <stdio.h>
#define PURASU 5
#define IKOHRU 10
int main(void)
{
int y,x;
for(y=0;y<IKOHRU;y++)
{
for(x=1;x<=PURASU;x++)printf("%5d",PURASU*y+x);
printf("%5d\n",(PURASU+1)*PURASU*10/20+PURASU*PURASU*y);
}
getchar();return 0;
}
0907デフォルトの名無しさんNGNG
>>886
欧州の方で、Cプログラマになるなら必要かもしれない。
0908デフォルトの名無しさんNGNG
red hat linuxですがgetche()を使うためのヘッダファイルがわかりません
お願いします
0909デフォルトの名無しさんNGNG
>>908
curses.h
getchだけど多分同じだと思う。
0910デフォルトの名無しさんNGNG
>>908
getche()なんてものがあるのかw

getc, getch, getchar・・・もう分け分らん
0911デフォルトの名無しさんNGNG
>>908
man で調べてみれば?
0912デフォルトの名無しさんNGNG
>>909
ありがとうございます
0913デフォルトの名無しさんNGNG
コニ男さんでgetcheが使えるみたい
0914デフォルトの名無しさんNGNG
(^O^*)
0915デフォルトの名無しさんNGNG
Curses版、getch()w/echoだったっけ?<getche()
0916デフォルトの名無しさんNGNG
エコーバックのある getch() と覚えておけ
0917デフォルトの名無しさんNGNG
じゃあそのげっちぇのeはechoのe?
0918デフォルトの名無しさんNGNG
げっちぇ言うな
0919デフォルトの名無しさんNGNG
げっち、げっちぇ、げっちゃら
0920デフォルトの名無しさんNGNG
>red hat linuxですがgetche()を使うためのヘッダファイルがわかりません

こーゆー質問を見ると、知りたいのは本当にヘッダファイルだろうか
という疑念がわかないでもない
0921デフォルトの名無しさんNGNG
主に使うのはVC6とmingwなんですが、
memcpyと自分でforループ回すのって
一般的にどっちが速いんですか?
0922デフォルトの名無しさんNGNG
memcpy
0923デフォルトの名無しさんNGNG
>>922
ありがとうございました。
アセンブラの出力見て多分そうだと思ってましたが、
やっぱりそうですよね。
0924デフォルトの名無しさんNGNG
俺もmemcpyに一票つーか、何でforループの方が早いかもとか、思うのかが不思議。
同じことをするライブラリ関数に手書きコードが勝てること等ないと思った方がいい。
0925デフォルトの名無しさんNGNG
スピードなら俺の書いたqsortの方がVC++6.0のqsortより速い。
0926デフォルトの名無しさんNGNG
>925
で、代表値はどうやって選んでるの?
0927デフォルトの名無しさんNGNG
代表値ってなんだろ・・・・基準値なら真ん中。
再帰使っているから使い物にならないけどね。
0928デフォルトの名無しさんNGNG
うーん、間違って覚えてたみたい。
真ん中って、配列上の真ん中に位置する値ってことですか。

qsort の弱点克服の方法はないのかのー。
0929デフォルトの名無しさんNGNG
コードの冗長性&コストの無駄遣いならライブラリには負けない自信がある。
0930デフォルトの名無しさんNGNG
>>929
なにー!
それなら漏れも負けんぞぉ!
0931デフォルトの名無しさんNGNG
読みやすさなら勝てるかもー?
0932デフォルトの名無しさんNGNG
>>931
逆に最近チマチマしたチューンナップってやっちゃダメだと
分かっちゃいるけど、たまに書いてみたくなるよ。
0933デフォルトの名無しさんNGNG
Java->C
Python->C

組み込むならどっち?
Pythonで実現可能ならそっち選んだ方がいいかな?
0934デフォルトの名無しさんNGNG
また意味不明・・。
その矢印が表すものは何だ?
0935デフォルトの名無しさんNGNG

(*Java).C
(*Python).C
0936デフォルトの名無しさんNGNG
>>935 Thx! 分かりやすくなったよ
0937デフォルトの名無しさんNGNG
たとえば
fread(data,2,100,fp);
は,配列data中に,2バイトずつ100個のデータを,fpから読み出す、
という意味になるかと思います。これを100個ではなくてfpの
最初から最後までという指定方法を教えてください。
0938デフォルトの名無しさんNGNG
>>937
fseek(fp,0,SEEK_END);
size = ftell(fp);
fseek(fp,0,SEEK_SET);
fread(data,size,1,fp);
0939デフォルトの名無しさんNGNG
(fp の最初ってファイルの最初なのかどうか分からないけど、)
答え出しちゃうと面白くないと思うからヒント
fp の最初にとるべき位置と最後の位置を分からないと配列の長さが確定しない。

ファイル先頭から見て fp の現在位置を知る方法や、最後に移動する方法、
もしくはファイルサイズを得る方法が分かると、自ずからわかるんじゃない?
0940939NGNG
。゚(゚´Д`゚)゚。デヲクレタ
0941デフォルトの名無しさんNGNG
>>940
うまい棒でも食べて元気出せ
0942デフォルトの名無しさんNGNG
a = 30 + (0x15aa >> m & 1);

これはどういうことですか?

mは適当な整数ということでよろしくおねがいします。
0943デフォルトの名無しさんNGNG
ぱっと見、月の最後の日付をとりたいのかなぁ、と思った。
2 月が例外になりそうな気もするけど。
0944942NGNG
>>943
2月は別に作ってあるので大丈夫なんですが、

0x15aa >> m & 1 の意味がわかりません
0945デフォルトの名無しさんNGNG
うーん。机上でトレースしてわかってくれ。
0946デフォルトの名無しさんNGNG
0x15aa は二進では 1010110101010だよな。
m = 3だと、0x15aa >> 3 は、1010110101になる。 &1で、1。
m = 4だと、0x15aa >> 4 は、101011010になる。 &1で、0。
m = 5だと、0x15aa >> 5 は、10101101になる。 &1で、1。
0947945NGNG
>>946
トレースまでしてあげる貴方を優しいとオモタ。
0948デフォルトの名無しさんNGNG
>>942
mが偶数なら5576をaに入れる。
mが奇数なら2803をaに入れる。
0949デフォルトの名無しさんNGNG
>>948
…
0950948NGNG
おっと、>>の方が&より高いわ。
どうりで変な値になるわけだ。
0951デフォルトの名無しさんNGNG
どうでもいいけど、素直にテーブル使ったほうが速いよな。
0952デフォルトの名無しさんNGNG
>951 まぁ、そうなんですが、そのへんはツッコまないのがよろしいかと。
0953デフォルトの名無しさんNGNG
どうでもいいことだが、 & はむちゃくちゃ優先順位低いよ。
a & 0x01 == 0x01 は
a & ( 0x01 == 0x01 ) と等価。

0954942NGNG
>>943->>953
(・∀・)サンクス
0955デフォルトの名無しさんNGNG
>953
それって、確か昔&&を&で代用していたころの名残なんだよね。
0956デフォルトの名無しさんNGNG
>955 (´・∀・`)ヘー ナルホドウ
>953 さんではないけど、それは知らなかった。
0957デフォルトの名無しさんNGNG
>>944
> 2月は別に作ってあるので大丈夫なんですが、

28 + (0x3bbeecc >> 2 * m & 3) ってやれば、2月を別扱いしなくて済むぞ。
0958デフォルトの名無しさんNGNG
年を知らずに2月の日数を得ることは出来ない。
0959デフォルトの名無しさんNGNG
dayOf2 = 28 + (year % 4 == 0)
ただし、year > 1900 && year < 2100
0960デフォルトの名無しさんNGNG
>956
ホントはもっと順位を上げるべきだったのだがその時点で既に大量のソースが
あったので今更変更する(ことでどれだけの修正が発生するかと思うと)勇気がなかった。

とかなんとか、そんな理由だったかと。
0961デフォルトの名無しさんNGNG
>>957 >>959
お前ら2000年問題からなにも学ばなかったのか?
0962デフォルトの名無しさんNGNG
>>961
2000年問題は、うるう年が問題ではないことも知らないのか?
0963デフォルトの名無しさんNGNG
>>959
2000で例外が発生しないか?
0964963NGNG
あほでした。
400で割り切れる年は閏年でした
0965デフォルトの名無しさんNGNG
いつものパターンですな。>>963 氏が潔いことを除けば。
0966デフォルトの名無しさんNGNG
>>962
条件つけてまでくだらん式を考えてないで
普通にちゃんとした式を出せばいいだろ。
0967デフォルトの名無しさんNGNG
どうせ今の西暦(グレゴリオ暦)が採用される前のデータなんか扱うわけないし、
2100年以降のデータも扱わないって言うなら100年400年ルールは考える必要がない。
そのくらいの割りきりも時には必要。
0968デフォルトの名無しさんNGNG
そう。そうやってどうせ使わないだろうという甘い考えからy2kの悲劇が起こった。
対応するのに膨大な手間がかかるのならまだしも、
すぐ近くにマトモな答えがあるのに、それを使わない理由など無い。
0969デフォルトの名無しさんNGNG
計算式を逆ポーランド記法に変換するアルゴリズムの方針だけでも教えてよ
例
1 + 2 * 3 → 1 2 3 * +
stack , pop , tokenとかの関数は作ったからあとは変換するだけなんだけど
よくわからんぽ
0970デフォルトの名無しさんNGNG
>>969
宿題スレへどうぞ。
http://pc2.2ch.net/test/read.cgi/tech/1045074808/l50

>>968
そろそろスレ違いだけど、
年のフィールドに数字が2桁しか入らないデータ構造って話と
2100年以降のデータは扱えないプログラムって話を
同列に語って意味があるとでも?
そもそも2100年以前に32bit限界(2038年問題)が発生するってば。
0971デフォルトの名無しさんNGNG
> 年のフィールドに数字が2桁しか入らないデータ構造って話と
> 2100年以降のデータは扱えないプログラムって話を
> 同列に語って意味があるとでも?
意味あるだろ。どちらも甘い考えが引き起こした。
先読みの甘さ。うるう年の計算をまともに実装しない甘さ。

> そもそも2100年以前に32bit限界(2038年問題)が発生するってば。
この場合のyearはint型だろ。話が違う。
0972デフォルトの名無しさんNGNG
C言語勉強してるんですが、
1Uって書くのと1と書くのではどう違うんですか?
0973デフォルトの名無しさんNGNG
符号無し。
0974デフォルトの名無しさんNGNG
まず、1U とか 1 って何型か考えてくれ。
0975デフォルトの名無しさんNGNG
期待age
0976972NGNG
>>974
intでよろしいですか
0977デフォルトの名無しさんNGNG
>>976
1はな
0978972NGNG
>>977
1Uはunsigned intってことですか?
0979974NGNG
int:16bit 長のシステムがあったとしよう。

君は long (4バイト長)な変数 l に値 8000h を入れたいと思っている。
さぁ、どう書くの?
その時に気を付けなければならないことは?
0980デフォルトの名無しさんNGNG
>>979
Lをつけると思うけど!?
0981974NGNG
ウワーン!
例えば無しを間違えちゃ話になりませんなぁ。ゴメン!

0982デフォルトの名無しさんNGNG
int main() { return ( -1 < 1 ); }
int main() { return ( -1 < 1U ); }

それぞれどっちが返るか見てみたら?
0983デフォルトの名無しさんNGNG
>>974
値のコンペアをする場合に問題あるんだろ?
0984972NGNG
う〜ん、符号ビットの話かな
すみません
ちょっと用事で20分くらい離れます
0985デフォルトの名無しさんNGNG
1 < 0x80000000 と 1 < 0x80000000U の比較結果
0986デフォルトの名無しさんNGNG
次スレは…なしで!(w
0987974NGNG
ヘコんだ。
0988972NGNG
>>982
上は1,
下は0でした。

>>985
両方1でした。
0989937NGNG
>>938,939
できました。
ありがとうございますた。
0990デフォルトの名無しさんNGNG
>>961-968
お前等未だに 2000年問題とか言ってるのか ?
学習効果なさ杉。
これでも読んどけ → http://www8.ocn.ne.jp/~yama-b/rfc2550j.txt
0991デフォルトの名無しさんNGNG
糞スレ
http://pc2.2ch.net/test/read.cgi/tech/1051528386/
0992デフォルトの名無しさんNGNG
ume
0993デフォルトの名無しさんNGNG
tate
0994デフォルトの名無しさんNGNG
1000を撮ります宣言!
0995デフォルトの名無しさんNGNG
1000を取りま1000 1000言!
0996デフォルトの名無しさんNGNG
yoko
0997デフォルトの名無しさんNGNG
1024?
0998デフォルトの名無しさんNGNG
65535
0999デフォルトの名無しさんNGNG
まあ俺が1000なんだけどな。
1000デフォルトの名無しさんNGNG
1000撮った
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。