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

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

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

1 :デフォルトの名無しさん:03/04/10 18:49
まず問題を冷静に吟味して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/

2 :デフォルトの名無しさん:03/04/10 18:53
>>1
使えない上司・先輩

3 :デフォルトの名無しさん:03/04/10 18:56
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>1

4 :デフォルトの名無しさん:03/04/10 19:02
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>1



5 :デフォルトの名無しさん:03/04/10 19:18
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>1

6 :>>1ちゃんとリンク貼れやボケ:03/04/10 19:47
【過去ログ】
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

7 :( ´∀`)< ぬるぽ:03/04/10 19:49
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

8 :( ´∀`)< ぬるぽ:03/04/10 19:51
【コンパイラ】
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



9 :デフォルトの名無しさん:03/04/10 19:51
このゴミが!
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>1

10 :デフォルトの名無しさん:03/04/10 20:13
スレタイにぬるぽが入ってないだけでもマシか。

11 :デフォルトの名無しさん:03/04/10 20:45
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>3>>4>>5>>9>>1の11,12行目


12 :デフォルトの名無しさん:03/04/11 01:40
すいません、誰かこのプログラム教えてください。
初心者には再帰が難しくて。

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

リスト型を引数とする、
リストのセルがelementとして整数1500を
含んでいるなら1を返し
含んでいないなら0を返す再帰的関数です。
どうかお願いします

13 :デフォルトの名無しさん:03/04/11 01:48
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>1
リンクくらい晴れ!

14 :デフォルトの名無しさん:03/04/11 01:50
>>12
int contain_1500(const List l)
{
if (l->element == 1500) return 1;
return contain_1500(l->next);
}


15 :デフォルトの名無しさん:03/04/11 01:51
int foo(const LIST lst)
{
 if (! lst) { return 0; }
 if (lst->element == 1500) { return 1; }
 return foo(lst->next);
}

16 :デフォルトの名無しさん:03/04/11 01:51
>>14
まずった。
if (!l) return 0;
を先頭に追加してくれ。

17 :デフォルトの名無しさん:03/04/11 02:08
          __,,,,,,___
        (⌒ヽ:::::::::::'''''-,,
      <´・\  ::::::::::::::::::ヽ
       l 3 ハ::::::::::::::::::::::.ヽ,
   ∫  .<、・_ (         )
   旦 (⌒ ̄  ̄ ̄ ̄ ̄ ̄ ̄⌒) これで何したらいいんだろう・・・
    ____
    |\  \  \
    |  | ̄VC  ̄|
    |  |academic|
   \.|____|

18 :デフォルトの名無しさん:03/04/11 02:15
自動変数はスタックに配置されるというのはCの規格で決まっているわけではないですよね。


19 :デフォルトの名無しさん:03/04/11 02:49
必ずしもスタックがあるとは限らんし。
ただし、再帰を考えるとスタック的な何かは必須。

20 :デフォルトの名無しさん:03/04/11 03:16
音声処理プログラムでマイクに向かってしゃべって
「検索せよ」、「閉じる」、「開く」等の10−20程度の単語を
認識させたいと思っています。
音声処理を一からやっていたらさすがにムリなので、
そのようなAPIかなにか公開されてないものかと思って探しています。
もちろん有料のものでかまわないのでご存知の方いたらお教えください。

21 :デフォルトの名無しさん:03/04/11 06:53
>>20
Microsoft Voice なんとか

22 :デフォルトの名無しさん:03/04/11 06:56
>>20
大袈裟すぎるか?

ttp://www.scansoft.co.jp/naturallyspeaking/sdk/
ttp://www-6.ibm.com/jp/voiceland/dev/develop.html


23 :デフォルトの名無しさん:03/04/11 07:02
>>19
そういう機能を提供するものを一般的にスタックと呼ぶんじゃなかろうか。
連続してようが双方向リストで提供されてようが。

24 :デフォルトの名無しさん:03/04/11 07:14
>>19
ヒープでスタック実装できるじゃん。

25 :デフォルトの名無しさん:03/04/11 08:57
     __________
  /o [地獄逝き特別急行] o\
  |┃──────────┃|/
  |┃             ∧_∧ ┃|  ぬるぽ ぉぉぉぉぉぉぉぉん!
  |┃           (´∀` ) ┃| \
  |┃__________┃|
  |┃__________┃|
  | \___________________/ |
  |========================|
  |========================|
   |ヽ[■]___________[■]/|
    |_三三三三三三三三三三_|
   |     | [=.=] |     |
   \ ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄/
      ̄ ̄        ̄ ̄
      /        \
   Delphi.NET、安値でゲットォーーー!!
    ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄(´´
        ∧∧   )      (´⌒(´
   匚⊂ミ゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
  /        ̄ ̄  (´⌒(´⌒;;
/                    \

26 :デフォルトの名無しさん:03/04/11 11:09


                \ │ /
                 / ̄\   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
               ─( ゚ ∀ ゚ )< ぬるぽぬるぽ!
                 \_/   \_________
                / │ \
                    ∩ ∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\∩ ∧ ∧ \( ゚∀゚)< ぬるぽぬるぽぬるぽ!
ぬるぽ〜〜〜〜!   >( ゚∀゚ )/ |    / \__________
________/ |    〈 |   |
              / /\_」 / /\」
               ̄     / /

27 :デフォルトの名無しさん:03/04/11 11:22
struct { enum { A , B } e : 1; } x;
x.e = B;
assert( x.e == B );

今の仕事で使っている、とある古めのコンパイラで
このassertが失敗してびびったのですが、
規格で許された動作なのでしょうか?

28 :デフォルトの名無しさん:03/04/11 11:26
>>27
俺は符号拡張とかなんとかが面倒なので、ビットフィールドは
unsignedでしか使わないことにしてる。

29 :デフォルトの名無しさん:03/04/11 11:36
メモリのない環境もあるし。

30 :デフォルトの名無しさん:03/04/11 11:46
>>27-28
ただのunsignedだとsignedとの比較で悲惨なことになるから
unsigned shortあたりにしといたほうがいいんじゃないか?

31 :デフォルトの名無しさん:03/04/11 11:52
>>30
ビットフィールドには int/signed int/unsigned int しか指定できない。

32 :デフォルトの名無しさん:03/04/11 11:55
>>31
マジかよ。
俺が何気なく使ってたこの機能はVCの勝手な拡張だったのか・・・。

33 :デフォルトの名無しさん:03/04/11 11:56
>>30
っていうか、unsigned とsignedで問題起こるのを
shortにしたからって、なにがどうなるの?

34 :27:03/04/11 11:57
>>27のassertが通ることを保証しているのはC++の規格でした。
Cだと、enumと互換性を持つ型がどれかで動作が決まるので、処理系依存ってことらしいです。
↓Googleでみつけたところ。
maths.newcastle.edu.au/~rking/R/devel/01a/0098.html

結論は、Cではenumにビットフィールド指定するな、ということで。
C++なら(コンパイラが規格に従う限り)大丈夫らしい。

35 :デフォルトの名無しさん:03/04/11 11:59
>>32
なんでまたint以外を使うの?

36 :デフォルトの名無しさん:03/04/11 12:21
>>33,35
unsigned intだと負数との比較のときとか厄介じゃん?

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

struct
{
 unsigned int value: 4;
} border;

int checked_value = 何か;

if ( border.value<=checked_value )
{
 checked_value unsigned int に格上げされるので、負のとき危険
}


37 :35:03/04/11 12:39
>>36
俺の言ったintにはunsigned intも含むんだけど。
なんでcharとかdoubleのような(unsigned)int以外を使うのかなと。


38 :デフォルトの名無しさん:03/04/11 12:44
>>37
unsigned short us = 0;
unsigned int ui = 0;
int i = -1;
assert( us > i );
assert( ui < i );

39 :デフォルトの名無しさん:03/04/11 13:01
そもそもunsignedとsignedを比較するほうがどうかしていると思うのだが。

40 :デフォルトの名無しさん:03/04/11 13:09
>>36
で、unsigned int を unsigned short にしたからって、なにがどうなるの?

41 :35:03/04/11 13:15
>>38
ビットフィールド使っていないじゃん!

42 :デフォルトの名無しさん:03/04/11 13:26
>>40
正しく計算できる
unsigned int と signed int -> unsigned int に格上げ = 符合が失われる
unsigned short と signed int -> signed int に格上げ = だいたいshort>int(環境依存だけど)だから何も失われない

>>41
MSコンパイラの拡張機能なのでどうでもいいことだけど、ビットフィールドでも同様のことが起こるのよ。

43 :42:03/04/11 13:33
ごふ
short<int

44 :デフォルトの名無しさん:03/04/11 14:00
>>42
そんなことを気にするなら、ビットフィールドに限らずunsignedを
使うときには常にshortにしろって話になると思うが。

45 :デフォルトの名無しさん:03/04/11 14:25
そもそも1ビットのビットフィールドでsignedを使うのが阿呆。
そもそもunsigned int signed intを直接比較するのが阿呆。

46 :デフォルトの名無しさん:03/04/11 20:09
たまにプログラムで Build# のようにビルドした回数を表示してるものがありますが、
ああいう事はどうやれば出来るんでしょうか。
VC++を使っています。

47 :前スレ 983:03/04/11 20:19
ここがあったのに・・・

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

ガウスの消去法による、逆行列の計算が
早くなるかと思って期待をしているわけなのですが。

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

49 :デフォルトの名無しさん:03/04/11 20:27
return stack->data[--stack->top];

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

data = stack->data[stack->top];
--stack->top;
return data;
この3パターンを試してみたら?

50 :デフォルトの名無しさん:03/04/11 20:30
>>48
この場合--と[]の優先順位は関係ないよ。

51 :デフォルトの名無しさん:03/04/11 20:45
>> 46
これでいいか? でなければ、他のやりかたで何とか汁
実行するとリソース(FileVersion)を書き換えてビルドするマクロ

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



52 :48:03/04/11 22:38
>>49,50
ご返信ありがとうございます。
後者の方だと考えると物理的にポップが変になってしまう気がするんですが。
とにかく自分で色々と試してみますね。


53 :デフォルトの名無しさん:03/04/11 23:21
>>51
それでいいです。ありがとうございました。

54 :デフォルトの名無しさん:03/04/11 23:33
よく見るとヒラケだし

55 :デフォルトの名無しさん:03/04/12 07:18
良スレ上げ

56 :デフォルトの名無しさん:03/04/12 08:47
>>48
前置デクリメント
キーワード:後置、インクリメント

57 ::03/04/12 09:29
win32apiでCopyFile、DeleteFile使い
ファイルを移動させると
やたらがりがり音がするので
Cで移動させたいのです。どうすればよいですか?

58 :デフォルトの名無しさん:03/04/12 09:32
>>57
標準ライブラリは結局CopyFileやDeleteFile読んでるから、
標準ライブラリを使わないで作ることになるね。
ドライバ用命令つかったりハードウェアを直接操作したり。
うん。あんたには無理だ。

59 :デフォルトの名無しさん:03/04/12 09:38
  ∧_∧
 ( ´∀`)< ぬるぽ

60 ::03/04/12 09:39
>>58
ありがとう。同じ事なら止めときます。

61 :デフォルトの名無しさん:03/04/12 10:38
構造体のメンバに
char *
を用意して(他にもbool int floatもある)

構造体自体を
mallocで任意の配列として確保します。
で、その後にメンバの
char *
を使って、任意の文字列をmallocしたいのです。
文字列の確保、格納、使用までは上手く行ってますし
アドレスをデバッグにかけてみても、メモリが壊れてる気配も有りません。
…しかし、freeする段階で(ちゃんと、確保した順と逆に開放してます。)
エラーが出ます。
DAMAGE debug heap.cだったと思います。
ヒープ領域で何かが起っているのでしょうか?
直し方の見当も付きません。

62 :デフォルトの名無しさん:03/04/12 10:42
>>61
おそらく書いたコードに間違いがあります。

63 :デフォルトの名無しさん:03/04/12 10:45
移動してからfreeしている?

64 :デフォルトの名無しさん:03/04/12 10:46
>>57
MoveFile()

65 :デフォルトの名無しさん:03/04/12 11:59
とりあえず解放してるとこのコードをコピペしる


66 :デフォルトの名無しさん:03/04/12 12:58
free(malloc(12345);


67 :デフォルトの名無しさん:03/04/12 12:58
free(malloc(12345));

68 :デフォルトの名無しさん:03/04/12 13:05
typedefvoid(*FUNC)( . . .);
として、
FUNC FuncTbl[]={ hoge1,hoge2,hoge3, };
と関数テーブルをつくり、
hoge1() などは戻り値を返す関数であるとした場合、
long retval=FuncTbl[0]( );
のような事は出来ないのでしょうか。

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



69 :デフォルトの名無しさん:03/04/12 13:11
戻り値なしの関数を指すポインタなんだから、戻り値を返す関数(のアドレス)は代入できないし、それを呼んで戻り値を得ることもできないでしょ。
・・・・・・・多分。

70 :デフォルトの名無しさん:03/04/12 13:14
typedef long (*FUNC)(.);


71 :デフォルトの名無しさん:03/04/12 13:14
>>68
typedef long (*FUNC)(...); ならできる。

72 :デフォルトの名無しさん:03/04/12 13:25
longは最低でも128bitにしてほしかった。


73 :68:03/04/12 13:37
みなさまレスどうもです。
そのまんまでしたね。
ありがとうございました。


74 :デフォルトの名無しさん:03/04/12 13:54
>>68,71
一応、ellipsisだけでプロトタイプとして有効なのはC++。と突っ込んでおく。

75 :デフォルトの名無しさん:03/04/12 14:01
シネヤ!
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>59

76 :デフォルトの名無しさん:03/04/12 14:32
>>70-71ケコーン

77 :デフォルトの名無しさん:03/04/12 14:36
memsetは危険だから使うなと聞いたのですが。

78 :デフォルトの名無しさん:03/04/12 14:43
memset()が危なくて使えないようならCは使うな。
PerlとかVBでも使え。

79 :デフォルトの名無しさん:03/04/12 14:45
>>78
そうします(T_T)

80 :デフォルトの名無しさん:03/04/12 14:46
誰から?

81 :デフォルトの名無しさん:03/04/12 14:49
標準関数の中で絶対に使ってはならないのはgetsだけ?

82 :デフォルトの名無しさん:03/04/12 14:51
(σ・∀・)σ ゲッツ!


83 :デフォルトの名無しさん:03/04/12 15:17
プッツ!

84 :デフォルトの名無しさん:03/04/12 15:19
>>81
strcpyとかもさけるべき
strncpyを使う

85 :デフォルトの名無しさん:03/04/12 15:23
>>84
strcpy使いまくってますが何か?

86 :デフォルトの名無しさん:03/04/12 15:25
>>84
また話を蒸し返すのか?

87 :デフォルトの名無しさん:03/04/12 15:26
strlcpy か astring を使おう。

88 :デフォルトの名無しさん:03/04/12 15:27
strncpyは '\0' を付加しない仕様を知っていれば
危険じゃないだろう。

89 :デフォルトの名無しさん:03/04/12 15:27
先頭に'\0'を入れてstrncat

90 :デフォルトの名無しさん:03/04/12 15:29
ここは酷い釣堀ですね

91 :デフォルトの名無しさん:03/04/12 15:33
基本的な質問なんですが、
今更C言語なんて何がいいんですか?

92 :デフォルトの名無しさん:03/04/12 15:35
言葉遊び

93 :デフォルトの名無しさん:03/04/12 15:41
保守

94 :デフォルトの名無しさん:03/04/12 15:46
>>91  はぁ? 何言語と比べて?
プログラミング言語は色々あるからさぁ、
そんな質問じゃあどうしようもない。

95 :デフォルトの名無しさん:03/04/12 15:47
ジエンウザ

96 :デフォルトの名無しさん:03/04/12 15:49
95 デフォルトの名無しさん:03/04/12 15:47
ジエンウザ

97 :デフォルトの名無しさん:03/04/12 21:06
>>47
普通は問題になるとは思いません。

1/b がレジスタに確保されれば、丸め誤差すら存在しないと思います。
少なくとも Intel 系 CPU の内部では 80 bits の精度で計算してますから。

98 :デフォルトの名無しさん:03/04/12 21:21
C言語のおかげで毎月80万円の給料をもらっている。
明日からC言語が消滅したら・・・JavaかC++でも使うかな(でも給料は半減だ)

99 :デフォルトの名無しさん:03/04/12 21:44
使いこなせない言語だと仕事こなせなくて給料下がるよね。

100 :デフォルトの名無しさん:03/04/13 00:15
100ゲッツ!!!!

101 :デフォルトの名無しさん:03/04/13 00:18
⊂⌒~⊃。Д。)⊃[NULL]
ヌルポゲッツ!!!!

102 :デフォルトの名無しさん:03/04/13 00:38
   ( ・∀・)   | | ガッ 
  と    )    | |
    Y /ノ    人
     / )    <  >_∧∩
   _/し' //. V`Д´)/ ← >>101
  (_フ彡        /

103 :デフォルトの名無しさん:03/04/13 12:18
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];
とするしかないのでしょうか?

104 :デフォルトの名無しさん:03/04/13 12:30
>>103
"malloc 二次元配列" ぐらいでググれ。

105 :デフォルトの名無しさん:03/04/13 12:49
>>103
10x10 程度なら、そうするのがいいでしょうね。

106 :103:03/04/13 14:46
ありがとうございます

107 :デフォルトの名無しさん:03/04/13 17:11
ここで質問する人ってのは、
自分で調べることも出来ない無能なんですか?


108 :デフォルトの名無しさん:03/04/13 17:29
>>107
50% ぐらいはそう。
10% ぐらいは調べてもわからないから質問してる奴。
残り、40% はお前や俺みたいに C言語に関係ないことを書いてるアフォ。

109 :結果の違う理由は?:03/04/13 17:29
#include <stdio.h>

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

a = 0xFF;
b = 0xFF;

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


110 :デフォルトの名無しさん:03/04/13 17:34
char aがsigned charとして扱われているから。
unsigned charとして扱われる処理系なら結果は等しい。

111 :デフォルトの名無しさん:03/04/13 17:34
>>108
ぬるぽとかぬるぽ叩きとかな。

112 :デフォルトの名無しさん:03/04/13 17:35
printf インテグラルプロモーション 符号拡張 ゼロ拡張

113 :107:03/04/13 17:37
>>108
つまりその10%の人たちは調べても分からない無能なんですね。

114 :デフォルトの名無しさん:03/04/13 17:43
>>113
つまり、質問者が無能かどうか、調べても分からない>>107は無能なんですね?

115 :デフォルトの名無しさん:03/04/13 17:44
>>113
そういう意味では、無能だよ。
それがどうかしたのか ?

116 :デフォルトの名無しさん:03/04/13 17:51
無能だっていいじゃない!
この子が元気ならそれでいいじゃない!

117 :デフォルトの名無しさん:03/04/13 17:52
140 デフォルトの名無しさん:03/04/13 15:37
本のタイトルに「C言語」と入っている本はよくない、みたいなレスを見かけるんですが、
どうしてよくないんでしょうか?

スレ立てるまでもない質問でこんあのあったよ。 
誰か答えれる?

118 :デフォルトの名無しさん:03/04/13 17:55
>>117
日本語だから。

119 :デフォルトの名無しさん:03/04/13 17:58
ワラタ 

120 :デフォルトの名無しさん:03/04/13 20:04
>>117
C言語は糞だからその解説本も糞だらけ
つまり良本なんて無いってこった

C言語と入ってない本の著者が遠まわしに宣伝してるだけかもしれんが

121 :デフォルトの名無しさん:03/04/13 20:43
初心者です。

#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

と表示されてしまいコンパイルできません。
どうすればよろしいでしょうか?

122 :デフォルトの名無しさん:03/04/13 20:47
>>121
-lm

123 :121:03/04/13 20:52
>>122

ありがとうございます。できました。
-lmについて調べてみます。

124 :デフォルトの名無しさん:03/04/13 21:00
初心者です。

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

それとコンパイル時の -??  この??には何を入れればよいでしょうか?

125 :デフォルトの名無しさん:03/04/13 21:03
scanfって一般的になんて読まれてるんですか?

126 :デフォルトの名無しさん:03/04/13 21:09
>>125
スキャンファンクション

127 :デフォルトの名無しさん:03/04/13 21:17
>>125
すきゃんえふ

128 :デフォルトの名無しさん:03/04/13 21:27
>125
スケァネフ

129 :デフォルトの名無しさん:03/04/13 22:58
BMPの表示プログラムソースをヘッターまで読み出せるのですが
イメージデータがうまく読み出せません。

130 :デフォルトの名無しさん:03/04/13 22:59
それはおきのどくに。

131 :デフォルトの名無しさん:03/04/13 23:04
がんばれ。

132 :デフォルトの名無しさん:03/04/13 23:14
初心者にはPascalを勧めようよ。
その方がいいよきっと。

133 :デフォルトの名無しさん:03/04/13 23:16
昔はミリバールだったな。

134 :デフォルトの名無しさん:03/04/13 23:18
おまえら優しいな

135 :デフォルトの名無しさん:03/04/13 23:20
strncpyの使い方を教えてください。

136 :デフォルトの名無しさん:03/04/13 23:21
>>129
もう少し情報がないと答えられない。
それと、これはC言語の問題なの?


137 :デフォルトの名無しさん:03/04/13 23:24
>>120
10点。

>>120がC言語は糞と思う理由が述べられてない。
何言語より糞なのかも不明
最終行・・・さらに意味不明。

138 :デフォルトの名無しさん:03/04/13 23:26
135 デフォルトの名無しさん:03/04/13 23:20
strncpyの使い方を教えてください。

139 :デフォルトの名無しさん:03/04/13 23:35
(*(int (*)(char*,char*))strncpy)(s,s2);

140 :デフォルトの名無しさん:03/04/13 23:49
>>135
「strncpyの使い方を教えてください。」と発言するときに使う。

141 :デフォルトの名無しさん:03/04/14 02:08
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);
}



142 :デフォルトの名無しさん:03/04/14 03:59
>>141
 fprintf(wfp, buf);

 fprintf(wfp, "%s", buf);

 fputs(buf, wfp);
にするべし。
% を含む文字列があった場合に変になる。
多分、それで変なメモリ領域を読み出そうとして
そういうエラーになったんだと思う。
つまり、"read" はファイルの読み出しじゃなくて、
メモリアクセスの方のなのでは。

143 :デフォルトの名無しさん:03/04/14 07:54
>>142
Win2000とかで出るやつだな。直訳らしいが酷い訳だよなぁ。

>>141
>>142の言うように、printf系関数のフォーマット文字列には定数を与えるのが鉄則。

144 :143:03/04/14 08:10
> if ((strstr(buf, " /// ") - buf) <= 10) {

strstrの戻り値を確認していないのが気になる。
" ///"がなかった場合NULLが返るけど、NULLからあるポインタを引いた答えって決まっているのかな?
Win2000+VC++6.0の組み合わせでは上の条件式は" ///"が見つからなかった場合、真になるね。

145 :143:03/04/14 08:11
真になっても構わないのならいいんだけど(^_^;)

146 :デフォルトの名無しさん:03/04/14 09:23
>>141
while (fgets(buf, 4089, fp)) {

この部分は、
while (fgets(buf, 4089, rfp)) {
だな。

147 :デフォルトの名無しさん:03/04/14 10:47
>>141
1行は4089で足りる? オーバーする行があったらどうなるか考えた?

#sedでもawkでも、perlでもできるような気がするんだけど...

148 :デフォルトの名無しさん:03/04/14 11:04
>>141
つっこみどころ満載だなー!

149 :デフォルトの名無しさん:03/04/14 14:03
#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

どうして結果が違いますか?

150 :デフォルトの名無しさん:03/04/14 14:51
>>149
ネタ?
-1と255を代入してそれをprintf()でintに変換して表示してるからだよ。

151 :デフォルトの名無しさん:03/04/14 15:29
>>149
charをshort にしたら同じになるよ(w

152 :デフォルトの名無しさん:03/04/14 17:24
long型の変数に入っている数値を
文字列に変換したいのですが、
何か簡単にできる方法はありませんか?

1桁づつアスキーコードに変換するという方法は思いつくのですが
よろしくお願いします

153 :デフォルトの名無しさん:03/04/14 17:46
>>152
sprintf

154 :デフォルトの名無しさん:03/04/14 18:01
>>153
サンクス


155 :141:03/04/14 20:48
レスどうもでした。
>>142さんの方法で無事解決です。

総ツッコミ受けているように明らかに酷いソースなんですが、自分の環境下で一回満足に
動けばそれでいいというものなのでこんな感じに・・・。こういう場合でもちゃんと作るべき?

156 :デフォルトの名無しさん:03/04/14 20:52
>>155=141
そういうときはawkでも使うのが無難。
cで書くにしても、普段からちゃんと書く癖をつけておけばバグが減ると言うものです。

157 :デフォルトの名無しさん:03/04/15 05:08
typedef struct CELL *LIST;
struct CELL {
int element;
LIST next;
};
これを用いて
整数のリストを引数とする
再帰的な選択ソートのプログラムを教えてくれませんか?

158 :デフォルトの名無しさん:03/04/15 05:22
C/C++の宿題やらせてください。おながいします
http://pc2.2ch.net/test/read.cgi/tech/1045074808/l50

159 :157:03/04/15 05:31
すいません。書き込むとこ間違えました。

160 :デフォルトの名無しさん:03/04/15 16:10
代入が起るときは
代入先の変数の型に自動で変換される ってことは
イメージ的には代入元を代入先の型にキャストした値が
代入されると考えて良いでしょうか?

161 :デフォルトの名無しさん:03/04/15 16:28
型格上げできる組合せは限られてるわけだが、許される組合せに関して言えば
それでいい。


162 :160:03/04/15 17:21
>>161 助言ありがとうございました。安心できました。


163 :デフォルトの名無しさん:03/04/15 22:56
計算方法がわかりません。

int value1 = 800000;
double value2 = 0.000000125;

として、

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

とすると、結果は1とならず0となります。
なぜ1にならないのでしょうか?


164 :デフォルトの名無しさん:03/04/15 22:58
>>163
800000*0.000000125=0.1ですよ。。。

165 :デフォルトの名無しさん:03/04/15 23:01
>>164
あ、8000000でした。すみません。

関係ないけど、スレタイ「開け」になってるね。


166 :デフォルトの名無しさん:03/04/15 23:15
>>165
知らなかったよ(TT)

167 :163:03/04/15 23:37
同じ計算を0.1×10と行って1桁ずつ増やしていったら
tmp1 = 0.000001;
tmp2 = 1000000;
の時点で結果が0になってしまった。
キャストの問題でしょうか?


168 :デフォルトの名無しさん:03/04/16 00:00
http://www.geocities.co.jp/Playtown-Denei/4338/Cprint.html

169 :デフォルトの名無しさん:03/04/16 00:03
浮動小数点演算がぴったり整数値になると思っちゃイヤン

170 :デフォルトの名無しさん:03/04/16 00:07
>>167
gccだと最適化の程度によって答えが変わる罠。

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

というわけで、キャストのときは精度に注意しましょう。

171 :デフォルトの名無しさん:03/04/16 00:09
>>168
そのごみのようなページは何?

172 :163:03/04/16 00:12
>>170
具体的にどうキャストすれば、int型で出力できるでしょうか?


173 :デフォルトの名無しさん:03/04/16 00:16
>>163

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

printf("result = %d\n", (int)((double)value1 * value2 + 1e-10));
とでもしてみたら?


174 :163:03/04/16 00:21
>>173
1e-10で帳尻が合うのでしょうが、なんか納得いかないです。
すみません。
一旦変数に入れるしか方法は無いかもしれないですね。


175 :デフォルトの名無しさん:03/04/16 00:22
%gで1になった・・・

176 :デフォルトの名無しさん:03/04/16 00:23
0.000001→double からすでに劣化してるしな・・

177 :デフォルトの名無しさん:03/04/16 00:25
>>163
実数演算を厳密にやろうとしたら常に精度に注意を払わないといけなくなる。
例えば、0.1を10回足しても1にはならないという現象も出てくる。
10進数の小数を2進数で表現する以上、避けては通れない道だと思うしか。

178 :デフォルトの名無しさん:03/04/16 00:28
>>175
%gだと高々6桁程度の精度で丸めるからな。
>>176
そだね。
逆に、2^(-12)は劣化しないけど。

179 :163:03/04/16 00:29
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
そうですね。今後気をつけます。

皆様ありがとうございました。


180 :デフォルトの名無しさん:03/04/16 01:00
単にintにキャストじゃなくて、近い整数に丸めてからの方が安心。
rintかround。

181 :デフォルトの名無しさん:03/04/16 05:30
そうそう。intにするときは「丸めない」からね。xx.yyy...という数のxxの
部分をintに入れるだけだよ。だから179のコードでも結果は同じだと思う。

182 :デフォルトの名無しさん:03/04/16 05:30
>>179 で解決する理由がわかりません。
単に他の変数に放り込んだだけのように見えます。
本質的に >>163 とどう違うのか、誰か教えてください。

183 :デフォルトの名無しさん:03/04/16 08:42
IntelCPU系だと、内部演算の精度がdouble以上あるから
一旦doubleの変数への丸めが入る段階で巧くいくこともある。
勿論、巧くいかないこともあるからεを足す工夫は必要。

round()を使ってもいいが、(int) (double値 + 1e-15)でも充分。

184 :デフォルトの名無しさん:03/04/16 09:34
つか、>>163が"%d"で書こうとしていたところを見ると、この乗算結果が
数学的には整数になることが元々予測できてたんじゃないか?
技術系の計算ではたまにあるよね、そういうこと。
そういったシチュエーションだったら、1.e-10とか1.e-15とかいう半端な数を
突然持ち出すより、いっそ「四捨五入」という意味で、
  (int)(double値 + 0.5)
とする方がスッキリ納得してもらえるんじゃない?

185 :デフォルトの名無しさん:03/04/16 11:39
質問。
#define fname "data.txt"
....
strcat(buf,fname"がないよ");*/strcpyでも良い/*
....

という第2引数書き方はC言語的にやって良いのでしょうか?
文字列の扱いはあまりよくわからないので・・・。

186 :デフォルトの名無しさん:03/04/16 12:31
突込み所満載だな。

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

とまぁ、このくらい書いておけば後で誰か突っ込んでくれるだろう。

187 :デフォルトの名無しさん:03/04/16 13:19
> ・define名は大文字にするのが一般的
これだけ、他のつっこみとレベルがちとズレてるな
とチャチャ入れ

188 :デフォルトの名無しさん:03/04/16 14:00
>>185

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

こんな感じになってるなら問題ない。


189 :185:03/04/16 14:00
>186
thx! 謎が解けました。
コメントはこのスレ用に書いたものだったけど、どうもやり方間違えたようですな。
sprintfでも良かったんですけど、使ったことの無いやつを試してみたかったのです。(汗
ともあれ、ありがとうございました。

190 :デフォルトの名無しさん:03/04/16 15:21
>>188
ありありだろ(w

191 :デフォルトの名無しさん:03/04/16 15:25
おおありなごやはしろでもつ

192 :デフォルトの名無しさん:03/04/16 15:27
伊勢は津でもつ津は伊勢でもつ

193 :デフォルトの名無しさん:03/04/16 20:36
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."
のままです。
なんででしょう?



194 :デフォルトの名無しさん:03/04/16 20:42
>>193
void change(char** a){
 *a = "AAAAAAAAAAAAAAAAAA";
}
int main(){
 char *test1;
 test1 ="HelloWorld.";
 change(&test1);
 printf("test1 : %s\n", test1);
 return 0;
}


195 :デフォルトの名無しさん:03/04/16 23:19
>>194
それだと動きました。どうもです。
でも、どうしてポインタが2つも必要なんでしょう?

196 :デフォルトの名無しさん:03/04/16 23:31
>>195
ポインタ変数に書き込んでもらう必要があるから。

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

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

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

とするのと同じ。
今回は、たまたまポインタ変数だったから 間接演算子 '*' が2個並ぶ。

197 :C初心者:03/04/16 23:48
本当に超初心者的な質問で申し訳ないのですが、神の方教えて下さい。
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 ");
}

198 :デフォルトの名無しさん:03/04/16 23:51
>>197
最後に改行でもいれておあげ。

199 :デフォルトの名無しさん:03/04/16 23:52
>>197
最後に改行を加える。

200 :デフォルトの名無しさん:03/04/16 23:56
なんで最後に改行が無いとwarningになるの?

201 :デフォルトの名無しさん:03/04/16 23:58
>>200
ハッカーは改行で終わっていないと気持ち悪くなるらしいです。

202 :デフォルトの名無しさん:03/04/17 00:04
>>201
それだけの理由なの!?

203 :C初心者:03/04/17 00:06
198,199の方々の神に感謝。
きちんと実行できますた。
こんなくだらないことで2時間も延々と迷ってた自分が恥ずかしくなりました。
やっぱり基礎知識は重要ですね。本当今日が今までで一番2チャンが有効活用できますた。

204 :201:03/04/17 00:07
>>202
規格で改行で終わっていなければならないと決められているから。とこのスレか前スレで誰かが書き込んでいたけど、本当かどうかは知らない。

205 :デフォルトの名無しさん:03/04/17 00:16
if(ferror(fin)) perror(NULL);
としたいのですが、ferror() によって errnoが書き換えられる事はないのでしょうか?

206 :デフォルトの名無しさん:03/04/17 00:17
ない

207 :デフォルトの名無しさん:03/04/17 00:24
>>204
ファイルの終了を想定しているのか?

208 :デフォルトの名無しさん:03/04/17 00:33
>>203
別に改行いれなくても実行できるっしょ

209 :デフォルトの名無しさん:03/04/17 00:38
C そのものはフリーフォーマットでも、プリプロセッサは行処理するから・・・とか?

210 :デフォルトの名無しさん:03/04/17 00:52
ホワイトスペースの文字コード(isspaceが真を返す範囲)を得るにはどうしたらよいですか?
# setlocale 対応で

211 :デフォルトの名無しさん:03/04/17 01:25
char ch[256];
for( i = 0; i<255; i++) ch[i] = isspace(i);
でとれる。

212 :デフォルトの名無しさん:03/04/17 02:11
なんで255を除くの?


213 :デフォルトの名無しさん:03/04/17 02:28
>>212
255は、どのロケールでもisspaceで真にならないから。


とボケてみる。

214 :デフォルトの名無しさん:03/04/17 04:56
夜分すいません。
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飛びになってしまうのはなぜなのでしょう?

215 :デフォルトの名無しさん:03/04/17 05:01
それは p が int* だからです。
char* p にすればよろし。
理由は自分で調べれ...

216 :デフォルトの名無しさん:03/04/17 05:03
>>215
手がかりThx.
お礼に何か差し上げたいところですが何も無いので跳躍します。

217 :デフォルトの名無しさん:03/04/17 09:24
C言語ってなんですか?
どこかの国の言葉ですか?
エスペラントみたいな?

218 :デフォルトの名無しさん:03/04/17 09:33
とりあえず名前すらも知らんやつはプログラマじゃないな

219 :デフォルトの名無しさん:03/04/17 10:36
>>217
 | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
 | 1点!!!!    |
 |_________|
    ∧∧ ||
    ( ゚д゚)||
    / づΦ
 \ (___ノ


220 :デフォルトの名無しさん:03/04/17 12:15
配列を使って縦50、横6で数字を0から並べたいのですがどうすればよろしいでしょうか?

221 :デフォルトの名無しさん:03/04/17 12:27
>>220
配列にタテヨコはないが、二次元配列を使えばいい。


222 :デフォルトの名無しさん:03/04/17 12:36
ありがとうございます、二次元配列を使って作っているのですが、どうも・・うまく動かないのです。

223 :デフォルトの名無しさん:03/04/17 12:42
>>222
ソース晒しキボンヌ

224 :デフォルトの名無しさん:03/04/17 12:46
# 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();

}



超初心者ですみません。

225 :デフォルトの名無しさん:03/04/17 12:51
>>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;
}

226 :デフォルトの名無しさん:03/04/17 12:52
table[MAX_ROWS][MAX_COLS]は
table[x][y]でしょ。

227 :デフォルトの名無しさん:03/04/17 12:53
tableに代入してないよ?

228 :デフォルトの名無しさん:03/04/17 13:33
二つのfor文が上下逆さじゃない?

229 :デフォルトの名無しさん:03/04/17 13:49
>>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;
}

汚いけど...

230 :デフォルトの名無しさん:03/04/17 13:52
>>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;
}


231 :デフォルトの名無しさん:03/04/17 13:53
>>229,>>230
だめぽ...

232 :デフォルトの名無しさん:03/04/17 13:58
>>231
while{}は不要。
xとyの二重ループで300回じゃん。


233 :デフォルトの名無しさん:03/04/17 14:15
皆さんありがとうございます。難しいですね、プログラミングって

234 :デフォルトの名無しさん:03/04/17 14:27
プログラミングは積み重ねだからね。

あ、こういう質問は宿題スレのほうがいいかも。
宿題じゃなくても。


235 :デフォルトの名無しさん:03/04/17 14:28
>>232
そういえばそうですね

236 :デフォルトの名無しさん:03/04/17 14:28
別に配列使わなくてもループだけでいいのでは。

237 :喧嘩王 ◆52.FsIEe7o :03/04/17 14:29
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( ゚,_ゝ゚)プッ!!


238 :デフォルトの名無しさん:03/04/17 14:35
>>236
配列使ったのは、たぶんあとで拡張するために。

>>237
%3d にするとケタがそろうよ。


239 :デフォルトの名無しさん:03/04/17 14:56
%3dを使うとなぜ桁がそろうようになるのですか?

240 :山崎渉:03/04/17 15:09
(^^)

241 :デフォルトの名無しさん:03/04/17 16:24
>>239
へるぷ嫁

242 :デフォルトの名無しさん:03/04/17 17:49
アドレスからそのアドレスに割り当てられている変数名(文字列)が
取得したのですがどうすればいいですか?

int a;
int b;
int c;


printf("a=%d",a);
printf("b=%d",b);
printf("c=%d",c); ←こいつらをLOOPさせて1行にできないか?


243 :デフォルトの名無しさん:03/04/17 18:02
printf("a=%d b=%d c=%d", a, b, c);

244 :デフォルトの名無しさん:03/04/17 18:21
printf("c=%d ", c, printf("b=%d ", b,printf("a=%d ", a)));

245 :242:03/04/17 18:40
実際はa,b,cの3種類ではなくて
1万個ぐらいの変数(!=配列)があるんです。
1万行のprintfを書くかしかないのか・・・

246 :デフォルトの名無しさん:03/04/17 18:45
設計を見直せ

247 :デフォルトの名無しさん:03/04/17 18:54
環境依存で良ければ、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));

248 :デフォルトの名無しさん:03/04/17 18:57
>>247 それは何のジョークでつか?

249 :デフォルトの名無しさん:03/04/17 19:01
1万もの変数って何の変数?

250 :デフォルトの名無しさん:03/04/17 19:23
つうかマルチポストうざい

251 :デフォルトの名無しさん:03/04/17 19:30
1マンコぐらいの変数でがたがた言ってる奴って
大規模システムの開発とかやったことないんじゃねぇの?プッ


252 :デフォルトの名無しさん:03/04/17 19:42
int i;
while((i = getchar()) != EOF)
printf("printf(\"%c=%%d\",%c)", i, i);

でコードの自動生成はどうだ?

253 :デフォルトの名無しさん:03/04/17 19:46
sizeof(int) * 10000 = 40000byte = 40kbyte

ところで、そんなにたくさんの変数の命名規則はどんな感じ?

254 :デフォルトの名無しさん:03/04/17 19:47
>252
変数名手打ちするそれの、どこが自動生成なんだと小一時間...(ry

255 :デフォルトの名無しさん:03/04/17 19:50
さっさと配列なり適切なものに直せ

256 :sage:03/04/17 20:06
>255
例えばお前はソースを追っていて配列の255番目に入ってる値の意味が何なのか
すぐにわかるか?いちいち調べる事になるだろ?
コーディングする時も大変な事になるぞ。
名前からその変数の持つ意味が直感でわかるような変数名が理想なわけ。

素人はすっこんでろ。

257 :デフォルトの名無しさん:03/04/17 20:10
>>256
普通インデックスに名前付けるだろ

258 :sage:03/04/17 20:10
>>256
だからさっさと直感で分かるような変数名に直せっつってんだよ。

職業アマグラマは素人に戻れ。

259 :デフォルトの名無しさん:03/04/17 20:11
>>256
適切な物も選択できないのか。

260 :デフォルトの名無しさん:03/04/17 20:11
>>242
やりたいこととコードが合っていないと思うのは俺だけか?

261 :260:03/04/17 20:12
つーかCじゃ不可能だろ・・・・
コンパイル&リンクしたらもう変数名なんて無意味なものになるし。

262 :デフォルトの名無しさん:03/04/17 20:14
情報を小出しにしないで、もっとちゃんと説明しる。

じゃなきゃ、答えられないって。

263 :260:03/04/17 20:15
逆(変数のアドレスを列挙する)ならできなくもないけどね。
int a;
printf("aのアドレスは%pです。\n",&a);


264 :デフォルトの名無しさん:03/04/17 20:18
アドレスから変数名を割り出したい時ってどんな時だろう。

265 :242:03/04/17 20:20
不可能という事のようですので
1万行書きます・・・

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

266 :デフォルトの名無しさん:03/04/17 20:21
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行目のテーブルは自動生成か人海戦術で作れ。

267 :デフォルトの名無しさん:03/04/17 20:21
>>265
ねぇねぇ、どんな状況なの?ものすごく興味があるんだけど。

268 :242:03/04/17 20:23
>264
242のように全変数を変数名付きでダンプさせたい時です。

269 :デフォルトの名無しさん:03/04/17 20:24
>>268
>>242は変数名と変数の値を列挙しているだけですが。


270 :デフォルトの名無しさん:03/04/17 20:25
なんでそんなことをしたいのか聞いているんだと思うけど。

271 :デフォルトの名無しさん:03/04/17 20:26
もうほっといてやれよ・・・

272 :242:03/04/17 20:30
えーとですね・・
さまざまなシステムから使用される共有メモリ変数があるんです。
(ある領域に連続して宣言されている)
その変数はルール上読み込み専用としてるのですが値が壊れる事があるのです。
で、どこで壊れるのか、どのアドレス位置から壊れているのかを
調べる為に全領域ダンプさせたいのです。

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




273 :デフォルトの名無しさん:03/04/17 20:34
>>272
デバッグ情報使えよ。MAPファイルとか。

274 :デフォルトの名無しさん:03/04/17 20:34
ソースから変数定義を抜き出すプログラムでもつくってソースつくりゃいいじゃんか

275 :デフォルトの名無しさん:03/04/17 20:35
>>272
その壊れた領域のアドレスを元にそれを参照している変数(言い方がおかしいな・・・)の名前を得たいってことか?

276 :242:03/04/17 20:38
>>274
当然1万行手打ちとかコピペなんて作業はしてませんよ。

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

ほかになんかあります?

277 :デフォルトの名無しさん:03/04/17 20:39
>>276
そういうツールを探すか作ればよい。

278 :242:03/04/17 20:42
>275
アドレスから変数名がわかれば
FOR文で回しながら
変数名=値
をダンプできるなーと思ったんです。

>277
はい、とっくに作って実行済みです。


279 :デフォルトの名無しさん:03/04/17 21:19
#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;
}

280 :279:03/04/17 21:20
//--------------------------------------//
&nullpo = 0064FDE8
&nullpo.name =0064FDE8
nullpo = 1819047246, 00006F70, , (null)
name : Nullpo
height : 60 cm
weight : 30.0 kg
//--------------------------------------//
構造体の勉強に取り掛かったのですが、詰まりますた。
nullpoとnullpo.nameのアドレスは等しいのにnullpoの中身を
見ると、(null)などと出てきて・・・
nullpoの中身の数字は何を表しているのか、教えて下さい。
お願いします。

281 :動画直リン:03/04/17 21:25
http://www.agemasukudasai.com/movie/

282 :デフォルトの名無しさん:03/04/17 21:42
>>279
nullpo構造体の先頭アドレスだろ。

283 :282:03/04/17 21:46
ごめんウソ。


284 :282:03/04/17 21:54
つーか、構造体変数の値を参照しようとしたことない。
代入にしか使ったことないや。 nullpo2 = nullpo;


285 :279:03/04/17 22:16
レスどうもです。
これは、知る必要の無い事なのでしょうか?
それとも、私は何かとんでもない勘違いをしているのか・・・
とりあえず、勉強を進めまつ。


286 :デフォルトの名無しさん:03/04/17 22:21
printf ("nullpo = %c, %s\n", *((char *) &nullpo), (char *) &nullpo);
これで動くでしょ。

287 :デフォルトの名無しさん:03/04/17 22:40
>>242
search & replace & #define

288 :279:03/04/17 22:43
>>286
ありがとうございます。
わかりました。

289 :デフォルトの名無しさん:03/04/18 01:20
if(10==010)
printf("同じ\n");

同じと表示されないんですけど。


290 :デフォルトの名無しさん:03/04/18 01:21
010って8進数じゃないの?

10 == 8

291 :デフォルトの名無しさん:03/04/18 01:40
>>251
というか、万単位の (おそらく静的な) 変数を
寿命も考えずに維持するというのは
莫迦のすることですよ。

292 :デフォルトの名無しさん:03/04/18 01:51
いや莫迦にはできない。並外れた根気が必要だもの。むしろ電波だろ。

293 :bloom:03/04/18 01:54
http://www2.leverage.jp/start/

294 :デフォルトの名無しさん:03/04/18 05:51
>>291
一つの関数の中に自動変数が一万個以上あるんですが・・・・
ちなみにその関数は43000行程度あります。

295 :デフォルトの名無しさん:03/04/18 06:03
その関数をまず捨てろ。
一から書き直せ。

296 :デフォルトの名無しさん:03/04/18 07:42
特定のアプリケーションがインストールされていたり、インストールされたら何か反応するプログラムを作りたいのですけど
とりあえずどうすればいいでしょうか?

297 :bloom:03/04/18 07:54
http://www2.leverage.jp/start/

298 :デフォルトの名無しさん:03/04/18 08:53
#include <stdio.h>
int main()
{
if(fopen("/usr/local/bin/prog","r"))
printf("インストールされているね\n");
else
printf("インストールされていないみたい\n");

return 0;
}


299 :デフォルトの名無しさん:03/04/18 11:53
>>295 がいいこと言った!

>>298
あけたらとじようみんなのファイル。


300 :デフォルトの名無しさん:03/04/18 12:24
>>299
ファイル閉じる以前の問題があると思わないか?

301 :デフォルトの名無しさん:03/04/18 12:30
>>296
C言語にはインストールと言う概念はありません。
OSが特定できればそれを知る手段があるかもしれないけど。

>>300
ネタだから構わないじゃないか。

302 :デフォルトの名無しさん:03/04/18 12:43
fcloseしなくても、プログラムが終了すれば自動的に
クローズされるんだけどね。

303 :デフォルトの名無しさん:03/04/18 12:50
#include <unistd.h>
#include <stdio.h>

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

これで何かまずいの?
終了したときにcloseしてくれるとか読んだような気がするんだけど

304 :デフォルトの名無しさん:03/04/18 14:48
それはさすがにまずいだろよ


305 :デフォルトの名無しさん:03/04/18 14:53
>>304
その理由を書いてくれないと。

306 :デフォルトの名無しさん:03/04/18 15:30
>>303
fopen() の挙動について小一時間調べとけ。

307 :デフォルトの名無しさん:03/04/18 15:38
Pascal初心者ですが、参考になるサイトなど教えてください。


308 :デフォルトの名無しさん:03/04/18 15:48
>>307
何故ここで聞こうとしたのか、教えてもらいたいな

309 :デフォルトの名無しさん:03/04/18 16:09
>>307
http://www.yahoo.co.jp/
http://www.google.co.jp/
http://pc2.2ch.net/tech/
この辺が参考になると思うよ。

310 :デフォルトの名無しさん:03/04/18 17:13
scanfは空白文字も改行としてしまうので、それを解決するためにwhile、getchar、
getsなんかを組み合わせた2行ぐらいのがあった思いますが、教えてください。

311 :デフォルトの名無しさん:03/04/18 17:17
>>310
こんなのはどうだ?

char buffer[256];
fgets(buffer, 256, stdin);

312 :デフォルトの名無しさん:03/04/18 17:19
>>310
空白は改行にはならないぞ。
空白を含む文字列を取得したいなら、scanf()のマニュアルをよく読め。

念の為に言っておくが、「printf()とscanf()のフォーマット文字列は
互換性がある」だなんて書いてある入門書は捨てろ。

313 :デフォルトの名無しさん:03/04/18 17:39
名前空間の使い方を教えてくだされ。

314 :デフォルトの名無しさん:03/04/18 17:39
>1


315 :デフォルトの名無しさん:03/04/18 17:40
namespace hoge;

316 :デフォルトの名無しさん:03/04/18 17:55
>>276
UNIXのfileコマンドの
magicファイルを自動生成するプログラムじゃ駄目ですか?

317 :デフォルトの名無しさん:03/04/18 18:25
>>301
windows

318 :310:03/04/18 18:28
お答えありがとうございます。
>>311 変数の宣言を含まずに2行だったような。EOFも使ってたような。
>>312 [\n]とか書くとできるのは知っているのですが、scanfでは無いのが
急に気になりだしてしまったので。
while((c=getchar())!=EOF)
こんなのを含んでたような。思い出せません。

319 :デフォルトの名無しさん:03/04/18 18:36
なんだ、改行を探したいのか?
もう少し何がしたいのかはっきりしてくれ。

320 :デフォルトの名無しさん:03/04/18 18:56
#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)

321 :デフォルトの名無しさん:03/04/18 18:56
{
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("ごっくろ〜さん♪")

322 :デフォルトの名無しさん:03/04/18 18:56
}

/*
*関数 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");
}

323 :デフォルトの名無しさん:03/04/18 19:17
mainも宣言するとは珍しいな。

324 :デフォルトの名無しさん:03/04/18 19:22
学校で強制的に打たされたプログラムでつ

325 :デフォルトの名無しさん:03/04/18 19:31
>>320
そのプログラム、いとも容易く暴走できるな。

326 :デフォルトの名無しさん:03/04/18 20:34
static void hoge(void)
という関数があるのですが。
戻り値が static void になっているのは
どういうわけなのか理解できません。

どういう都合があるのでしょう。

327 :デフォルトの名無しさん:03/04/18 21:00
>>326
関数内と関数外ではstaticの意味が全く違う(なんでそうしたんだろうね??)。
staticがついているので、そのhoge関数はほかのファイルからは呼び出せない。

328 :326じゃないけど:03/04/18 21:06
>>327
おぉー、なるほど。
勉強になった。

329 :デフォルトの名無しさん:03/04/18 21:09
externの逆ということでintern(al)にすればよかったのにな。

330 :デフォルトの名無しさん:03/04/18 21:22
C言語はなるべくキーワードを増やさない方針なのだ、とどっかで聞いた

331 :デフォルトの名無しさん:03/04/18 21:32
autoなんて無意味なキーワードを加えているくせに ゴルァヽ(`Д´)ノ

332 :ポインター処女:03/04/18 21:45
ポインターはどんな時使うのか教えろ

333 :デフォルトの名無しさん:03/04/18 21:55
ポインターを使うたびに5セントもらってたら今頃俺は大金持ちだぜ。

334 :デフォルトの名無しさん:03/04/18 21:58
>>331
auto は、無意味じゃないぞ。
あそこには、static と auto が書けて、省略時解釈が auto になってるだけだ。

335 :326:03/04/18 22:12
>>327
ほっほー、わかりました。

336 :デフォルトの名無しさん:03/04/18 22:33
>>294
良く出来たコンパイラだな〜。
でも最適化は弱そうな雰囲気。

337 :デフォルトの名無しさん:03/04/18 22:46
未経験27歳でPGになります。
PGって、思ったより簡単みたいだね。
みんな!応援してね。
http://school2.2ch.net/test/read.cgi/job/1049610473/

338 :デフォルトの名無しさん:03/04/18 22:46
最強の開発言語
http://www.borland.co.jp/delphi/personal/


339 :デフォルトの名無しさん:03/04/18 22:55
なんで配列の添え字は符号ありなの?

340 :デフォルトの名無しさん:03/04/18 22:57
>>339
配列の添え字にunsignedしか使えなかったら不便じゃん。

341 :デフォルトの名無しさん:03/04/18 23:00
size_tは符号なしなのに!!

342 :デフォルトの名無しさん:03/04/18 23:47
未経験27歳でPGになります。
PGって、思ったより簡単みたいだね。
みんな!応援してね。
http://school2.2ch.net/test/read.cgi/job/1049610473/

343 :デフォルトの名無しさん:03/04/18 23:51
初心者   Delphi
中級者   VB.NET C#.NET
上級者   C++
男根世代  C VB
女子高生  アッセンブラ
乞食     Perl
朝鮮人   Java

344 :デフォルトの名無しさん:03/04/19 00:03
Cのrand()関数を呼び出すとき乱数表から順番に取ってきてるんでしょうけど
初期値を変えられないですか?
runした時間によって変えたりしたいんですけど

345 :デフォルトの名無しさん:03/04/19 00:18
>>344
srandじゃ。

346 :デフォルトの名無しさん:03/04/19 00:33
>>344
一応言っておこう。
rand() 関数は、おそらく乱数表を使ってはいない。
世の中には線形合同法という洒落込んだ名前の付いた乱数生成アルゴリズムがあり、
乱数は計算によって生成されている。
まぁ、どのアルゴリズムを使っているかはコンパイラ次第であり、確実に線形合同法
が使われているかどうかは俺の知識を超えるがな。

でもって、たいていのアルゴリズムでは、乱数を利用するための初期値が必要になる
のだが、そのために srand(int) という関数が標準で実装されている。
話をまとめると、
「rand() を使うプログラムには main() の先頭に srand(time(NULL)) を書け!」
ということだ。マジレス終了。

347 :デフォルトの名無しさん:03/04/19 00:50
>>345
>>346
ありがd

348 :デフォルトの名無しさん:03/04/19 01:04
>>346
srandの引数はunsigned intだぞ。

349 :デフォルトの名無しさん:03/04/19 01:11
srand(clock()) と言ってみるテスト

350 :デフォルトの名無しさん:03/04/19 01:16
環境依存だけど、PIDを種にするのってあかん?

351 :346:03/04/19 01:21
>>348
わ。ほんとだ。誤文スマソ。
まーでも time() の戻り値も time_t なワケだしどーでもいーや〜。と逝ってみるテスト

352 :デフォルトの名無しさん:03/04/19 01:24
C言語で円を書きたいんですけどグラフィック関数使うんですよね?
図形を書くときって、特別な設定が(何かをインストールするとか)必要なんですか?

353 :デフォルトの名無しさん:03/04/19 01:26
>>352
今の環境にそういうライブラリがなければ入手してインストールする。


354 :デフォルトの名無しさん:03/04/19 09:08
>>350
(・A・)イクナイ
起動時にスクリプトなんかから自動的に起動されるプロセスの場合、
毎回毎回 PID が同じになる。慣習通り、time と組み合わせるのがいいと思うよ。

355 :デフォルトの名無しさん:03/04/19 09:19
PIDとかいうなら、
/dev/randamからもってきたらええやん。

356 :デフォルトの名無しさん:03/04/19 11:51
>>339
  int nul[65], *po = &nul[32];
として、添字の範囲を -32〜+32 ということにしたいのでしょう。

357 :デフォルトの名無しさん:03/04/19 12:28
randam て。

358 :デフォルトの名無しさん:03/04/19 13:48
>>349
clock()はプロセスが起動してからの時間だからやめた方がいいよ。
起動直後に呼ぶと毎回同じ値になる可能性がある。

srand((unsigned)(time(NULL) ^ clock()));でどうよ?

359 :デフォルトの名無しさん:03/04/19 13:53
>>352
テキスト画面に描くとか。(計算は自前)

360 :デフォルトの名無しさん:03/04/19 13:58
>>358
だから、おとなしく time(NULL) じゃダメなのか。

361 :デフォルトの名無しさん:03/04/19 17:16
>>360
暗号には時間関数を使ってはいけない。

362 :デフォルトの名無しさん:03/04/19 17:29
>>358
> 起動直後に呼ぶと毎回同じ値になる可能性がある。

なら、

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

も毎回同じ値になる可能性があるんでは?

363 :デフォルトの名無しさん:03/04/19 22:04
初心者です。
自分以外のEXEを実行させるプログラムを
教えてください。

364 :デフォルトの名無しさん:03/04/19 22:23
正規表現なんですけど
char で放り込んだ変数の判断なんですが
perlの場合の if($hoge =~ /.jpg$/){}のように
if文書きたいんですけど
Cだとどうかくんでしょうか?

365 :デフォルトの名無しさん:03/04/19 22:24
>>363
入門書買ってきてください。

366 :363:03/04/19 22:45
3日でわかるC言語には書いてませんでした。
初心者向けの講座があるサイトも結構回ったんですけど
解説してる所はありませんでした。
使う命令だけでもいいんで教えてくれませんか?

367 :デフォルトの名無しさん:03/04/19 23:00
if ( !strcmp(hoge,"/.jpg") ){}

368 :デフォルトの名無しさん:03/04/19 23:01
>>366
exec
spawn

369 :デフォルトの名無しさん:03/04/19 23:03
>>366
system(),fork(),exec*(),pipe()

Windowsなら
ShellExecute(),CreateProssece(),

あたりか



370 :363と366:03/04/19 23:07
ありがとうございます。

371 :デフォルトの名無しさん:03/04/19 23:09
>>368
なぜ標準のsystemを教えない。

372 :デフォルトの名無しさん:03/04/19 23:23
>>369
綴り間違い
CreateProcess

373 :デフォルトの名無しさん:03/04/19 23:25
>>367
そりゃちゃうやろ。

>>364
適当な正規表現ライブラリを探すか、自分で作れ。
if($hoge =~ /.jpg$/){} ぐらいなら難しくはない。

374 :デフォルトの名無しさん:03/04/19 23:30
sscanfでできないかなぁ。。。。

375 :374:03/04/19 23:31
あ、だめだな。

376 :デフォルトの名無しさん:03/04/19 23:42
>>364
regex は?


377 :364:03/04/20 00:10
うーん 正規表現というか
引数与えて 最後の4バイトを返すやつで判別するほうが
楽かな?
C言語は昨日はじめたばかりでWebとかいろいろ探しているんですけど
難しい・・・

378 :デフォルトの名無しさん:03/04/20 00:18
#include <string.h>
int endsWith(const char *str, const char *suffix) {
return (strstr(str, suffix) - str) == (strlen(str) - strlen(suffix));
}


379 :363:03/04/20 00:20
#include <process.h>
main()
{
execlp("てすと.exe", "てすと.exe", NULL);
return 0;
}

一応できました。とりあえず正常に動いてるんですが
無駄な部分や、もっと簡略にできる部分がありましたら
ご指摘ください。

380 :デフォルトの名無しさん:03/04/20 00:23
if($hoge =〜 /\.jpg$/){} と言ってみるテスト。本質ではない。

381 :デフォルトの名無しさん:03/04/20 02:34
>>377
要は拡張子の判定がしたいみたいですが。だったら、

ext = strrchr(path, '.');

で、ext に文字列が入ります。ドットが含まれていない
場合には ext が空っぽなので、直後に if で例外処理を
適当にやってみてくださいな。


382 :デフォルトの名無しさん:03/04/20 02:36
>>379
exec は成功したらそこで終了です。
なので return(0); には来ません。来るとしたらそれは
exec に失敗しているので、exit(1); とかじゃないでしょうか?



383 :山崎渉:03/04/20 03:35
   ∧_∧
  (  ^^ )< ぬるぽ(^^)

384 :デフォルトの名無しさん:03/04/20 04:54
なんでstrrchrはあるのに、strrstrはないのだろう。

385 :デフォルトの名無しさん:03/04/20 08:22
>>377
そもそも環境は ?
拡張子を判別したいと言うのなら、環境によってはパス名称を分解するライブラリ/API を持ってたりするから、それ使った方がわかりやすいと思うぞ。

386 :デフォルトの名無しさん:03/04/20 09:18
元々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が入って無い
システムでも動くようなバイナリを作るのは無理なのでしょうか?

387 :えんぴつ:03/04/20 09:27
>山崎渉くん
(僕がブルーだって言ってるのにレスが笑顔でぬるぽ・・・)
(流石だ・・・)
  ∧_∧
 ( ´∀`)< ぬるぽ

388 :えんぴつ:03/04/20 09:27
すいません、誤爆です…。

389 :デフォルトの名無しさん:03/04/20 09:46
-Bstatic って gcc で使えなかったっけ?

390 :デフォルトの名無しさん:03/04/20 10:46
#include <stdio.h>
と書くと /usr/include/stdio.h を読みこみますよね。
しかしこれに書いてあるのは宣言だけなんですけど、
定義はどこから持ってくるのでしょうか。

391 :デフォルトの名無しさん:03/04/20 11:02
#includeはその場でファイルを展開するんだよって答えで良いのか?

392 :デフォルトの名無しさん:03/04/20 11:32
>>390
Lib からだよって答えで良いのか?

393 :390:03/04/20 11:39
stdio.h の定義なら
/usr/lib/libc.a でいいのかなあ。
-I や -L でヘッダやライブラリのパスを追加できるって感じですか。
デフォルトのものはどうやって調べるのでしょうか?

394 :デフォルトの名無しさん:03/04/20 11:52
>>390
Linux だと標準では
ヘッダーは /usr/include
本体は /usr/lib
あたりかな。

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

コンパイラオプションの -I -L とか調べてみては?

395 :363:03/04/20 11:57
382さん、ありがとうございます。
改良します。

396 :386:03/04/20 13:07
とりあえずccでメイクできるようになりました・・・
だけど既存のファイルを読み取って拡大するようなやつを
つくったら汚い汚い・・・GDModuleってこんなもんなの?
なんかカラーのがセピア色になってる・・・

397 :デフォルトの名無しさん:03/04/20 16:37
質問です。
K&R本演習3-1,
binsearchのループ内のテストを一回で済ますプログラムを書けというんですが、
if
else if
else

if
else
にしろということなんですか?

398 :デフォルトの名無しさん:03/04/20 16:40
ゲームボーイアドバスンをパソコンのジョイスティクとして使う標準関数は何ですか?


399 :デフォルトの名無しさん:03/04/20 17:01
>>398

joy_gameboy_advacen()で検索してみ

400 :デフォルトの名無しさん:03/04/20 17:29
こんど、C++を勉強しようと思ったのですが
その前にCを覚えたほうがいいと思いCの勉強を始めました。
NS−DOS上で動くプログラムの習得、なんか、原始的な勉強を
しているような感じです。
こような考えかたを持つ者は、だめでしょうか。

401 :デフォルトの名無しさん:03/04/20 17:42
>398
fopen()だよ

402 :デフォルトの名無しさん:03/04/20 17:45
>400
今の時代、Windowsを使った方がいいよ。
メモリモデルとか意識しなくていいしさ。


403 :デフォルトの名無しさん:03/04/20 17:55
>>402
400ですが、そうですよね。


404 :デフォルトの名無しさん:03/04/20 17:56
>>400
そのMS-DOSってのは本物のMS-DOS?
それともWindowsのMS-DOSプロンプト(コマンドプロンプト)?

405 :デフォルトの名無しさん:03/04/20 18:04
>400
MS-DOSならデバイスドライバを介さずに直接ハードウェアにアクセスできる利点はあるけどね。


406 :デフォルトの名無しさん:03/04/20 18:05
NS-DOSとは、、、、
~

407 :デフォルトの名無しさん:03/04/20 18:06
>>404 WindowsのMS-DOSプロンプトですよ。

408 :デフォルトの名無しさん:03/04/20 18:28
>407
んだったら
>403
なにが「そうですよね」だよ
馬鹿にしやがって

409 :デフォルトの名無しさん:03/04/20 18:35
>>408
いやいや、16bitコムパイラつかってるなら問題ない。

410 :デフォルトの名無しさん:03/04/20 18:41
全ての環境変数を列挙するのは標準機能だけじゃ無理?

411 :410:03/04/20 18:42
envpは標準じゃないし、getenvはキーが分からないとだめだし・・・

412 :デフォルトの名無しさん:03/04/20 18:54
ていうか、環境変数というモノ自体が標準じゃない

413 :410:03/04/20 18:59
>>412
ならなぜgetenvという標準関数があるんですか?

414 :デフォルトの名無しさん:03/04/20 20:35
>>397
俺もそれわからんかった。誰かキボンヌ

415 :デフォルトの名無しさん:03/04/20 21:29
>>397
問題がわからないが
再帰関数なら次の深さのifで代用?

416 :デフォルトの名無しさん:03/04/20 21:50
プログラミングと いいおんな
どっちが すきだ?


417 :デフォルトの名無しさん:03/04/20 21:57
>>415
問題は、二分探索で、ループ内の比較を2度ではなく1度しか行わないように変更する。
答:ループを抜けてから1度合致を判定する

418 :デフォルトの名無しさん:03/04/21 08:01
どうしてDQNの耳には硬貨が入っていますか?


419 :デフォルトの名無しさん:03/04/21 13:41
初心者なんスけど、
ファイルポインタに標準入力(STDIN)をセットするやりかたが分かりません。
どなたか教えてくれませぬか?

420 :デフォルトの名無しさん:03/04/21 13:47
FILE *fp;
fp = stdin;
fprintf(fp, "なんでこんなことしたいの?");


421 :デフォルトの名無しさん:03/04/21 13:47
FILE *fp = stdin;

422 :デフォルトの名無しさん:03/04/21 13:49
でもこれローカル変数じゃないと初期化できないよね。
なんかのソースを修正した記憶がある。

423 :デフォルトの名無しさん:03/04/21 13:54
えうー、420はどういう結果を望んでいるんだ(w

>>422
stdinやstdoutが初期化されてないと駄目だからね


424 :デフォルトの名無しさん:03/04/21 14:05
fprintf(stderr, ">>420 なんで入力用に開かれたストリームをfprintfに渡すの?");

425 :デフォルトの名無しさん:03/04/21 14:08
>>420&421

ども、ありがd
参考になりますた!!

426 :デフォルトの名無しさん:03/04/21 16:43
初心者です。
VC++6.0で、現在Cやってます。

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

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

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

消去できない理由を教えてください。

427 :デフォルトの名無しさん:03/04/21 16:48
for (i = 0; i < 8192; ++i) putc('\b');

428 :デフォルトの名無しさん:03/04/21 16:55
putc?

429 :デフォルトの名無しさん:03/04/21 16:55
>>426
>printf("\033[2J"); /*画面消去*/
これはエスケープシーケンス文字列って奴なんだけど
Windows9.x系のOSしか対応してないはずだよ

試してないけどsystem("cls");で出来るかも知れない

430 :デフォルトの名無しさん:03/04/21 16:59
ansi.sysが組み込まれていない

431 :426:03/04/21 17:04
僕のはXPだからだめだったんですね。
system("cls");
いけました!
答えてくれた皆様、
本当にありがとうございました!

432 :429:03/04/21 17:04
テスト終了でし、結果は予想通り。

#include <stdio>

main(){
printf("テストしてみますね\r\n");
printf("適当な文字列生成中もな〜");
system("cls");
printf("あれれ前二行が出力されてないもな\r\n");
printf("CTRL+Cで終了してね");
while(1);
}


433 :429:03/04/21 17:05
>>431
あらら、ご本人さまに先を越されてしまったw
つーことで頑張ってね〜

434 :デフォルトの名無しさん:03/04/21 17:08
逆にNT系で文字色の変更とかするときはどうすれば良いのやら

435 :bloom:03/04/21 17:08
http://homepage.mac.com/tanakataro6/

436 :デフォルトの名無しさん:03/04/21 17:26
MS-DOSの場合、コンソールでエスケープシーケンスを使うには
ansi.sys(or ansij.sys)が必要。
これはWindowsになっても変わらない。


437 :デフォルトの名無しさん:03/04/21 17:29
>>434
CUIで色変え何て邪道ですぜ

438 :デフォルトの名無しさん:03/04/21 18:01
>>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;
}

439 :434:03/04/21 18:14
>>438
おお、ども。そんなAPIがありましたか。

440 :397:03/04/21 21:43
>>417
なるほど、最後まで繰り返すわけですね。
出来たがしかしあまり意味がないような。

441 :ぼぶ:03/04/21 22:08
Q0.1,E0.8,E0.4
正しい括弧付けかどうかをテストするプログラムを教えてください。


442 :デフォルトの名無しさん:03/04/21 22:14
>>441
びっくりするぐらい情報不足なのは仕様?

443 : :03/04/21 22:41
Q0.1,E0.8,E0.4
正しい括弧付けかどうかをテストするプログラムを教えてください…

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



444 :デフォルトの名無しさん:03/04/21 23:27
>>443
びっくりするぐらい情報不足なのは仕様?


445 :デフォルトの名無しさん:03/04/21 23:48
参考書片手に勉強してるのですが、
とある例題で

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

と書いてあるのですが

二行目 'f'とprintfの間に「)」が入るのでは?、と思いました。
この本のhpのミス訂正一覧にも乗ってなかったのでここで質問させていただきます。
教えてエロイ人(;´Д`)

446 :デフォルトの名無しさん:03/04/21 23:51
>>445
コンパイラに聞けば答えがわかるのに。

447 :デフォルトの名無しさん:03/04/22 00:00
>>445
あんたの言うとおり。
ミスプリなぞしょっちゅう出くわすものだ。いちいちツッコんでいては人生に疲れるぞよ。

448 :デフォルトの名無しさん:03/04/22 00:03
なんでエロイ人限定なんだ

449 :445:03/04/22 00:04
っほ
自信が無く、不安でしたので・・・。
お二方、ありがとうございました。

450 :デフォルトの名無しさん:03/04/22 00:05
しすぷり

451 :デフォルトの名無しさん:03/04/22 00:06
>>448
解答を貰ってすっきりしたら夜の相手もお願いしようって魂胆では。

452 :デフォルトの名無しさん:03/04/22 00:25
>>448
エロくなかったらCなんて習得できないだろ

453 :デフォルトの名無しさん:03/04/22 00:25
MS−DOSプロンプト上の文字のフォントサイズやフォント名を変更する事は
可能なのでしょうか?

可能だとすればどうすれば変更できるのでしょうか?

454 :デフォルトの名無しさん:03/04/22 00:26
>>453
Cとは関係ないね。

455 :デフォルトの名無しさん:03/04/22 00:28
>>453
確かjpとかusとか打つと出来たんじゃない?

456 :453:03/04/22 00:36
Cのコードからは可能でしょうかね?

457 :デフォルトの名無しさん:03/04/22 00:38
>>456
やめとけ。

458 :453:03/04/22 00:41
どうしてですかね>>457

459 :デフォルトの名無しさん:03/04/22 00:42
一部分のフォントを切り替えながら文字を出したいのか
全体的なフォントを変えたいのか。
どちらにしろ、>>457に同感

460 :453:03/04/22 00:47
>>459
一部ではなく全部です。

461 :デフォルトの名無しさん:03/04/22 00:50
どちらにしろ、スレ違い

462 :デフォルトの名無しさん:03/04/22 00:53
みんな、まともに答えてあげようよ・・・
標 準 C で は で き な い 。
>>1 を 見 よ

463 :デフォルトの名無しさん:03/04/22 00:55
>>460
全体ならMS-DOSプロンプトのプロパティから変えれば。

464 :デフォルトの名無しさん:03/04/22 01:01
あの〜、授業でC言語の基本みたいなのを勉強したものなんですけど、
このC言語でプログラムを組めるとどんなすごいことができるんでしょうか?
今この世に存在してるソフト(ゲーム、PCのアプリケーション、電化製品内の
ソフトフェア)ってみんなC言語なんですか!?
趣味でこんなおもしろいことができるよ!とかあるんでしょうか?

465 :デフォルトの名無しさん:03/04/22 01:07
みんなCでできてるわけではないが、Cがよく使われてますね。

466 :デフォルトの名無しさん:03/04/22 01:29
>>464
この世に存在してるソフトがみんなCなら
他の言語は何のために存在してるんだよ! プンスカ!

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

趣味なら、パソコン使ってて不便だと思うことを
プログラムで解決したりとか、
あとは適当にゲームでも作って遊ぶとか。
もっとハマると、ただ何かコード弄ってるだけで楽しくなってきたり...。

467 :464:03/04/22 01:36
>>465
>>466
レスありがとうございます!
ではフォートランやアセンブラにはないCのメリットやデメリットってのは
何なんでしょうか?ここまで多いのはなぜ!?

468 :デフォルトの名無しさん:03/04/22 01:40
>>467
適材適所。
メリットデメリットなんて、ターゲットにもよるし、人にもよるし。
多いといわれても、何を基準にしているかにもよるから、ナンセンスかな

469 :デフォルトの名無しさん:03/04/22 01:47
UNIX厨はCを使いたがるね。

470 :デフォルトの名無しさん:03/04/22 01:50
>>464-468
その手の話はここ↓の“THE FUTURE”と“CREATORS ADMIT UNIX, C HOAX”を御参照下さい。
http://www.edfac.usyd.edu.au/staff/souters/Humour/Real.Programmer.Stories.html

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











この期に及んで「適材適所」だってよ(プ
おまえらって最後はいつもそれな(ププ
楽しい?

471 :デフォルトの名無しさん:03/04/22 01:52
>>470
んじゃ、適材適所じゃない、どんな用途にも使える言語ってのを教えてくれ。

472 :デフォルトの名無しさん:03/04/22 01:57
数値計算のコードを書いてるのですが、要求サイズが
大きすぎるのかmallocに失敗してその対処に困っています。
大きな領域を一度に確保する良い方法は無いでしょうか?


473 :デフォルトの名無しさん:03/04/22 01:58
>>472
メモリ増設

474 :デフォルトの名無しさん:03/04/22 01:59
>>472
何バイトくらい要求しているんだ!?

475 :デフォルトの名無しさん:03/04/22 02:01
>>473
うん。つまらんことで悩む時間を考えるとメモリ増設なんて安いもんだ。
どうせ来年あたりにはオンボード1Gbyteが普通になるんだろうし。

476 :デフォルトの名無しさん:03/04/22 02:08
とりあえず動作確認用に使ってるテストデータで、
mallocに失敗する要求サイズは25920byteです。
失敗するまでにこの5〜6倍程度の領域を既に
確保しています。
サイズとしてはあんまり大きくないと思うんですけど・・・。

あと、開発に使ってるマシンに積んであるメモリは512MBなので、
余裕はあるはずなんですが。

477 :デフォルトの名無しさん:03/04/22 02:09
>>472
まず、どれだけのサイズを確保しようとしてるのかを確認しる。
一度で確保出来ないなら、分割して確保出来るかを確認しる。
デバイスドライバやカーネル周りでも無ければ、
本当に連続した領域が必要な事は少ない。

>>メモリ増設とか言ってる香具師
C言語の範疇では無いのでスレ違い。
8 bitプロセッサでも16bitプロセッサでもCは動く。
まぁ472が組み込み系で無いと思うのは同意だが。

478 :デフォルトの名無しさん:03/04/22 02:09
>>475
うちでは32GB積んでいるが、それでも足りない。

479 :デフォルトの名無しさん:03/04/22 02:10
mallocが返す領域って連続していると保証されているの??

480 :479:03/04/22 02:11
s/が返す/で得られる/

481 :デフォルトの名無しさん:03/04/22 02:17
>>476
環境は?

482 :デフォルトの名無しさん:03/04/22 02:20
>>481
Pen4 2G Mem 512MB
RedHat 7.3
GCC 2.96
です。

483 :デフォルトの名無しさん:03/04/22 02:21
>>482
実行環境も同じだよね?
mallocで失敗するとは思えん・・・

484 :483:03/04/22 02:22
mallocがNULLを返しているんだよね?

485 :デフォルトの名無しさん:03/04/22 02:28
>>484
開発兼実行環境です。NULLが帰ってきてます。
最初の発言以降mallocと書いてますが、実際は
callocを使ってます。

486 :デフォルトの名無しさん:03/04/22 02:56
calloc の呪い

487 :デフォルトの名無しさん:03/04/22 08:18
>>482
limitだろ。
ulimit (cshならunlimit) してから実行しなおせ

488 :デフォルトの名無しさん:03/04/22 10:01
ああそうか。rlimitがあったか。

489 :デフォルト名無しさん:03/04/22 16:49
質問です。ほとんど出来ているのですが、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;
}


490 :続き:03/04/22 16:50
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;
}
 

491 :デフォルトの名無しさん:03/04/22 17:11
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");
}

492 :デフォルトの名無しさん:03/04/22 17:12
こういう風に表示したいということかな?
1 2 3 4 5 15
6 7 8 9 10 40
11 12 13 14 15 65

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

っていうか、今のロジックって、
main()
{
 値設定と表示ループ
 合計値計算と表示()
}
って作りになっているけど、気持ち悪いし上述の問題があるので
main()
{
 値設定() /* これくらいならループでもいいか */
 合計値計算()
 合計値セルを値セルと連結()
 表示()
}
ってすれば汎用性が高い部品を幾つも作れて楽しいかと。

493 :デフォルトの名無しさん:03/04/22 17:13
>>491
C++にしないように。それと、現行ロジックはまったく無視しちゃうわけね。

494 :デフォルトの名無しさん:03/04/22 17:20
>>492
は?MAX_COLSが分ってるならtotalの配列も作れるでしょ?
全然Cだし、ロジック殺してないけど?

495 :デフォルト名無しさん:03/04/22 17:22
そうです、1 2 3 4 5 15 という感じで表示させたいのです。
table[5][MAX_COLS]の位置に合計を表示させたいんですが。。。
どうも、うまくいきません。ご教授よろしくお願い致します。

496 :デフォルトの名無しさん:03/04/22 17:33
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);
と三段階に分けたほうがいいかな。

497 :デフォルトの名無しさん:03/04/22 17:48
melon:   100
apple:   70
banana:  50
      ↑このように、特定の位置に頭を揃えて出力する方法はありますか?

498 :デフォルトの名無しさん:03/04/22 17:51
いつからCに//なんてキーワードが追加されましたか?

499 :デフォルトの名無しさん:03/04/22 17:53
>>497
printf("%6s: %-3d",kajitsu, nedan);で出来ん?

500 :デフォルトの名無しさん:03/04/22 17:53
C99ていうくらいだから1999年から?

501 :デフォルトの名無しさん:03/04/22 17:54
>>497
sprintf()を駆使しろ。
char buf[適当な長さ];
sprintf(buf, "%-10s%d", "melon:", 100);
:も自動化したかったら,
char buf[適当な長さ];
sprintf(buf, "%s:", "melon");
sprintf(buf, "%-10s%d", buf, 100);

502 :デフォルトの名無しさん:03/04/22 17:55
>>497
printf("%10s%d","meron:",100);
printf("%10s%d","apple:",100);
printf("%10s%d","banana:",100);


printf("%-10s%d","banana:",100);
かもしれん。リファレンスみてちょ。

503 :デフォルトの名無しさん:03/04/22 18:00
>>499-502
どうもありがとうございます。

504 :デフォルトの名無しさん:03/04/22 18:06
>>503
ちょっとだけ凝るなら>>499-502の両方の利点を生かして
sprintf(formatstr, "%%ds: %-%dd", kajitsulen, nedanlen)
printf(formatstr, kajitsu, nedan);
とかやってもいいかも。

505 :デフォルトの名無しさん:03/04/22 18:14
>>504
それを書くなら、
printf("%*s:%-*d", kajitsulen, kajitsu, nedanlen, nedan);
だろ?

506 :デフォルトの名無しさん:03/04/22 18:27
なぜ文字列処理という簡単なことでまともなコードがかけないんだ?

507 :デフォルトの名無しさん:03/04/22 18:37
>>505
いや実際はループしてるんだし先にフォーマットを決めちゃわないと

>>506
正規表現なんて未だに情報処理試験の問題に出てくるらしいし
エンコード、デコード、正規表現・・・文字列を舐めちゃいけない
文字列処理が簡単だったらPERLなんて流行ってないよ

508 :デフォルトの名無しさん:03/04/22 18:39
ここでやっている文字列処理は簡単だろ?

509 :デフォルトの名無しさん:03/04/22 18:44
>>508
「ここでやっている」って事なら同意。

これはC言語が入門用に勧められてるのが原因じゃないのかな?
C言語に始まりC言語に終わるってのが現状だし。
ビジネスアプリな人はCに戻ってこないけどねw

510 :デフォルトの名無しさん:03/04/22 18:49
入門用というのが勉強用。
ビジネスアプリというのが
実用的なアプリということなら同意。

511 :デフォルトの名無しさん:03/04/22 19:47
>>498
キーワードではないと思う。演算子もキーワードではないでしょ。


512 :デフォルトの名無しさん:03/04/22 20:01
コンパイルに15分もかかってしまうんですが。そんなもの?

513 :デフォルトの名無しさん:03/04/22 20:06
マシンとモノによる
昔Xフルビルドすると一晩掛かったもんだ。

514 :デフォルトの名無しさん:03/04/22 20:11
>>512
コンパイラにもよるけど一般的にコンパイル速度を上げるには、
・コンパイラが使えるメモリを増やす。
・極大な関数があるなら分割する。
・(C++なら極悪なテンプレートは避ける)
・最適化を省略する。
・Makefileを使っているなら無駄なコンパイルをしてないかチェックする。
といった辺りをチェックしてみてはいかがでしょうか。

515 :デフォルトの名無しさん:03/04/22 20:13
>>512
高いマシンを買って-O2オプションを付けてコンパイルすると幸せになれるよ
BCの話だけど

516 :デフォルトの名無しさん:03/04/22 20:13
>>514
> ・極大な関数があるなら分割する。

ためしに数万行もある関数をコンパイルしたらVC++がフリーズしたっけな。

517 :デフォルトの名無しさん:03/04/22 20:15
> ・(C++なら極悪なテンプレートは避ける)
STLは見逃して

518 :デフォルトの名無しさん:03/04/22 20:37
double **u;
の**って何です?
検索しようにもアスタリスクは検索演算子として見られてしまって検索できません。

強化版ポインタか何かですか?
教えてくださった方には山梨県を差し上げますのでどうかお願いします。

519 :  :03/04/22 20:38
正しい括弧付けかを判別するプログラムを教えてさい。

例えば
(()())は正しく
)()(や(()))みたいに正しく括弧付けされてないものは誤りである
といったようなことを判別するプログラムを書きたいのですが…


520 :デフォルトの名無しさん:03/04/22 20:43
>>519
今ぱっと思いついたのは
1.数えてる途中で')'の数が'('の数を上回らない(同じ数になるのはOK)
2.最終的に'('の数と')'の数が等しい
を満たしてりゃいいんじゃないの?

521 :デフォルトの名無しさん:03/04/22 20:51
>>512
Delphiなら一瞬です。

522 :デフォルトの名無しさん:03/04/22 20:53
>>519
この間それにつかえるアルゴリズムを勉強したでしょ?

523 :デフォルトの名無しさん:03/04/22 20:54
>>519
春の基本情報処理試験に出たね。

524 :デフォルトの名無しさん:03/04/22 20:55
>>519
再帰関数を使うと言う手もある。
・文字列に対する参照ポインタを用意する。
・文字列を回して最初に)がきたらエラーを返す。
・最初に(が来るなら参照ポインタを文字列をそのまま自分に放り込む(再帰)
・再帰から抜けたあと、)が無ければエラーを返す。

でも>>520さんの方がスマートかな?

525 :デフォルトの名無しさん:03/04/22 20:59
マルチにレスすんなよ

526 :デフォルトの名無しさん:03/04/22 20:59
マルチポストかよ
http://pc2.2ch.net/test/read.cgi/tech/1050078087/690


527 :デフォルトの名無しさん:03/04/22 21:00
>>524
コンパイラ屋さんとかを目指すならこっちだけどねぇ
==が正しいかとか他の構文解析も追加しやすそうだし

528 :デフォルトの名無しさん:03/04/22 21:04
スタックが64バイトしかないの。

529 :デフォルトの名無しさん:03/04/22 21:06
>>519

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

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


"〜"、 '〜'、 /*〜*/、 //〜\nの間はカウント停止。

530 :デフォルトの名無しさん:03/04/22 21:07
>>479
保証されてないと無茶苦茶困ると思うが。

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

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

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

531 :529:03/04/22 21:07

最後の行はオプショナル

532 :デフォルトの名無しさん:03/04/22 21:23
文字列処理が熱いね、簡単なパズル何だけど解答例が複数出たりする。
いっそスクリプト言語開発できるくらいにはなって欲しいね

>>519 でもマルチはダメだよ。

533 :デフォルトの名無しさん:03/04/22 23:36
>>518
ポインタのポインタ。検索キーは「ダブルポインタ C言語」あたりで。

>>520-532
何故、>>519ばかり相手にして、>>518の相手をしない?
質問内容は釣りとしか思えんが、最後の二行はむっちゃ面白かったぞ。


534 :デフォルトの名無しさん:03/04/22 23:37
>>487
unlimitしてもallocに失敗したんですが、最適化オプションを
外してビルドしてみたらうまくいったようです。
ただ、コードを眺めてみると作りかけの関数を無理やり
呼び出したり、引数がおかしかったりと、コードそのものが
バグだらけなので、その辺を解決しないことには始まらない
話でした。お騒がせしました。

>>530
仰る通りです。バグつぶしに勤しみます。

535 :デフォルトの名無しさん:03/04/22 23:50
>>533
> 何故、>>519ばかり相手にして、>>518の相手をしない?

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

> 質問内容は釣りとしか思えん

536 :デフォルトの名無しさん:03/04/22 23:55
scanf("%[0-9]","0123456789abcdef");

scanf("%[*]","0-9","0123456789abcdef");
見たいにしたいのですが、うまくいきません。
scanf("%.*s",5,"0123456789abcdef");
みたいに整数値ならできるのですが。正しいやり方を教えてください。

537 :デフォルトの名無しさん:03/04/23 00:03
できないコードを示されて「こうしたい」と言われてもな。
何がしたいんだよ。
0桁から9桁の整数値を変換したいってのなら「scanf()単独ではできない」と答えておくが。

538 :518:03/04/23 00:28
>>533
親切に検索語までお教え頂き、真にありがとうございます。
あとはそれを手がかりに道を模索する事にします。
山梨県は差し上げますので、今後自由にお使いください。

539 :デフォルトの名無しさん:03/04/23 00:29
>>536
こういうことならできるけど。

#define REGION_DIGIT "0-9"

char str[128];
sscanf("0123456789abcdef", "%[" FORM_DIGIT "]", str);
puts(str);

540 :デフォルトの名無しさん:03/04/23 02:34
エスケープシーケンス \v (垂直タブ) はANSI 規格のはずなのに Windows2000+cygwin
では垂直タブの変わりに変な記号が表示されます。
何が悪いのでしょうか。

541 :デフォルトの名無しさん:03/04/23 02:37
>>540
Microsoft

542 :デフォルトの名無しさん:03/04/23 02:41
お答えありがとうございました。
>>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 マクロならできるのですか。ただ、()が無いと言うエラーになってしまいます。
キーワードを元に調べてみます。

543 :デフォルトの名無しさん:03/04/23 02:45
>>542
Real programmers don't use `for`.

544 :539:03/04/23 03:34
>>542
ごめん。FORM_DIGIT は REGION_DIGIT に変えて。
名前に悩んでたら混ざっちゃった。

545 :536:03/04/23 04:05
>>543 戻り値タイプのほうがいいのですか?>>542のだと1発でできるので楽かと。
他にいい方法があるなら教えてください。
>>544 なるほどそうでしたか。名前が違うのは何でだろうと思ってました。
直したらできました。ありがとうございました。

546 :デフォルトの名無しさん:03/04/23 04:14
>>543は、なぜforを使うなと言ってるのか聞きたい。

547 :デフォルトの名無しさん:03/04/23 04:47
>>546
ネタだろ? >>470 の。

548 :デフォルトの名無しさん:03/04/23 05:31
小町算に興味を持ち、プログラムを作成してます。
現在、式文字列の生成は完了して、演算部分の作成を行ってます。
で、質問です。

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

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

要素単位にばらして順次処理するしか無いかなぁ...

549 :デフォルトの名無しさん:03/04/23 06:48
a 数字と括弧(cを使って)を処理する
b aを呼び出して掛け算と割り算を処理する
c bを呼び出して足し算と引き算を処理する
これでできると思うけど。

550 :名無し@沢村:03/04/23 08:03
おまいらよ、すべての変数はグローバルにすべきだよ。
ふつーグローバル変数はどこからアクセスされるかわからないから危険だといわれるが、
危険性はまったくないよ!!
おまいらよ、考えてみろよ、グローバル変数がネットで公開されているのか?
そして不特定多数のネットユーザーがグローバル変数に勝手にアクセスするとでもいうのか?
そんなわけはないだろ!!
グローバル変数なんて開発環境の中にしかなくて、そのプログラムを開発しているものしか使わないんだから、
勝手にアクセスされて危険ということはねーんだよ!

551 :デフォルトの名無しさん:03/04/23 08:07
>>550
馬鹿。 それしか言えない。

552 :デフォルトの名無しさん:03/04/23 08:10
http://homepage3.nifty.com/coco-nut/

553 :デフォルトの名無しさん:03/04/23 08:20
HeapやStackを中級車はやたらと多用したがるが、特にHeap変数はバグの
根源だし、Stackも同様に使い過ぎは毒
よって>>550にも一理あり。

554 :デフォルトの名無しさん:03/04/23 08:24
>>550
世の中絶対ということはない。
スーパーハカーならネットワーク経由でグローバル変数に不正アクセスできるかもしれない。


書いていて情けなくなる(鬱

555 :名無し@沢村:03/04/23 08:35
>>554
いや、スーパーハカーでもネットにもLANにも接続されていないPCで開発を行なえば不正アクセスはできないよ。

556 :デフォルトの名無しさん:03/04/23 08:42
電話線とモデムを失念しているようだな

557 :デフォルトの名無しさん:03/04/23 08:43
甘い。CPUやメモリ等が発生するノイズが電線に回り込み、それを
解析すれば、CPUが実行している命令を解析出来るらしい。
起動時から全部チェックすれば、スパイ位は出来るらしい。

(ウソ)

558 :名無し@沢村:03/04/23 08:52
>>557
甘い。電線にも接続されてない充電式のノートPCで開発を行なえば、不正アクセスはできないよ。

559 :デフォルトの名無しさん:03/04/23 09:02
沢村って誰?ま、いいけどさ。

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

まあ(DISK版)N88BASICでも一生やってなさいということで。

560 :デフォルトの名無しさん:03/04/23 09:23
ちょっと聞きたいんですが、

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

どなたか教えてくだせぇ・・・

561 :デフォルトの名無しさん:03/04/23 09:33
藻前ら、沢村なんかに釣られんなよ…。

562 :デフォルトの名無しさん:03/04/23 09:54
>>560
その前に、あなたが調べた事を書いて下さい。

563 :デフォルトの名無しさん:03/04/23 10:05
G(o^−^o)gle <検索しようね

564 :デフォルトの名無しさん:03/04/23 10:20
ぐぐれば分かるさ
よく説明を読め

565 :デフォルトの名無しさん:03/04/23 11:05
>>560
せめてstr"n"cmpとの違いは?にしようよ。。。


566 :デフォルトの名無しさん:03/04/23 11:34
>>548
前に作ったものですが。括弧つき。少数以下は切り捨て。参考にどうぞ。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=999294620&res=63
他にも再起呼び出しでやるのもあるらしいです。

567 :デフォルトの名無しさん:03/04/23 12:29
>>548
bcコマンドを呼び出すとか(笑)


568 :デフォルトの名無しさん:03/04/23 12:57
>>548
小町算・・・前に2行で書いたらソースが滅茶苦茶汚くなったなぁw

569 :デフォルトの名無しさん:03/04/23 14:59
WindowsのVCでコンパイル・実行できたプログラムをUNIXに移すと、
gccでコンパイルはできるんですが実行するとSegmentation faultが出てしまいます。
原因はどんなものが考えられるでしょうか。

570 :デフォルトの名無しさん:03/04/23 15:00
>>569
文字列定数("で囲まれたやつ)を書き換えていないか?


571 :デフォルトの名無しさん:03/04/23 15:01
バグがある

572 :デフォルトの名無しさん:03/04/23 15:02
>>571
正解。

あと二度freeもVC++では落ちなかったような・・・

573 :536:03/04/23 15:12
やりたかったことができました。>>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;
}

574 :デフォルトの名無しさん:03/04/23 15:27
> if(!strlen(s))
if(*s)でいいじゃん。

575 :デフォルトの名無しさん:03/04/23 16:43
>>574
if(!*s)な


576 :デフォルトの名無しさん:03/04/23 18:07
#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型のポインタの実体を指しに逝ってるから
いけると思ったんだけど・・・

577 :デフォルトの名無しさん:03/04/23 18:10
*a ではなく a の値はナニよ?
つまりint型へのポインタ変数 a はナニを指しているかという

578 :548:03/04/23 18:55
>>566
なるほど、算術記号が無くなるまで文字列を変形させる訳か。
バッファを大きめに取れば実数対応できるかな?
参考になりました。

579 :デフォルトの名無しさん:03/04/23 20:39
>>574-575
なるほど。getsで何も入力しないで改行を押すと先頭に'\0'が入るから
*sは先頭の値を指すので、ぴったしですね。使わしてもらいます。

580 :デフォルトの名無しさん:03/04/23 20:57
>>576
*a=5;の前にa=malloc(sizeof(int));
ちなみにそれは文法違反になるはず。Cでは変数宣言はブロックの先頭にまとめる。C99は知らないけど。

>>575
ありゃ。。。スマソ 長さが0の時に真にするんだよな。。。

581 :デフォルトの名無しさん:03/04/23 21:02
>>578
C99でもそれはNGだったはず

582 :デフォルトの名無しさん:03/04/23 21:46
>>576
そんな風に使うんならポインタじゃなくていいやん。

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

なら、おっけー。つまり>>577のいう通りなんだけど。
あるいは>>580

583 :デフォルトの名無しさん:03/04/23 22:26
要するに、ただ単純に、ポインターが解ってないだけやんか

584 :デフォルトの名無しさん:03/04/23 22:27
0やNULLは偽ですけど、0.0は偽になるとは限らないですよね?


585 :デフォルトの名無しさん:03/04/23 22:34
いや、なるでしょ?
その前提で結構書いちゃってるけど。

586 :584:03/04/23 22:37
>>585
VC++6.0では偽になったんですけど、保証されているのかなぁ・・・・

587 :デフォルトの名無しさん:03/04/23 22:38
if (0.0 == 0x00) printf("equal (・∀・)");
で試すがよい。

588 :584:03/04/23 22:44
>>587
0がdoubleに格上げ(?)されてイコールってことですか?
イコールになりました。

C++ではC++の本に偽になることを期待したコードがあるんで多分保証されていると思うんですけど。


589 :584:03/04/23 22:45
とりあえず偽になると覚えます。


590 :588:03/04/23 22:48
なんか変なこといっているな・・・・
0.0は0をdoubleにしたものだから0と0.0は同じ・・・・同じということは0.0も偽となるか。


591 :デフォルトの名無しさん:03/04/23 22:52
>>588
何故比較対称が0でなくNULLでもなく、0x00なのかということに着目するといいよ

592 :デフォルトの名無しさん:03/04/23 23:39
if(! (int)0.0) printf("false (・∀・)");


593 :デフォルトの名無しさん:03/04/23 23:44
>592
キヤストするならそりゃそうだろ。


594 :デフォルトの名無しさん:03/04/23 23:45
>>591
なんで?

595 :デフォルトの名無しさん:03/04/23 23:50
>>593
そりゃキャストするだろ。アフォ?
>>591
なんで?

596 :デフォルトの名無しさん:03/04/23 23:52
>>592
intにキャストする必要は無い
0.0は偽

597 :デフォルトの名無しさん:03/04/24 00:22
printfは使用禁止!と言ったらfprintf(stdout,...)にしやがったぜあの馬鹿。


598 :デフォルトの名無しさん:03/04/24 00:30
禁止にした理由を言わないからだろこの馬鹿。

599 :592:03/04/24 00:36
>>596
そうなんだ
内部的に int にキャストしてると思ってた

600 :デフォルトの名無しさん:03/04/24 00:39
>>597
何で代用するのか指定しておかないからだろ、この馬鹿

601 :デフォルトの名無しさん:03/04/24 01:16
windowsプログラムとかのソース見てると
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
っていうのがあるけど、これは絶対書かないといけないの?

602 :デフォルトの名無しさん:03/04/24 01:36
>>601
コンパイルしてみそ

#include <stdio.h>
#include <windows.h>
int WINAPI WinMain() {
    MessageBox(NULL, (LPCSTR)"(*・Д・)", (LPCSTR)"", MB_OK);
    return 0;
}


603 :デフォルトの名無しさん:03/04/24 03:28
printfでlong型の変数の数値を出力したいんだけどintにキャストしなきゃ駄目なの?
intとlongでサイズが違う場合はオーバーフローとかが問題になると思うんだけど。

604 :デフォルトの名無しさん:03/04/24 03:34
%ld

605 :デフォルトの名無しさん:03/04/24 03:35
>>603
ぬ?printfのフォーマット指定にlong専用のものってあったっけ?
いつも%dしか使って無いからよくわからないけど

606 :デフォルトの名無しさん:03/04/24 04:02
可変個の引数の場合は整数はみなintになるんじゃなかった?

607 :デフォルトの名無しさん:03/04/24 05:58
>>606
intより小さい整数は格上げされるが、大きい整数が格下げされるわけではない。
printf()のマニュアルくらい読むべきだな。

608 :デフォルトの名無しさん:03/04/24 06:59
printfのマニュアルじゃなくて可変個引数についての説明だと思われ。

609 :デフォルトの名無しさん:03/04/24 08:52
printf()のマニュアルを読んでも判ることだろ?

610 :デフォルトの名無しさん:03/04/24 14:07
#define ERRDEF (-1)
みたいにdefine時の数値は()で括らないと問題あるの?
よく言われる話だけど・・・
既出だったらスマン

611 :デフォルトの名無しさん:03/04/24 14:38
あります。

612 :見習中:03/04/24 15:22
教えて下さい。

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

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


ぐぐってみたのですが、

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


これは、上記目的をはたすでしょうか?
ほかに、これが良く使われる(一般的)というものがありましたら、
教えて下さい。よろしくお願いします。

613 :デフォルトの名無しさん:03/04/24 15:26
>>612
はたす。

614 :デフォルトの名無しさん:03/04/24 15:28
初心者ですみません。
int a =3:
int array[a];
のように変数分だけ配列の要素を作ることってできないんでしょうか?

615 :見習中:03/04/24 15:33
>>613

ありがとうです!
やってみたら、時間が表示されました。
そのあと、色々なことが書かれています。
もうちょっと調べてみます。

616 :デフォルトの名無しさん:03/04/24 15:33
>>614
int a = 3;
int *array;
array = (int *)malloc(sizeof(int)*a)

617 :デフォルトの名無しさん:03/04/24 15:35
>>614
mallocはそのためにある。
int *array = malloc(sizeof(int)*a);

でもgccだと拡張機能(array of variable length)で
 int a=3;
 int array[a];
が通ってしまうのはヒミツだ。

618 :デフォルトの名無しさん:03/04/24 15:36
>>617
C99にも含まれたけどな。

619 :デフォルトの名無しさん:03/04/24 15:39
>>616-617
malloc調べました。ありがとうございます。

620 :デフォルトの名無しさん:03/04/24 15:40
>>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

さてどっちが正しく処理されるでしょうか?

621 :おい!:03/04/24 15:40
C言語でドラえもん作れや!
              ____
           ./, - 、, - 、   ̄ ヽ
          ./-┤ 。|。  |――-、 ヽ
           | ヽ`- ○- ´ /  ヽ  |
           | -   |     ―   |  |
           |  ´  |    `ヽ  . |  |ヽ
  ∩      人`、 _  |    _.- ´ | .|  \
  |  ⌒ヽ /  \  ̄ ̄ ̄     ノノ       \
  |      |´      | ̄―--―― ´ヽ     _  /⌒\
  \_   _/-―――.| ( T )      `l     Τ(      )
       ̄       |   ̄        }      | \_/
             | 、--―  ̄|    /
FUCK YOU

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



622 :デフォルトの名無しさん:03/04/24 15:42
あるCプログラムを
vc++ からビルド・実行、するとちゃんと実行できるのですが
できた実行ファイルを直接実行しても何もおきません、
どこが悪いのか見当つきませんでしょうか。

623 :デフォルトの名無しさん:03/04/24 15:44
>>622
プログラムの一番最後にgetchar();を書く。

624 :デフォルトの名無しさん:03/04/24 16:05
>>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;
}


625 :610:03/04/24 17:51
>>620
ありがとうございます。
納得です。

626 :デフォルトの名無しさん:03/04/24 17:56
>(LPCSTR)""
なんでそんなコード書くの?

627 :デフォルトの名無しさん:03/04/24 18:16
>>610>>620
-1のような定数を括弧で括る理由の説明になっていない。
#define FOO -1
int a = -FOO;
#define FOOZ (-1)
int b = -FOOZ;
としたときに、前者はエラーになるが後者は正しく処理される。
何故ならば、それぞれ次のように解釈されるから。
int a = --1;
int b = -(-1);


628 :デフォルトの名無しさん:03/04/24 18:18
>>624
カンマの位置が激しく気持ち悪い。
英語の勉強したら?
>>626
お察しください。

629 :デフォルトの名無しさん:03/04/24 18:25
>>627 ・・・言ってることが激しく620と変わらないのだが?

630 :デフォルトの名無しさん:03/04/24 18:26
>>629
式と定数の違い。

631 :デフォルトの名無しさん:03/04/24 18:27
>>626=628
適当発言に適当ソースで返した奴にまで一々煽るな

632 :デフォルトの名無しさん:03/04/24 18:31
>>630
()で括るのは式を定数化する為だという意味においてまったく違いが無い
1+1は式、-1も式

633 :デフォルトの名無しさん:03/04/24 20:23
externについての質問なんですが、

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

func();
return 0;
}

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

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


なにがおかしいんでしょうか?

634 :bloom:03/04/24 20:26
http://homepage.mac.com/ayaya16/

635 :デフォルトの名無しさん:03/04/24 20:28

int num = 10;

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

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

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


636 :デフォルトの名無しさん:03/04/24 20:41
>>633 externはグローバルだけだよん

637 :デフォルトの名無しさん:03/04/24 20:45
>>635-636 
どうもです。
そこで小一時間はまってしまいました。

638 :デフォルトの名無しさん:03/04/24 20:50
int main(void)
{
int num;

func(num);
return 0;
}

=== file2.c ===

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


639 :デフォルトの名無しさん:03/04/24 20:51
>>606
intより小さいサイズの整数型・文字型の場合は、
int型と同じサイズに符号拡張され、スタックに積まれる、
が正解(だと思う)。積まれたデータをどう解釈するかは
関数次第だから、「みなintになる」はちょっと表現が
微妙と思われ。

640 :デフォルトの名無しさん:03/04/24 21:02
反例:__int64とか、long longとか、昔のlongとかネ。

641 :デフォルトの名無しさん:03/04/24 21:10
>>640
何に対する反例?

642 :デフォルトの名無しさん:03/04/24 21:12
以下のように関数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;
}

643 :デフォルトの名無しさん:03/04/24 21:32
>>642
エラーの内容を書かないという精神を修正したら良いんじゃないかな。

644 :デフォルトの名無しさん:03/04/24 21:37
int **って二次元配列じゃないよ。

645 :名無し@沢村:03/04/24 21:37
おまいら、ちょっとC言語でプログラム書いてみろ?
できたらおれが見てやるから、見せてみろ。

646 :デフォルトの名無しさん:03/04/24 21:39
お前が書け。俺が見てやる。

647 :デフォルトの名無しさん:03/04/24 21:39
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;
}

648 :デフォルトの名無しさん:03/04/24 21:40
>>646
ヤツのを見てどうするんだよ

649 :デフォルトの名無しさん:03/04/24 21:48
>>642
そのコードだけだと特に問題ないと思うが・・・。
他の部分でアクセス違反とか起きてない?



650 :デフォルトの名無しさん:03/04/24 22:00
>>642
これがんばって読みなさい。
http://www.catnet.ne.jp/kouno/c_faq/c6.html#18

651 :デフォルトの名無しさん:03/04/24 22:02
>>642
#include <malloc>をちゃんといれてまつか?
漏れのBCCちゃんは通してくれますたよ。

652 :デフォルトの名無しさん:03/04/24 22:06
>>651
そういう問題じゃない。

653 :デフォルトの名無しさん:03/04/24 22:08
mallocなんてヘッダーファイルはしらないなぁ。
malloc()はstdlib.hだろ。

654 :デフォルトの名無しさん:03/04/24 22:10
あるよ。<malloc.h>だけどね。

655 :デフォルトの名無しさん:03/04/24 22:11
>>653 いや普通にあるから安心汁

656 :デフォルトの名無しさん:03/04/24 22:12
>>655
標準じゃないからああいう言い方しただけだよ(^_^;)

657 :656:03/04/24 22:14
VC++には.hのつかないのはないな。C++用か?

658 :642:03/04/24 22:15
「問題が起きたため、○○.exeを終了します。ご不便をかけて申し訳ありません。
この問題をmicrosoftに報告してください。」というのがエラーメッセージの内容です。

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

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

>>650
ありがとうございます。読んでみます

659 :デフォルトの名無しさん:03/04/24 22:16
>>657
ん?#includeは拡張子を省略できるはずだけど

660 :デフォルトの名無しさん:03/04/24 22:18
できねえよ。

661 :デフォルトの名無しさん:03/04/24 22:20
はいはい。どこで聞きかじったんだ?
>>659

662 :657:03/04/24 22:20
>>659
ためしに#include <stdlib>ってやったらインクルードファイルをオープンできないと言われたYO

663 :デフォルトの名無しさん:03/04/24 22:22
>>658
Microsoftに報告しても解決しねーだろうな(苦笑

664 :デフォルトの名無しさん:03/04/24 22:24
拡張子省略できるのは C++ の標準ヘッダファイルな

665 :デフォルトの名無しさん:03/04/24 22:24
>>642
>「問題が起きたため、○○.exeを終了します。ご不便をかけて申し訳ありません。
>この問題をmicrosoftに報告してください。」というのがエラーメッセージの内容です。

多分OSはXPだろ?妙に過保護なんだよな…。

666 :デフォルトの名無しさん:03/04/24 22:25
>>664
あれは省略してるわけじゃないぞ。
たとえば <iostream> と <iostream.h>は別物だ。

667 :664:03/04/24 22:26
だね。書き方が悪かった。

668 :デフォルトの名無しさん:03/04/24 22:27
>>632
いまさらだが...

> -1も式

ハァ ?


669 :デフォルトの名無しさん:03/04/24 22:27
>>666
正しいんじゃないか?
g++ではstdioなんてファイルがないのに、#include <stdio>はOKだったぞ。gccではだめだけど。

670 :669:03/04/24 22:28
Visual C++ 6.0ではC++としてコンパイルしようとしてもだめだけど。。。

671 :デフォルトの名無しさん:03/04/24 22:29
>>668
ハァ?
じゃねえよ。正しいよ。お前が馬鹿。

672 :デフォルトの名無しさん:03/04/24 22:30
>>669-670
処理系依存なんだから正しいとは言えないだろ。

673 :649:03/04/24 22:31
>>642
GCCでコンパイルしてみて実行してみたが
問題なく動いたぞ。
main(void){

int **p;
p = foo(2, 4);
p[0][1] = 5;
printf("%d", p[0][1]);
}
無事5と表示された。

674 :669:03/04/24 22:32
>>672
うーむ・・・まあ拡張機能はOFFにしなかったけど・・・

675 :デフォルトの名無しさん:03/04/24 22:32
>>673
そりゃ「たまたま」正しく動いただけだ。

676 :デフォルトの名無しさん:03/04/24 22:33
>>673
パパあのまま流用したらメモリリークだよ・・・

677 :672:03/04/24 22:36
>>674
まぁ「正しい」の定義にもよるけど、標準Cの規則に準じてれば
正しいって解釈でいいよね。だったらg++の例は不適切。
おれがコンパイラつくって(作れないけど)独自に
#unko- <stdio.h>
でもインクルードできることにしてたとして、おれのコンパイラ
で動くから「正しい」って変でしょ?

678 :デフォルトの名無しさん:03/04/24 22:37
0-1 という暗黙の展開があるから -1 という「式」が -1 という「値」として扱える
でも何故か 4N という式は 4xN とは展開されない
コンパイラは必ずしも四則演算の要件を満たしてるとは言えないね

679 :デフォルトの名無しさん:03/04/24 22:39
int **pはポインタのポインタだろ。
p[a]はポインタになるだろ。
で、ここにきちんとint型のポインタを入れないといけない。

680 :デフォルトの名無しさん:03/04/24 22:39
>>678
C言語と数学は違う。ただそれだけのこと。


681 :デフォルトの名無しさん:03/04/24 22:40
>>680の言うとおり。
ついでにC言語では4Nは式ではない。

682 :デフォルトの名無しさん:03/04/24 22:41
int (*p)[5]=malloc(sizeof(int)*4*5);

683 :デフォルトの名無しさん:03/04/24 22:43
4Lだと式だけどな(笑)

684 :デフォルトの名無しさん:03/04/24 22:43
>>682
そりゃ正しいけどだめだろ。
>>642はプログラム中で任意の列数・行数を持つ
2次元配列(もどき)を作りたいみたいだから。

685 :デフォルトの名無しさん:03/04/24 22:43
>>680 四則演算という規格について言ってるのだから数学云々は別

686 :デフォルトの名無しさん:03/04/24 22:50
>>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;
}

687 :デフォルトの名無しさん:03/04/24 22:53
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;

できないかも。


688 :687:03/04/24 22:54
できないな。void *じゃ加算できないって。

689 :687:03/04/24 22:57
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;

こうかな。

690 :デフォルトの名無しさん:03/04/24 23:28
ファイルの指定位置から数バイト消すみたいな関数ありますか?
書くのは一杯知っているのですが。あるなら教えてください。

691 :デフォルトの名無しさん:03/04/24 23:37
>>690
メモリに取っておいて切り詰めたい始端終端を取ってリワインドして
あとはガリガリってのではダメ?


692 :デフォルトの名無しさん:03/04/24 23:40
>>683
4L は、定数だよ。

693 :690:03/04/24 23:57
>>691 それは今使っているやり方なんです。fprintfやfgetsで空入力しても
そのバイト分が消えて、空白や改行の2バイトに変わるだけですし。

694 :デフォルトの名無しさん:03/04/25 00:03
>>692
定数だけ書いても式じゃないのか?

695 :デフォルトの名無しさん:03/04/25 00:03
>>693
Cはそれほど詳しく無いから分らないけど
ファイルシステムの構造を考えると切り詰めるってのは無いと思う
バッファサイズが気になるならtempファイルを作ってリネームでとか
ごめん、この程度しか思いつかん

696 :デフォルトの名無しさん:03/04/25 00:04
>>694 式だね

697 :デフォルトの名無しさん:03/04/25 00:09
>>693
ファイルの途中を切り詰めるという関数は標準C(およびPOSIX)にはありません。
システムコールでも * 不 可 能 * です。

698 :デフォルトの名無しさん:03/04/25 00:15
末尾を切るのならあるだろうけどなぁ。。。truncateとか。
残す部分だけメモリーに取って上書きじゃ嫌なんだっけ?


699 :690:03/04/25 02:13
お答えありがとうございました。
>>697 不可能なんですか。残念です。
>>698 今までは予め上限を決めておいて、セーブロードの時全てのデータを出し入れ
していたのですが、新しく作ろうとしている時そういえばあったっけとなってしまったわけです。
残す部分だけのは嫌ではないのですが、消す方法があるならそのほうがいいので質問しました。

700 :山崎トオル:03/04/25 03:31
700ゲット(^^)

701 :デフォルトの名無しさん:03/04/25 10:27
なんか自分で考えてるうちに何がなんだかわからなくなってきたので
誰か愛の導きをください。

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

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


702 :デフォルトの名無しさん:03/04/25 10:46
>>701

char (*string)[32];
char[32]を指すポインタ。二次元配列を指すポインタとでも覚えておけばいいよ。


703 :702:03/04/25 10:49
char *string[32]は配列だけど、char (*string)[32]は配列じゃなくてポインタ。指すものが配列。


704 :701:03/04/25 11:14
すいません。。。
なんか余計わけわからなくなりました。
これを2次元配列として利用するとしたら、具体的にどんな書式で書くのでしょ
うか?

705 :デフォルトの名無しさん:03/04/25 11:21
>>704

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

int main()
{
char a[10][32];
func(a);
return 0;
}


706 :デフォルトの名無しさん:03/04/25 11:34
× // void func(char [][32])でもいいけど
○ // void func(char string[][32])でもいいけど

707 :デフォルトの名無しさん:03/04/25 14:52
%s, %d
のように %記号 で表現するスタイルについて、用語がついていたと思うのですが、
どういう名前か教えてください?

手元の本には記述が見当たらなかったので。

708 :デフォルトの名無しさん:03/04/25 15:00
printf()系の書式、scanf()系の書式

709 :デフォルトの名無しさん:03/04/25 15:02
>>707
フォーマットじゃなくて%dとかの規格の名前ってこと?

710 :デフォルトの名無しさん:03/04/25 15:02
>>708 プッ

711 :デフォルトの名無しさん:03/04/25 16:09
激しく今更だが、>>627には適当なことを書くな、と言いたい。

712 :デフォルトの名無しさん:03/04/25 16:37
>>711
--1じゃなくて- -1ってことのほかに何かある?

713 :れな:03/04/25 16:53
(課題1)
1000以下の正の整数値のうち,素数をすべて計算し,
その結果をファイルに格納するプログラムを作成せよ.
素数とは自分自身と1以外の数値で割り切れない整数のことである.
また、計算の実行の中で乗除(乗算と除算)を行った回数もあわせて表示し、
ファイルに格納すること
おねがい!!たすけてえええ

714 :デフォルトの名無しさん:03/04/25 16:57
>>713
宿題スレへどうぞ。
http://pc2.2ch.net/test/read.cgi/tech/1045074808/l50


715 :デフォルトの名無しさん:03/04/25 17:48
微妙にスレ違いかもしれませんが質問させてください。
Microsoftの日本のWebサイトの、MSDNライブラリの中には、C標準関数のリファレンスはないのでしょうか?
もし有るのでしたらアドレスを教えていただけないでしょうか?

716 :デフォルトの名無しさん:03/04/25 17:55
100+(0.000001)×1000000=100
(0.000001)+100=109.95…

なんじゃこりゃ???


717 :デフォルトの名無しさん:03/04/25 17:58
>>715
互換性のところにANSIと書いているのが標準関数なのでは?

718 :デフォルトの名無しさん:03/04/25 18:04
>>716 そういうことだ

719 :デフォルトの名無しさん:03/04/25 19:27
>>707
変換指定

720 :デフォルトの名無しさん:03/04/25 21:48
100+(0.000001)×1000000=100
(0.000001)×1000000+100=109.95…
だった。
両方とも110になるはずなのに、なぜだ??
教えてください。

721 :デフォルトの名無しさん:03/04/25 21:54
>>720
実数演算は誤差が出るんだよ。

722 :デフォルトの名無しさん:03/04/25 21:56
実数演算じゃないだろ。

723 :デフォルトの名無しさん:03/04/25 22:04
100+(10^-6)*(10^6)が110になるわけないやん。

724 :デフォルトの名無しさん:03/04/25 22:08
>>722
実数じゃん。

725 :デフォルトの名無しさん:03/04/25 22:15
>>720
全角で書くのはどういうことだ? 試させない気か?

726 :デフォルトの名無しさん:03/04/25 22:16
問題は実数演算じゃないよ。

727 :720:03/04/25 22:24
floatで定義してるんです、これ。
それが関係してると思うのですが…

728 :デフォルトの名無しさん:03/04/25 22:35
有効桁数の問題かな。

729 :デフォルトの名無しさん:03/04/25 22:43
>>720
上は桁落ちを起こしてるんだろうけど、下はなんだろ?
てかこの程度で桁落ちしたっけ?>float

730 :デフォルトの名無しさん:03/04/25 22:46
>>716 OSとコンパイラを教えなしゃい

731 :デフォルトの名無しさん:03/04/25 22:55
>>729
有効桁数って6桁くらいじゃなかった?

732 :720:03/04/25 22:56
>>730
OSはLINUXで、コンパイラは分かりません!

733 :デフォルトの名無しさん:03/04/25 22:58
>>732
分からないってことはないだろう。
CPUはIntel系(32bit)、コンパイラはgccか?

734 :733:03/04/25 22:59
あー、、浮動小数点数演算の誤差の話か、、、、

735 :デフォルトの名無しさん:03/04/25 22:59
http://school2.2ch.net/test/read.cgi/job/1050853932/l50

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



736 :720:03/04/25 23:00
>>733
あー、多分それです。

737 :デフォルトの名無しさん:03/04/25 23:00
>>729
float? doubleじゃなくて?

738 :デフォルトの名無しさん:03/04/25 23:05
x(0.000001)(1000000)(100)*+=
どっちもこう展開されると思うんだけどなぁ・・・

739 :720:03/04/25 23:05
floatは何桁まで取れるんですか?

740 :デフォルトの名無しさん:03/04/25 23:06
>>737
倍密度浮動小数点数なら桁落ちはまずない(単密度と比べて)

741 :デフォルトの名無しさん:03/04/25 23:06
>>720
下はあまりにも誤差が大きすぎる。
どうやって表示したの?

742 :デフォルトの名無しさん:03/04/25 23:09
お前ら、情報処理技術者試験(基本情報技術者試験)を受けれ。

743 :デフォルトの名無しさん:03/04/25 23:11
>>739
6,7桁くらい

744 :デフォルトの名無しさん:03/04/25 23:12
同じような環境でどうやっても101.000000...になる・・・

745 :デフォルトの名無しさん:03/04/25 23:12
>>742
そういう君は持ってるんだな?下の原因を教えてくれ

746 :720:03/04/25 23:13
#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);

}
…確かこんなかんじです。

747 :デフォルトの名無しさん:03/04/25 23:14
・・・・・。ループで足していたのかよ・・・・

748 :デフォルトの名無しさん:03/04/25 23:14
これはまた誤差が出まくりそうな…

749 :デフォルトの名無しさん:03/04/25 23:15
>>746
君のソースにループカウンタへの愛を感じない

750 :デフォルトの名無しさん:03/04/25 23:16
まぁマテ、お前らの中で>>738を理解している奴がどれだけいるのか確認したい
これに関連するある国の名を挙げてくれ!


751 :747:03/04/25 23:16
じゃなくて、


     無限ループかよ!

752 :デフォルトの名無しさん:03/04/25 23:17
>>749
一生ループしまくりだから、愛してるんじゃねーの?

753 :720:03/04/25 23:17
>>749
…気づいて自分でわらってしまた。

754 :720:03/04/25 23:18
iに直してやってみたら、また109.592110という結果でしたー

755 :デフォルトの名無しさん:03/04/25 23:20
>>752 i の恋人は int と決まってるの!親がそう決めたの!


756 :720:03/04/25 23:21
int じゃないといかんのですか?

757 :デフォルトの名無しさん:03/04/25 23:21
あたしの親も float みたいなかぶいたやつとは付きあわせない
といってました。

758 :デフォルトの名無しさん:03/04/25 23:21
floatの有効桁数は6桁

759 :デフォルトの名無しさん:03/04/25 23:21
>>754
上は桁落ち、下は情報落ちかな


760 :デフォルトの名無しさん:03/04/25 23:22
Real programmers don't use float type.


761 :デフォルトの名無しさん:03/04/25 23:22
FORTRANの掟
 先頭1文字目がI,J,K,L,M,N → 整数型 
 先頭1文字目がそれ以外 → 実数型

762 :デフォルトの名無しさん:03/04/25 23:23
>>760 今はそうでもないよ

763 :デフォルトの名無しさん:03/04/25 23:24
>>761
虚数型は?

764 :720:03/04/25 23:25
>>759
情報落ちとは?

765 :デフォルトの名無しさん:03/04/25 23:26
僕もC言語勉強してロマサガ2みたいなすごいゲームをつくります(^O^)/

766 :デフォルトの名無しさん:03/04/25 23:26
>>764
>>742の試験に落ちること。

あ、これはマ板のあのスレ向けか。

767 :デフォルトの名無しさん:03/04/25 23:29
値の極端に小さい実数同士を演算し、有効桁数を越えた部分が無効とされること

>>738はスルーかいw お前ら勉強してないだろ?

768 :デフォルトの名無しさん:03/04/25 23:31
>>767
ぎゃくぽ?

769 :720:03/04/25 23:32
>>767
おぉ、なんとなく分かるかも。
ありがとうございました。です。

770 :デフォルトの名無しさん:03/04/25 23:33
ぎゃくぽのことか?

771 :デフォルトの名無しさん:03/04/25 23:33
整数部の大きな数と小数部の大きな数同士で計算した場合の誤差はなんと言うんだっけ。


772 :デフォルトの名無しさん:03/04/25 23:34
>>768
Yes、ぎゃくぽ

773 :デフォルトの名無しさん:03/04/25 23:35
>>771
桁落ちか、丸め誤差?

774 :デフォルトの名無しさん:03/04/25 23:35
>>773
あ、多分後者だ。サンクス。


775 :デフォルトの名無しさん:03/04/25 23:42
http://www.i-berry.ne.jp/~kat-sato/fe/H13s/H13s05.htm

この問題ぐらい解けない奴はマジで基本受けとけよ

776 :デフォルトの名無しさん:03/04/25 23:49
>>775 上野開設は逆だったのか?よくわからん

777 :デフォルトの名無しさん:03/04/25 23:58
情報落ち
 情報落ちとは、大きな値と小さな値を加減算したときに、小さな値が無視されてしまう現象のことです。
コンピュータで扱う浮動小数点では、仮数部に保持できる桁数があらかじめ決められています。そのため、
大きな値と小さな値を加減算すると、有効な数字をもった桁が多くなりすぎるため、正規化する際に
下部の桁が切り捨てられてることになります。

778 :デフォルトの名無しさん:03/04/26 00:03
じゃあ>>771が情報落ち?

779 :デフォルトの名無しさん:03/04/26 00:08
C言語の基礎を学びたいのですが2日ほどで覚えられますか?
○×ゲームくらい作れるようになりたいのですが。

780 :デフォルトの名無しさん:03/04/26 00:10
>>779
女の子なら覚えられる

781 :デフォルトの名無しさん:03/04/26 00:24
>>778
YES

アスキーやe-wordsのオンライン辞書には載ってないんだな
合格情報処理の付録の辞書にさえ載ってるのに

782 :デフォルトの名無しさん:03/04/26 02:00
二次元の配列をmallocで割り当てるにはどうやればいいですか?


783 :デフォルトの名無しさん:03/04/26 02:18
○×ゲームの7行ソースきぼんぬ

784 :デフォルトの名無しさん:03/04/26 03:38
>>782
//mallcoは確保したメモリの先頭ポインタを返すんだよ。
//つまり、自分でオフセットとって二次元配列の様に扱いなさいってこった。
int head = 3;
int len = 5;
int *arg;

arg = malloc((head * len));
//これでarg[head][len]の様に自分で扱えば良い。
free(arg);

785 :デフォルトの名無しさん:03/04/26 03:51
>>784 はヴァカ。

786 :デフォルトの名無しさん:03/04/26 03:51
//分ってなさそうだから参考までに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]だと思え。

787 :784:03/04/26 03:57
for(;;) printf("ヴァカですか?\n");

while(1) printf("アフォですか?\n");


788 :山埼渉:03/04/26 04:05
(^^)

789 :785:03/04/26 04:06
>>784
どうやって多次元配列の各要素にアクセスするのか、その仕組みを勉強しなさい。

790 :bloom:03/04/26 04:26
http://homepage.mac.com/ayaya16/

791 :デフォルトの名無しさん:03/04/26 04:58
>>782
>>686あたり

792 :デフォルトの名無しさん:03/04/26 06:27
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

どうして、こうなるのですか?またならないようにする
対処方法は?

793 :デフォルトの名無しさん:03/04/26 06:34
よく見ていないが、おおかたxがunsignedになって膨大な数になったからだろ。
釣りだろうな。


794 :デフォルトの名無しさん:03/04/26 06:52
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 無論、釣りですが、説明がつきません。

795 :デフォルトの名無しさん:03/04/26 07:37
>>794
signedとunsignedを比較するとsignedの方はunsignedになる。
sizeofが返す型はsize_tだからunsignedでしょ。

796 :デフォルトの名無しさん:03/04/26 08:42
>>795 では、>>794の下の部分は、どう説明するの?
> unsigned short y;
> if ( x < y ) printf("aaa \n");


797 :デフォルトの名無しさん:03/04/26 09:28
#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;
}
これやってみりゃわかるだろ?

798 :デフォルトの名無しさん:03/04/26 11:55
C++を利用してCコンパイラを使う方法がわかりません。誰か教えてください!!
自分で出来たのはvcvars32を自ディレクトリにコピーするところまでです。

799 :デフォルトの名無しさん:03/04/26 12:30
>>798
逆ならできるよ、下位互換するシステムなんてそうそうない

800 :釣られた?:03/04/26 13:40
>798
vcvars32[.bat]はCやC++自体とは何も関係がないだろ。
何で敢えてコマンドラインでやろうとするの?


801 :デフォルトの名無しさん:03/04/26 14:15
質問です。
srand(time(NULL))で初期化してrand()で乱数を取得したのですが
複数のプログラムを動かすときに、同時に起動してしまうと
rand()がすべて同じ数になってしまいます。
別々の乱数にするにはどうしたらよいのでしょうか。

802 :デフォルトの名無しさん:03/04/26 14:17
>>801
時間にプロセスIDを足すとか。

803 :デフォルトの名無しさん:03/04/26 14:19
>>801
timeが返す値は秒単位だからね。
システムにもっと細かい精度で時間を得られる関数があればそれを使ったら?


804 :デフォルトの名無しさん:03/04/26 14:30
>>802-803
ありがとうございます。試してみます。

805 :デフォルトの名無しさん:03/04/26 15:30
itoa(int,char*,int)
の第一引数と第三引数の意味を教えてください。

806 :デフォルトの名無しさん:03/04/26 15:32
標準ライブラリにはそんなものないんだが。
変換対象と基数か?

807 :デフォルトの名無しさん:03/04/26 15:39
>>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
> 標準ライブラリにはそんなものないんだが。
↑初耳だ(ワラ

808 :デフォルトの名無しさん:03/04/26 15:41
ん?C99には追加されたのか?

809 :デフォルトの名無しさん:03/04/26 15:49
http://seclan.dll.jp/c99d/c99d08.htm
http://seclan.dll.jp/c99d/c99d09.htm

C99にもないじゃない・・・・
それとも「標準ライブラリ」という言葉の意味を間違っていたかな?
Cの標準規格で定められたライブラリという意味だと思っていたけど。

810 :デフォルトの名無しさん:03/04/26 15:49
キャスト関数は昔から

811 :デフォルトの名無しさん:03/04/26 15:50
atoi と勘違いたとか。

812 :805:03/04/26 15:52
>>807
わお、すばらしい。
ありがとうございます。助かりました。

813 :デフォルトの名無しさん:03/04/26 15:56
>>807
また一つ賢くなりましたね(ワラ

814 :デフォルトの名無しさん:03/04/26 16:03
確かに数値>文字列の処理はCには無いとの文献も見当たりますね
C99かC++のライブラリに追加されたんじゃないかな?
んで、実装自体はCの関数だから下位互換が可能と。

815 :>>814:03/04/26 16:04
あ、sprintfは別個ねw <数値文字列変換

816 :デフォルトの名無しさん:03/04/26 16:35
ANSI-Cの関数の一覧が乗っていたページを忘れてしまったのですが、
アドレスを教えてください。確かピンクっぽい色で、ヘッダごとに見れたと思います。

817 :デフォルトの名無しさん:03/04/26 16:38
>>816
希望のところとは違うけど・・・
ttp://www.personal-media.co.jp/book/c/ansi.html
ある意味ブラクラ(謎

818 :816:03/04/26 17:07
>>817 そのページはなくなってしまったんですか?載せていただいたアドレス
は別にブラクラでは無いですが、希望したページと違いますが、いただきます。
ありがとうございました。

819 :デフォルトの名無しさん:03/04/26 17:10
fgetc、fgets、fscanf等で標準入力から入力(リダイレクトなどはしないで、キーボードのまま)するとき、
キーを押してもそのまま入力されるわけではなく、
一度画面上で編集(MSDOSプロムプトなら^Hで1文字削除、NT系ならさらに高度な編集機能)
されてから渡されるのですが、
この入力システムはどこのプログラムが提供しているのですか?
デバイスドライバとかですか?


820 :デフォルトの名無しさん:03/04/26 17:27
>>819 FILE *stdin だからデバイスだろうねぇ

821 :デフォルトの名無しさん:03/04/26 22:42
ヘッダーファイルの#endifとか#ifdefとかって何ですか

822 :デフォルトの名無しさん:03/04/26 22:46
>>819
シェルじゃねーかな。

823 :ろりえおーばーないとせんせーしょんだんさーりこん:03/04/26 22:46
NULLより 0 の方がいい (プロ言§5.1.1)
http://member.nifty.ne.jp/~masumoto/cpp/topic/#RSEC3
マジっすか?

824 :デフォルトの名無しさん:03/04/26 22:49
>>823
#define NULL (0)

825 :デフォルトの名無しさん:03/04/26 22:50
NULL PO ?

826 :デフォルトの名無しさん:03/04/26 22:51
>>819
端末ドライバ。UNIX(SysV)では STREAMS

827 :デフォルトの名無しさん:03/04/26 22:55
>>823
バイブルにもそう書いてあるよ。

828 :デフォルトの名無しさん:03/04/26 22:57
NULLの方が良かろう。
ポインタだと分かる。
よって否定派。

829 :デフォルトの名無しさん:03/04/26 22:59
ぬるぽの内部表現が 0 にならないことがあるっていうのと
混同しているんでは。内部表現がどうあれソース表記上は
0 (NULL)でなければならなかったような。

830 :デフォルトの名無しさん:03/04/26 23:00
>>823
そのページみたけど、

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

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

Stroustrup が 0 と書くのを勧めてるのが事実なら、
単にC++が糞なだけな気がする

831 :ろりえおーばーないとせんせーしょんだんさーりこん:03/04/26 23:03
NULLの人より0の人が多いみたいですね。
でも、猫ちゃんとかよく見るソースにはNULLが多いですねー。
NULLというものも知っておけということでしょうか。
ありがとうございました。

832 :デフォルトの名無しさん:03/04/26 23:03
http://member.nifty.ne.jp/~masumoto/cpp/topic/#SEC4
じゃ↑はどうなんですか?
ポインタと混同しそうなんですが。

833 :デフォルトの名無しさん:03/04/26 23:04
>>830
NULLがリテラルの0じゃない処理系があるってことだろ。

834 :デフォルトの名無しさん:03/04/26 23:05
だからNULLは定義してあるヘッダーを
インクルードするのが面倒だから
俺は使ってないっていってんだろ! 何言ってんだ!

835 :ろりえおーばーないとせんせーしょんだんさーりこん:03/04/26 23:05
>>830
C++が糞に見えてくるすばらしい言語を教えてください。

836 :デフォルトの名無しさん:03/04/26 23:07
>>835
C言語

837 :ろりえおーばーないとせんせーしょんだんさーりこん:03/04/26 23:10
>>836
サンクスコ。
古き良き時代。

838 :デフォルトの名無しさん:03/04/26 23:10
すいません。どなたかちょこっとおしえてください。
.NET Microsoft Framework SDK で、C言語のソースを
コンパイルする方法(コマンド等)を教えてください。


839 :デフォルトの名無しさん:03/04/26 23:11
>>833
どういう意味?
#define NULL 0xdeadbeaf
とか0以外になってる処理系があるってこと?


840 :デフォルトの名無しさん:03/04/26 23:13
>>839
たとえば(void*)0になってるとか。

841 :デフォルトの名無しさん:03/04/26 23:13
>>838 CL, BCC32, CC, JAVACのどれか

842 :デフォルトの名無しさん:03/04/26 23:13
>>839
ありえない、絶対にありえない

843 :デフォルトの名無しさん:03/04/26 23:28
ここれす
http://www.okweb.ne.jp/kotaeru.php3?q=530737

844 :デフォルトの名無しさん:03/04/26 23:31
ふーむ
Stroustrup は、NULL が (void *) 0 になってる処理系があるので、
NULLポインタを使いたいときは、0 を使えっていってるの?
へんなの

845 :デフォルトの名無しさん:03/04/26 23:32
アロエリーナ、絶対にアロエリーナ

846 :デフォルトの名無しさん:03/04/26 23:33
>>844
「C++は型チェックが厳しいから0を使え」みたいな言い方だったような。

847 :デフォルトの名無しさん:03/04/26 23:33
>>844

int *p=(void *)0;

これはコンパイルできるか?

848 :デフォルトの名無しさん:03/04/26 23:36
>>847
Cなら出来るんじゃない?キャストしないと気持ちわるいけど

849 :デフォルトの名無しさん:03/04/26 23:40
>>848
C++では出来ないから0を使うということで  終わり。

850 :デフォルトの名無しさん:03/04/26 23:44
void* をキャストなしで他のポインタに代入できない仕様になった時点で
NULL の定義も 0 とするように決めておけば良かったのにな。

851 :デフォルトの名無しさん:03/04/26 23:46
NULLテンプレートにすればよかった

852 :デフォルトの名無しさん:03/04/26 23:55
>>850,>>851
どうやったところで、ヘッダのインクルードが要るなら現状と同じ。

853 :デフォルトの名無しさん:03/04/26 23:56
NULLをキーワードにしちゃえよ

854 :デフォルトの名無しさん:03/04/27 00:01
ヘッダのインクルードにやたらとこだわっている人がいるな(w

855 :デフォルトの名無しさん:03/04/27 00:11
>>841
さん、ありがと。
cl コマンドででできました。



856 :841:03/04/27 00:14
JAVACにツッコミが来なかった・・・もう来ない・・・

857 :ろりえおーばーないとせんせーしょんだんさーりこん:03/04/27 00:29
僕の心は揺れています。
1/f

858 :デフォルトの名無しさん:03/04/27 00:33
VC++5or6中古買いたいんだが、ヤフーオークションめんどくさい
だれかお助けを!




859 :デフォルトの名無しさん:03/04/27 00:40
>>858
お前のタイーホの共犯になれとでも?断る。

860 :デフォルトの名無しさん:03/04/27 01:13
>>858
もう一度よく考えるのです。
ほんとうにVC++が必要なのか。

861 :デフォルトの名無しさん:03/04/27 01:28
include<stdio.h>
void main(void)
{
int fuck;
fuck=0;
printf("%d"fuck);
}

862 :デフォルトの名無しさん:03/04/27 01:32
あのさ、CでGUI作れるの?
何かの本でC++はCの進化系だと書いてあったんだけど。
それとC++ってわざと難しく創られたって本当?

863 :デフォルトの名無しさん:03/04/27 01:52
多分多くの処理系で
#ifdef _cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
と定義されていると思うけど。

864 :デフォルトの名無しさん:03/04/27 01:57
MS-DOS時代でもGUIとかマルチタスクはあったんだよ

865 :デフォルトの名無しさん:03/04/27 02:13
そうだったんですか・・・

866 :デフォルトの名無しさん:03/04/27 02:42
>>863
(void *) 0 使ってるのってどの処理系?
普通は、#define NULL 0 でしょ?

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

#ifndef NULL
#if defined(_LP64) && !defined(__cplusplus)
#define NULL 0L
#else
#define NULL 0
#endif
#endif

867 :デフォルトの名無しさん:03/04/27 02:44
>>864
一太郎?

868 :スレッド直リン:03/04/27 02:46
>>866
gcc,VC++6.0

869 :デフォルトの名無しさん:03/04/27 02:47
>>866
VC++ とかだろ

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

#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif

870 :868:03/04/27 02:47
あー名前が・・・・

871 :ろりえおーばーないとせんせーしょんだんさーりこん:03/04/27 04:06
#define NULL ((void *)0)
define って、キャストしない場合は int なんでつか?

872 :デフォルトの名無しさん:03/04/27 04:13
プリプロセッサ命令に型などない。

873 :デフォルトの名無しさん:03/04/27 04:19
>>871
define はキャスト出来ません。

874 :デフォルトの名無しさん:03/04/27 04:22
C初心者、勉強中です
BCC5.5を BCC Developer(フリー)で使っているのですが・・。
このBcc Developerについて
何処か良い説明載ってるトコご存知ない?

875 :デフォルトの名無しさん:03/04/27 04:23
>>871
int define;と定義すればintだし、char *defineと定義すればchar *

876 :デフォルトの名無しさん:03/04/27 04:29
なぜNULLを予約語にしませんか?

877 :デフォルトの名無しさん:03/04/27 04:42
>>876
大文字だから

878 :877:03/04/27 04:43
× 大文字
○ 全部大文字

879 :デフォルトの名無しさん:03/04/27 06:41
>826
てことは、fgetc等でのキーボードからの入力では、履歴機能や挿入入力とかは((システム側に)用意されてなかったら)使えないのですね。


880 :デフォルトの名無しさん:03/04/27 06:52
>>879
履歴とか使いたかったら、gnu getline使え。
OSで持っている訳ではない。
但しこれはLGPLではなくGPLなので、プログラム全体が
GPLに矛盾しないライセンスになるので注意。
似たようなライブラリで、BSDライセンスのも有るが、俺は使った事無い。

881 :デフォルトの名無しさん:03/04/27 09:29
>880
それは違う

882 :デフォルトの名無しさん:03/04/27 11:23
hです。
制すうちを入力しshort型の変数に格納した後
この変数の内部表現をビット列で表示するプログラムを作成せよ・・・
という課題がでました。

integer=>1
0000000000000001
integer=>-2
1111111111111110

といった感じで表示するってとこまでは分かったけど・・・
実際のプログラムが分かりません。助けてください・・・。

883 :デフォルトの名無しさん:03/04/27 11:28
>>882
宿題スレへ。
http://pc2.2ch.net/test/read.cgi/tech/1045074808/l50
なんか、最近何度も見た気がするのは気のせいだろうか…


884 :デフォルトの名無しさん:03/04/27 11:40
>>883
> なんか、最近何度も見た気がするのは気のせいだろうか…

同じ学校とかじゃねーのかな ?

885 :デフォルトの名無しさん:03/04/27 11:52
scanf()って基本的に使わないんですか?

886 :デフォルトの名無しさん:03/04/27 12:19
??=とかの3連文字はちゃんと習得しておいた方がいいのでしょうか?

887 :デフォルトの名無しさん:03/04/27 13:16
どなたか教えてください。
C言語の本で、実際に実用に使えるような完結したソース
を扱っているC言語応用編みたいないい本はないでしょうか。
練習用の小さなソースだけでは力がつかないような気がしたので、
どなたかちょこっと教えてください。

888 :デフォルトの名無しさん:03/04/27 13:16
>>887
作ってわかるC言語 日下部陽一・著

889 :デフォルトの名無しさん:03/04/27 13:26
Cをやっているのですが、どんなプログラムが書ければ
脱初心者になれるのですか?おながいします。

890 :デフォルトの名無しさん:03/04/27 13:31
>>889
そんな質問をしなくなれば、脱初心者だ。

891 :デフォルトの名無しさん:03/04/27 13:48
行列の要素が何個あるかを調べる関数はありますか?

892 :デフォルトの名無しさん:03/04/27 14:26
>>891作れ

893 :891:03/04/27 14:34
>>892
ありがとう。やってみます。

894 :891:03/04/27 14:36
あ、まちがえました。
行列じゃなくて、配列でした。
ありますか?

895 :デフォルトの名無しさん:03/04/27 14:39
>>894
#define yousosuuhaikutsudesuka(array) (sizeof array/sizeof array[0])
適当に括弧を付けて。


896 :891:03/04/27 14:59
>>895
ありがとうございました。たすかります^^

897 :489:03/04/27 15:22
約、一週間が過ぎようといていますが、合計値を横に出すことが出来ても
どうしても、すべて1と表示されてしまいます。ちょっと混乱して分かりません。
どなたか力を貸していただけないでしょうか?よろしくお願いいたします。
初心者ですみません。

898 :デフォルトの名無しさん:03/04/27 15:40
fflush(stdin)には誰も突っ込まないんだな。

899 :デフォルトの名無しさん:03/04/27 16:13
すいません、ちょっと質問したいんですけど、VCで
インクルードファイルがオープンできませんってエラーが
出るんですけど、このときの設定はどうすればいいんですか?


900 :デフォルトの名無しさん:03/04/27 16:16
コンパイラのインストール時の設定を見直す。

901 :デフォルトの名無しさん:03/04/27 16:32
>>899
どこにあるなんというインクルードファイルがオープンできないのか判らないと
詳しいことは回答できないと思われ。

ついでに言えば激しくスレ違い。

902 :デフォルトの名無しさん:03/04/27 16:36
>>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;
}

903 :902:03/04/27 16:39
インデントの入れ方が良くなかったかな。

#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;
}

904 :デフォルトの名無しさん:03/04/27 16:44
int table[MAX_COLS][MAX_ROWS];
ではいかんのか?

905 :902:03/04/27 16:55
コピペ→編集 してたから気づかなかったけど、

int table[MAX_ROWS][MAX_COLS];

は要らなかったな。

906 :デフォルトの名無しさん:03/04/27 17:15
>>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;
}

907 :デフォルトの名無しさん:03/04/27 18:25
>>886
欧州の方で、Cプログラマになるなら必要かもしれない。

908 :デフォルトの名無しさん:03/04/27 20:20
red hat linuxですがgetche()を使うためのヘッダファイルがわかりません
お願いします

909 :デフォルトの名無しさん:03/04/27 20:27
>>908
curses.h
getchだけど多分同じだと思う。

910 :デフォルトの名無しさん:03/04/27 20:28
>>908
getche()なんてものがあるのかw

getc, getch, getchar・・・もう分け分らん

911 :デフォルトの名無しさん:03/04/27 20:29
>>908
man で調べてみれば?

912 :デフォルトの名無しさん:03/04/27 20:29
>>909
ありがとうございます

913 :デフォルトの名無しさん:03/04/27 20:31
コニ男さんでgetcheが使えるみたい

914 :デフォルトの名無しさん:03/04/27 20:41
(^O^*)

915 :デフォルトの名無しさん:03/04/27 20:56
Curses版、getch()w/echoだったっけ?<getche()

916 :デフォルトの名無しさん:03/04/27 21:06
エコーバックのある getch() と覚えておけ

917 :デフォルトの名無しさん:03/04/27 21:16
じゃあそのげっちぇのeはechoのe?

918 :デフォルトの名無しさん:03/04/27 23:25
げっちぇ言うな

919 :デフォルトの名無しさん:03/04/28 01:38
げっち、げっちぇ、げっちゃら


920 :デフォルトの名無しさん:03/04/28 01:56
>red hat linuxですがgetche()を使うためのヘッダファイルがわかりません

こーゆー質問を見ると、知りたいのは本当にヘッダファイルだろうか
という疑念がわかないでもない

921 :デフォルトの名無しさん:03/04/28 03:27
主に使うのはVC6とmingwなんですが、
memcpyと自分でforループ回すのって
一般的にどっちが速いんですか?

922 :デフォルトの名無しさん:03/04/28 03:39
memcpy

923 :デフォルトの名無しさん:03/04/28 03:54
>>922
ありがとうございました。
アセンブラの出力見て多分そうだと思ってましたが、
やっぱりそうですよね。

924 :デフォルトの名無しさん:03/04/28 03:55
俺もmemcpyに一票つーか、何でforループの方が早いかもとか、思うのかが不思議。
同じことをするライブラリ関数に手書きコードが勝てること等ないと思った方がいい。

925 :デフォルトの名無しさん:03/04/28 04:18
スピードなら俺の書いたqsortの方がVC++6.0のqsortより速い。

926 :デフォルトの名無しさん:03/04/28 04:45
>925
で、代表値はどうやって選んでるの?

927 :デフォルトの名無しさん:03/04/28 04:49
代表値ってなんだろ・・・・基準値なら真ん中。
再帰使っているから使い物にならないけどね。

928 :デフォルトの名無しさん:03/04/28 04:53
うーん、間違って覚えてたみたい。
真ん中って、配列上の真ん中に位置する値ってことですか。

qsort の弱点克服の方法はないのかのー。

929 :デフォルトの名無しさん:03/04/28 04:56
コードの冗長性&コストの無駄遣いならライブラリには負けない自信がある。


930 :デフォルトの名無しさん:03/04/28 04:57
>>929
なにー!
それなら漏れも負けんぞぉ!

931 :デフォルトの名無しさん:03/04/28 04:58
読みやすさなら勝てるかもー?

932 :デフォルトの名無しさん:03/04/28 05:01
>>931
逆に最近チマチマしたチューンナップってやっちゃダメだと
分かっちゃいるけど、たまに書いてみたくなるよ。

933 :デフォルトの名無しさん:03/04/28 06:07
Java->C
Python->C

組み込むならどっち?
Pythonで実現可能ならそっち選んだ方がいいかな?

934 :デフォルトの名無しさん:03/04/28 07:00
また意味不明・・。
その矢印が表すものは何だ?

935 :デフォルトの名無しさん:03/04/28 07:50

(*Java).C
(*Python).C

936 :デフォルトの名無しさん:03/04/28 08:25
>>935 Thx! 分かりやすくなったよ

937 :デフォルトの名無しさん:03/04/28 15:34
たとえば
fread(data,2,100,fp);
は,配列data中に,2バイトずつ100個のデータを,fpから読み出す、
という意味になるかと思います。これを100個ではなくてfpの
最初から最後までという指定方法を教えてください。

938 :デフォルトの名無しさん:03/04/28 15:37
>>937
fseek(fp,0,SEEK_END);
size = ftell(fp);
fseek(fp,0,SEEK_SET);
fread(data,size,1,fp);

939 :デフォルトの名無しさん:03/04/28 15:39
(fp の最初ってファイルの最初なのかどうか分からないけど、)
答え出しちゃうと面白くないと思うからヒント
fp の最初にとるべき位置と最後の位置を分からないと配列の長さが確定しない。

ファイル先頭から見て fp の現在位置を知る方法や、最後に移動する方法、
もしくはファイルサイズを得る方法が分かると、自ずからわかるんじゃない?

940 :939:03/04/28 15:41
。゚(゚´Д`゚)゚。デヲクレタ

941 :デフォルトの名無しさん:03/04/28 15:44
>>940
うまい棒でも食べて元気出せ

942 :デフォルトの名無しさん:03/04/28 15:55
a = 30 + (0x15aa >> m & 1);

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

mは適当な整数ということでよろしくおねがいします。

943 :デフォルトの名無しさん:03/04/28 15:58
ぱっと見、月の最後の日付をとりたいのかなぁ、と思った。
2 月が例外になりそうな気もするけど。

944 :942:03/04/28 16:05
>>943
2月は別に作ってあるので大丈夫なんですが、

0x15aa >> m & 1 の意味がわかりません

945 :デフォルトの名無しさん:03/04/28 16:09
うーん。机上でトレースしてわかってくれ。

946 :デフォルトの名無しさん:03/04/28 16:13
0x15aa は二進では 1010110101010だよな。
m = 3だと、0x15aa >> 3 は、1010110101になる。 &1で、1。
m = 4だと、0x15aa >> 4 は、101011010になる。 &1で、0。
m = 5だと、0x15aa >> 5 は、10101101になる。 &1で、1。

947 :945:03/04/28 16:13
>>946
トレースまでしてあげる貴方を優しいとオモタ。

948 :デフォルトの名無しさん:03/04/28 16:15
>>942
mが偶数なら5576をaに入れる。
mが奇数なら2803をaに入れる。

949 :デフォルトの名無しさん:03/04/28 16:17
>>948


950 :948:03/04/28 16:20
おっと、>>の方が&より高いわ。
どうりで変な値になるわけだ。

951 :デフォルトの名無しさん:03/04/28 16:22
どうでもいいけど、素直にテーブル使ったほうが速いよな。

952 :デフォルトの名無しさん:03/04/28 16:24
>951 まぁ、そうなんですが、そのへんはツッコまないのがよろしいかと。

953 :デフォルトの名無しさん:03/04/28 16:27
どうでもいいことだが、 & はむちゃくちゃ優先順位低いよ。
a & 0x01 == 0x01 は
a & ( 0x01 == 0x01 ) と等価。



954 :942:03/04/28 16:35
>>943->>953
(・∀・)サンクス

955 :デフォルトの名無しさん:03/04/28 16:38
>953
それって、確か昔&&を&で代用していたころの名残なんだよね。

956 :デフォルトの名無しさん:03/04/28 16:44
>955 (´・∀・`)ヘー ナルホドウ
>953 さんではないけど、それは知らなかった。

957 :デフォルトの名無しさん:03/04/28 16:46
>>944
> 2月は別に作ってあるので大丈夫なんですが、

28 + (0x3bbeecc >> 2 * m & 3) ってやれば、2月を別扱いしなくて済むぞ。

958 :デフォルトの名無しさん:03/04/28 17:01
年を知らずに2月の日数を得ることは出来ない。

959 :デフォルトの名無しさん:03/04/28 17:04
dayOf2 = 28 + (year % 4 == 0)
ただし、year > 1900 && year < 2100

960 :デフォルトの名無しさん:03/04/28 17:06
>956
ホントはもっと順位を上げるべきだったのだがその時点で既に大量のソースが
あったので今更変更する(ことでどれだけの修正が発生するかと思うと)勇気がなかった。

とかなんとか、そんな理由だったかと。

961 :デフォルトの名無しさん:03/04/28 17:06
>>957 >>959
お前ら2000年問題からなにも学ばなかったのか?

962 :デフォルトの名無しさん:03/04/28 17:07
>>961
2000年問題は、うるう年が問題ではないことも知らないのか?

963 :デフォルトの名無しさん:03/04/28 17:10
>>959
2000で例外が発生しないか?

964 :963:03/04/28 17:11
あほでした。
400で割り切れる年は閏年でした

965 :デフォルトの名無しさん:03/04/28 17:12
いつものパターンですな。>>963 氏が潔いことを除けば。

966 :デフォルトの名無しさん:03/04/28 17:24
>>962
条件つけてまでくだらん式を考えてないで
普通にちゃんとした式を出せばいいだろ。

967 :デフォルトの名無しさん:03/04/28 17:36
どうせ今の西暦(グレゴリオ暦)が採用される前のデータなんか扱うわけないし、
2100年以降のデータも扱わないって言うなら100年400年ルールは考える必要がない。
そのくらいの割りきりも時には必要。

968 :デフォルトの名無しさん:03/04/28 17:43
そう。そうやってどうせ使わないだろうという甘い考えからy2kの悲劇が起こった。
対応するのに膨大な手間がかかるのならまだしも、
すぐ近くにマトモな答えがあるのに、それを使わない理由など無い。

969 :デフォルトの名無しさん:03/04/28 17:44
計算式を逆ポーランド記法に変換するアルゴリズムの方針だけでも教えてよ

1 + 2 * 3 → 1 2 3 * +
stack , pop , tokenとかの関数は作ったからあとは変換するだけなんだけど
よくわからんぽ

970 :デフォルトの名無しさん:03/04/28 17:48
>>969
宿題スレへどうぞ。
http://pc2.2ch.net/test/read.cgi/tech/1045074808/l50

>>968
そろそろスレ違いだけど、
年のフィールドに数字が2桁しか入らないデータ構造って話と
2100年以降のデータは扱えないプログラムって話を
同列に語って意味があるとでも?
そもそも2100年以前に32bit限界(2038年問題)が発生するってば。

971 :デフォルトの名無しさん:03/04/28 17:53
> 年のフィールドに数字が2桁しか入らないデータ構造って話と
> 2100年以降のデータは扱えないプログラムって話を
> 同列に語って意味があるとでも?
意味あるだろ。どちらも甘い考えが引き起こした。
先読みの甘さ。うるう年の計算をまともに実装しない甘さ。

> そもそも2100年以前に32bit限界(2038年問題)が発生するってば。
この場合のyearはint型だろ。話が違う。

972 :デフォルトの名無しさん:03/04/28 18:32
C言語勉強してるんですが、
1Uって書くのと1と書くのではどう違うんですか?

973 :デフォルトの名無しさん:03/04/28 18:34
符号無し。

974 :デフォルトの名無しさん:03/04/28 18:38
まず、1U とか 1 って何型か考えてくれ。

975 :デフォルトの名無しさん:03/04/28 18:41
期待age

976 :972:03/04/28 18:44
>>974
intでよろしいですか

977 :デフォルトの名無しさん:03/04/28 18:45
>>976
1はな

978 :972:03/04/28 18:46
>>977
1Uはunsigned intってことですか?

979 :974:03/04/28 18:47
int:16bit 長のシステムがあったとしよう。

君は long (4バイト長)な変数 l に値 8000h を入れたいと思っている。
さぁ、どう書くの?
その時に気を付けなければならないことは?

980 :デフォルトの名無しさん:03/04/28 18:48
>>979
Lをつけると思うけど!?

981 :974:03/04/28 18:50
ウワーン!
例えば無しを間違えちゃ話になりませんなぁ。ゴメン!



982 :デフォルトの名無しさん:03/04/28 18:53
int main() { return ( -1 < 1 ); }
int main() { return ( -1 < 1U ); }

それぞれどっちが返るか見てみたら?

983 :デフォルトの名無しさん:03/04/28 18:53
>>974
値のコンペアをする場合に問題あるんだろ?

984 :972:03/04/28 18:55
う〜ん、符号ビットの話かな
すみません
ちょっと用事で20分くらい離れます

985 :デフォルトの名無しさん:03/04/28 18:55
1 < 0x80000000 と 1 < 0x80000000U の比較結果

986 :デフォルトの名無しさん:03/04/28 18:56
次スレは…なしで!(w

987 :974:03/04/28 18:57
ヘコんだ。

988 :972:03/04/28 19:20
>>982
上は1,
下は0でした。

>>985
両方1でした。

989 :937:03/04/28 19:27
>>938,939
できました。
ありがとうございますた。

990 :デフォルトの名無しさん:03/04/28 20:19
>>961-968
お前等未だに 2000年問題とか言ってるのか ?
学習効果なさ杉。
これでも読んどけ → http://www8.ocn.ne.jp/~yama-b/rfc2550j.txt

991 :デフォルトの名無しさん:03/04/28 20:39
糞スレ
http://pc2.2ch.net/test/read.cgi/tech/1051528386/

992 :デフォルトの名無しさん:03/04/29 12:31
ume

993 :デフォルトの名無しさん:03/04/29 12:31
tate

994 :デフォルトの名無しさん:03/04/29 12:45
1000を撮ります宣言!

995 :デフォルトの名無しさん:03/04/29 12:53
1000を取りま1000 1000言!


996 :デフォルトの名無しさん:03/04/29 12:53
yoko

997 :デフォルトの名無しさん:03/04/29 12:55
1024?

998 :デフォルトの名無しさん:03/04/29 12:55
65535

999 :デフォルトの名無しさん:03/04/29 12:56
まあ俺が1000なんだけどな。

1000 :デフォルトの名無しさん:03/04/29 12:56
1000撮った

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

206 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)