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

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

C言語なら俺に聞け! Part 〈55〉

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

3 :デフォルトの名無しさん:03/04/28 20:15
return EXIT_SUCCESS;
}

4 :デフォルトの名無しさん:03/04/28 20:35
なお、このスレはぬるぽ進行です。
メール欄に「ぬるぽ」と入れてください。

5 :デフォルトの名無しさん:03/04/28 20:36
【コンパイラ】
gcc
http://gcc.gnu.org/

【Win32用の開発環境のみ。】
gcc-cygwin
http://www.redhat.com/software/tools/cygwin/
gcc-mingw
http://www.mingw.org
Digital Mars C++
http://www.digitalmars.com/
Open Watcom
http://www.openwatcom.com/
Borland C++ Compiler 5.5.1
http://www.borland.co.jp/cppbuilder/freecompiler/

【ライセンスや機能などに問題あり】
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

6 :ぬるぽ:03/04/28 22:11
了解しました。

7 :デフォルトの名無しさん:03/04/28 22:43
【前スレ】
C言語なら俺に聞け! Part 〈55〉
http://pc2.2ch.net/test/read.cgi/tech/1051528386/

【過去ログ】
53 http://pc2.2ch.net/tech/kako/1048/10489/1048995232.html
52 http://pc2.2ch.net/tech/kako/1047/10472/1047275669.html
51 http://pc2.2ch.net/tech/kako/1046/10461/1046104909.html
50 http://pc2.2ch.net/tech/kako/1044/10449/1044938752.html
49 http://pc2.2ch.net/tech/kako/1042/10426/1042646178.html
49 http://pc2.2ch.net/tech/kako/1042/10426/1042640474.html
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


8 :過去ログ続き:03/04/28 22:49
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/1031/10313/1031340950.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
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


9 :デフォルトの名無しさん:03/04/28 22:49
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/1031/10313/1031340950.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
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

10 :過去ログ:03/04/28 22:51
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


11 :デフォルトの名無しさん:03/04/28 22:52
>>1 乙。ちょっとだけ訂正。

>>7
×【前スレ】C言語なら俺に聞け! Part 〈55〉
○【前スレ】C言語なら俺に聞け! Part 〈54〉
http://pc2.2ch.net/test/read.cgi/tech/1049968153/

12 :7 (>>1ではないっす。):03/04/28 23:06
>>11
訂正サンクスです。

このスレのリンク貼ってどうする>>俺
しかも2重カキコになってるし。

すまそ。吊ってきます。>>all


13 :デフォルトの名無しさん:03/04/29 03:39
C のインタープリタってどうですか? Ch ってのが至る所で宣伝してるけど、
これで C の勉強始めて良い物なのか・・・。

Ch -- an enbeddable C/C++ interpreter for script computing
  http://www.softintegration.com/
CINT
  http://root.cern.ch/root/Cint.html
EiC -- The enbeddable/extensible interactive, pointer-safe, bytecode
      C interpreter/compiler
  http://eic.sourceforge.net/
The ups debugger for C, C++ & Fortran ;; C interpreter included.
  http://ups.sourceforge.net/
Al Steven's Quincy C Interpreter
  http://www.ddj.com/ftp/packages/quincy/

14 :デフォルトの名無しさん:03/04/29 04:28
>>13
C のお勉強するなら cygwin インストールして gdb なんかがお手軽だと思うけど。

ステップ実行とかも visual にできるから、試す価値アリだと思うですよ。

15 :デフォルトの名無しさん:03/04/29 17:07
ポインタ変数「p」 に、char型2次元(5*10)の形を定義して、
p に後からアドレスを代入して
p[3][5]=3  という様なアクセスをしたいのですが、
最初のpの定義の仕方がわかりません教えてください。


16 :デフォルトの名無しさん:03/04/29 17:11
char (*p)[10];

17 :デフォルトの名無しさん:03/04/29 17:15
>>16
ありがとうございました


18 :デフォルトの名無しさん:03/04/29 18:42
なんでこのスレッドには2次元配列を動的確保したがる
奴が多いんだろう…。

19 :デフォルトの名無しさん:03/04/29 18:45
そういう課題があちこちで出されたんだろうよ

20 :デフォルトの名無しさん:03/04/29 18:48
ウワァァン
おいらの学校では動的確保すら教えてもらえなかったよぉ。

21 :デフォルトの名無しさん:03/04/29 18:51
ゲームでマップ作れと言われたとか・・・

22 :デフォルトの名無しさん:03/04/29 19:22
    /:::::::::::::::::::::/ \:::::::::::::::::::::::::
   /::::::::::::::::::::/    \:::::::::::::::::::::::
   /:::::::::::::::::::/        \::::::::::::::::::::
  /::::::::::::::::::/    ,,,,-―''`\::::::::::::::::::
  |:::::::::::::::::/,,,,,,  ''    _ ヽ:::::::::::::::::
.  |::::::::::::::::/   ヽ    ∠'-' `   \:::::::::::::
  |:::::::::::::::/ ,-、-、 l   ヽ         |:::::::::::::::
.  |::::::::::::::| `´   |           |::::::::::::::::
  ヽ,-―_|    |  __,- )        |:::::::::::_/
  // ̄ヽ    /⌒ リ    \    |:::::::/ ̄\
 / /:::糸工::\    _ _   )   /::::::/   /
 >'つ:::::::イ::::::::ヽ ヽ/,ー―-ヽ    /::::/ /
( < \:::モ::/~~\(::::::::::_/  / ̄ /
 ) ̄ ̄ヽ:::/:::::::::::::::\⌒    /   /
 \ ̄ ̄\  ググラないとしちゃうぞ♥

23 :デフォルトの名無しさん:03/04/29 22:18
スカラー波が

24 :デフォルトの名無しさん:03/04/29 22:46
>14
ども。どうせたいしたコードは書けないので、gcc で頑張ってみます。
gdb も勉強します(使ってみたけどよく分からんかったです・・・)。

25 :デフォルトの名無しさん:03/04/30 02:23
const定数が配列の要素数指定に使えないのは、const定数は外部参照でき、コンパイル時には値が分からないことがあるからですか?


26 :デフォルトの名無しさん:03/04/30 02:31
>>25
配列の要素は、定数じゃないと駄目。
constは読み出し専用って修飾子だから定数では無い。

27 :デフォルトの名無しさん:03/04/30 02:36
>>26
constつけても変数は変数という理解でいいですか?

28 :デフォルトの名無しさん:03/04/30 02:42
二次元配列の動的確保。
二次元配列のメモリの並びはリニアになってる。
つまり、arg[3][5];なんて
arg[15];と同じ。
具体的には
arg[0][0]→arg[0][4]→arg[1][0]→arg[1][4]→arg[2][0]→arg[2][4]
と並んでいる。

二次元配列の動的確保なんて馬鹿な事言ってるなよ。
因みに、ポインタの配列で、そのポインタでまた動的確保だと二次元配列とは全く別物。
メモリがリニアに並んで確保されないから。

29 :デフォルトの名無しさん:03/04/30 02:48
>>27
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/
スレ立てた時に言われてますよ〜
多分、読めって事ですよ〜

30 :デフォルトの名無しさん:03/04/30 02:53
>>27
読み出し専用だけどね。

31 :デフォルトの名無しさん:03/04/30 02:56
>>29
どちらも読みましたけど・・・
C99は別として、配列の要素数指定は定数式でなければならないのは知っています。

ただ、constつけたものを定数として扱えるかどうかということです。
定数と呼ぶことはできても、扱うことはできないんですね。


32 :デフォルトの名無しさん:03/04/30 03:01
constつけたものを変数と呼んだら叩かれたけど。

33 :デフォルトの名無しさん:03/04/30 03:03
>>31
規格の問題。
定数なら、配列の添え字に出切るよ。
しかし、const付けたって定数とは限らない。
だからconstつけたら配列の添え字にする事が許されないだけ。
いちいちコンパイラが判別してくれる分けがない。
100%定数とは為らないなら、許さないって事だ。

34 :デフォルトの名無しさん:03/04/30 03:06
>>33
> 100%定数とは為らないなら、許さないって事だ。

やっぱりそうなんですね。
その例として>>25を出したんですけど、もっと一般的な例がありますね。
constつけた引数が・・・

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


35 :34:03/04/30 03:12
>>25は値が分からないだけで定まっていないわけじゃないか・・・

36 :デフォルトの名無しさん:03/04/30 04:11
>>35
全然分ってなさげ。
値が分っていて、定まっていても出来ないの。
const int num = 10;
int arg[num];
これは不可。
つまり、値が分っていてもconst付けたら配列の添え字にはならないの。
規格の問題って書いてあるだろ。

37 :デフォルトの名無しさん:03/04/30 04:33
>>36
定まっているとは限らないから規格でNGにしたんでしょ?

定まっているとは限らない = 定まっていることもある じゃないの?

38 :デフォルトの名無しさん:03/04/30 04:41
>>37
> 定まっているとは限らない = 定まっていることもある じゃないの?
そうだが、だからどうした?

39 :デフォルトの名無しさん:03/04/30 04:44
規格でNGにするにはそれなりの理由があるはずで、それが「定まっているとは限らない」ってことでしょ?
なんで「定まっていても・・・」なんて話をするわけ?

40 :39:03/04/30 04:48
言いたいことが伝わっていなかったのかも・・・まあいいか。

41 :デフォルトの名無しさん:03/04/30 08:02
const は定数というよりリードオンリーの意味
たとえばプログラム実行時にその変数は
ROM 上にマップされてるとか

42 :デフォルトの名無しさん:03/04/30 08:13
C++なら定数として添え字に使えるけどね

43 :デフォルトの名無しさん:03/04/30 08:51
>>42
どうして他の言語の話が出るんだ

44 :デフォルトの名無しさん:03/04/30 13:13
int const volatile port;

45 :デフォルトの名無しさん:03/04/30 13:14
>>44
最適化禁止・・・組み込み系でつか?

46 :デフォルトの名無しさん:03/04/30 13:20
定数じゃないconstの例かな。
実際に使うときはアドレス指定しなきゃいけないからポインタ変数になるだろうけど。

47 :デフォルトの名無しさん:03/04/30 13:58
>>45
memory mapped I/Oの例だろうな。

>>46
リンカが解決するという方法もある。

48 :デフォルトの名無しさん:03/04/30 14:36
>36
あれ?C99では、できるんでないの?

49 :デフォルトの名無しさん:03/04/30 14:40
配列サイズとかcaseラベルは迷わずenumにするけどな

50 :デフォルトの名無しさん:03/04/30 14:43
この間、書店でCでPCI32bitをなんかするみたいなものありましたが、
RC232cの標準出力をCで作るとか一番最初のページで挫折しました。
見たこともないプリプロセッサや回路図を作ってそれに合わせて
出力する等々みたいなことなんですがわかりますか?

51 :デフォルトの名無しさん:03/04/30 15:07
>>50
わかりません。(涙
ただ、UNIXのほとんどはCで書かれているらしい。
だから、それくらいの許容量は持ち合わせているっぽい。

52 :デフォルトの名無しさん:03/04/30 15:12
>>50
ワケの分かってない奴の説明で何か分かる奴は非常に珍しい。

53 :デフォルトの名無しさん:03/04/30 15:21
>>50
標準Cの話題ではないからな。
制御系のスレかで聞いたほうがスレ違いにはならないかと。
(PCIのスレあったっけ?)

54 :デフォルトの名無しさん:03/04/30 15:35
確かに何を言いたいのかわからん
System-C とかのことなら多分スレ違い

55 :デフォルトの名無しさん:03/04/30 15:56
long型の変数xに
x=1<<31 とすると、xに0x80000000
が入るのですが、
x=~(1<<31)とすると、 0xffffffff
が入ってしまいます。
本当だったら0x7fffffff が入ると思うのですが、理由が解りません。
コンパイラ固有の問題なのでしょうか?
よろしくお願いします。

56 :デフォルトの名無しさん:03/04/30 16:03
>>55
1を1ULにしてみぃ。

57 :デフォルトの名無しさん:03/04/30 16:07
>>56
ありがとうございます

58 :56:03/04/30 16:07
いやなんでもない。

59 :デフォルトの名無しさん:03/04/30 16:11
>>55
そのまま試してみたらそうはならなかった
他に間違いがあるのでは?

60 :デフォルトの名無しさん:03/04/30 16:39
結局>>56の方法で解決したの?

61 :デフォルトの名無しさん:03/04/30 16:41
>>59
55はintが16ビットの環境じゃないの?

62 :デフォルトの名無しさん:03/04/30 16:49
CでのAPIの使用ってどうやんの?

63 :デフォルトの名無しさん:03/04/30 16:51
use_api( API_NAME );

64 :デフォルトの名無しさん:03/04/30 16:51
>>62
関数名に()をつける。

65 :デフォルトの名無しさん:03/04/30 17:04
>>62
WinのAPIならこうだ。

#include <windows.h>
int main() { MessageBox(NULL, "へろー。", "へろー。", MB_OK); }


66 :デフォルトの名無しさん:03/04/30 17:11
#include <windows.h>
int main() { MessageBox("全てのファイルを削除していいですか?","確認",MB_OK); }

67 :デフォルトの名無しさん:03/04/30 17:16
面白いッスね

68 :デフォルトの名無しさん:03/04/30 17:19
>>66
(・∀・)エキサイティング!

69 :デフォルトの名無しさん:03/04/30 17:26
どこがだよ・・・しょうもない

70 :デフォルトの名無しさん:03/04/30 18:16
空ループは最適化によって削除されるべきですよね?
たとえそれが初心者の使うウェイトだとしても。


71 :デフォルトの名無しさん:03/04/30 18:19
do{}while(0);
これならな

72 :デフォルトの名無しさん:03/04/30 18:21
しなくていいと思うけど

73 :デフォルトの名無しさん:03/04/30 18:23
削除されるべきは一度も実行されないループ

74 :デフォルトの名無しさん:03/04/30 18:26
コンパイラに初心者かどうかは判断できないしねぇ。

75 :デフォルトの名無しさん:03/04/30 18:38
Linuxではスライスの事をパーティションというのですか?

76 :デフォルトの名無しさん:03/04/30 18:39
Linuxではスライスの事をパーティションというのですか?
だったら、パーティションの事はなんといったらいいのですか?


77 :デフォルトの名無しさん:03/04/30 19:03
#include <windows.h>このヘッダーファイルはVC++についてるの?

78 :デフォルトの名無しさん:03/04/30 19:23
>>77
ついてるよ。

79 :デフォルトの名無しさん:03/04/30 20:09
>>78
なんかエロいな

80 :デフォルトの名無しさん:03/04/30 22:24
>>79
やっぱそう思う?エロいよな

81 :デフォルトの名無しさん:03/04/30 22:30
>>75
BSDではパーティションのことをスライスといいます。

82 :デフォルトの名無しさん:03/04/30 22:51
>>66
OK ボタンだけかよ !!

83 :デフォルトの名無しさん:03/04/30 23:22
rand()%10ってやったら0から10の乱数がでるけど
10から20とかの乱数ってどうやって書いたらよいですか?

84 :デフォルトの名無しさん:03/04/30 23:30
>>83
まず、自分が何を書いたのか見直せ。
話はそれからだ。

85 :デフォルトの名無しさん:03/04/30 23:31
なんでウィンドウ出すだけであんなに書かないといけないんだ!
window()こんなんでウィンドウ出すような関数ないんか!

86 :デフォルトの名無しさん:03/04/30 23:32
rand()%11 で得られた結果に10を加える

87 :デフォルトの名無しさん:03/04/30 23:35
>>85
今時そんなの書いてる奴いないって。

88 :デフォルトの名無しさん:03/04/30 23:35
>>85
他の言語をお勧めします。

89 :デフォルトの名無しさん:03/04/30 23:40
>>85
雛形作っとけ。

90 :デフォルトの名無しさん:03/05/01 00:45
この前VC使ってプログラム書いたけど、ウインドウを出すための処理なんて書いた覚えないなぁ。
文句を言いたくなるほど書けるんだ?

91 :デフォルトの名無しさん:03/05/01 00:56
>>90
そのプログラムは、このスレに従って「C言語」で書きましたか?

92 :デフォルトの名無しさん:03/05/01 00:57
しらね、少なくとも私が書いたのはCのコードだけだから。

93 :デフォルトの名無しさん:03/05/01 01:23
>>90

MFCでも使ったんちゃう?
SDKベースで作るとガリガリ書く必要あるけど

94 :デフォルトの名無しさん:03/05/01 03:49
RegisterClassがうざったいよね。
その後もCreateWindow、WM_CREATE
3段も初期化が必要。

95 :デフォルトの名無しさん:03/05/01 05:15
qsort(string_array,10,50,strcmp);
をgccでコンパイルすると次のエラーが出るんだけどなんで?
ex.c:18: warning: passing arg 4 of `qsort' from incompatible pointer type

96 :デフォルトの名無しさん:03/05/01 05:26
エラーと違うじゃん

97 :デフォルトの名無しさん:03/05/01 05:30
あーごめん警告ね
で、なんで?


98 :C初心者:03/05/01 06:36
連休2日目からC言語独習始めた・・・
参考書の1/4も進んでない・・
とりあえず無償コンパイラの使い方だけで時間を
使い果たし・・配列をシコシコ書いてます。。
もうダメポ・・・・ 
こんなもんでつか??

99 :デフォルトの名無しさん:03/05/01 07:46
>>97
void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *));

qsortに渡す関数(のポインタ)は引数の型が二つともconst void *だから。
int compare(int *v1,int *v2){...}などという形だと警告が出る。
int compare(const void *v1,const void *v2){...}という感じで作ればその警告は出ない。
ただし、void *だとそのままでは参照できないので、比較する際には適切な型へのポインタにキャストするなどして参照できるようにする。


100 :デフォルトの名無しさん:03/05/01 07:47
>>98 >無償のコンパイラの使い方だけで時間を・・・
僕もプログラムの勉強<プログラムまでの勉強でした。パソコン購入==プログラムの
勉強だったので、ファイル、フォルダもわからず。そこまでではないと思いますが。
がんばってください。

101 :99:03/05/01 07:47
・・・と知ったかぶって見たけど、間違っているかも。

102 :デフォルトの名無しさん:03/05/01 08:11
>>101
正しい

103 :デフォルトの名無しさん:03/05/01 08:14
>>98
それでいいよ。


104 :97:03/05/01 08:18
>>99
わかったような気がする。C Reference見ながら例題を試しにコンパイルしてみたら
警告がでたからなんでだろと思ってたけど、例題が間違ってたってことね。
http://www.acm.uiuc.edu/webmonkeys/book/c_guide/2.13.html#qsort

105 :デフォルトの名無しさん:03/05/01 08:24
警告を無視するのは確かにお勧めできないが、「間違ってた」とは言い切れない。

106 :デフォルトの名無しさん:03/05/01 08:34
castすりゃいいじゃん

107 :デフォルトの名無しさん:03/05/01 08:36
見苦しい

108 :デフォルトの名無しさん:03/05/01 08:54
警告残す方が見苦しい・・

109 :デフォルトの名無しさん:03/05/01 17:43
おい。お前等。

Hello World表示させてるくらいでプログラミングは面白くてしかたなかった?
ここで面白さを感じられないやつは素質無し?

それともある程度山を越えてから病み付きになった?

教えてくれないの豚。

110 :デフォルトの名無しさん:03/05/01 17:47
>>109
画面に文字表示させたところで一体何がおもしろいんだと。
・・・あ、楽しかったかも。

まぁ、ここはぐっと我慢してifとかwhileとかまで進んでみ?


111 :109:03/05/01 17:51
>110
いやさ。Hello Worldレベルは比喩なわけで。
一応入門書で関数のところまでいったんだけどおもしろみを感じない。
映画みたりネトゲしたほうがおもしろいとおもってさ・・・

112 :デフォルトの名無しさん:03/05/01 17:53
>>111
ならやめればいいじゃないか

113 :デフォルトの名無しさん:03/05/01 17:53
>>111
そりゃダメだわ。

114 :デフォルトの名無しさん:03/05/01 18:05
>>111
Delphiならおもしろいよ。


115 :デフォルトの名無しさん:03/05/01 18:05
>>109
エクセルのマクロでもエディタのマクロでも、
繰り返しや条件分岐を書き始めるとそこはもう、
プログラミングの世界だよ。
何もHelloWorldだけが入り口じゃない。

だから、スレ違いだしとっとと帰れ。

116 :デフォルトの名無しさん:03/05/01 18:08
#error Hello world


117 :109:03/05/01 18:10
そういえば、経験上すげー楽しいことってある程度
山を越えてから楽しくなるや。俺の場合。がんばって続けてみまるくす。

118 :デフォルトの名無しさん:03/05/01 18:11
>>117
Delphiならすぐに楽しくなるよ。
VBでもいいけど

119 :デフォルトの名無しさん:03/05/01 18:14
VBでもいいならExcelVBAで充分じゃん。

120 :デフォルトの名無しさん:03/05/01 18:19
俺は関数の再帰とリスト構造を知るまでは楽しくなかったな。

121 :デフォルトの名無しさん:03/05/01 18:22
俺、INT86()でDOSのAPI叩いてたときが一番楽しかったなぁ・・・。


122 :デフォルトの名無しさん:03/05/01 18:23
int func(int a[3]){
int i,j=0;
for(i=0;i<=2;i++)j=j+a[i];
return j;}

void main(){
int t[3]={1,2,3};
int q;
q=func(t[3]);
printf("%d",q);}

これをコンパイルしたら下のようなエラーが出てきました
配列を関数に渡すにはどうすればいいのでしょうか?

パラメータ 'a' は int ( *)[3] 型として定義されているので int は渡せない(関数 main )

123 :デフォルトの名無しさん:03/05/01 18:26
q=func(t);

124 :デフォルトの名無しさん:03/05/01 18:26
オレは紙テープに穴を空けてた頃が・・・
・・・・Fortranスレじゃないのか

125 :デフォルトの名無しさん:03/05/01 18:28
>123
上手くいきました、有難うございます!

126 :デフォルトの名無しさん:03/05/01 19:06
漏れはキーボードで文字を打ってるのが既に楽しいよ

127 :デフォルトの名無しさん:03/05/01 21:52
>>122
多分123の意味分ってないんだろうな。
配列は式の中ではポインタに置き換わる。
int func(int a[3])なんて普通はやらない
int func(int *a)とやる。
それと、プログラマのコード以外でコンパイラは配列長なんて分らない物だから
(つまり、int func(int a[3])の3は意味をなさない、int a[]でもint *aでも同じ)
int func(int *a, int a_num)と先頭のポインタ(配列の先頭)と配列の要素数を渡す。
固定の配列長やループなんて危険すぎる。効率悪い。
将来、配列の長さを変えた時に関数の中も書き換えなきゃいけないだろ。

因みにq = func(t)はtを配列に宣言してるので配列の先頭ポインタを渡している事になる。

128 :C初心者:03/05/01 21:55
まだコンソールプログラムしか作ってないけど楽しい。
参考本の1/3程度進んだとこで復習してみると
そのとおり書きたくない。これでいいじゃんって。
少しでも進歩したな・・と思うと楽しい。

129 :デフォルトの名無しさん:03/05/01 22:03
やっぱデバッグだな。

130 : :03/05/01 22:05
いちばん嫌な時だ

131 :デフォルトの名無しさん:03/05/01 22:05
reset all

132 :デフォルトの名無しさん:03/05/01 22:06
ここらでひとつ、プログラム(&デバッグ)ネタでHellsingコピペきぼん。

133 :デフォルトの名無しさん:03/05/01 22:08
プログラム関数にデバッグのアドレスを・・・

134 :122:03/05/01 22:26
>127
詳しい解説有難うございます

int func(int *a,int a_num){
int i,j=0;
for(i=0;i<=a_num-1;i++)j=j+a[i];
return j;}

とすればいいという事ですね

135 :デフォルトの名無しさん:03/05/01 22:27
cでwindowsアプリ作ろうと思うのですけど、VC使って簡単にウインドウ作っちゃっても
いいのかな?それとも全部コード覚えたほうがいいのかな?
VCで作ってもwindowsアプリ作れるっていっても平気ですか?

136 :デフォルトの名無しさん:03/05/01 22:28
>>134
i<=a_num-1

これ、変だとおもわんか?i<a_numでいいだろ。

137 :デフォルトの名無しさん:03/05/01 22:28
ほとんどのWindowsアプリはVC製だろう。

138 :デフォルトの名無しさん:03/05/01 22:28
>>135
平気

139 :デフォルトの名無しさん:03/05/01 22:31
>>135
> VC使って簡単にウインドウ作っちゃってもいいのかな?

 → YES.

> それとも全部コード覚えたほうがいいのかな?

 → 意味不明。何のコードだ ?

> VCで作ってもwindowsアプリ作れるっていっても平気ですか?

 → 一般的には YES。
   暗黙に「私が」と言うのであれば、自分の腕と相談しろ。

140 :122:03/05/01 22:33
>136
そ、そうですね

141 :デフォルトの名無しさん:03/05/01 22:34
>>136
別に変じゃないだろ。
なんか間違ってるか ?

142 :デフォルトの名無しさん:03/05/01 22:36
間違っていなくても変なものは変。
char str[]={'a','b','c','\0'}と書いても間違いではないが、変だ。

143 :デフォルトの名無しさん:03/05/01 22:43
> → 意味不明。何のコードだ ?

ってことは、WindowsSDKは全く知らんってことか?

144 :デフォルトの名無しさん:03/05/01 23:16
>>143
ハァ ?

145 :デフォルトの名無しさん:03/05/01 23:25
>>144
悪い。スレ違いだったな。

146 :デフォルトの名無しさん:03/05/01 23:54
>>145
そういう問題ですらない。>>143が日本語が不自由なんじゃないかということだ。

147 :デフォルトの名無しさん:03/05/02 00:24
>>146
143=145=俺だけど。

「それとも全部コード覚えたほうが」 の全部のコードってのは、
あの長ったらしい印象のあるソース(コード)のことだと思ってたんだが。

148 :デフォルトの名無しさん:03/05/02 01:30
>>147
「あの長ったらしい印象のあるソース(コード)」ってのが何をさしてるのか、が不明なんだが。

149 :デフォルトの名無しさん:03/05/02 01:31
>>147
空域読めてるか?

ちなみに俺は読めてないからな

150 :デフォルトの名無しさん:03/05/02 01:36
>>135 のいっていることはよく分からんのだが。
多分、MFCアップウィザードで
スケルトン作っちゃってもいいのかな?ってことでしょ?
そしたらCの範疇からはずれるよね。
それともSDKで雛型コピペしてもいいか?って事をいってんのか?
どちらにしても135の日本語なんか変。

151 :デフォルトの名無しさん:03/05/02 06:34
可変個の引数を取る関数では、サイズがint以下の整数引数はintに格上げされ、
サイズがdouble以下の浮動小数点数引数はdoubleに格上げされるんですよね?
ということは、va_argの第二引数にはcharやshort、それにfloatを与えることはないということでOKですか?

152 :デフォルトの名無しさん:03/05/02 07:35
読んでないけどOKにしとく。

153 :デフォルトの名無しさん:03/05/02 10:13
わかった、QuickWin のことか!!


154 :デフォルトの名無しさん:03/05/02 12:18
ok

155 :デフォルトの名無しさん:03/05/02 12:26
>>148
WindowsSDKって言った時点で気づけよ。

156 :デフォルトの名無しさん:03/05/02 15:51
だれかC言語の逆コンパイラ知りませんか?知ってたら教えてください。

157 :デフォルトの名無しさん:03/05/02 16:19
逆アセンブラ使え。

158 :デフォルトの名無しさん:03/05/02 16:27
>>156
実行形式をC言語に直すってこと?
だとしたらアナトマイザーとか?
でもぶっちゃけそんなの使うより逆アセンブラで見た方が楽

159 :デフォルトの名無しさん:03/05/02 16:48
すみません。初心者なんですが、PGになろうと思ったらコード
丸暗記してなければいけないのでしょうか?例:現在の時間を得るソースとか

160 :デフォルトの名無しさん:03/05/02 16:51
>>159
どっちかというと瞬時に閃く感じ。

結局、日本語で文章を書くのと要領は同じ。

161 :デフォルトの名無しさん:03/05/02 16:54
>>160
ということは、ソースを完全に理解してないとダメだということですね?

162 :デフォルトの名無しさん:03/05/02 16:57
>>161
当たり前ですな。

163 :デフォルトの名無しさん:03/05/02 16:58
>>161
当然、APIとかの知識は必要だけど、その辺はやってりゃ自然と覚えるし
色々作ってれば、>>160が言うように感覚的にこんな感じかな〜っていうのが思い浮かぶようになる

164 :デフォルトの名無しさん:03/05/02 17:01
ありがとです。

165 :デフォルトの名無しさん:03/05/02 17:02
>>164
興味持って書き込んでいけば自然とできるようになる。がんばれ。

166 :デフォルトの名無しさん:03/05/02 17:44
日常でコードを話すようにしていれば、自然とできるようになる。
英語と同じだな。がんばれ。

167 :デフォルトの名無しさん:03/05/02 17:59
練習で以下のような関数を作ってみますた。
ファイルをコピーする関数です。

int filecopy(const char * strfile, const char * dstfile){
FILE *strfp, *dstfp;
if(NULL == (strfp = fopen(strfile, "r"))){
return -1;
}
if(NULL == (dstfp = fopen(dstfile, "w+"))){
return -1;
}
char c;
while(!feof(strfp)){
c = fgetc(strfp);
fputc(c, dstfp);
}
fclose(strfp);
fclose(dstfp);
return 0;
}

これでテキストファイルをコピーした際に、最後の行に化けたような文字が入ってしまいます
何が問題でしょうか?

168 :デフォルトの名無しさん:03/05/02 18:21
>>167
while(!feof(strfp)){
c = fgetc(strfp);
fputc(c, dstfp);
}
一度だけcにEOFが入ってしまうから。
while((c=fgetc(strfp))!=EOF)
fputc(c,dstfp);
と書こう。


dstfileのみオープンに失敗した場合はstrfileがプログラム終了まで開かれたままになっちゃうよ。

169 :デフォルトの名無しさん:03/05/02 18:25
feofは普通使わない。


170 :168:03/05/02 18:27
あとねぇ、cはchar型じゃなくてint型にして。

171 :デフォルトの名無しさん:03/05/02 18:27
K&R読めよってかんじだが

int c; /* 普通はintで受け取る。EOFもらうためね */
while((c = fgetc(strfp)) != EOF){ /* Cの定石だから覚えとけ */
fputc(c, dstfp);
}


172 :デフォルトの名無しさん:03/05/02 18:35
free(NULL);は問題ないそうですが、
fclose(NULL);も問題ないのですか?


173 :デフォルトの名無しさん:03/05/02 18:38
>>172
大丈夫とはどこにも書いていないし、俺の環境だとセグメンテーション違反が起きた。
だからきちんとチェックした方がいいよ。いや、すべき。

174 :デフォルトの名無しさん:03/05/02 18:43
#define Fclose(fp) ((fp)?fclose(fp):0)

引数を二回評価するけど、まあいいでしょ。

175 :デフォルトの名無しさん:03/05/02 21:59
#include <stdio.h>

void co(int *a,int n,int i,int j,int *b){
int k,l;
for(k=0;k<=n-1;k++){
for(l=0;l<=n-1;l++){
if(k<i&&l<j){b[k*(n-1)+l]=a[k*n+l];}
else if(k<i&&l>=j){b[k*(n-1)+l]=a[k*n+l+1];}
else if(k>=i&&l<j){b[k*(n-1)+l]=a[(k+1)*n+l];}
else {b[k*(n-1)+l]=a[(k+1)*n+l+1];}}}}

int det(int *a,int n){
int d=0;int b;int i;int m;
printf("14 ");printf("n=%d ",n);
if(n==1){d=a[0];printf("15 ");}
else {for(i=0;i<=n-1;i++){
printf("i=%d ",i);
co(a,n,1,i,&b);
m=det(&b,n-1);
d=d+((i%2)*(-2)+1)*m;}}
printf("21 ");
return d;}

int main(){
int a[9]={1,0,0,0,2,0,0,0,3};int n=3;int d;

printf("27 ");
d=det(a,n);printf("28 ");
printf("deta=%d",d);
return 0;}

176 :デフォルトの名無しさん:03/05/02 22:00
ageろよ

177 :175:03/05/02 22:03
このプログラムが上手く動きません
何故動かないかも分かりません
どこに問題があるのか教えて下さい

表示結果はこうなりました
27 14 n=3 i=0 14 n=2 i=0 14 n=1 15 21 i=1 14 n=1 15 21 21 

178 :175:03/05/02 22:03
age

179 :デフォルトの名無しさん:03/05/02 22:05
>>177
まてぃ!
どう動いてほしいのかも書かないでそれはないでしょ。

180 :175:03/05/02 22:09
>179
行列aの行列式を求めたいのです
3*3行列aを
a[9]={1,0,0,0,2,0,0,0,3};
と定義しました

181 :デフォルトの名無しさん:03/05/02 22:12
行列かぁ。
高校三年の時は数学を取らなかったから全然わからん。

182 :175:03/05/02 22:17
det(int *a,int n)関数はn*n行列aの行列式を求める関数で
void co(int *a,int n,int i,int j,int *b)関数は
n*n行列aから,ij成分を覗いた(n-1)*(n-1)行列bを作る関数です

183 :デフォルトの名無しさん:03/05/02 22:30
>>175
自分で書いたソースがあるならうぷキボンヌ

184 :175:03/05/02 22:40
>183
「自分で書いたソース」の意味が分かりません・・・
>>175の事ではないのですか?

185 :デフォルトの名無しさん:03/05/02 22:55
まずdetのint bはおかしいだろ。


186 :デフォルトの名無しさん:03/05/02 23:04


int c;

printf("[ ]に調べたい文字を入力してください [ ");
c=getchar();
printf(" ]");


てな感じでつくって

[ ]に調べたい文字を入力してください [ ]

みたいな感じで[]のなかに1文字だけ入力できるようにしたいのですが、

最後の[ ]だけうまく表示できません。『]』 が改行されてしまいます。
どうにかうまくできる方法はありませんでしょうか?

187 :デフォルトの名無しさん:03/05/02 23:12
>>186
標準 C の範疇では無理 (≡ 実行環境を書け)

188 :デフォルトの名無しさん:03/05/02 23:14
OSは MAC OS ] です

189 :デフォルトの名無しさん:03/05/02 23:18
>>175
detを
int b; -> int b[1000];
co(a,n,1,i,&b); -> co(a,n,1,i,b);
m=det(&b,n-1); -> m=det(&b,n-1);
にして幸せになろう。

27 14 n=3 i=0 14 n=2 i=0 14 n=1 15 21 
i=1 14 n=1 15 21 21 i=1 14 n=2 i=0 14 
n=1 15 21 i=1 14 n=1 15 21 21 i=2 14 
n=2 i=0 14 n=1 15 21 i=1 14 n=1 15 21 
21 21 28 deta=0

190 :284:03/05/02 23:18
>>175
それから co 内のループだが、
a には 0 から n-1 までの二次元配列の中に値が入っていたわけだから、
b には 0 から n-2 までの中に代入しなければならないはずだよな。

191 :190:03/05/02 23:21
>284って誰だよ?? スマソ。
あと、ちょっと日本語が変だよなぁ俺……

192 :デフォルトの名無しさん:03/05/02 23:28
>>189
m=det(&b,n-1); -> m=det(&b,n-1);
じゃなくて
m=det(&b,n-1); -> m=det(b,n-1);

>>190
coまでは見てないが何か勘違いしてない?

193 :175:03/05/02 23:36
>190
レス有難うございます

co(a,n,1,i,&b);
の部分はn*n行列aに対して(n-1)*(n-1)行列bを返すようにしているのですが
ここで
co(a,n,1,i,b);
としてしまうと、bの値が変化しないので、
上手くいかないような気がします

最終的に
deta=6
になって欲しいのですが・・・

194 :デフォルトの名無しさん:03/05/02 23:49
>>186
確かに187が言うように実行環境依存になるかもしれんが、一応VCを使ってANSIC準拠で作るとするなら
printf("文字を入力:[ ]");
printf("\b\b");
c = getchar();
だな。
環境によっては\bで文字が消えるかもしれん、、
VCなら消えなかったが。

195 :186:03/05/03 00:02
>194
できました!。ありがとうございました。

196 :にゃんkp:03/05/03 00:54
そろそろマクロ関係の勉強もしようと思ってるんですけど
どこ通いサイトなんか無いでしょうか?

197 :デフォルトの名無しさん:03/05/03 01:24
>>196
基本的な使い方判ってるなら、C-FAQのプリプロセッサの項読めば十分。
マクロで覚えるべき事なんて多くないから。

198 :デフォルトの名無しさん:03/05/03 01:39
>>190
n-2までにしなきゃいけないね。
void co(int *a,int n,int i,int j,int *b) {
int k,l;
for(k=0;k<=n-2;k++)
for(l=0;l<=n-2;l++)
b[k*(n-1)+l] = a[(k<i?k:k+1)*n+(l<j?l:l+1)];
}

>>193
bを配列にしたので問題無い。アドレスが渡されるから。
co(a,n,1,i,b);だと
行列の一番上のところの数字だけで行列式が決まってしまうんだが・・・。

199 :デフォルトの名無しさん:03/05/03 01:53
>>193
3次の行列式を調べるとこうだと思う。
co(a,n,0,i,b);
m=det(b,n-1);
d=d+a[i]*((i%2)*(-2)+1)*m;}}

200 :190:03/05/03 02:21
>>199
正解。すげぇ。
行列ひさびさに見た。線形代の教科書見てみたんだが、サパーリ (/・ω・;)
余因子展開ですか。。へぇ〜。。

201 :デフォルトの名無しさん:03/05/03 03:52
行列か…
わざわざ配列にしてループ回してる意味が分らん。
構造体にすれば直感的なループで済むのに?
struct MATRIX
{
float A11, A12, A13, A14;
float A21, A22, A23, A24;
float A32, A32, A33, A34;
float A41, A42, A43, A44;
};
まあ、mallocかけて可変長の正方n次行列にしたいのか?
どの道、ij成分の入力があるんだから構造体で扱いやすくした方が良いと思うが…
…行列式なんて逆行列を求める時程度しか使ってないな…

3DPG野郎ですた。

202 :デフォルトの名無しさん:03/05/03 04:33
FILE*の入出力系関数に、文字列ストリームを関連付ける方法ってないですか?
ファイルに書き出す必要はなくて、
fgetcとかfprintfをバッファに対して使いたいんですが。
sscanfやsprintf使えという回答は不要です。

203 :デフォルトの名無しさん:03/05/03 04:33
age

204 :デフォルトの名無しさん:03/05/03 04:39
>>202
なんでsprintfとかじゃだめなの?


205 :デフォルトの名無しさん:03/05/03 04:46
>>204
既存のファイルへの入出力をバッファへも行う必要が出てきたので。
一旦完成してるソースなので、あんまり変更したくないんです。
関連付け不能ならsprintfに切り替えるつもりですが。

206 :デフォルトの名無しさん:03/05/03 04:54
>>202
無いと思う。 OSによっては有るかもしれないけど・・・
文字列がfopenで開けなければアウト。
つまりデバイスとして用意されている必要が有るかと。

逆に、テンポラリファイル作って、そこに文字列当てはめるのは
mmapで出来るだろうけど。
RAMディスクとか使えそうな環境なら、これに割り当てるって手段は?

207 :デフォルトの名無しさん:03/05/03 04:58
>>202
イレギュラーな方法になるけど、
fprintfを無理矢理再宣言してオーバーライドしちゃうって手もあるけど
そこまでするならsprintf使った方がいいだろうね

208 :デフォルトの名無しさん:03/05/03 05:00
>>206
ずっとMSDN眺めてましたが、該当する機能は無さそうですね。
setvbufはそういう用途と違うみたいですし。
FILEとバッファをラップするインタフェース作ってお茶濁すことにします。
ありがとうございました。

209 :206:03/05/03 05:06
最終手段として、文字列を実体とするデバイスドライバを書くって
方法も有るんだけどね。

そこまですんなら、sprintf使った方が激しく早いが。

210 :デフォルトの名無しさん:03/05/03 08:00
バッファに対しての出力を求めているコンテキストでは、
書き込むファイルをtmpfileでつくったものとする。
そこに通常と同じように書き込み、rewindしてからバッファにfreadしfclose。
ファイルへの出力の時はrewindの前にリターン。

211 :デフォルトの名無しさん:03/05/03 08:53
>rewindの前にリターン

ってなんだ?

212 :デフォルトの名無しさん:03/05/03 08:58
>>210
rewindしてからバッファにfreadしfclose。の前に関数を抜けると。

void func(const char *s,FILE *fp,char *buf,size_t size)
こんな関数じゃないの?fpがNULLならばbufにsizeバイト書き込むとか。

213 :212:03/05/03 09:01
リターンしちゃまずいのなら、「rewindしてからバッファにfreadしfclose。」の部分をバッファに書き込む時だけ行うようにする。return以外の方法でね。

214 :デフォルトの名無しさん:03/05/03 10:16
>>202

FUNOPEN(3)

BUGS
The funopen() function may not be portable to systems other than BSD.

215 :デフォルトの名無しさん:03/05/03 13:33
C言語で正規表現を使うにはどうすればいいんでしょうか

216 :デフォルトの名無しさん:03/05/03 13:42
・ライブラリを使う。
・(検索なら)grep、(置換なら)awkなどを呼んでしまう。
・諦める。

217 :デフォルトの名無しさん:03/05/03 13:58
>>215
Windowsなら秀丸エディタのパッケージなどに含まれるJRE32.DLLがそれにあたるかな。
http://www.yamada-labs.com/software/spec/jre/

218 :デフォルトの名無しさん:03/05/03 14:06
>>216-217
なるほど。ソースつきのライブラリを探して
改造しようと思います。ありがとうございました。

219 :デフォルトの名無しさん:03/05/03 14:26
while(1)
{
scanf("%d",&a);
if(a==0){
break;
}
else{
printf("1を入力してください\n");
}
}
数字の1以外だとelseの処理をしてまたscanfで数字を入力できるのですが、
文字を入力してしまうとprintfが無限ループしてしまいます。
文字を入力してもちゃんと動作するにはどうしたらよいでしょうか?

220 :175:03/05/03 14:57
>198-199
有難うございます
ちゃんとdeta=6に成りました

221 :デフォルトの名無しさん:03/05/03 15:35
↓知らなかった

http://seclan.dll.jp/c99d/c99d05.htm#dt19990607

整数の除算に何か問題があるの?そう思う人も多いでしょう。しかし現在の C 言語では、整数の除算に関しては移植性がありませ
ん。どういう場合に移植性がないのかといえば、整数を割るときのどちらかのオペランドが負であった場合です。
 現在の C 言語の規格では両方のオペランドが正の数の場合、商は小数点以下を捨てた数になることになっています。例えば、1/2の
場合、正しい値は、0.5 ですが、小数点以下を捨てるので商は 0、余りは 1になります。余りは、(a/b)*b + a%b == a を満たす値となりま
す。
 しかし、どちらか一方の数が負の場合、その結果は実装依存になっています。例えば、-1/2 の正しい結果は、-0.5 ですが、環境によ
って商0余り-1になったり、商-1余り1になったりします。
 今回の新しい C 言語では、割り算の結果はすべて 0 方向に切り捨てることになりました。例えば、-1/2 では結果が、-0.5 ですが、
0 方向に切り捨てるので、商は 0 になります。すると余りは、-1 ということになります。これがすべての環境で保証されることになりまし
た。

222 :デフォルトの名無しさん:03/05/03 16:33
Windows98で動くお勧めのコンパイラは何ですか?
フリーじゃなくても構いまません。

223 :デフォルトの名無しさん:03/05/03 16:35
Delphi

224 :デフォルトの名無しさん:03/05/03 16:37
ここはC言語のスレでつ

225 :デフォルトの名無しさん:03/05/03 17:17
>222
インテルC/C++コムパイラ

226 :デフォルトの名無しさん:03/05/03 17:22
C MACHINE

227 :デフォルトの名無しさん:03/05/03 17:27
ご冗談を

228 :227:03/05/03 17:57
無視ですか?

229 :デフォルトの名無しさん:03/05/03 17:59
ファインマンさん?

230 :デフォルトの名無しさん:03/05/03 18:06
新刊、「無視ですか?ファインマンさん」が誕生したわけだが。

231 :デフォルトの名無しさん:03/05/03 18:17
>>219
scanf()の%d指定は、数字文字を変換する指定でしかない。
なので、数字以外の文字を入力しても変換すべき文字がないので
入力を処理することなく終了してしまう。
解決方法としては、
・%s指定にして数値への変換は自前で行う
・scanf()の戻り値をチェックする
・fgets()に読み込んでから上記に注意しつつsscanf()で変換する
などの方法がある。
まぁ、一番最後の方法が一番確実だね。

232 :デフォルトの名無しさん:03/05/03 18:32
一番上が一番楽じゃない?
%sで読み込んでatoiで数字変換

233 :デフォルトの名無しさん:03/05/03 18:42
>>219
1を入力してください。
じゃなくて
0を入力してください。
だろ?
1だと、終了しねぇ〜よ!

234 :219:03/05/03 18:54
できました。
1番上のでやりました。
ありがとうございます。
>>233
打ち間違いです

235 :デフォルトの名無しさん:03/05/03 19:17
文字ってatoiで変換したら0になるんだな

236 :デフォルトの名無しさん:03/05/03 19:21
それがなにか。

237 :デフォルトの名無しさん:03/05/03 19:46
bsearchはいいぞbsearchは。


238 :デフォルトの名無しさん:03/05/03 20:00
>>219
書式指定に空白を入れときなさい。
scanf(" %d", &a)

書式指定子の空白は空白文字(スペース、タブ、改行コード)を読み飛ばす。
入門本よりマニュアルをよく読むべきだよ。

じゃないと>>231 >>232みたいに頓珍漢なこと言い出すやつが出てくるからね。

239 :デフォルトの名無しさん:03/05/03 20:04
頓 珍 漢
平 子 太


240 :デフォルトの名無しさん:03/05/03 20:07
どちらが頓珍漢なんだ(^_^;)

241 :デフォルトの名無しさん:03/05/03 20:09
長生きするもんだな、頓珍漢に「頓珍漢なこと」といわれるとは思わなかった。

242 :デフォルトの名無しさん:03/05/03 20:11
>>239
よしこちゃんの下の兄弟だっけか?

243 :デフォルトの名無しさん:03/05/03 20:37
>>238
> 入門本よりマニュアルをよく読むべきだよ。

219をよく読むべきだよ。

244 :デフォルトの名無しさん:03/05/03 20:42
X = X ^ c->P[i];
この「->」の意味を教えていただきたい。

245 :デフォルトの名無しさん:03/05/03 20:44
>>244
構造体のポインタのメンバを参照するときのお約束。

246 :デフォルトの名無しさん:03/05/03 21:06
>>245
thx!分からないんで調べてみます。

247 :デフォルトの名無しさん:03/05/03 22:04
データベースの使い方を教えてください

248 :デフォルトの名無しさん:03/05/03 22:08
>>247
データベースのスレ逝け

249 :デフォルトの名無しさん:03/05/03 22:13
>>248
そうします。

250 :デフォルトの名無しさん:03/05/03 22:36
C言語って何?

251 :デフォルトの名無しさん:03/05/03 22:53
G(o^-^o)gle < 検索しようね

252 :デフォルトの名無しさん:03/05/03 22:54
>>251
いやじゃ教えろ

253 :デフォルトの名無しさん:03/05/03 22:54
嘘ごめん
マウスが壊れるほどにサイト駆け巡ってきます

254 :デフォルトの名無しさん:03/05/03 22:55
”C言語ってなに厨”

255 :デフォルトの名無しさん:03/05/03 22:55
Microsoft社が開発した言語。
名称からも分かるようにBasicを元にしたようだが、大きく異なる。


256 :デフォルトの名無しさん:03/05/03 22:57
C言語って抽象化しすぎ

257 :デフォルトの名無しさん:03/05/03 23:00
>>256
どこがや・・・

258 :1:03/05/03 23:10
256匹か・・・・

259 :デフォルトの名無しさん:03/05/04 00:14
初心者の質問ですいませんが、どなたか教えてください。
当方、C言語の独学中で、任意の数字の階乗を計算するプログラムを作ってます。
それで、main関数の他に、実際に階乗を計算するkaijou関数を作成しました。
main.c、kaijou.c、kaijou.hがあります。
それで、kaijou.cにprintf()やscanf()等を使ってるのですが、コンパイル時に
「関数 'printf' は定義されていません。int 型の値を返す外部関数と見なします。」
「関数 'scanf' は定義されていません。int 型の値を返す外部関数と見なします。」
と出てしまいます。
今まではprintf等をつかっててもこんなことは言われなかったのですが、なぜこのようなエラーが起きたのでしょうか?
どなたか、わかる方教えていただけ無いでしょうか?
よろしくお願いします。

260 :デフォルトの名無しさん:03/05/04 00:15
>>259
stdio.hをインクルードしていないから。

261 :259:03/05/04 00:19
>>260
速レスありがとうございます。
私のkaijou.cにはstdio.hをインクルードしてませんでした。
早速インクルードさせてコンパイルしたところエラーがでませんでした。
初歩的な質問に答えていただいて、本当にありがとうございました。

262 :デフォルトの名無しさん:03/05/04 01:22
とある関数で、
char choice;
choice = getchar();

という表記をしたところ、コンパイル時に
choice = getchar();の時にintからcharに変換しました。データが失われてるかもしれません。
と警告が出ます。
で、実行するとその処理が飛ばされてしまい、ちゃんと動作しません。
なぜこのような事が起きるのでしょうか?

263 :デフォルトの名無しさん:03/05/04 01:28
getchar() の戻り値は int だヴォケ

264 :デフォルトの名無しさん:03/05/04 03:47
あはは

265 :デフォルトの名無しさん:03/05/04 06:03
>262
>その処理がとばされてしまい

int→charとは違う部分でも間違ってる、に2000$++

266 :デフォルトの名無しさん:03/05/04 08:45
>>262
おそらく改行文字よりひとつ前まで読む処理が上にあって、その時読まれなかった改行文字がgetcharに拾われているんじゃないかな。
例えば、scanf("%d",&n);とやって数字列+改行文字を入力すると改行文字は読まれずに残っちゃうよ。

267 :デフォルトの名無しさん:03/05/04 10:54
だからfgets()+sscanf()にしろとあれほど・・・

268 :あふぉ:03/05/04 11:12
解の公式のプログラムで
 x^2+100.1x+1.234=0
のような場合でも出来るだけ桁落ちがなく正確に計算できるようにするには
どうしたらいいんですか?

269 :bloom:03/05/04 11:13
http://homepage.mac.com/ayaya16/

270 :262:03/05/04 12:59
いや、そのようなことはありません。
ソース

#include <stdio.h>
int coice()
{
   char choice;
   printf("Yesの場合はY、Noの場合はNを入力してください。\n");
   choice = getchar();
   if(choice=='Y')
   { (省略 }
   if(choice=='N')
   { (省略) }
   else
   {printf("YかNを入力してください。\n");}
   return 0;
}
間違ってるんですか?

271 :デフォルトの名無しさん:03/05/04 13:01
2番目のifを

272 :デフォルトの名無しさん:03/05/04 13:09
二番目のifの中身はreturn 0;だけです。

273 :262:03/05/04 13:10
exit関数を使おうかと思いましたがreturn 0;でも大丈夫かなと思ってそうしました。

274 :デフォルトの名無しさん:03/05/04 13:13
else

275 :262:03/05/04 13:16
どこが間違ってるのか教えてくれませんか?

276 :デフォルトの名無しさん:03/05/04 13:19
なんで二番目のifはelse ifじゃないんだろう。

277 :デフォルトの名無しさん:03/05/04 13:20
>>270
その関数だけ出してそのようなことはありませんなんて言われても信用できないんだけど。


278 :デフォルトの名無しさん:03/05/04 13:26
>>262
>どこが間違ってるのか教えてくれませんか?
あんたの態度。

279 :デフォルトの名無しさん:03/05/04 13:30
短いなら(省略)の部分も書いてみれば見れば?

280 :デフォルトの名無しさん:03/05/04 13:35
>>268
多倍長演算と浮動小数点演算

281 :デフォルトの名無しさん:03/05/04 13:35
最初のifはmain関数呼び出し、
{
   main();
}
次のifはreturn 0;です。
ただ、これだけだったらコンパイル時にエラーが出たのでヘッダファイルにmain関数の宣言を書きました。

282 :デフォルトの名無しさん:03/05/04 13:37
ていうか、とばされるって言ってただけで具体的にどうなったかも聞いてないよ。
せめて、どうなってほしいのか、どうなってしまったかが分からないと答えようがない

283 :デフォルトの名無しさん:03/05/04 13:39
>>281
ループさせたいんだったらループ用の終了フラグ作ってwhileとかそういうことやらんのかね。

284 :デフォルトの名無しさん:03/05/04 13:43
はぁ?
main関数呼び出しって……いったいどんなプログラムやねん!
ついでに、そういうときはswitch文を使うのが定石かつ他人にソースを見せる時、理解を助ける。

main関数
-menu関数
--処理関数

で、menu関数で
int flag=true;
do{
getchar等
switch(){
case 'y': 処理する関数;break;
case 'n': flag=false;break
default : エラーじゃごら
}
}while(flag);

みたいに書くなぁー

285 :デフォルトの名無しさん:03/05/04 13:45
をいをい、書きかけだよ(;;)

main関数からmenu関数を呼び出して、そのmenu関数から処理関数を呼び出す、ね。

286 :デフォルトの名無しさん:03/05/04 13:45
>>281は釣り師に5000織田信長

287 :デフォルトの名無しさん:03/05/04 13:50
>>281
…よく分らないんだけど、普通さcoice関数を宣言してmainで呼ぶんじゃないの?
coice関数の戻り値は何に使うの?まさか、mainの戻り値と同じ扱いじゃないよね?


288 :鈴木健一郎 (NT4.0/2000/XP):03/05/04 14:09
printf みたいな可変長の引数を持つ関数を作っているんですが、
「引数の数がいくつ渡されたか」っていう情報は明示的に
教えてあげなくちゃいけないんでしょうか?

argc みたいな感じで va_list がどこかの構造体に格納されていないんですか?

289 :デフォルトの名無しさん:03/05/04 14:12
>>288
そのために最低でもひとつは固定の引数が必要となる。
その固定引数が与えた引数の数を知るヒントになる。

290 :281:03/05/04 14:36
全体の動きを話すと、

ある任意の数をいれ、その階乗計算し、
その後もう一度計算するか選択してするならまたmain関数に戻るというものです。
なのでmain関数の中身はkaijou();とchoice();、return 0;しか書いてません。
大体理解していただけましたでしょうか?

291 :デフォルトの名無しさん:03/05/04 14:44
>>290
構造化プログラミングについて勉強しましょう。

292 :デフォルトの名無しさん:03/05/04 14:48
いただけませんね。

293 :デフォルトの名無しさん:03/05/04 14:59
Cの話しか微妙なんだけど質問

当方、WinXP+BolandC5.5+CPadでプログラムつくってるんだけど
エスケープシーケンスが使えないという現象に遭遇してます
多分XPがいけないんだと思うけど、この問題の回避策ってある?
OS変えないとだめ??


294 :デフォルトの名無しさん:03/05/04 15:00
choiceからmainを呼び出す意味なし。
while文かdo〜while文を。

295 :デフォルトの名無しさん:03/05/04 15:02
>>293
ttp://www.hakodate-ba.ac.jp/hp/etc_hp/mizukami/TrRoom8.htm

ぐぐれよ。

296 :デフォルトの名無しさん:03/05/04 15:06
>>295
ググったけど見つからなかったんだよー
thxです、ってかこれって有名だったのね 汗

297 :デフォルトの名無しさん:03/05/04 15:12
>>293
ボーランドーのヤツなら、ライブラリに
問題のないlocate()とかが用意されてるから
conio.hを読んで使ったら?


298 :デフォルトの名無しさん:03/05/04 15:13
>>297
神!

299 :295:03/05/04 15:14
>>297
まったくで m(_ _)m

300 :デフォルトの名無しさん:03/05/04 15:17
>>135
ゲーム脳


301 :293:03/05/04 15:23
>>297
ところが既存のソースなんだよね・・・
書き直すのかったるい

ってか>>295の方法できなかったぞーい

仕方ないから書き直します

302 :デフォルトの名無しさん:03/05/04 15:28
>301
まともなコードなら書きなおす必要はないとおもうが・・・
・・・そうか、ベタ書きか・・・


303 :デフォルトの名無しさん:03/05/04 15:30
>>281
それなら main() じゃなく exec(argv[0]) にしたら?


304 :デフォルトの名無しさん:03/05/04 15:32
どうして初心者ってやたらと高次元な配列を作りたがるのですか?
しかも動的に。


305 :ヽ(´ー`)ノ:03/05/04 15:46
>>304
ロジックの整理ができんから、妙ちくりんなデータ構造になるんでない?


306 :デフォルトの名無しさん:03/05/04 15:53
>>305
普通データ構造から作るだろ。ってのはオブジェクト指向に慣れすぎた者の発想なのだろうか。

307 :デフォルトの名無しさん:03/05/04 16:18
>>306
構造化プログラミングでもデータ構造は重要。

308 :ヽ(´ー`)ノ:03/05/04 16:18
>>306
それができたら初心者じゃない…w

309 :デフォルトの名無しさん:03/05/04 16:53
ヽ(´ー`)ノ <- この顔文字むかつく

310 :デフォルトの名無しさん:03/05/04 17:03
何行くらいのソースが書けたら初心者じゃないと言えますか?
何行じゃなくて何ステップ、ですか?
行とステップはどう違いますか?


311 :デフォルトの名無しさん:03/05/04 17:06
>>310
行数気にしてちゃだめでしょ
複雑な処理をいかに簡潔で高速に書けるかの方が重要な気がする

312 :デフォルトの名無しさん:03/05/04 17:09
知ったかぶることができるようになったら中級者だよヽ(´ー`)ノ

313 :293:03/05/04 17:17
再び質問です
文字の移動、画面の消去はconio.h使って出来たんだけど
文字色が変えられない・・・
textcolorって使えないの?

誰か教えてくれー

うーむ、XP恐るべし

314 :デフォルトの名無しさん:03/05/04 17:21
エスケープシーケンス使え、って書こうとしたら、XPでは使えないんだねー。
初めて知った。

315 :デフォルトの名無しさん:03/05/04 17:41
おまいら、自分で脱初心者だと思えるまでにどれくらいかかった?
モレまだ10日も勉強してないけど、全然進んでない気がしてな。
今から配列勉強・・ヽ(´ー`)ノ


316 :デフォルトの名無しさん:03/05/04 17:43
>>315
がんばれよ。後、先輩に対する口の利き方位勉強しとかんと無職ダメ板住人みたくなるぞ。

317 :デフォルトの名無しさん:03/05/04 17:45
>>315
プログラミング初心者から抜け出せたと思うまでには5-6年掛かったな。
Cはそれから使ったから初心者だったのはおよそ一週間だ。
それから10年以上Cをメインに使ってきて、一ヶ月前にC++を本格的に
使い始めたが、C++は未だ初心者の気分だな。

318 :デフォルトの名無しさん:03/05/04 17:56
memset,memcpyの使い方がいまいち分からないんですが。
文字列が入った変数から、?byteだけ数値として取り出す方法とかmemcpy
でできると思ってるんですがどうでしょう?

319 :デフォルトの名無しさん:03/05/04 17:59
構造体使う奴は初心者。
gotoの使い方に慣れたら中級者。
列挙型とintとint*しか使わなくなったら上級者。
charとchar*も使い分ければ達人。

320 :デフォルトの名無しさん:03/05/04 18:01
>>316
スミマセンついつい・・・。結構年だしね(;´Д`A ```
しかしここはプログラムの先輩ばかりなわけだ。。
気をつけます。
>>317
やはりそんなにかかりますか。。
本職ではなくとも私も用途は趣味と仕事なわけですが・・、
CマスターしたらC++習得は早いってわけでも無いのですか?

321 :デフォルトの名無しさん:03/05/04 18:06
>>318
普通はもっと大量のデータをコピー、セットするのに使うんじゃないかな。
例えば画像データをVRAMにコピーするとか。

322 :デフォルトの名無しさん:03/05/04 18:10
>文字列が入った変数から、?byteだけ数値として取り出す方法

char mojiretsu[] = "test";
int suuji;

suuji = (int)mojiretsu[0];

323 :デフォルトの名無しさん:03/05/04 18:16
>>322
intは何バイト?

324 :デフォルトの名無しさん:03/05/04 18:19
・・・

char mojiretsu[] = "test";
int suuji;

suuji = *(int *)mojiretsu;


325 :デフォルトの名無しさん:03/05/04 18:22
>>318
> 文字列が入った変数から、?byteだけ数値として取り出す方法とかmemcpy
> でできると思ってるんですがどうでしょう?

おお、そんなんできるんだ。
やり方の詳細キボン。

>>320
> 本職ではなくとも...仕事なわけですが・・、
プログラマーじゃないけど、仕事のためにプログラミングするってこと ?
(なんかの研究者で、数値解析とかが必要とかなのかなぁ...。)

> CマスターしたらC++習得は早いってわけでも無いのですか?
だいぶ、新しい概念が入ってるからね。
でも、ベースは C だから、C を覚えておくに越したことない。

326 :デフォルトの名無しさん:03/05/04 18:28
>構造体使う奴は初心者。
>gotoの使い方に慣れたら中級者。
>列挙型とintとint*しか使わなくなったら上級者。
>charとchar*も使い分ければ達人。
誰も読めないソースを書けるようになったら、神と阿呆の紙一重(笑
どうせマシンパワーが余ってるんだから、最適化の必要の無い部分は徹底的に
可読性重視でいいと思うがし。
ただ、シミュレーションとかで最適化するべき部分に対しては、
自分以外読めないくらいでもかまわない。ただ、変数名のスコープだけは気をつけて。

327 :デフォルトの名無しさん:03/05/04 18:33
>>326
ネタにマジレ...。

328 :デフォルトの名無しさん:03/05/04 18:37
charとchar*も使い分ければ達人。

329 :デフォルトの名無しさん:03/05/04 18:50
>>319
激しく同意

330 :デフォルトの名無しさん:03/05/04 18:53
わかります。わかります。

331 :デフォルトの名無しさん:03/05/04 18:56
>>326
手作業で最適化しないといけないコンパイラですか。

332 :317:03/05/04 19:19
>>320
学生の頃だからね<5-6年
しかも習ったわけじゃないし。

で、C++は取り敢えずクラスの利用と演算子オーバーロードの辺りで止まっている。
テンプレートは使いこなしたとは言いきれないし、継承に至っては結構怪しい。
会社のC++マスターに、「それだけできれば充分でしょう」とのお墨付きはもらったがね。

333 :デフォルトの名無しさん:03/05/04 19:38
キャスト使う奴は初心者

334 :デフォルトの名無しさん:03/05/04 19:40
>>332
> 「それだけできれば充分でしょう」

その言葉は見込みのない人に対しても使うよね(笑) 「もうやめろ」という意味で(笑)

335 :デフォルトの名無しさん:03/05/04 19:54
int main(void)
{
char *ten;
char *one;
ten = ntof(15);
printf("%s\n", ten);
one = ntof(15);
printf("%s\n", one);
strcat(ten,one);
printf("%s\n", ten);
return 0;
}
char *ntof(int org)
{
char *answer;

switch (org)
{
case 15: answer = "f";
break;
}
return answer;
}

336 :デフォルトの名無しさん:03/05/04 19:55
上のプログラムをを実行すると
Segmentation fault
と異常終了してしまいます・・・
f
f
ff
という結果がほしいのですが、どうしたら良いか教えてもらえないでしょうか?
strcatのところが悪いと思うのですが・・・
今日の半をこれでつぶしてます。
どなたかお願いします!!


337 :デフォルトの名無しさん:03/05/04 20:02
しーません配列の要素数てどうやって取得するんですか?
myAry.Lengthみたいなのやりたいです

338 :デフォルトの名無しさん:03/05/04 20:05
>char *ten;
>char *one;
>ten = ntof(15);
>printf("%s\n", ten);

ぬるぽ

339 :デフォルトの名無しさん:03/05/04 20:07
>>337
無理です。

340 :デフォルトの名無しさん:03/05/04 20:10
>>337
sizeof(a)/sizeof(a[0])

341 :デフォルトの名無しさん:03/05/04 20:16
>>335
#include <stdio.h>
#include <string.h>

void ntof(int org, char *str)
{
 switch (org) {
  case 15: strcpy(str, "f");
  break;
 }
}

int main(void)
{
 char ten[128], one[128];

 ntof(15, ten);
 printf("%s\n", ten);
 ntof(15, one);
 printf("%s\n", one);
 strcat(ten, one);
 printf("%s\n", ten);
 return 0;
}

これじゃ駄目なの?

342 :デフォルトの名無しさん:03/05/04 20:20
>>340
なるほろ。。そうするしかないのれすか・・さんくすこ

343 :デフォルトの名無しさん:03/05/04 20:21
 switch (org) {
  case 15: strcpy(str, "f");
  break;
 }

344 :デフォルトの名無しさん:03/05/04 20:30
>>336
文字列リテラルは書き換えられない。
書き換えられないはずの文字列リテラルにstrcatで書き込んでいるから
セクメンテーションフォールトが起きる。

345 :デフォルトの名無しさん:03/05/04 20:30
>>342
いや、わからん
こっちの方が一般的かなと

346 :デフォルトの名無しさん:03/05/04 20:31
>>345
他にはないでしょ?


347 :デフォルトの名無しさん:03/05/04 20:35
>>341
>>344
ありがとうございました!!!
できました!!
これからも精進します。


348 :デフォルトの名無しさん:03/05/04 20:35
>>346
ものによるかなと
グローバル変数を使うとかさ

349 :デフォルトの名無しさん:03/05/04 20:51
>>348
え、グローバル変数使ってどうやるの?

350 :デフォルトの名無しさん:03/05/04 21:01
文字列からintにするにはatoiでいいけど
反対のintから文字列はどうすればいいですか?

351 :デフォルトの名無しさん:03/05/04 21:03
int i=5671;
char buf[1024];
sprintf(buf,"%d",i);

352 :デフォルトの名無しさん:03/05/04 21:04
>>350
itoa

353 :デフォルトの名無しさん:03/05/04 21:05
ウィザードリーオンライン2chで開発始まる(有能な人材求む
http://219.96.231.242/wizonline/player/world.html


354 :デフォルトの名無しさん:03/05/04 21:07
>>349
恐らくこう言う意味。
int global_len = 10;
extern int global_len;

int main(void)
{
int arg[global_len];

return 0;
}

355 :デフォルトの名無しさん:03/05/04 21:08
>>354
昔のCだと動かない罠。

356 :340:03/05/04 21:09
>>345
お前は誰だ

357 :デフォルトの名無しさん:03/05/04 21:09
>>355
規格としては昔でも、現役な気がする。


358 :320:03/05/04 21:09
>>325
遅レス
 研究者ではないが製品開発には関わることあります。
基本的には生産技術要員。
僕はどちらかというと大規模な設備なんかを買う方なんだけど
いまいちその、、プログラマーとの打ち合わせがウマク
いかないし理解できないんだな。それは漏れがアフォだから。
「いやぁ、ソレハ難しいですよ、予算がかかります」
といわれてもよくワカランし。。
「ソースコードは要りますか」と聞かれても貰ってもわからないし。
趣味も兼ねて勉強したいと思いました。
ちなみに今まで会社ではHP-BASICしか使ったこと無いです。

359 :340:03/05/04 21:10
>>354
ナニソレ?
つーか後は任せた

360 :デフォルトの名無しさん:03/05/04 21:11
>>358
あー、つまり奴らに騙されて大金払わせられないように知恵つけたいってわけか。

361 :デフォルトの名無しさん:03/05/04 21:11
>>349
#include <stdio.h>
#include <string.h>

char buf[128];

void ntof(int org)
{
 switch (org) {
  case 15: strcpy(buf, "f");
  break;
}
}

int main(void)
{
 char str[256];
 str[0] = '\0';

 ntof(15);
 strcat(str, buf);
 printf("%s\n", buf);
 ntof(15);
 strcat(str, buf);
 printf("%s\n", buf);
 printf("%s\n", str);
 return 0;
}
とかかな?あまり好ましくはないけど


362 :デフォルトの名無しさん:03/05/04 21:14
 switch (org) {
  case 15: strcpy(buf, "f");
  break;
}

363 :デフォルトの名無しさん:03/05/04 21:15
おいおまえら、最後のcase(or default)文にbreakつけますか?

364 :デフォルトの名無しさん:03/05/04 21:16
>>362
なんなんだ?
これって駄目なの??

365 :デフォルトの名無しさん:03/05/04 21:16
default自体書きませぬ

366 :デフォルトの名無しさん:03/05/04 21:17
今日は賑やかだな

367 :デフォルトの名無しさん:03/05/04 21:17
>>363
つける
ってかdefaultも意味が無くても必ずつける

368 :デフォルトの名無しさん:03/05/04 21:20
sageろアホ

369 :デフォルトの名無しさん:03/05/04 21:20
ごめんさない。

370 :デフォルトの名無しさん:03/05/04 21:21
>>368
http://qb.2ch.net/test/read.cgi/accuse/1051545341/

371 :デフォルトの名無しさん:03/05/04 21:21
>>367
>ってかdefaultも意味が無くても必ずつける

ifにもかならずelseを付けると言うことですね?

372 :デフォルトの名無しさん:03/05/04 21:21
ドモ

373 :デフォルトの名無しさん:03/05/04 21:21
>>371
当然です

374 :デフォルトの名無しさん:03/05/04 21:22
>>371
当然だろ?
if(あれこれ) ;
else if(0) ;
else ;

375 :デフォルトの名無しさん:03/05/04 21:22
ifだけの場合は、whenというマクロを使います

376 :デフォルトの名無しさん:03/05/04 21:23
when(あれこれ) {
}

377 :デフォルトの名無しさん:03/05/04 21:24
ifしか書かない人には注意力が欠けている人が多い。

378 :デフォルトの名無しさん:03/05/04 21:24
>>363
一応つけてる

379 :デフォルトの名無しさん:03/05/04 21:24
>>371
いやいや

default:
 値が変ですよ

みたいな感じで書くってこと

380 :358:03/05/04 21:25
>>360
それもある・・。実際だまされてる事もあるしね多分。
Cわかる人間なんて他部署にしかいないし。
ワカラン仕事をするほどツマラン事はない・・。

381 :デフォルトの名無しさん:03/05/04 21:26
あっそ

382 :デフォルトの名無しさん:03/05/04 21:27
>>358
> 僕はどちらかというと大規模な設備なんかを買う方なんだけど

ああなるほど、昔の俺と同じような立場なわけね。
ハード/ソフトは自社開発だったけど、筐体とかメカの部分を外部にお願いしていた。
確かに俺もメカの部分でいろいろ言われても、ちんぷんかんぷんだったよ...。

> ちなみに今まで会社ではHP-BASICしか使ったこと無いです。

HP-BASIC はそこそこ使える ? その実行環境は今もある ?
とりあえず、1つの言語でプログラム組めるようになれば、他の言語の勉強も楽だよ。

383 :デフォルトの名無しさん:03/05/04 21:28
case内でreturnした場合もbreakつけますが何か。

384 :デフォルトの名無しさん:03/05/04 21:30
結構忘れるクセがあるからcase書いたら中にreturnとか書こうがなんだろうが
最初にbreakだけかいてまう。

385 :デフォルトの名無しさん:03/05/04 21:30
>>383
お節介コンパイラさんから到達できませんと怒られますよ。

386 :デフォルトの名無しさん:03/05/04 21:31
警告やエラーは/dev/nullに送って黙らせる

387 :デフォルトの名無しさん:03/05/04 21:34
>>379
俺は、大体そうする。環境によるけど、
default:
 abort();
とか。
UCSD Pascal みたいに、switch() 文で default: 節が無い場合は、case に引っかからなかったら異常終了するようなコンパイルオプションが欲しい。

388 :デフォルトの名無しさん:03/05/04 21:39
俺はコンパイラの最適化のジャマを、わざわざするようなことはしない

389 :デフォルトの名無しさん:03/05/04 21:43
数々の嫌がらせを切り抜けて最適化するのがコンパイラの使命

390 :デフォルトの名無しさん:03/05/04 21:47
コンパイラという仕事も大変ですね。

391 :318:03/05/04 21:49
>>321-324
なんつーか、peek,pokeのような、、、感じで0xFFFFFFくらいも文字列のある(適当)部分から読み出す
とか書きこむとか、memcpy,memsetでできるんではと思ったんで。
memcpyいまいち分からないし探してもほとんど良いのなかったです。
>>325
C言語→暗号化アルゴリズム の方になっちゃうんですが
ブロック暗号てのである部分ごとに(ブロック)暗号化するんで、ソースコードもちょっとあったからできるんじゃないかと思ってます。
ソースコードの理解がまだまだだし、それに関することも無いわけで書いてみました。

392 :デフォルトの名無しさん:03/05/04 21:52
すいませんちょっと質問なんですが、substrのような
文字列を切り出す方法はsprintfしか無いのでしょうか。

393 :デフォルトの名無しさん:03/05/04 21:55
>>392
俺ならstrncpyを使うが。

char s1[234],*s2="string";
strncpy(s1,s2+2,3);
s1[3]='\0';


394 :デフォルトの名無しさん:03/05/04 21:58
>>392
strncpy, strncat, strncmp, strchr, strstrなど

395 :デフォルトの名無しさん:03/05/04 21:59
>>394
strncmp??

396 :デフォルトの名無しさん:03/05/04 22:01
>>395
アホがいます。

397 :デフォルトの名無しさん:03/05/04 22:02
>>396
strncmpでどうやって切り出すの?
strchrやstrstrもよくわからない・・・・

398 :デフォルトの名無しさん:03/05/04 22:05
まったくだ

399 :392:03/05/04 22:07
文字列の先頭の数文字を切り落としたかったんですが
そういう便利関数は自分で用意するしか無いようですね。
ありがとうございました。

400 :デフォルトの名無しさん:03/05/04 22:09
>>399
ポインタを動かすとかができないのなら、memmove


401 :394:03/05/04 22:08
>>397
直接は切り出せないけど比較して切り出すのに使えるかなと
ってかsubstrが何をやるものかよくわかってない俺

402 :デフォルトの名無しさん:03/05/04 22:13
>>399
\0を挿入

403 :デフォルトの名無しさん:03/05/04 22:13
>>402
後ろが切れるぞ。

404 :デフォルトの名無しさん:03/05/04 22:15
切れ痔

405 :デフォルトの名無しさん:03/05/04 22:17
>>400
おまえ何言ってんだ?

406 :デフォルトの名無しさん:03/05/04 22:19
>>405
char str[]="abcdefg";
char *p;

先頭の2文字(ab)を切り捨てたいなら、
p=str+2;とするか、memmove(str,str+2,6);


407 :デフォルトの名無しさん:03/05/04 22:31
コンソールアプリで、main関数でない関数からのmain関数呼び出しは
どうやればいいのでしょうか?
ただソース中にmain();と書いてもエラーがでます。
どなたか、どうすればいいのか教えていただけ無いでしょうか?
よろしくお願いします。

408 :デフォルトの名無しさん:03/05/04 22:34
エラーじゃなくて警告でしょ。C++でなければ。

ソースの先頭にでもint main(void);かint main(int,char **);と書く(mainの引数にあわせて)。


でもなんでまたmainを呼び出すのよ。

409 :407:03/05/04 22:38
>>408
あ、そうです。警告です。
そのmain関数を呼び出したい関数を書いてあるCソースファイルにmain関数の宣言を行えばいいのですね。

実はまだ初心者で、関数の使い方を勉強してるのです。
なので簡単なプログラムを関数で色々やってみたりしてるんです。

410 :デフォルトの名無しさん:03/05/04 22:45
>>406
Cっぽくて素敵。

411 :デフォルトの名無しさん:03/05/04 23:07
char bur[256];
の中身"inside"を
char *test;
に代入することはできますか?

412 :デフォルトの名無しさん:03/05/04 23:09
頭イタイ

413 :デフォルトの名無しさん:03/05/04 23:10
>>411
test = bur;


414 :デフォルトの名無しさん:03/05/04 23:11
test = &bur[0]

415 :デフォルトの名無しさん:03/05/04 23:18
exit関数についてですが、これをmain関数以外の関数で使いたいのです。
その場合は、stdlib.hをインクルードするだけで使えるのでしょうか?

できたら、exit関数の使い方を教えて欲しいのですが・・・
どうかよろしくお願いします。

416 :デフォルトの名無しさん:03/05/04 23:20
>>414
すばやいお答えありがとうございます。

417 :デフォルトの名無しさん:03/05/04 23:24
>>415 man 3 exit

418 :デフォルトの名無しさん:03/05/04 23:27
>>416
当たり前だが、そのままだとburの値が変わるとtestの値まで一緒に変わる
別にその後burを使わないなら問題ないけど。

>>415
exit(0);

419 :415:03/05/04 23:28
>>417
え・・・?どういうことでしょうか?
本当にすいません。

420 :415:03/05/04 23:30
>>418
それのコピペでできました。
本当にありがとうございました。

421 :デフォルトの名無しさん:03/05/04 23:32
>>419
とりあえず、ググれ。

422 :デフォルトの名無しさん:03/05/04 23:42
>>416
中身を代入なら、strcpyの方がいいんで内科医?

423 :デフォルトの名無しさん:03/05/05 00:09
>>922お前はあふぉ、>>411もあふぉ

424 :デフォルトの名無しさん:03/05/05 00:33
>>423
未来にレスしてるお前が、一番アフォだろ。

425 :デフォルトの名無しさん:03/05/05 00:42
>>424
いや案外ものすごい才能のもちぬしかもしれない。

426 :デフォルトの名無しさん:03/05/05 01:13

C言語を勉強して最終的にはC言語を使用してテトリスと作ろうと思ってるのですが
テトリスはC言語で記述可能でしょううか?
やはりVisualCなどでないと無理でしょうか?

427 :デフォルトの名無しさん:03/05/05 01:19
はい。
いいえ。

428 :デフォルトの名無しさん:03/05/05 01:20
Cでも書けるよ。
っていうか、書いたし。
問題は言語じゃなくて、どんなライブラリを使うかじゃないの?

429 :デフォルトの名無しさん:03/05/05 01:22
って、いうか言語と処理系の区別ついてないし。

430 :デフォルトの名無しさん:03/05/05 01:22
>>427
サンクス

>>428

自分でライブラリまで作るってのは時間的に難しいですかね?
そんなこったものでなくてただぶろっくが落ちてきて
それをこっちが操作して横が揃ったら消える程度でいいんですが

431 :デフォルトの名無しさん:03/05/05 01:26
>>430
Cで書かれたテトリスのソースは探せばあるから参考にしては?

432 :デフォルトの名無しさん:03/05/05 01:34
>>431
え?ありますかね?
結構捜したつもりなんですが見つかりませんでした
外国のHPかな?英語はちょっと苦手で・・

433 :デフォルトの名無しさん:03/05/05 01:35
char typed[256];
に入れた8文字をそれぞれ別々の
変数8個に代入する方法を教えてください
お願いします。

434 :デフォルトの名無しさん:03/05/05 01:44
>>433
まずは、それぞれ別々の変数8個に代入してみるのだ。

435 :デフォルトの名無しさん:03/05/05 03:47
>>433
こういうヤツが10年後、
エリートSEとなって世界へ羽ばたいていたりするんだな

436 :デフォルトの名無しさん:03/05/05 03:48
>>432
UNIX系のフリーウエアは普通Cでしょ
ましてテトリスなら、いくらでも見つかると思うが・・

http://www.ibiblio.org/pub/Linux/games/arcade/tetris/!INDEX.html
とか

437 :デフォルトの名無しさん:03/05/05 04:00
>>433
とりあえす入門書の一冊でも読んでから質問すれや。

438 :デフォルトの名無しさん:03/05/05 05:47
初心者の素朴な疑問です。
C言語でベキ乗演算子が使えないのはどうしてですかね・・?
自分で作るとかは別として。根本の理由はなんなんでしょう。

439 :デフォルトの名無しさん:03/05/05 07:58
ベキ乗をサポートするプロセッサが少ないからだとか。
powがあるし、自分で書いても難しくないからいいんじゃないの。

440 :デフォルトの名無しさん:03/05/05 07:59
http://www.catnet.ne.jp/kouno/c_faq/c14.html
ここの14.7

441 :デフォルトの名無しさん:03/05/05 09:13
>>439
なるほど・・
3乗根やn乗根となると、目的の割りに”少しだけ”めんどうですね。
有難うございました。

442 :デフォルトの名無しさん:03/05/05 09:13
complex.h tgmath.h を使える環境って
フリーでありますか?とりあえず cygwin/gcc-3.2 は
対応してないようですが。。


443 :デフォルトの名無しさん:03/05/05 09:17
>>439-441
ていうか、ほとんど使わないからだろ。

444 :デフォルトの名無しさん:03/05/05 10:13
>>442
gcc用のcomplex.hは寡聞にして存じ上げませんが、
g++用でしたらg++-includeに含まれていたかと。

445 :デフォルトの名無しさん:03/05/05 13:01
ポインタを使った文字の比較なんですが

if("a" == *p)

というのがだめで

if(0x61 == *p)



if('a' == *p)
がOKというのはなぜなんでしょうか。

446 :デフォルトの名無しさん:03/05/05 13:11
>>445
それは多分""で囲まれた部分が文字列リテラルへのポインタになってるからだと思う

447 :デフォルトの名無しさん:03/05/05 13:16
>>445
最初のうちは、文字列の比較はstrcmpを使うものだ、そういうものだ、
と納得しておこう。
後々理屈が自然にわかるから。

448 :デフォルトの名無しさん:03/05/05 13:20
モジはintだから
ダヨ

449 :デフォルトの名無しさん:03/05/05 13:21
if(*"a" == *p)
はオッケー
ダヨ


450 :デフォルトの名無しさん:03/05/05 13:35
"a" は 'a' と '\0' の2文字からなる文字列へのポインタ
*p は 'a' そのもの。意味が全く違う。

451 :デフォルトの名無しさん:03/05/05 13:40
>*p は 'a' そのもの。
'a'は文字そのもの

452 :445:03/05/05 13:42
>>446-450
みなさんありがとうございます。"a"はaと\0の文字列で
449さんの場合はそのうちの先頭1文字を比較している
というわけですね。よくわかりました。ありがとうございます。

453 :デフォルトの名無しさん:03/05/05 13:57
sageて質問・・・ネタ決定

454 :デフォルトの名無しさん:03/05/05 14:00
ageようがsageようが勝手でしょ

455 :デフォルトの名無しさん:03/05/05 14:49
>>453がネタだろ。

456 :デフォルトの名無しさん:03/05/05 14:55
>>453=sage覚えたて小心者

457 :デフォルトの名無しさん:03/05/05 15:00
447 名前:デフォルトの名無しさん 投稿日:2003/05/05(月) 13:16
>>445
最初のうちは、文字列の比較はstrcmpを使うものだ、そういうものだ、
と納得しておこう。
後々理屈が自然にわかるから。

458 :デフォルトの名無しさん:03/05/05 15:04
457 名前:デフォルトの名無しさん :03/05/05 15:00
447 名前:デフォルトの名無しさん 投稿日:2003/05/05(月) 13:16
>>445
最初のうちは、文字列の比較はstrcmpを使うものだ、そういうものだ、
と納得しておこう。
後々理屈が自然にわかるから。

459 :デフォルトの名無しさん:03/05/05 15:27
吐き出したexeファイルにデータをドラッグ&ドロップして
そのデータのポインタやファイル場所を受け取りたいのですが
どのような関数が必要なのかわかりません。

どなたか、ご教授お願いします。

460 :デフォルトの名無しさん:03/05/05 15:30
>>459
fsetpos

461 :デフォルトの名無しさん:03/05/05 15:33
>>460
あの説明でよくわかったな。

462 :460:03/05/05 15:36
>>461
わかるわけない。
特にデータのポインタってところが。

463 :461:03/05/05 15:40
>>462
俺は最初の一行でお手上げだ。

464 :459:03/05/05 15:42
初心者でごめんなさい_| ̄|○
例で表すと・・・

解凍ツールで解凍するファイルの名前を
ドラッグ&ドロップで知りたかったのです。


465 :459:03/05/05 15:44
なんだか、自分で見てても混乱する文章だと理解してきました
深呼吸してから出直してきます。

>>460
苦しいところでのお答えありがとうございました。

466 :462:03/05/05 15:44
もしかして〜と思ってちょっとやってみた。
実行ファイルにドラッグ&ドロップしたファイルの名前はargv[1]に格納されるんだな。

>>464
mainをint main(int argc,char *argv[])として、argv[1]からファイル名を得る。

467 :462:03/05/05 15:45
>>465
>>460はネタ(にもならんが)

468 :459:03/05/05 15:49
>>462
わざわざ二度手間みたいですいません・・・早速やってみたいと思います。
ありがとうございます。

469 :デフォルトの名無しさん:03/05/05 15:49
コンソールアプリなら466のやり方で大丈夫だな。
ちょっと補足すると、複数ファイルの場合はargv[1〜argc]に入ってるからargc-1回ループさせると。
既に起動してるWindowsアプリのウインドウに、、とかいうんだったらまた別だが

470 :462:03/05/05 15:51
正しくいえば、argv[1]からargv[argc-1]だね。


471 :459:03/05/05 16:10
>>469
今回はお察しのとおり(?)コンソールアプリケーションです。
複数ファイルの場合の時を考えてなかったので、助かります。
覚えておきたいと思います。

>>470
見事、成功しました〜。
長々とのおつきあい感謝です。

472 :デフォルトの名無しさん:03/05/05 19:00

ト ン ベ ス ト ー ン
      〜宇宙からのメッセージ〜


473 :デフォルトの名無しさん:03/05/05 19:44
atexit()って何に使うの?


474 :デフォルトの名無しさん:03/05/05 19:45
C言語で、Concurrent Programmingはできますか?


475 :デフォルトの名無しさん:03/05/05 19:51
>>473
正直使わない。
大体をしてグローバル変数かファイルスコープ変数しか
アクセスできないしな。

476 :デフォルトの名無しさん:03/05/05 20:00
一回使ったことある。

477 :デフォルトの名無しさん:03/05/05 20:23
>>473
OSによっては資源の解放に便利に使える。
但し、ここではスレ違いなので詳細は省略。

478 :デフォルトの名無しさん:03/05/05 20:36
>>474
できる。

479 :デフォルトの名無しさん:03/05/05 20:50
C言語で、Terrariumはできますか?

480 :デフォルトの名無しさん:03/05/05 20:57
C言語で、Object Pascalはできますか?


481 :デフォルトの名無しさん:03/05/05 20:59

すれ違いだったため、ここで質問します。
http://pc.2ch.net/test/read.cgi/unix/1052041659/l50


行列の演算をCで作っていていつも考える疑問です。

行列の表現は、どんなのが一番汎用な表現ですか?

ただし、
行列の成分は実数とします。

私はa[ROW][COL]みたいな2次元配列です。
分かりやすいけど、融通がきかないです。
引数渡しでa[][COL]とするので、大きさが変更できなくて
不便です。


482 :デフォルトの名無しさん:03/05/05 21:10
>>481
引き数はdouble *pMatrixでいいと思うのだけど。
で、参照はpMatrix[i * col + j]って感じで。
それがいやなら i * col + j をマクロにしておくとか。
でも私ならC++でクラスにしちゃうけどね。

483 :デフォルトの名無しさん:03/05/05 21:11
>>481
Cを使わない

484 :デフォルトの名無しさん:03/05/05 21:46
c言語を始めようというソフトに対応しているコンパイラでゲームをつくれますか?

485 :デフォルトの名無しさん:03/05/05 21:54
>484
マジレスだけど、そんなのよりC Machineというのを使った方がいいよ。


486 :デフォルトの名無しさん:03/05/05 21:54
コンパイラさえあれば何でも出来る!
元気ですかー!!

487 :デフォルトの名無しさん:03/05/05 21:57
>>484
ちょっと待て、対応しているのはコンパイラの側ではないぞ。


488 :481:03/05/05 21:58
>>482,483(?)ありがとう。

1次元ですね。なるほど。
私の手元の本は2次元なんですよ。
だからそうしたのです。
でも、かならずしも一般的ではないですよね。

482さん、
参考のためc++の方法を教えて下さい。


489 :デフォルトの名無しさん:03/05/05 21:59
>>485
施寝よ。
作者も放置しているようなコンパイラなんか使えるわけねぇだろ。

490 :デフォルトの名無しさん:03/05/05 22:13
>>488
C++のスレで聞け

491 :デフォルトの名無しさん:03/05/05 22:18
>>488
行列 クラス でググってみれ

492 :481:03/05/05 22:33
>>491
thanx!

Cの行列計算方法
ttp://www5.airnet.ne.jp/tomy/cpro/sslib7.htm
では1次元配列を利用していました。

c++の〜
ttp://www.eng.kshosen.ac.jp/~i_asano/misc/matrix/matrix.html

がありました。
C++は全然知らないのですが、matlabみたいに
C = A *B 
という表記が可能になるんですね。

すれ違いなので、ここで終わります。

493 :デフォルトの名無しさん:03/05/05 22:59
こういうことができないのはCの仕様?

494 :デフォルトの名無しさん:03/05/05 23:32
麻雀のアルゴリズムを自分の力だけで開発しました!
この達成感はすばらしいものです。
聞いてばかりではなく、自分の力だけでやってみるのも
おもしろいですよ。

495 :デフォルトの名無しさん:03/05/06 00:03
他人に聞けば一発ってこともあるよ。

496 :デフォルトの名無しさん:03/05/06 00:12
かなりがんがって作ったのに他人に教えたら「それ当たり前」とか言われるとちょっとヘコむ

497 :デフォルトの名無しさん:03/05/06 00:16
気持ちはわかるが無駄な努力はしない方がみんなのためだ。

498 :デフォルトの名無しさん:03/05/06 00:22
無駄な努力と決めつけて努力しない香具師は、もっと役に立たないがな。

499 :デフォルトの名無しさん:03/05/06 00:34
なんか色々反響あるみたいだけど、
>>494の言うことには同意。
同じ経験あり

500 :デフォルトの名無しさん:03/05/06 00:42
糞スレで500ゲット

501 :デフォルトの名無しさん:03/05/06 01:59
いろいろあるけど、>>496 に同意
というか、たいてい言う側


502 :デフォルトの名無しさん:03/05/06 02:06
当たり前のことばかりやってんなぁ(藁

503 :デフォルトの名無しさん:03/05/06 03:13
gdbを使ってデバッグしたいのですがソースを表示しながらデバッグをしたい
のです。Mule、nemacsじゃないと駄目ですか?秀丸じゃ無理なのですか?

504 :デフォルトの名無しさん:03/05/06 04:31
禿丸なら可能です

505 :デフォルトの名無しさん:03/05/06 07:32
enum Bool{
 True;
 False;
};

↑何か変なのでしょうか?
 これで何も問題は起きてないのですが。


506 :デフォルトの名無しさん:03/05/06 07:36
普通、falseは0です。

507 :デフォルトの名無しさん:03/05/06 07:39
セミコロンじゃありません

508 :デフォルトの名無しさん:03/05/06 07:55
俺はenum 宣言を生で使うことはしないな。名無しで定数をまとめる為とか。
Cではかえって読みづらいと思うが、あえて似たようなことをしようと
するならば、
typedef enum{
TRUE = 0,
FALSE = 1
} Bool_t;

Bool_t flag;

みたいに書くだろう。あくまで型定義の仕方としてな。

509 :デフォルトの名無しさん:03/05/06 08:43
execするときにmallocで確保した領域は解放されませんよね?
開いたファイルもそのまま?


510 :デフォルトの名無しさん:03/05/06 08:50
0と非0でいいと思うけど。

511 :デフォルトの名無しさん:03/05/06 09:07
普通enum {FALSE, TRUE};

512 :デフォルトの名無しさん:03/05/06 10:04
ループ内で新たに変数が必要になった時、どこで宣言するのがよいでつか?

変数は必要な時に宣言するって精神に則ると

for (xxxxx) {
  int hensu;
   :
}

こうかなぁと思うのでつが、なんかデバッガで追ってるとhensu変数が
ループが1回回るたびに作成されたり削除されたりしているように
見えるんでつ。

なんか動作パフォーマンスが悪いように見えるんでつが、実際の所
どうなんでしょう?

ループ外で宣言する方が良いでつか?

513 :デフォルトの名無しさん:03/05/06 10:10
アセンブラの出力見てみろ

514 :デフォルトの名無しさん:03/05/06 10:15
>>512
実装によるけど、変数の領域がブロック単位で確保されたり開放されたりって
ことは無い。
どこで宣言してもパフォーマンスは変わらないと思う。
(もしかすると変数のスコープを細かくしたほうが最適化で
レジスタの割り当てがうまくいって速くなるってことがあるかも
しれない)

515 :デフォルトの名無しさん:03/05/06 10:29
ちゅーか、スタック

516 :512:03/05/06 10:37
>>513
見てみましたが、分かりませんでつ。

>>514
>515氏が書かれているように、私が勉強した時、確か自動変数はスタックを
利用して記録されると読んだ記憶があります。
そのまま解釈すれば、ループ毎にPUSH,POPしているのかなぁと思ってしまう
のでつ。
(さっきデバッガでアセンブルコードを見て追っかけて見ましたが、よく
分かりませんでつ・・・)

しかし>514氏の言う通り、うまく最適化されているような気もします。

もう一度、皆様のご意見を聞かせて下さいまし。

517 :デフォルトの名無しさん:03/05/06 10:54
> 見てみましたが、分かりませんでつ。
それくらいの差だってこった。

518 :デフォルトの名無しさん:03/05/06 11:12
>>516
int変数程度ならスタックフレームに変数領域を確保するだけだから
コンパイラがアドレスを決めて直接書き込めばPUSH/POP不要。

519 :デフォルトの名無しさん:03/05/06 11:30
ループ抜けるまではPOPせんでいいだろー

520 :デフォルトの名無しさん:03/05/06 11:32
ブロック単位で宣言すれば、むしろ局所性が高まり、
関数呼び出し時に確保されるローカル変数用スタックの
消費サイズも最小限になる可能性が高い。

521 :デフォルトの名無しさん:03/05/06 11:40
>>520
スピードはどうなんですか?
スタックをpush、popすることで下がりますか?

522 :デフォルトの名無しさん:03/05/06 11:45
実装によるんじゃねぇのか、SPいじるだけなら気にならんレベルだろー

523 :520:03/05/06 11:45
>>521
subとかaddみたいな加減算で直接spの値を操作するから、
ローカル変数側についてはpush/popが呼ばれることは無いよ。
結果的にメモリの局所化に繋がるから、
再帰関数とかのパフォーマンスは良くなる。
つーかアセンブラ出力読んだ方が早い。

524 :デフォルトの名無しさん:03/05/06 12:41
>>520
そんな賢いコンパイラはあんまり見かけないな
ブロック単位で宣言しておけば、コピペには便利だけど、
変数宣言するくらいの単位なら構造化して関数に昇格した方がいいと思うけどな

525 :デフォルトの名無しさん:03/05/06 13:07
関数呼び出しまでするとコストがウヘ

526 :デフォルトの名無しさん:03/05/06 13:09
そんな所のコストが心配ならアルゴリズムを検討した方がいい


527 :デフォルトの名無しさん:03/05/06 13:11
一度や二度呼び出す場合ではなく、ループの中の話だろ?

528 :デフォルトの名無しさん:03/05/06 13:12
inline展開されるんですか?

529 :デフォルトの名無しさん:03/05/06 13:15
>>528 C++ ならね

530 :デフォルトの名無しさん:03/05/06 13:20
>>527
ループの中でも、最近のCPUだと関数の呼び出し程度は実行サイクルに隠れてしまう事が多いよ
パフォーマンスを恐れて構造化しないのは愚かだと思う。
構造化しておいて、パフォーマンスチェックにひっかった後でインラインに戻せばいい

531 :デフォルトの名無しさん:03/05/06 13:22
逆に構造化しておかないと、パフォーマンスチェックで問題個所を特定する事さえ難しくなる。

532 :デフォルトの名無しさん:03/05/06 13:26
age

533 :デフォルトの名無しさん:03/05/06 13:26
今は構造化の話なんてしてない

534 :デフォルトの名無しさん:03/05/06 13:30
うーん。 pascal だと関数内関数が書けるけど、C だとそれが出来ないから
こういう場合関数呼び出しにすると、
そのブロックのスコープ外ローカル変数にアクセスするために無駄に引数が
必要になるわけで、しかもポインタ渡しにしなければならなくなるとかさ、

だから、C のスタイルだと、ブロック化が構造化というふうに捉えるべきだと思う

535 :デフォルトの名無しさん:03/05/06 13:30
>>529
VCならoptionによって勝手にinline-expandされる。

536 :デフォルトの名無しさん:03/05/06 13:31
どうでもいいんじゃネーノ?(`ー´)

537 :デフォルトの名無しさん:03/05/06 13:32
どうでもいいならスルーしろよ>536

538 :デフォルトの名無しさん:03/05/06 13:43
>>535
VCの最適化は凄いよね。
inline展開や>>520ぐらいの事は当たり前の様にやってるよ。

539 :デフォルトの名無しさん:03/05/06 13:48
その代わり、exeのサイズえらい事になるガナー>538

540 :デフォルトの名無しさん:03/05/06 14:04
ほほう

541 :デフォルトの名無しさん:03/05/06 15:22
無関係なオプションも混じってるけど、
VC
cl /O2 /GB /Og /GA /Ob2 /nologo /MT /W3 /GX /YX /FD /Gz ...
mingw
gcc -O9 ...
いつもこれで大体同じか、gccが少し遅いという結果になる。
両方とも勝手にinline展開などを行い、
実行ファイルのサイズはかなり増大する。

542 :デフォルトの名無しさん:03/05/06 17:46
C言語でCGの勉強でをしています。
glutKeyboardFunc(OurKeyboard); ってのはmain文の中でしか使えないのですか?
お願いします。

543 :デフォルトの名無しさん:03/05/06 18:15
>>542
1を読め

544 :デフォルトの名無しさん:03/05/06 20:40
float 型の変数aに
a=45.1 と代入すると
実際は 45.099998 が入ってしまいます。
45.1 丁度を入力する方法ってないでしょうか?
よろしくお願いします

545 :デフォルトの名無しさん:03/05/06 20:41
ありません。

546 :デフォルトの名無しさん:03/05/06 20:46
>544
勉強が足らんな。二進数での浮動小数点表示げたばき式を勉強して来い

547 :デフォルトの名無しさん:03/05/06 20:47
>>545
そうなんですか。

今作っているプログラムで、
人が入力した数字(例:45.1)をfloat 変数にしまっておいて、
後からその入力した数字を再度、45.1として取り出したいのですが、
何かいい方法はありませんか?
処理の関係上、float変数は変更したくないのですが。


548 :デフォルトの名無しさん:03/05/06 20:48
>>547
無い

549 :デフォルトの名無しさん:03/05/06 20:50
入力・・?文字列として?
ならその文字列を保存しておけば。数値に変換しないで。

550 :デフォルトの名無しさん:03/05/06 20:51
#include <stdio.h>
int main(void){
float a = 45.1;
printf("%.1f\n", a);
return 0;
}

551 :デフォルトの名無しさん:03/05/06 20:53
実数使う以上誤差がでるのは仕方ないだろう。
それを踏まえた上でfloatを使うべきではないのかい?

552 :デフォルトの名無しさん:03/05/06 20:54
>>547
具体的にどういう処理をしたいの?

553 :デフォルトの名無しさん:03/05/06 20:54
>>549 >>550
ありがとうございます。
参考にさせていただきます


554 :デフォルトの名無しさん:03/05/06 21:21
>544
1万倍しておけばいいじゃない

555 :デフォルトの名無しさん:03/05/06 21:24
C++とかDelphiに金銭型とかあるでしょ? あれも中身は浮動小数点を10のベキ乗倍してるだけの筈だよ。

例えば100倍にしておけば、1/100まで誤差が出ないからね。


556 :デフォルトの名無しさん:03/05/06 21:36
4*4/4

557 :デフォルトの名無しさん:03/05/06 21:40
>>555
パピプッ

558 :デフォルトの名無しさん:03/05/06 21:47
どうしてもわからないので聞いていい?
Linux 上でネットワーク通信するときに、C 言語からパケットロス率を取得するには
どのようにするのが常套手段なんでしょう。
ひょっとして、/proc の下を見るとかするとわかるんでしょうか。

わかる方、お願いします。



559 :デフォルトの名無しさん:03/05/06 22:34
>>558
このスレで聞くのは間違ってる。
ここのスレ的な答えだと、「標準Cではできない」となる。

560 :デフォルトの名無しさん:03/05/07 02:10
>>555
誤差無しで小数計算するときは
普通整数で固定小数点計算するだろー。

561 :デフォルトの名無しさん:03/05/07 07:28
>>560
 整数で計算したら、こんどは少数点が出たら大きな誤差になってしまう
 誤差は出るものだけど、誤差が出るのを遅延させるのが金銭型方式だよ

562 :デフォルトの名無しさん:03/05/07 07:39
128bitだか256bitだかの固定少数で計算するのが
C#のDe??????とか言う型じゃなかったっけ?  うろ覚えですけど

563 :デフォルトの名無しさん:03/05/07 14:59
文字列のまま計算すりゃぁ
上下何桁でも誤差はでないよ
遅いかもしれんがね

564 :デフォルトの名無しさん:03/05/07 15:11
処理系依存が多すぎますよね!!

565 :bloom:03/05/07 15:13
http://homepage.mac.com/ayaya16/

566 :デフォルトの名無しさん:03/05/07 15:13
stdoutがどこに接続されているかを調べるにはどうしたらいいですかね?


567 :デフォルトの名無しさん:03/05/07 15:15
UNIXかつ端末に結びつけられているかどうか知りたいのならistty(1);
どこに接続されているのか調べる方法は知らない。つーか>>1

568 :デフォルトの名無しさん:03/05/07 15:17
>>563
10で割れなきゃダメだろそれ・・・ 3.33333333 どうするだ?
と言われて 分数型を作ったら、今度は√2どうするんだ? といわれてるだろうな。

汎用を求めちゃいけないよ。

金銭を扱う一番簡単で信頼性のある方法は、単に入力時に1万倍して扱う方法だ。
1.23 これには誤差がある だから1万倍してその時に丸めて持つ。

まあ、金利が1.23% のように少数点以下2桁しかないという全体での1万倍なんだけどね


569 :デフォルトの名無しさん:03/05/07 15:20
while((c=fgetc(stdin)) != EOF){}
while(c=fgetc(stdin), c != KOF){}

どっちの書き方がスマートですか?


570 :デフォルトの名無しさん:03/05/07 15:21


571 :デフォルトの名無しさん:03/05/07 15:44
KOF…

572 :デフォルトの名無しさん:03/05/07 15:47
KOFって何?

573 :デフォルトの名無しさん:03/05/07 17:06
'94と'95はやってた

574 :デフォルトの名無しさん:03/05/07 17:09
99まで落とした

575 :デフォルトの名無しさん:03/05/07 17:56
FILE *frand(char *, char *);
の使い方を教えてください

576 :デフォルトの名無しさん:03/05/07 18:18
>>575
そんな関数知りません。

577 :デフォルトの名無しさん:03/05/07 18:18
>>569
前者だろ。後者は見たことない。

>>575
なにそれ。


578 :デフォルトの名無しさん:03/05/07 18:27
ググんない初心者が多いな最近。

579 :デフォルトの名無しさん:03/05/07 19:05
#include <stdio.h>
void main(void)
{
int a,b,c,d,e,f,g;
printf("===============================================");
printf("いまから四則演算をする数値2つ入れなさい");
printf("===============================================");
printf("1つ目");
scanf("%d",&a);
printf("二つ目");
  scanf("%d",&b);
c=a + b;
d=a - b;
e=a * b;
f=a / b;
g=a % b;
printf("演算結果");
  printf("%d + %d=%d\n",a,b,c);
printf("%d - %d=%d\n",a,b,d);
printf("%d * %d=%d\n",a,b,e);
printf("%d / %d=%d\n",a,b,f);
printf("%d % %d=%d\n",a,b,g);
printf("\n");
printf("\n");
printf(" 以上\n");

エラーが11もでた。誰か教えて。

580 :デフォルトの名無しさん:03/05/07 19:09
ちょっと笑ってしまった。

581 :デフォルトの名無しさん:03/05/07 19:14
printf("%d % %d=%d\n",a,b,g);

582 :デフォルトの名無しさん:03/05/07 19:30
>>569
俺は下のほうが好き。

583 :デフォルトの名無しさん:03/05/07 19:31
>>581
エラーは出ないのでは?

584 :デフォルトの名無しさん:03/05/07 19:41
全角を直せ。

585 :デフォルトの名無しさん:03/05/07 19:43
>>579
おいおい、まさかこれ、このままコンパイラ通したんじゃないだろうな?
ってか、全角スペースとか、最後の‘}’とかさ、書き込むときに間違っただけだよな?
あと個人的に main() を void にすんなと思った。

#include <stdio.h>
int main(void) {
int a,b;
printf("===============================================\n");
printf("いまから四則演算をする数値2つ入れなさい\n");
printf("===============================================\n");
printf("1つ目\n");
scanf("%d",&a);
printf("二つ目\n");
scanf("%d",&b);
printf("\n演算結果\n");
printf("%d + %d=%d\n",a,b,a+b);
printf("%d - %d=%d\n",a,b,a-b);
printf("%d * %d=%d\n",a,b,a*b);
printf("%d / %d=%d\n",a,b,a/b);
printf("%d %% %d=%d\n",a,b,a%b);
printf("以上\n");
return 0;
}

586 :デフォルトの名無しさん:03/05/07 19:43

}

587 :デフォルトの名無しさん:03/05/07 19:56
=よりも==の方が優先順位が高い理由を教えてくたざい。

588 :デフォルトの名無しさん:03/05/07 19:56
マルチに答えるな、と

589 :デフォルトの名無しさん:03/05/07 19:57
>>587
仕様

590 :デフォルトの名無しさん:03/05/07 19:59
#include <stdlib.h>

#define begin {
#define end }
#define Result return

int main()
begin
Result(0);
end

591 :デフォルトの名無しさん:03/05/07 20:00
>>590
最大の謎はなぜstdlib.hをインクルードしているかだな。

592 :デフォルトの名無しさん:03/05/07 20:03
ありがと

593 :デフォルトの名無しさん:03/05/07 20:05
>>587
設計ミスだろ(プ

594 :デフォルトの名無しさん:03/05/07 20:10
>>587
int i = 6, j=5;
bool t = i == j;
これで=の方が先に評価されたら困るから。

595 :デフォルトの名無しさん:03/05/07 20:11
>>587
無能を早い段階で排除するためにそうなってます

596 :デフォルトの名無しさん:03/05/07 20:14
>>594
無理矢理だな(稈

597 :デフォルトの名無しさん:03/05/07 20:21
>>587
ほかの比較演算子との整合性をとるためだと思われ
== != > < とかとね

つまり、
bool hoge = i > j;
だったら>の方が上なわけで、とすると==も上になるわけで

598 :デフォルトの名無しさん:03/05/07 20:28
結局は比較演算子の方が優先度が高いっていう仕様のせいだな

599 :デフォルトの名無しさん:03/05/07 20:33
代入演算子は優先度が低い方がいいと思うが

600 :デフォルトの名無しさん:03/05/07 20:39
>>599
同意
コンマより低かったら困るけどな。。。


601 :デフォルトの名無しさん:03/05/07 20:41
>>600
ちょっとワロタw

602 :600:03/05/07 20:42
>>601
あれ?間違った?

603 :デフォルトの名無しさん:03/05/07 21:08
>>587
日本の自動車が左側通行なのと同じ程度の理由だと思われ。

>>594
初期化構文中の = 記号は "演算子" では無い筈だが・・・
ネタ?

604 :デフォルトの名無しさん:03/05/07 21:09
"代入演算子"ではないというだけでは。


605 :デフォルトの名無しさん:03/05/07 21:51
#include<stdio.h>
main()
{
char i,j=0,k;
printf("please input num(maz 15)=>");
scanf("%d",&j);

for(;j<16;)
{
for(i=0;i<j;i++)
{
for(k=0;k<=i;k++)
printf("*");
printf("\n");
}
j=16;
}
}

606 :605:03/05/07 21:52
605のようにプログラムしても
コンパイルが通りません。
なぜですか?

607 :デフォルトの名無しさん:03/05/07 21:59
>>606
処理系を正しく設定してないんだろ

608 :デフォルトの名無しさん:03/05/07 22:00
>char i,j=0,k;

int i,j=0,k;
にするべし

原因はスタックが壊されてるから。

609 :608:03/05/07 22:00
って、コンパイルが成功しないって書いてるな。
コンパイルは成功したけど。

610 :デフォルトの名無しさん:03/05/07 22:02
>>606
具体的にどういうエラーが出るんよ

611 :デフォルトの名無しさん:03/05/07 22:06
>>605
とりあえず main は値を返すべきだと思うが

612 :デフォルトの名無しさん:03/05/07 22:07
そもそもif文を使うべきだと思うが

613 :デフォルトの名無しさん:03/05/07 22:11
よく見ていないけど、警告をエラーと勘違いしただけじゃないの。

614 :デフォルトの名無しさん:03/05/07 22:18
>>604
Cの構文規則調べた事ある?

これって、Cの基礎知識だと思うのだが・・・

615 :鈴木健一郎 (NT4.0/2000/XP):03/05/07 22:22
随分変な質問なんですが、例えば、(名前, 住所, 体重, 性別 ...)みたいな
感じのデータをいっぱい入力させといて、
w3 = GetData("Yamazaki","weight")

こんな感じで取得するプログラムを作っています。
で、ここでマニアックな質問なんですが、このプログラム(クラス)に
カッコいい名前をつけてください。

名前が決まらないのでコンストラクタが作れないし、ファイルに保存が出来ない・・・。

周りに聞いたら IDMapper IDManager とかちょっとセンスのない名前しか挙がらない。

616 :デフォルトの名無しさん:03/05/07 22:28
>>615
命名スレにゆけ

617 :デフォルトの名無しさん:03/05/07 22:30
SDKまたはDDKのAPIでも良いのですが、パーティションを作成できるようなコマンドはないでしょうか?
領域さえ確保出来れば、formatコマンド等でどうにかなりそうな気もするんですが。


618 :デフォルトの名無しさん:03/05/07 22:32
アンケートでVBからjavaやC#に移る傾向があるみたいよ!
C#ってなに?
C++とは違うの?そもそもオブジェクト指向なの?
最近時代に取り残される感じがする・・・
だれが簡単に説明してちょ!


619 :デフォルトの名無しさん:03/05/07 22:32
>formatコマンド等でどうにかなりそうな気もするんですが。


・・・何が?


620 :デフォルトの名無しさん:03/05/07 22:33
>>614以降、厨房の嵐が。

621 :デフォルトの名無しさん:03/05/07 22:33
>>618
激しくスレ違い。

622 :鈴木健一郎 (NT4.0/2000/XP):03/05/07 22:33
>>616
ああ、そんなスレがあったんですね。知りませんでした。
ではそちらに行ってきます。

623 :デフォルトの名無しさん:03/05/07 23:48
#include<stdio.h>
int main(void){
int i;
do{
i=getchar();
if(i==EOF){
printf("入力時エラー");
break;}
if(putchar('.')==EOF){
printf("出力時エラー");
break;}
}while((char)i!='n');
return 0;}

入出力時のエラーをチェックするらしいのですが、
どのような値を与えてやるとエラーになるのか分かりません。
教えて下さい。

624 :デフォルトの名無しさん:03/05/07 23:55
>>623
基本的にはエラーは起きないと思うが・・・
エラー時はEOFって定義されてるからだと覚えておくだけでいいかも

・・・だめですか?

625 :デフォルトの名無しさん:03/05/07 23:58
>>623
入力時エラー)
 ファイルにリダイレクトしてる場合はファイルの最後。
 してない場合は Ctrl+D 。

出力時エラー)
 ファイルにリダイレクトしてる場合はディスクフルか、
 場合によってはディスクに書き込む許可が無い場合にもあるかも。
 (読み込み専用のファイルにリダイレクトが不可能な環境でも、
  起動したと同時に別のプログラムでファイルへの書き込みが禁止されたら
  putchar が失敗しうる)
 それ以外では普通出ないと思う。

626 :デフォルトの名無しさん:03/05/08 00:05
入出力を FD 上のファイルに割り当てといて、実行中に FD 抜く。
入出力をネットワーク上のファイルに割り当てといて、実行中に LAN ケーブルを抜く。

いくらでも考え付くが。

627 :デフォルトの名無しさん:03/05/08 00:05
0、1をランダムに並べて行く生成プログラムが必要なんですが、
どこかに参考になるソースはないでしょうか?

628 :デフォルトの名無しさん:03/05/08 00:06
rand()&1じゃだめ?

629 :デフォルトの名無しさん:03/05/08 00:10
>>628
 それはあんまり良くないな M系列の方がマシだと思うぞ

630 :デフォルトの名無しさん:03/05/08 00:10
やっぱここは MT 法で。

631 :デフォルトの名無しさん:03/05/08 00:11
#include<stdio.h>
int main(void){
for(;;){
printf("%d",rand/0.5);
}
return 0;
}



632 :デフォルトの名無しさん:03/05/08 00:24
>>624-626
ありがとうございます。本にも「普通は戻り値がEOFかどうかチェックしない」と
書いてありましたし、エラーの場合はEOFが戻り値として返ってくるんだな。と
覚えておきます。

633 :デフォルトの名無しさん:03/05/08 00:35
全角文字にアクセスするにはどうしたらよかとですか。具体的には

  char* hoge = "かわうそくんひどいや";

のような文字列の各文字を任意の文字に変更したいんです。

634 :デフォルトの名無しさん:03/05/08 00:41
>>633
その例はconstだからダメ。

635 :デフォルトの名無しさん:03/05/08 00:49
>>633
wcharを使うのが良いのかもしれない
あるいは、漢字コードを意識して複数バイトで処理する、ぐらいか

char *geho = "砂男がいますあべしたわば";
while(1)
{
 x = lrand48() % ( strlen(hoge) / 2 );
y = lrand48() % ( strlen(geho) / 2 );
 memcpy(hoge+x*2, geho+y*2, 2);
 printf("%s\n", hoge);
}

>>634
-fwritable-strings とかなんとかするんじゃない?

636 :デフォルトの名無しさん:03/05/08 01:07
>>635
全部2バイト文字ならな。

細かい操作を何度もする場合は
UNICODE が確かに扱いやすいけど、
読むだけとかだったら isleadbyte を使って
シコシコやったんでいいかと。

637 :634:03/05/08 01:18
>>635
-fwritable-stringsは、過去のコードをコンパイルする時以外に使うんじゃねぇ!
新規にコード書く時には使うなよ。

それとコード例、随分乱暴すぎるぞ。
半角文字も考慮して書き直してみろや。
ここで発表しろとは言わんけど。

638 :デフォルトの名無しさん:03/05/08 01:29
コンソールアプリケーションで文字の色を変更するとしたら、その部分は完全に機種・OS依存になるのでしょうか。
Win32で動作するコンソールアプリケーションで文字の色を変える場合にはコンソールAPIを利用するしかないということでしょうか?

639 :デフォルトの名無しさん:03/05/08 01:30
wchar_tを使った場合半角と全角が混在してても問題無いの?
wchar_t *wc = "ち0こ";
wc[1] = 'ん';
wc[2] = 'げ';

ちんげになるの?'


640 :デフォルトの名無しさん:03/05/08 01:31
>>638
ANSIシーケンスでぐぐる

641 :デフォルトの名無しさん:03/05/08 01:40
>>638
普通にコンソールって言うと VT100 とかを思い浮かべますが。

642 :デフォルトの名無しさん:03/05/08 03:33
あの、すいません。C言語を学校で習い始めた超初心者なんですが、
家でC言語を動かせる環境ってどうやれば作れるんですか?

643 :デフォルトの名無しさん:03/05/08 03:45
>>642
何から説明すりゃいいんだ?OSからか?

644 :デフォルトの名無しさん:03/05/08 03:47
>>642
>>1-15あたりに書いてるのはもちろん読んでるんだろうな

645 :642:03/05/08 04:55
すいません過去ログ読んで疑問点を絞ってから出直します。

646 :デフォルトの名無しさん:03/05/08 05:16
cygwinを現在導入していて
xxgdbを使いたいのですが
インストールなどの操作は分りません。教えてください。gdbはすでにインストールし
ています。

647 :デフォルトの名無しさん:03/05/08 05:20
(´-`).。oO(……)

648 :638:03/05/08 07:50
>>640
NT系OSだとANSI.SYSを組み込まないといけなかったりするみたいですね。
試してみたんですが正しく表示されなかった…。難しいなぁ。

649 :デフォルトの名無しさん:03/05/08 09:05
>>648
スレ違いだが、NTではansi.sysは動かんというのが定説。

650 :デフォルトの名無しさん:03/05/08 09:06
>>646
cygwinならUNIX板とWindows板(?)に専用スレがあるのでそっちへGO!


651 :デフォルトの名無しさん:03/05/08 09:08
telnetサーバ(Win2000Proじゃ入っていない?)立ち上げてTeraTerm

652 :デフォルトの名無しさん:03/05/08 13:48
まずcygwinをアンインストールしろ
話はそれからだ


653 :デフォルトの名無しさん:03/05/08 15:23
S=1+x/1!+xの2乗/2!+xの3乗/3!+・・・・+xのn乗/n!
を解くプログラムがわかんないんですけど教えてください。

654 :デフォルトの名無しさん:03/05/08 15:25
>>643
家にはPC-9801FA2があります。
CPUがi486SX16MHz、メモリは1.6MB、HDDは20Mで5インチのFDDが2つついています。
起動するといきなりN88-BASICが立ち上がりますが、これでC言語をやりたいのです。
まず何をすればいいのでしょうか?

655 :デフォルトの名無しさん:03/05/08 15:28
計算するんだったら
int s = 1, a = 1;
for (i=1; i<=n; i++) {
a *= x/i;
s += a;
}

656 :デフォルトの名無しさん:03/05/08 15:29
>>654
MS-DOSを手に入れる。
Cのコンパイラを手に入れる。

657 :デフォルトの名無しさん:03/05/08 15:31
>>655
ごめんdoubleやね。

658 :デフォルトの名無しさん:03/05/08 15:33
分子のx2乗とかの所がわかんないんですけど....

659 :デフォルトの名無しさん:03/05/08 15:35
exp(x)

660 :デフォルトの名無しさん:03/05/08 15:42
>>654
今書き込んでるPC使えよ。

661 :デフォルトの名無しさん:03/05/08 15:46
前提 socket通信で、こちらがクライアント
質問 自ホストの接続ポート番号を指定するにはどうすりゃいいの?

662 :デフォルトの名無しさん:03/05/08 15:47
変数のextern宣言は、わかります。

しかし、関数のextern宣言とは何のためにするのですか?



int func_C( int n )
{
extern int func_A( int n );


}

関数は何処からでも参照できると、思うのですが、、、?

663 :デフォルトの名無しさん:03/05/08 15:48
prototypeのため。あるいはint以外の関数を使うため。

664 :デフォルトの名無しさん:03/05/08 15:50
まだ大学1年生で初歩的なことしかやってないのでそれでも作れるプログラムじゃできませんか?

665 :デフォルトの名無しさん:03/05/08 15:51
>>663

ありがとう。
でも
プロトタイプ宣言?
関数int func_A( int n ); を使うために行うのですか?
externは要らないと思うのですが?



666 :デフォルトの名無しさん:03/05/08 15:52
>>664
意味わからん。

667 :デフォルトの名無しさん:03/05/08 15:54
>>662
staticをつけると他のファイルから呼べなくなる。
externはその逆。デフォルトだから普通はつけないと思う。。。

668 :デフォルトの名無しさん:03/05/08 15:54
>>665
FAQの1.11に書いてあるよ。

669 :667:03/05/08 15:56
あ・・・定義じゃなくて宣言の話か・・・・・
試したことないから知らない。

670 :デフォルトの名無しさん:03/05/08 15:56
>>665
> externは要らないと思うのですが?
なくてもいい。

671 :デフォルトの名無しさん:03/05/08 16:00
女性は無料で遊べる!逢える!恋愛出きる!
もう寂しい生活とは縁を切ろうね!
愛して 愛される そんな出会いがなきゃ
生きてる 意味がない!
http://www.sweet.st

672 :662:03/05/08 16:04
>>667,668,669,670
ありがとう。

でも、いまいち分からないなあ。



C FAQ 日本語訳 より抜粋
1.11:
関数宣言についたexternは何を意味するのか。

A:
こういう書き方をすることで、関数の定義がたぶん別のソースファイ ル
にあるということを、ほのめかすことができる。

externは書かなくてもいいみたいですね。

追加質問です。
int func_C( int n )
{
/*extern int func_A( int n );*/


}

func_Aが、別ファイルにある場合、
このようにすると、func_Aは使えなくなると解釈してよいですか?





673 :デフォルトの名無しさん:03/05/08 16:08
>>672
Cでは別にプロトタイプ宣言がなくても呼べる(定義でstaticがついていなければ)。
でも引数チェックやら何やらができなくなるからやめた方がいい。


674 :672:03/05/08 16:15
>>673
納得です。

関数のプロトタイプ宣言を、異なるソースファイル間
でおこなうわけですね。
これで、引数チェックが行われて、バグを作らなくなる
わけですね。

納得しました。

異なるソースファイルにある関数を使いたいときは
externで宣言しとけですね。

K&Rには載っていなかったですよ。。。

675 :デフォルトの名無しさん:03/05/08 16:18
>>674
普通は宣言はヘッダーファイルに書いてそれを様々なソースファイルからインクルードする。
static関数(←呼び方おかしいかも)の場合は他のファイルから呼ばれることはないので(定義と同じ)ソースファイル内で宣言する。

676 :674:03/05/08 16:24
>>675
了解です。

そうですね、私はそうしています。
他人が作ったプログラムに、上記のような記述が
あったので、何でだろうと思ってました。

その人はヘッダーに書くより、作成中の関数に、
externとして宣言するほうが管理しやすいと考えたんだろう
と思います。

他人の作った関数を利用するには良い方法だと
考えます。

677 :デフォルトの名無しさん:03/05/08 16:44
−−ab.c
int ab(void){return printf("extern");}

−−main.c
extern int ab(void);
int main(){return ab();}
static int ab(void){return printf("static");}

どっちが表示されますか?


678 :デフォルトの名無しさん:03/05/08 16:46
>>677
それって、コンパイルできるの?

679 :デフォルトの名無しさん:03/05/08 17:05
>>677
int a = 2;
int main(void){
  int a = 1;
  return printf("%d\n", a);
}
と同じ、スコープが狭い方が有効になる。

680 :デフォルトの名無しさん:03/05/08 17:21
K&Rにだってこの話は載ってるだろうに。

681 :デフォルトの名無しさん:03/05/08 17:28
>>679
グローバル変数にアクセスするときはどうしたらいいの?
C++だと::aだけど。

682 :デフォルトの名無しさん:03/05/08 17:33
>>681
仕様です。できません。

683 :デフォルトの名無しさん:03/05/08 17:34
>>682
できないのか・・・・サンクス


684 :デフォルトの名無しさん:03/05/08 17:36
ということはint errno;とかやったらエラー番号を参照できなくなるのか
そんなあほなことしないけど^^;

685 :デフォルトの名無しさん:03/05/08 17:41
>>679
その例だと、ローカルな方は参照される前にちゃんと宣言されてる。

プロトタイプはab.cにあるab()を指してるし、呼び出した時点ではコンパイラはstaticのab()を知らないわけで、
それでもstaticの方なの?
試した?


686 :デフォルトの名無しさん:03/05/08 17:42
ピタゴラス数列挙プログラムなんですけど、以前のもので約分できるものは
表示しないようにしたいのですがどうすればよいのでしょうか?
例えば、3:4:5が表示されたら、6:8:10は表示しないようにしたいのです。
#include <stdio.h>
int main()
{
   int a,b,c;
   for(a=2; a<1000; a++){
      for(b=2; b<1000; b++){
         for(c=1; c<1000; c++){
            if(a*a==(b*b)+(c*c)){
            printf("%d:%d:%d\n",a,b,c);
}}}}
return 0;
}

687 :デフォルトの名無しさん:03/05/08 17:49
>>677,679
externって出たよ

688 :デフォルトの名無しさん:03/05/08 17:57
>>685
GCC だと、非 static と宣言した後に
本当は static だったということで警告が発せられる。
でも、一応 static が呼ばれる。

仕様ではどうなってるんだろ。
未定義?

689 :679:03/05/08 18:11
悪い、間違い。規格では「6.1.2.2 識別子の結合」の最後の段落
  翻訳単位の中で同じ識別子が内部結合と外部結合の両方で現れた場合,その動作は未定義とする。
とあった。
ちなみにgccでは警告が出るが、コンパイルは成功し、"static"が出力される。
bcc32では無警告でコンパイルは成功し、"static"が出力される。

690 :デフォルトの名無しさん:03/05/08 18:13
プロトタイプは嘘でもいいの?
int a(int n);
int main()
{return a(1);}
static int a(int x, int y){return x+y;}
これは問題なくても
WindowsAPIみたいに引き数がパスカル形式の関数呼びを騙したら落ちるじゃん


691 :デフォルトの名無しさん:03/05/08 18:20
>>690
int()
が全てと思えばよい。
今から30年前のPDP8のコンパイラを考えれば
少しは、自分の恵まれた環境を考えろよ。

692 :デフォルトの名無しさん:03/05/08 18:21
>>690
嘘つけるならプロトタイプの意味がないじゃん

693 :デフォルトの名無しさん:03/05/08 18:22
>>690
そらエラーやろ。
昔のことは知らんが。

694 :デフォルトの名無しさん:03/05/08 18:25
PDP-11は、どこで買えますか?

695 :デフォルトの名無しさん:03/05/08 18:26
Cのそういうところが気持ち悪い

696 :デフォルトの名無しさん:03/05/08 18:28
リンク時にエラーにならんか?
Cだと通ってしまうのか

697 :デフォルトの名無しさん:03/05/08 18:29
>>696
なんのこと?
>>690ならコンパイルの段階でエラーだと思うけど。定義も宣言も同じファイルなんだから。

698 :デフォルトの名無しさん:03/05/08 18:33
先入れ先出しのスタック構造を作りたいんですが、
どのような感じに作ったらいいでしょうか?


699 :デフォルトの名無しさん:03/05/08 18:34
>>698
それスタックなのか・・・?キューじゃなくて?


700 :デフォルトの名無しさん:03/05/08 18:36
殆どのスタックが後入れ先出しになってるので、
そうじゃないスタックも作ってみたいと思ったわけです。
そんなに難しいのでしょうか?


701 :デフォルトの名無しさん:03/05/08 18:38
>>700
ネタか?

702 :デフォルトの名無しさん:03/05/08 18:39
>>700
ほとんどというか、そういう構造をスタックと言うんだと思っていたけど。

703 :デフォルトの名無しさん:03/05/08 18:41
キューはポニーテールではないのか、キューは
中国が嫌っている言葉だな

704 :686:03/05/08 18:48
どなたか教えてくれませんか・・・?

705 :デフォルトの名無しさん:03/05/08 18:56
約分できるか判定して表示しなかったらいいじゃん。

706 :デフォルトの名無しさん:03/05/08 19:01
>>686
約分できる=素数でないので
素数の判定をして、素数だけ出力すればいい。

素数の判定方法は宿題とする

707 :デフォルトの名無しさん:03/05/08 19:01
>>706
違うって。

708 :686:03/05/08 19:02
>>705
if文でできないか考えたのですが、
それだとすべてのピタゴラス数を書くようですよね?
なので、それ以外の方法が欲しいのです。

709 :686:03/05/08 19:03
>>706
それだと例えば3:4:5は4が素数ではないのでおかしくなってしまうのでは?
素数判定プログラムは以前作ったのですが。

710 :デフォルトの名無しさん:03/05/08 19:04
例えば
for(i=2; i<=a; i++)
if (a%i==0 && b%i==0 c%i==0) return 0;
return 1;
みたいな関数書けばいいんちゃうの?

711 :デフォルトの名無しさん:03/05/08 19:05
俺が教えるのは
えらはりとねすのふるいだな。
でも結構面白い、みんながんばれだな。

712 :デフォルトの名無しさん:03/05/08 19:06
ガンガンいこうぜ

713 :デフォルトの名無しさん:03/05/08 19:07
他人にまかせろ

714 :デフォルトの名無しさん:03/05/08 19:15
変数aをエラトステネスのふるいにかけてからピタゴラス数を求める。

715 :685:03/05/08 19:19
>>714
あ、そうですね。
aをa^2=b^2+c^2が成り立ってて、かつ約分できない場合は
aが素数となるんですね。
どうもありがとうございました。

ただ、エラトステネスのソースは思いついてないので、
以前作った因数を調べる素数テスタで図ってみたいと思います。
本当にありがとうございました。

716 :685:03/05/08 19:23
いや、やっぱり長辺は素数になりません。

717 :デフォルトの名無しさん:03/05/08 19:27
どっちやねん。

718 :デフォルトの名無しさん:03/05/08 19:28
すれ違いだ

719 :デフォルトの名無しさん:03/05/08 19:30
お前ら、Windowsの改行コードは0D 0Aだぞ。
文字列で表したら\r\nだ。
\nなんて書くんじゃねぇ。

720 :デフォルトの名無しさん:03/05/08 19:31
大丈夫。変換してくれるから。

721 :デフォルトの名無しさん:03/05/08 19:34
変換してくれるとはかぎらねぇよ。
ファイルにリダイレクトして、
いろんなアプリで開いてみろ。
ぼけ。


722 :685:03/05/08 20:02
>>717
素数じゃありません。
>>718
このスレであってるはずです。

色々考えたんですが、3辺の比のうち、どれかが素数であればいいことがわかりました。
ソースに素数判定ソースを組んで見たいと思います

723 :638:03/05/08 20:02
>>649
そうなのですか…。やむを得ないので機種依存するという前提でプログラムを作ってみます。


MSXの改行はchr$(13)だから\rだけど文字コードとかDOS互換のはずだから\r\nだと思う…よーわからんが。

724 :デフォルトの名無しさん:03/05/08 20:25
>>722
>>1を見ての発言か?

725 :デフォルトの名無しさん:03/05/08 20:46
>>722
共通の約数を持ってるかどうかだから、ユークリッドの互助法が適当だろう

726 :デフォルトの名無しさん:03/05/08 21:39
即死

727 :デフォルトの名無しさん:03/05/08 21:42
何もしないウインドウプログラムをC言語・HSPで作ったんですが
動きません。なぜでしょうか。なんだったら自分は
そのプログラムをここに書いても構いません。プログラマー目差してるのに早速挫折しそうです。
助けてください。

728 :デフォルトの名無しさん:03/05/08 21:43
>>727
正直、向いてないので今からでもサッカー部に入ってJリーグ目指しなさい。

729 :デフォルトの名無しさん:03/05/08 21:45
>>727
少なくとも動かないってのはどういうことなのかぐらい書けと。
コンパイルが通らないのか、実行しても何も起きないのか

730 :デフォルトの名無しさん:03/05/08 21:50
>>729
ttp://www.vector.co.jp/soft/win95/prog/se080832.html
ここのソフト使って作ってるんですけど・・・
実行してもobjがないとかですぐウインドウ閉じちゃうんです。

>>728
消防時代サッカー選手を目差し少年団やってましたがあまりに下手で
試合に選ばれなかったので挫折しました。

本当に助けて下さい。このままではスポーツもだめ、パソコンも駄目の超駄目人間になってしまいます。
助けてください。

731 :デフォルトの名無しさん:03/05/08 21:50
かなり初歩的な質問ですみません。
% a.out abcdeのように
コマンドライン引数に"abcde"のような文字列を指定し、
main(int argc, char *argv[])で受け取ると
例えば3文字目の'c'を参照する場合はどうすれば良いでしょうか?

732 :デフォルトの名無しさん:03/05/08 21:51
あのな。ちょっとづつ、動くかどうか確認して作ればいいでしょ。

733 :デフォルトの名無しさん:03/05/08 21:51
argv[1][2]

734 :デフォルトの名無しさん:03/05/08 21:51
>>731
char c = argv[1][2];


735 :デフォルトの名無しさん:03/05/08 21:53
>>732

ありがとう。やってみます。

736 :デフォルトの名無しさん:03/05/08 21:54
>>735
HSPスレで聴いた方がいいんじゃない?

737 :730:03/05/08 22:09
ttp://www30.tok2.com/home/koro/taku/puroguram.html

UPしました。改行なくて滅茶苦茶ですが・・・

>>735

ここが一番親切に教えてくれると思うのでここに居させてもらいます(汗

738 :デフォルトの名無しさん:03/05/08 22:17
>>730
> 本当に助けて下さい。このままではスポーツもだめ、パソコンも駄目の超駄目人間になってしまいます。
> 助けてください。
2chで教えて君してる時点で既に超々駄目人間。

739 :デフォルトの名無しさん:03/05/08 22:19
WinXPでCを勉強してます。
9x時代には\nで改行できたのですが、XPではできなくなってしまいました。
どうすれば改行できるのでしょうか?

740 :デフォルトの名無しさん:03/05/08 22:21
>>739
.................

741 :デフォルトの名無しさん:03/05/08 22:22
既視感

742 :デフォルトの名無しさん:03/05/08 22:28
>>739
Windowsは\r\nだと言ってるだろ ぼけぇぇぇ

743 :デフォルトの名無しさん:03/05/08 23:03
関数テーブルでご質問。

私はいつもこんな感じで関数テーブルを作ってます。

static u_char* (* const fncTbl[])( int a ) = {
……
……
};

で、実際の呼び出しは

(*fncTbl[2])( param );

って感じです。

が、知人曰く、
1・宣言時に、const って変じゃない?
2・呼び出しはもっとシンプルに
fncTbl[2]( param );

だそうです。
1.は別にあっても良いような気がしますが、(書き換えないだろうし)
2.は結構驚きでした。
一応どっちでもうごくみたいですが、どっちが正しい書式なんでしょうか?

無知な私に答えうぉ〜



744 :デフォルトの名無しさん:03/05/08 23:06
>>743
> 1・宣言時に、const って変じゃない?
変じゃない。

> 2・呼び出しはもっとシンプルに
> fncTbl[2]( param );
すごく古い処理系では通らないことがある。


745 :デフォルトの名無しさん:03/05/08 23:13
>>743
>一応どっちでもうごくみたいですが、どっちが正しい書式なんでしょうか?
どっちもただしい

746 :デフォルトの名無しさん:03/05/08 23:17
むしろ「ご質問」がヘン。

747 :デフォルトの名無しさん:03/05/08 23:27
650から最新50で読めないのですみません。実験です。>>650-750

748 :デフォルトの名無しさん:03/05/08 23:28
char型の変数は -128〜127 しか入れられないと習ったのですが

char a[9] = "風林火山";
printf("%s",a);

がちゃんと表示されるのは何故なのですか?
windowsは日本語の表示に S-JIS を使っていて
127以上の数値も使われていると思うのですが

749 :デフォルトの名無しさん:03/05/08 23:32
すみません、ある文字がnull文字かどうかを判定したいんですが
この条件式のような比較は許されないんでしょうか?
どうやってもsegmentation faultが出るんですが・・・
char c = 'a';
if(c != '\0'){
 ・・・
}

750 :デフォルトの名無しさん:03/05/08 23:35
>>748
一文字に2バイト使ってるから。

>>749
デバッガを使ってどこで落ちているか確かめてくれ。
きっとポインタの使い方がおかしい。

751 :デフォルトの名無しさん:03/05/08 23:35
>748
勉強しなおしたまえ。
2Byteでひとつの文字をあらわしてるんだよ。
"風"とかは二つに分けられてメモリ上に入れられる

752 :名無し@沢村:03/05/08 23:54
データを読み込んで、そのデータに応じた画像を横一列に表示するプログラムをつくっています。
横に長くなるので、スクロールバーをつかって表示を切り替えるようにしています。
また画像をクリックしたらその画像の上に縦線を描画するようにしました。
でも画面をスクロールしたときに一番左端にくる画像をクリックした場合、うまく縦線が描画されません。
これがその部分のソースですが、どこが悪いのでしょうか?
つまり//マウスをクリックしたX座標が50以下のとき という部分です。ご指導お願いします。

void DrawRline( HDC MemDC)
{
int i;//editpos スクロールバーの位置

for(i=1;i<=_Index[T];i++)
{if(i==1)//_Indexが1のとき
{ if((mousex>i_x[T][i-1]-(editpos*256)-20) && (mousex<=i_x[T][i]-(editpos*256)))
{_Pointa[T]=i_x[T][i]+3-_x_width[T][i]-(editpos*256);
break;}
}
else if(i>1)//_Indexが2以上のとき
{if(mousex<50)//マウスをクリックしたX座標が50以下のとき
{if((mousex>0) && (mousex<=i_x[T][i]-(editpos*256)))//
{_Pointa[T]=i_x[T][i]+3-_x_width[T][i]-(editpos*256);
break;}
}
else//マウスをクリックしたX座標が50以上のとき
{
if((mousex>i_x[T][i-1]-(editpos*256)) && (mousex<=i_x[T][i]-(editpos*256)))
{_Pointa[T]=i_x[T][i]+3-_x_width[T][i]-(editpos*256);
break;}}}}
SelectObject(MemDC,hPen);
MoveToEx(MemDC,_Pointa[T],112,NULL);
LineTo(MemDC,_Pointa[T],338);
}

753 :デフォルトの名無しさん:03/05/08 23:55
>>744-745
即答ありがとうございます。
プログラムってシンプルな疑問ほどサーチエンジン検索で探しにくいので
助かりました。

>>746
確かに(w
慌てすぎ>俺


754 :デフォルトの名無しさん:03/05/08 23:56
>>748が言いたいのはバイト数の問題じゃなくて、SJISは(1バイトずつ分解しても)128以上の数を使うから-128〜127の間に収まらないってことじゃない?

755 :デフォルトの名無しさん:03/05/08 23:56
>>749
そのif文自体に問題は無い

cが配列だった場合は
c[i] != '\0'とか
*c != '\0'とか
*(c+i) != '\0'とか。

756 :デフォルトの名無しさん:03/05/09 00:00
>>748
> char型の変数は -128〜127 しか入れられないと習ったのですが

これがそもそも間違い。char が符号付がどうかは処理系/コンパイルオプションによる。
また、>>748 のプログラムでは、符号拡張とかしないので unsigned char でも signed char でも問題ない。

757 :デフォルトの名無しさん:03/05/09 00:00
>>749
Cプログラマはif(c)と書く。

758 :デフォルトの名無しさん:03/05/09 00:01
>>750,>>751
すみません。2バイトは分かっているのですが、例えば
「風」は 0x9597 ですよね。16進で95ということは
10進で149…127より大きいんじゃないでしょうか
何か根本的なところが間違っているのでしょうか

759 :デフォルトの名無しさん:03/05/09 00:02
>>750
コマンドライン引数として受け取った"hoge"とかの文字列を比較してようと
してたんですが、以下のようにmainの一番上に条件式を置いてみたところ
やはりエラーが出ます。どこか間違っているでしょうかか?
int main (int argc, char *argv[]){
int i = 0;

if(argv[1][i] != '\0'){
・・・

760 :754:03/05/09 00:02
>>758
ヤパーリ
>>756

761 :デフォルトの名無しさん:03/05/09 00:03
>754
じゃぁ、128以上に行くと負の数になる。
二進数で考えなー補数にだ

こんなことがあるから
unsigned char
にするにだ

762 :759:03/05/09 00:03
あ、返事貰ってる・・・失礼しました

763 :754:03/05/09 00:04
>>759
引数がなければNULLにアクセスしてたぶんあぼーん
本当に引数をつけた?

764 :748:03/05/09 00:07
>>756
行き違いになってしまいました。
なるほど分かりました。
みなさんありがとうございました。

765 :759:03/05/09 00:08
>>763
はい。引数ないときはエラー出るようにしてますし、
printf("%c"argv[1][i]);とかで出力しようとすると
ちゃんと'h'とか表示されます。なぜかあの比較式が出たとたん
segmentation faultが・・・

766 :デフォルトの名無しさん:03/05/09 00:09
>>759
って言うか、なんで argc 確認しないで if(argv[1][i] != '\0'){ なんて書くんだ ?

767 :デフォルトの名無しさん:03/05/09 00:09
すいません、初歩的すぎることなんですが…
次のプログラムで足し算をしたいんですけど、

main()

{
int integer1, integer2, sum;

printf("1つめの整数を入力して下さい。\n");
scanf("%d", &integer1);
printf("2つめの整数を入力して下さい。\n");
scanf("%d", &integer2);
sum = integer1 + integer2;
printf("和は %d\n", sum);

return 0;
}

出力は以下のようになるかと思ったんですけど、

1つめの整数を入力して下さい。

2つめの整数を入力して下さい。

和は 5

実行しても何も表示されないんです。それで2つの数字を入力してみると、
最後にprintfの文章がまとめて3行表示されるんです。
ほんの通りにやってるつもりなんですが…。どうしてでしょう??
すみません、教えて下さい!

768 :デフォルトの名無しさん:03/05/09 00:10
charで必ず表せる範囲・・・0〜127
signed charで必ず表せる範囲・・・-127〜127
unsigned charで必ず表せる範囲・・・0〜255

あっている?

769 :761:03/05/09 00:11
>748
char i = 129;
printf("%d",i);

こんな実験をやってみそ

770 :デフォルトの名無しさん:03/05/09 00:12
>>767
flush

771 :デフォルトの名無しさん:03/05/09 00:13
>>767
fflush(stdout);

772 :デフォルトの名無しさん:03/05/09 00:14
>768

> signed charで必ず表せる範囲・・・-127〜127
-128〜127

773 :名無し@沢村:03/05/09 00:14
データを読み込んで、そのデータに応じた画像を横一列に表示するプログラムをつくっています。
横に長くなるので、スクロールバーをつかって表示を切り替えるようにしています。
また画像をクリックしたらその画像の上に縦線を描画するようにしました。
でも画面をスクロールしたときに一番左端にくる画像をクリックした場合、うまく縦線が描画されません。
これがその部分のソースですが、どこが悪いのでしょうか?
つまり//マウスをクリックしたX座標が50以下のとき という部分です。ご指導お願いします。

void DrawRline( HDC MemDC)
{
int i;//editpos スクロールバーの位置
for(i=1;i<=_Index[T];i++)
{if(i==1)//_Indexが1のとき
{ if((mousex>i_x[T][i-1]-(editpos*256)-20) && (mousex<=i_x[T][i]-(editpos*256)))
{_Pointa[T]=i_x[T][i]+3-_x_width[T][i]-(editpos*256);
break;}
}
else if(i>1)//_Indexが2以上のとき
{if(mousex<50)//マウスをクリックしたX座標が50以下のとき
{if((mousex>0) && (mousex<=i_x[T][i]-(editpos*256)))//
{_Pointa[T]=i_x[T][i]+3-_x_width[T][i]-(editpos*256);
break;}}
else//マウスをクリックしたX座標が50以上のとき
{
if((mousex>i_x[T][i-1]-(editpos*256)) && (mousex<=i_x[T][i]-(editpos*256)))
{_Pointa[T]=i_x[T][i]+3-_x_width[T][i]-(editpos*256);
break;}}}}
SelectObject(MemDC,hPen);
MoveToEx(MemDC,_Pointa[T],112,NULL);
LineTo(MemDC,_Pointa[T],338);
}


774 :デフォルトの名無しさん:03/05/09 00:15
>>773
それ752だろ。

775 :デフォルトの名無しさん:03/05/09 00:15
2の補数マシンで char == signed char な環境なら
charで必ず表せる範囲・・・-128〜127
signed charで必ず表せる範囲・・・-128〜127
unsigned charで必ず表せる範囲・・・0〜255

じゃないか?




776 :デフォルトの名無しさん:03/05/09 00:16
とにかく8ビット入るでええやん。

777 :デフォルトの名無しさん:03/05/09 00:17
>>773
どううまく行かないのかくらい書けよ。変数の簡単な説明モナ。

778 :デフォルトの名無しさん:03/05/09 00:18
>>759はちょっとソースを晒してみるよろし。

779 :デフォルトの名無しさん:03/05/09 00:21
ANSIで保証されるのは>>768であっているのでは?

780 :デフォルトの名無しさん:03/05/09 00:21
gdbってセグメンテーション違反が起きた場所を探すのに便利だよね。
ほかの使い方は知らない・・・

781 :デフォルトの名無しさん:03/05/09 00:23
chr型1バイトだろ。0〜127じゃ、残りの128はどうなるのよ

782 :デフォルトの名無しさん:03/05/09 00:24
>>772
なんか、limits.h の SCHAR_MIN が -127 のやつがちらほらあるんだがなんで ?

783 :デフォルトの名無しさん:03/05/09 00:24
>>781
「保証される」

784 :デフォルトの名無しさん:03/05/09 00:24
>>781
signed charとunsigned charの重なり合う部分。
符号あり/なしは処理系依存だから。


785 :デフォルトの名無しさん:03/05/09 00:25
こんなのも動かないのか?
#include <stdio.h>
int main(int argc, char *argv[])
{
if (argc < 2) return 0;
if (argv[1][0] != '\0') puts("hoge");
return 0;
}

786 :デフォルトの名無しさん:03/05/09 00:26
>>782
2の補数表現を使うとは限らないからでは

787 :デフォルトの名無しさん:03/05/09 00:26
>>782
if(0 == ~0) /* 真になっちゃう? */

788 :デフォルトの名無しさん:03/05/09 00:27
処理系依存が多すぎでうざいよね

789 :デフォルトの名無しさん:03/05/09 00:31
最大公約数を求めるプログラムを作っているんですけど、
下のプログラムでは何がだめなんですかね。
#include <stdio.h>
int gcd(int m, int n){
int r = m%n;
return gcd(n, r);
}

790 :759:03/05/09 00:31
>>778
入力した文字列の英字の部分以外を除外して出力する、という
ガッコの課題です・・・while文の比較式でセグが出ます。
#include <stdio.h>
#include <ctype.h>

char rmv(char);

int main (int argc, char *argv[]){
int i = 0;
int j = 0;
char ss;
char *alp;

if(argv[1] == NULL){
printf("errer!\n");
exit(0);
}
while(argv[1][i] != '\0'){
buf = rmv(argv[1][i]);
if(ss != '\0'){
*(alp + j) = ss;
j++;
}
i++;
}
printf("%s",alp);

return 0;
}

791 :759:03/05/09 00:31
char rmv(char c){
if(isalpha(c) == 0)
return '\0';
else
return c;
}

792 :デフォルトの名無しさん:03/05/09 00:32
>>789
nが0かどうかチェックしていないところ。


793 :デフォルトの名無しさん:03/05/09 00:32
>>789
絶句。

794 :792:03/05/09 00:32
つーか再帰の終了条件がないじゃん。

795 :デフォルトの名無しさん:03/05/09 00:33
*(alp + j) = ss;
これはなに?

796 :759:03/05/09 00:34
あ、bufってなってるとこはssの間違いです。。

797 :デフォルトの名無しさん:03/05/09 00:36
*(alp + j) = ss;

alpはどこを指しているの?

798 :デフォルトの名無しさん:03/05/09 00:36
int main (int argc, char *argv[]){
char *alp;

if(argv[1] == NULL){
printf("errer!\n");
exit(0);
}
for (alp=argv[1]; *alp; alp++){
if (isalpha(*alp)) putchar(*alp);
}
return 0;
}

799 :デフォルトの名無しさん:03/05/09 00:37
ポインタって主に何に使うの?

800 :デフォルトの名無しさん:03/05/09 00:38
アドレスの格納、配列のカウンタ。

801 :デフォルトの名無しさん:03/05/09 00:38
配列のカウンタはint変数だろ

802 :デフォルトの名無しさん:03/05/09 00:45
>>790
そのコードだけだとしたらalpに実体がないのがアウトだね
char alp[512];
とかしないと。

803 :デフォルトの名無しさん:03/05/09 00:46
もう759はほっとけばいいよ。

804 :デフォルトの名無しさん:03/05/09 00:50
64bitマシンだとintはおそらく64bitになるわけですよね?効率重視で
shortやlongはどうなっちゃいましょう?
そりゃ規格の許す範囲ならなんでもいいんでしょうけど


805 :デフォルトの名無しさん:03/05/09 00:57
shortもlongも今と同じで良いじゃん

806 :デフォルトの名無しさん:03/05/09 00:59
longは64bitにして、shortとintはそれぞれ16bit、32bitのままでいい。


807 :デフォルトの名無しさん:03/05/09 01:01
>>804
intが64bitになるとは限らない。
32bitのままが主流と思われ。
longやlong longが64bitに割り当てられる場合が多いんでないかな。

intが64bitにならないと言う訳では無いので、過信しないように。

808 :デフォルトの名無しさん:03/05/09 01:02
>>807
int==32bitと決めつけているソースがあまりにも多いからしかたなく・・・となんかの記事で読んだ覚えがある。

809 :デフォルトの名無しさん:03/05/09 01:03
int32,int64が主流になる。

810 :デフォルトの名無しさん:03/05/09 01:04
コンパイルオプションでなんとでもなる

811 :デフォルトの名無しさん:03/05/09 01:05
LP64とLLP64でも調べれ

812 :デフォルトの名無しさん:03/05/09 01:11
int を 64 ビットにしたら、
16/32 ビットのどちらかしか使えなくなるよね。

char = 8 ビット
short ∈ [8, 64] ビット
int = 64 ビット
long ≧ 64 ビット

というか、こういうダサイ仕様はどうにかして欲しい。

813 :デフォルトの名無しさん:03/05/09 01:13
>>808
 そうなのか!!
 int=64bit にすると 32bit 整数が無くなるからだと思ってた。

814 :デフォルトの名無しさん:03/05/09 01:16
別に決まっていないのだが…
Win64の話か?

815 :デフォルトの名無しさん:03/05/09 01:16
short short とか作ればいいかも(w

816 :デフォルトの名無しさん:03/05/09 01:19
>>815
 short より短そう...

817 :デフォルトの名無しさん:03/05/09 01:21
なんかもう標準でtypedefして欲しい
って本末転倒か

818 :デフォルトの名無しさん:03/05/09 01:27
C99ってやたらと整数型多くなかったっけか。

819 :デフォルトの名無しさん:03/05/09 01:34
long long = 256, long = 128, int = 64, short = 32, short short = 16
こんな感じでたのむ。

820 :デフォルトの名無しさん:03/05/09 01:35
>>819
大却下

821 :デフォルトの名無しさん:03/05/09 01:35
256って果てしないな
それでも星の数は表せないだろうけど(自信なし)

822 :デフォルトの名無しさん:03/05/09 01:38
64bit って13エクサまで表せるんだっけ?
もう東京ドーム何個分だよ

823 :デフォルトの名無しさん:03/05/09 01:38
int8, int16, int32, int64, int128, int256 で済む話なんだがなぁ。

824 :デフォルトの名無しさん:03/05/09 01:39
int8_t
uint8_t
int_least8_t
uint_least8_t
int_fast8_t
uint_fast8_t
はあ

825 :デフォルトの名無しさん:03/05/09 01:49
>>757
俺も俺も。
あと、if ( c == 0 ) は、 if ( ! c ) だな

826 :デフォルトの名無しさん:03/05/09 01:52
つーか、もはや LP64 がデフォルトだろ

827 :デフォルトの名無しさん:03/05/09 01:53
if(c)
if(!c)
は悪。

828 :デフォルトの名無しさん:03/05/09 01:55
真偽値以外は使わないよう心がけてます

829 :デフォルトの名無しさん:03/05/09 01:57
読みやすいじゃん

p = (char *) malloc( 1024 );
if(! p)
{

とか

830 :デフォルトの名無しさん:03/05/09 01:59
p は何よ、みたいな。

831 :デフォルトの名無しさん:03/05/09 01:59
宗教論争になりそうだが…
真偽値が int だったり bool値(true, false)だったり仕舞いには
void* だったり、条件式中で使い分けるのが面倒だから ! 派

832 :デフォルトの名無しさん:03/05/09 02:00
>>829
if(!(p=(char *)malloc(1024)))

833 :デフォルトの名無しさん:03/05/09 02:20
switch(1) case 比較式or非定数式:
みたいなことができればいいのに。

834 :デフォルトの名無しさん:03/05/09 02:25
>>833
多くの場合ジャンプテーブルに展開されるから、今からそれやるのは無理。
有ればいいとは思うのだが。

835 :デフォルトの名無しさん:03/05/09 03:33
2分木探索プログラムなのですが
以下のような関数を作成しました。

int search(int key , tree *node , tree *findnode){
if(node->key == key){
findnode = node;//error 戻った時にfindnodeがNULLポインターになってる。
return 1;
}

if(node->key < key){
if(node->left != NULL){
if(search(key , node->left , findnode) == 1){
return 1;
}
}
}else{
if(node->right != NULL){
if(search(key , node->right , findnode) == 1){
return 1;
}
}
}
return 2;
}

findnodeに見つかったノードのアドレスをコピーして戻るということをしているはずなのですが
return 1;で戻った直後findnodeがNULLポインタに戻ってしまいます。
どこが間違っているのでしょう(^^;よろしくお願いしますm(_ _)m

836 :デフォルトの名無しさん:03/05/09 03:57
>>835
そりゃ当然だと思うが…

void f(int a) {
a = 1;
}

b = 0;
f(b); /* bは1になるか?(ならない) */

と同じだよ。
*findnode = *node;
にすれば実体が代入されて幸せになれる(かもしれない)。
どうしてもポインタがほしいというのならば、パラメータfindnodeは
tree **findnode
と宣言して、
*findnode=node;
とやるしかないだろね。


837 :デフォルトの名無しさん:03/05/09 03:58
【ウィザードオンライン開発中in 2ch】
http://game3.2ch.net/test/read.cgi/mmominor/1050889293/l50
http://219.96.231.242/wizonline/

あっ、誤爆

838 :835:03/05/09 06:40
>>836
ありがとうございます。
そういわれればそうですね。
tree *findnode
で宣言してたのでポインタ扱ってるはずなのになぁ(´-`).。oO
とつまってました。
もう一度!ありがとうございましたヽ( ´ー`)ノ

839 :デフォルトの名無しさん:03/05/09 09:50
ctime関数で時刻表示した後改行したくないぃぃーッ!
って時はどうしたらよいですか?

840 :デフォルトの名無しさん:03/05/09 10:23
33188のような8ビット数字列を
-rw-r--r--のようにファイルモードと許可ビットの文字列に
変換するにはどう処理を書けば良いでしょうか。
宜しくお願いします。

841 :デフォルトの名無しさん:03/05/09 10:24
時刻表示する ctime の実装なんてあるの?

842 :デフォルトの名無しさん:03/05/09 10:39
>>839
改行削ってから表示。

843 :デフォルトの名無しさん:03/05/09 10:47
>>840
33188は8bitでは表せないと思うが

int mode = 33188;
char buf[12];

sprintf(buf, "%c%c%c%c%c%c%c%c%c%c",
S_ISDIR(mode) ? 'd' : S_ISFIFO(mode) ? 'p' : S_ISLNK(mode) ? 'l' : 中略 '-',
mode & 0400 ? 'r' : '-',
mode & 0200 ? 'w' : '-',
mode & S_ISUID ? mode & 0100 ? 's' : 'S' : mode & 0100 ? 'x' : '-',
mode & 0040 ? 'r' : '-',
mode & 0020 ? 'w' : '-',
mode & S_ISGID ? mode & 0010 ? 's' : 'S' : mode & 0010 ? 'x' : '-',
mode & 0004 ? 'r' : '-',
mode & 0002 ? 'w' : '-',
mode & S_ISVTX ? mode & 0001 ? 't' : 'T' : mode & 0001 ? 'x' : '-');


844 :デフォルトの名無しさん:03/05/09 10:51
>842
えっ、どうやるんですか??

845 :デフォルトの名無しさん:03/05/09 11:17
>>844
Backspace

846 :デフォルトの名無しさん:03/05/09 11:21
>>843
わざわざありがとうございます。
これほど面倒な処理だとは・・・

847 :デフォルトの名無しさん:03/05/09 11:30
>>839
ctime() だけでは表示しないと思うがこんな幹事か?
const char *p=ctime(&t);
printf("%.*s", strlen(p)-1, p);


848 :デフォルトの名無しさん:03/05/09 11:32
>>844
>>845は無視するとして、ctime()の戻してきた文字列から改行コードを探し出して消してしまえばいい。
str = ctime(...);
strchr(str, '\n')[0] = '\0';
ctime()の戻す文字列は、最後が改行なのが保証されているからこれで充分。


849 :デフォルトの名無しさん:03/05/09 11:35
補足
ctime()の戻す領域は使い回されるので早めに他の文字列に引き取るか
表示しないといけないので要注意。

つーか、表示するだけなら>>847でよかったか。

850 :844:03/05/09 11:52
ありがとうございましたー!どうもー

851 :デフォルトの名無しさん:03/05/09 12:24
シフトすればいいんじゃない?

852 :175:03/05/09 13:19
#include <stdio.h>
#include <stdlib.h>

void cofactor(int *a,int n,int i,int j,int *b){
int k,m;
for(k=0;k<=n-2;k++){
for(m=0;m<=n-2;m++){
if(k<i&&m<j){b[k*(n-1)+m]=a[k*n+m];}
else if(k<i&&m>=j){b[k*(n-1)+m]=a[k*n+(m+1)];}
else if(k>=i&&m<j){b[k*(n-1)+m]=a[(k+1)*n+m];}
else if(k>=i&&m>=j){b[k*(n-1)+m]=a[(k+1)*n+(m+1)];}
else {printf("error\n");}
}}}


853 :175:03/05/09 13:19
int main(){
int *a;int *b;int i,j,n;
printf("n*n行列aの余因子を求めます!\n");printf("n=");scanf("%d",&n);
if(NULL==(a=(int *)malloc(n*n))){printf("No memories!");return 0;}
if(NULL==(b=(int *)malloc((n-1)*(n-1)))){printf("No memories!");return 0;}

printf("aの要素をa00からa(n-1)(n-1)迄順番に入力して下さい\n");
for(i=0;i<=n-1;i++){
for(j=0;j<=n-1;j++){
printf("a%d %d =",i,j);scanf("%d",&a[i*n+j]);}}
printf("aの入力が終わりました\n");
for(i=0;i<=n-1;i++){
for(j=0;j<=n-1;j++){printf("a%d %d = %d  ",i,j,a[i*n+j]);}
printf("\n");}
printf("i,j成分に関する余因子bを求めます\n");
printf("i=");scanf("%d",&i);printf("j=");scanf("%d",&j);

cofactor(a,n,i,j,b);

for(i=0;i<=n-2;i++){
for(j=0;j<=n-2;j++){printf("b%d %d =%d ",i,j,b[i*(n-1)+j]);}
printf("\n");}
return 0;}

854 :デフォルトの名無しさん:03/05/09 13:20
まじでそんな見づらいコード書いているの!?

855 :175:03/05/09 13:25
>852-853はn*n行列aから、余因子を求めるプログラムなのですが
上手くいきません。
エラーもなくコンパイルできるのですが、
間違った値がでてくるんです。
例えばaを
a[]={1,2,3,4,5,6,7,8,9}
という3*3行列にして
i=0;j=2;
とした時に、本来は
b[]={4,5,7,8}
とならないとおかしいのですが
b[]={4,4,7,8}
となってしまうんです。

もう泣きそうです、助けてください!

856 :デフォルトの名無しさん:03/05/09 13:29
>>852-853
吐き気を催しました。

857 :デフォルトの名無しさん:03/05/09 13:37
if(NULL==(a=(int *)malloc(n*n)))

==を=と書いてしまった時にエラーがでるようにするためらしいけど、激しく違和感があるね。

858 :175:03/05/09 13:45
>857
それはメモリが確保できなかった時に終了するルーチンです
持ってる教科書にこんな感じの例が載ってたので・・・

859 :デフォルトの名無しさん:03/05/09 13:47
>>858
並び順のことを言っているんだけど。

860 :859:03/05/09 13:50
つーかこの場合はNULLを後にしてもエラーでるじゃん・・・

861 :175:03/05/09 13:50
>859
並び順も教科書そのままなんです
「実習C言語」っていうのに書いてありました

862 :859:03/05/09 13:51
×NULLを後にして
○NULLを後にして==を=にして

863 :175:03/05/09 13:57
>>856-857 >>859-860 >>862
分かんねえなら、いちいちレスすんなカス共
どうせ数学はリア厨以下なんだろ? 知ったかクン?
バカの癖して、しょうもねえとこばっかツッコミ入れやがってこの能なし共が!!!

おまえらみたいなカス共に期待した俺が浅はかだった
もういい、こんなとこ二度と来ねえよ

んじゃなカス共

864 :175:03/05/09 13:58
>863
偽者死ね

865 :デフォルトの名無しさん:03/05/09 14:01
"a"はアドレス、*"a"はそのアドレスの中身ってことで良いですか?

866 :デフォルトの名無しさん:03/05/09 14:04
b0 0 =4 b0 1 =5
b1 0 =7 b1 1 =8
だそうだが?


867 :デフォルトの名無しさん:03/05/09 14:10
>>853
> if(NULL==(a=(int *)malloc(n*n))){printf("No memories!");return 0;}
> if(NULL==(b=(int *)malloc((n-1)*(n-1)))){printf("No memories!");return 0;}

おいおい、int のサイズは1バイトじゃねー処理系が多いぞ。

868 :175:03/05/09 14:10
>866
え?
本当ですか?
私の環境では
b0 0 =4 b0 1 =4
b1 0 =7 b1 1 =8
になってしまいます。
私のPCが故障しているのでしょうか・・・

869 :デフォルトの名無しさん:03/05/09 14:24
あと、cofactor() 内の if 分は 行/列で分けて考えればもっとすっきりする。
また変数を全て一文字にするのはわかりにくく間違えやすい。

void cofactor(int a[], int n, int xi, int xj, int b[]){
 int i, j;
 int si, sj;

 for(i = 0; i <= n - 2; i++){
  si = i < xi ? i : i + 1;
  for(j = 0; j <= n - 2; j++){
   sj = j < xj ? j : j + 1;
   b[i * (n - 1) + j] = a[si * n + sj];
  }
 }
}

870 :175:03/05/09 14:38
>869
有難うございます
参考になります

871 :デフォルトの名無しさん:03/05/09 14:42
>>870
いや、それ以前に >>867 は理解したのか ?

872 :175:03/05/09 14:45
>871
いえ
さっぱり

873 :デフォルトの名無しさん:03/05/09 14:46
(・∀・)

874 :175:03/05/09 14:55
分かりました!
int型はCPUによって違うけれど大体2or4バイトになっている。
故にn*nのint型を確保したいなら
4n*4nの領域を確保していれば良い。
よってこう書き換えればよい。

if(NULL==(a=(int *)malloc((4*n)*(4*n)))){printf("No memories!");return 0;}
if(NULL==(b=(int *)malloc(4*(n-1)*4*(n-1)))){printf("No memories!");return 0;}

ということですね

875 :デフォルトの名無しさん:03/05/09 14:56
sizeof

876 :デフォルトの名無しさん:03/05/09 15:02
>>872
C言語ができるぞと威張りたいとかなら別だが、Cなんかやめて VB とかにした方がいいよ。
せめて、C++ にでもしろ。malloc() は、お前には早すぎる。

877 :デフォルトの名無しさん:03/05/09 15:04
>>874
もういいよ、int が 16バイトになるまでは時間は十分あるし、今時少々メモリーを取り過ぎたってどうてことないから。

878 :175:03/05/09 15:07
>875
有難うございます
sizeof(int)でint型が何バイトかを取得できるのですね
これを使えば、環境に依存しない形で書けるみたいですね

>876
VB使える環境ないです・・・
C++ですか、勉強してみます

879 :デフォルトの名無しさん:03/05/09 15:09
>>878
いや、それ以前に >>877 は理解したのか ?


880 :175:03/05/09 15:13
>879
int型が何バイトになるかは環境によって違うということですよね?

881 :175:03/05/09 15:16
if(NULL==(a=(int *)malloc(n*n*sizeof(int)))){printf("No memories!");return 0;}

つまり、これでint型のn*n行列を確保できる、と

882 :175:03/05/09 15:23
874では
n*n*sizeof(int)
とすべき所を
n*n*sizeof(int)*sizeof(int)
にしてたんですね・・・

883 :デフォルトの名無しさん:03/05/09 15:29
>175K&Rを買いませう

884 :175:03/05/09 15:31
皆さん有難うございます!
mallocの部分を直したら正しい結果(>>866さんの書いた結果)が出るように成りました!

885 :175:03/05/09 15:41
>883
有難うございます
今度さがしてみます

886 :デフォルトの名無しさん:03/05/09 18:16
graph.hファイルはどのようにして入手すればいいのでしょうか?

887 :デフォルトの名無しさん:03/05/09 18:23
>>886
TurboCとかDOS用のコンパイラのソースを動かそうとしてるの?
いま持ってるコンパイラに付属してなかったらあきらめたほうがいいよ。

888 :デフォルトの名無しさん:03/05/09 18:32
memcpyてどうやって使うの?

889 :デフォルトの名無しさん:03/05/09 18:39
貴方には無理。

890 :デフォルトの名無しさん:03/05/09 18:46
GPUそのものの開発や、関連の開発に携わると、
int が 128bit でもいいかな、いや、256でも イイ! と思ってしまう...

891 :デフォルトの名無しさん:03/05/09 20:00
typedef で勝手に定義しる

892 :デフォルトの名無しさん:03/05/09 20:49
memcpy(dst,src,size);

893 :デフォルトの名無しさん:03/05/09 23:25
すみません、教えて頂けないでしょうか。
gccで

(test1.c)
#include <stdio.h>

#ifdef PTR_G_STR
 extern char *g_str;
#else
 extern char g_str[];
#endif

int main(void)
{
  return printf("%s\n",g_str);
}

(test2.c)
char const g_str[] = "this is test.";


とすると、
-DPTR_G_STRしない=>正常動作
-DPTR_G_STRする=>Segmentation Fault
になってしまいます。

K&Rにはchar a[] => アドレス固定;char *a =>アドレス不定
のような事が書いてあったのですが、いまいち釈然としません・・
上の場合、test1.c内での
g_strのアドレスはどのようにして決められるのでしょうか?

894 :デフォルトの名無しさん:03/05/09 23:27
>>893
char const g_str[] = "this is test.";
の g_str は配列であってポインタではない。
また、const である。
従って
extern char const g_str[];
が正しい。
すなわち、貴方のコードは 2 つとも誤っている。

895 :デフォルトの名無しさん:03/05/09 23:28
>>893
当然です。配列とポインタは全く異なるものだからです。
定義したとおりに宣言しなくてはなりません。

896 :894:03/05/09 23:39
これだけでは何なので。

ポインタ変数=データの位置情報(ポインタ)を入れる変数
配列=データの羅列

であり、根本的に両者は異なる。
ポインタ変数の場合はデータの位置(ポインタ)を使って
間接的にデータにアクセスするが、
配列の場合はデータに直接アクセスする。

上の例の
const char g_str[] = "this is test.";
は配列である。
すなわち、文字列がそのままデータとして置かれている。
これを
extern const char* g_str;
で参照しようとしても、
「置かれたデータのどこにもポインタが存在しない」のである。
この状態では g_str の先頭数バイトに入っているデータをポインタとして無理矢理認識し、
そのポインタを使ってデータを参照しようとする。
しかし、そんなポインタが正常に働くわけも無く、Segmentation Fault になるのである。

897 :895:03/05/09 23:41
>>896
おれも補足。つーてもURLはるだけ(w
http://www.catnet.ne.jp/kouno/c_faq/c6.html
これをじっくり読むよろし。

898 :893:03/05/09 23:59
FAQだったんですね・・軽く吊ってきます
ありがとうございました >894,895

899 :デフォルトの名無しさん:03/05/10 00:02
>「実習C言語」っていうのに書いてありました

もう大分昔に出た悪書ですな。
入門C言語とか応用C言語とかと3部作になってた気がする。
大体、三田某の書いていること信じたら駄目になるってば。

900 :デフォルトの名無しさん:03/05/10 00:06
みたぼん【三田本】(mi・ta・bon)

901 :デフォルトの名無しさん:03/05/10 00:32
フーリエ変換だとかウェーブレット変換だとか
ああいう波形解析のプログラムってどうやって
書いてんの?

とりあえず俺はCしか知らないから
ここで聞いてみたわけだけど。

902 :デフォルトの名無しさん:03/05/10 00:36
http://www1.neweb.ne.jp/wb/prof/
平成15年度 自作板PC環境調査 最新結果(一部抜粋)
◆4月分の結果が出ました。現在は5月分に移行しています。◆

平均年齢        25.4歳

ネット(2ch含)      78.7%
ゲーム          59.0%

Windows XP Family    46.9%
Windows 2000 Family   34.4%

Athlon     45.3%
Pentium 4     29.7%

平均RAM搭載容量 780MB

平均HDD搭載容量 166GB

nVIDIA 49.2%
ATI 28.9%

DVD-R/RW/マルチ 20.4%
CD-R/RW 75.9%

光ファイバー 8.3%
ADSL/xDSL 64.5%

CRT 74.6%
LCD 25.4%

903 :デフォルトの名無しさん:03/05/10 00:54
>>901
どうやって、ってどういう意味で?
アルゴリズムならぐぐれ。
言語はどれででも書ける。

FFTは、C、FORTRAN、アセンブラで書かれた物が多い。

904 :デフォルトの名無しさん:03/05/10 01:37
>>903
アルゴリズム。
FFTはなんとなくわかりそうだけど
DWTはなんかよくわからん。
もしオススメのサイトあったらキボンヌ

905 :903:03/05/10 03:21
>>904
ヘタレでスマンが、waveletは担当してないから、ようしらん。
会社行けばCのソース有るが・・・

ttp://www.amazon.co.jp/exec/obidos/ASIN/4627075111/ref=pd_bxgy_text_2/250-1439864-3561046
ところでこの本を見てくれ。こいつをどう思う?

906 :デフォルトの名無しさん:03/05/10 07:58
DSPでやるかパソコンでやるか。
お金とか、でいろいろ。

907 :デフォルトの名無しさん:03/05/10 08:14
>>905
「こいつ」というのは、本のことか、著者のことか?

908 :デフォルトの名無しさん:03/05/10 11:46
if(a)みたいに条件式が無いやつはどういう意味ですか?

909 :デフォルトの名無しさん:03/05/10 11:51
>>908
aが非0だったら、という意味

910 :デフォルトの名無しさん:03/05/10 11:52
a は立派な「式」だぞ。

911 :デフォルトの名無しさん:03/05/10 11:53
普通の人は式だと思わない。
これは正常。

912 :デフォルトの名無しさん:03/05/10 11:55
>>909
>>910
ありがとうございました。はじめたばかりで不親切な教本買っちゃったもので

913 :デフォルトの名無しさん:03/05/10 11:59
>>912
大丈夫だ。99%の本は不親切だ。
初心者向けに薦められる本などない。

914 :デフォルトの名無しさん:03/05/10 12:03
>>912
始めたばかりの癖に
「不適切な教本」という評価を下せる
お前に乾杯!

915 :デフォルトの名無しさん:03/05/10 12:23
真って非0だったっけ。

916 :デフォルトの名無しさん:03/05/10 12:24
>>915
un

917 :915:03/05/10 12:26
ごめ。非0で条件分岐したわ。1だけっていう勘違いでした。

if(5)
  printf("true\n");

918 :デフォルトの名無しさん:03/05/10 12:57
おい、画像の表示方法おしえろ。
本とかネットで探してもあんまりそういうの見当たらないんだ。
どういう風に表示するんだ?
画像処理の関数とかがあんのか?

919 :デフォルトの名無しさん:03/05/10 13:04
>>918
VBなら楽だよ。VB使いなよ。

920 :デフォルトの名無しさん:03/05/10 13:08
>>918
OS などの環境に依存する。

921 :デフォルトの名無しさん:03/05/10 13:09
graph.h後から入れるのはやめたほうがいいのか。
入ってるコンパイラってどんなのがありますか?

922 :デフォルトの名無しさん:03/05/10 13:10
おい、文字列の代入方法おしえろ。
本とかネットで探してもあんまりそういうの見当たらないんだ。
どういう風に代入するんだ?
文字列代入の関数とかがあんのか?

923 :デフォルトの名無しさん:03/05/10 13:13
>>922 は俺じゃねぇぞ

真似すんな低脳。
そんなレベルのことならネットで調べろ。

OSに依存するんだな。
OSはWINだ。
画像処理系は難度が高いのか?

それともわざわざ解説書作っても需要が無いからなのか?

924 :デフォルトの名無しさん:03/05/10 13:14
お前みたいな頭の沸いたヤシはJavaでも使ってろ

925 :デフォルトの名無しさん:03/05/10 13:14
*pointer="文字列";

926 :デフォルトの名無しさん:03/05/10 13:14
>>923
環境に依存するかどうかわからないやつに低脳などと言われたくないよ。

927 :デフォルトの名無しさん:03/05/10 13:14
ふーん(;´Д`)ハァハァ

928 :デフォルトの名無しさん:03/05/10 13:14
>>922 は俺じゃねぇぞ

わざわざ言うほどのことか?

929 :デフォルトの名無しさん:03/05/10 13:15
>>925
サンクス。うまくゆきました。

930 :デフォルトの名無しさん:03/05/10 13:16
VBか。VBはちょっと触ったことがあるんだが、
VBじゃ駄目なんだ。Cをやりたいんだ。
でも初心者なんだからVBからやりなよ、
なんておせっかいはまっぴらごめんだぜ。

C++でも比較的簡単に表示できるみたいだが、
C言語では難しいのか?
C言語のグラフィック処理の資料が見当たらないのだが。

931 :デフォルトの名無しさん:03/05/10 13:17
GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo!



932 :デフォルトの名無しさん:03/05/10 13:18
お前等な、スキルあるから調子に乗りやがってなまいきだな。
俺も早くそれくらいのレベルになりたいな。

おい、グラフィックどうやって表示するんだ?
簡単な例を示せ。

933 :デフォルトの名無しさん:03/05/10 13:18
>>918
私、Cでは制御系しか作ったことないわよ。画像なんて聞いたことないわ。
自動販売機、エレベーター、パチンコの看板、ETCとか作ったけどね。
画像をいじりたいならJavaで決まり。サウンド系弱いけど画像は結構できる。
VBなんてレベルの低い人しか使わないよ。

934 :デフォルトの名無しさん:03/05/10 13:19
看板?

935 :デフォルトの名無しさん:03/05/10 13:20
デモンストレーション?

936 :デフォルトの名無しさん:03/05/10 13:20
>>931 なるほど、お前なかなかの切れ者だな。
GUIか、言葉だけ知ってて内容知らんから、とりあえず、
C言語で何ができるかどうか調べてみる必要がありそうだな。

質問はやめておいてしばらく「GUI」というものについて調べてみる。
また理解できてきたら質問しに来るからな。
また答えろよ。

937 :デフォルトの名無しさん:03/05/10 13:20
グラフィカルウザーインターフェース

938 :デフォルトの名無しさん:03/05/10 13:21
Java厨もVB厨もウセロ、ここはC言語スレだ

939 :デフォルトの名無しさん:03/05/10 13:21
>>936
またのお越しを心よりお待ちもうしあげております。

940 :デフォルトの名無しさん:03/05/10 13:21
やはり休日は釣り人が多いな。

941 :デフォルトの名無しさん:03/05/10 13:22
>>938
VBはともかく、JAVAに導くのは妥当だと思うが。

942 :デフォルトの名無しさん:03/05/10 13:23
ピカピカくるくる電飾が動いてるでしょ。
それよ!
配列で電球全てを制御して最後はちょっとやばいことになったけど
一度納入するとバグがなければ壊れるまでだからこれが一番手を抜いたわ!

943 :デフォルトの名無しさん:03/05/10 13:24
俺は質問しに来ただけだ、
うせろ、雑魚が。

プログラムを動かすには
コンピューターの総合的な知識が必要だってこと、
プログラムいじってみて分かった。

お前等ホント、パソコン好きだな。
俺も中学生くらいからパソコンいじっておけば良かった。

今の子供はパソコンが一家に一台の時代だから羨ましいぜ。


944 :デフォルトの名無しさん:03/05/10 13:25
>>943
ネタですか?
一家に三台ですが。

945 :デフォルトの名無しさん:03/05/10 13:25
> 一度納入するとバグがなければ壊れるまでだからこれが一番手を抜いたわ!
なんで手を抜くんだ

946 :デフォルトの名無しさん:03/05/10 13:26
Java厨しつこい

947 :デフォルトの名無しさん:03/05/10 13:27
>>938>>941>>946
お前ら、ヨソでやれ。

948 :デフォルトの名無しさん:03/05/10 13:28
プログラマーとは如何に手を抜くかを考えるものよ・・・
効率、信頼性なんて二の次よ!

949 :デフォルトの名無しさん:03/05/10 13:29
次スレヨロ↓

950 :デフォルトの名無しさん:03/05/10 13:31
うし

951 :デフォルトの名無しさん:03/05/10 13:31
次スレは
【プログラマは如何に手を抜くか?】
かい

952 :デフォルトの名無しさん:03/05/10 13:32
>>948
Java厨らしい無責任さだな(w

953 :950:03/05/10 13:33
たててくる

954 :デフォルトの名無しさん:03/05/10 13:35
GUIをちょこと調べたが、画像を表示するだけでいいんだ。
俺が求めてる知識は多分GUIじゃないと思う。
bmp png gif そういう画像ファイルを表示したいだけなんだ。

それでだな、ゲームを作ってるHPなんだが、
http://www.game2channel.com/semi/programing/gpnyumon/06/index.html
ちらちらとこのHPを見てたんだが、グラフィック表示例の一行目、

#include"gmsub.h"

と、ある。この関数はHPからダウンロードして使ってくださいと書いてある。
こういうグラフィックの自作関数を作るのには相当なスキルが必要なのか?

もう頭ん中がパンパンだぜ。

955 :デフォルトの名無しさん:03/05/10 13:36
なんてこと言うの!
プログラムなんてあってないようなもの製品がきちんと動けば
どう書こうが関係ないわ””どうせ見れないし。
社長が来てこのコードおかしいなんていうわけがない。
go to文Javaではbreak point:を使おうが関係ないないのよ。
でも今まで使った人見たことないけど。やっぱり会社で禁止されてんのかな?

956 :デフォルトの名無しさん:03/05/10 13:37
バカはどっか逝け

957 :デフォルトの名無しさん:03/05/10 13:40
おい、病的にお人よしでおせっかいな奴いねぇのか?
とっとと教えてくれ。

958 :デフォルトの名無しさん:03/05/10 13:41
病的折衷がらくた言語

959 :デフォルトの名無しさん:03/05/10 13:42
ShowImage(b,i);

960 :デフォルトの名無しさん:03/05/10 13:42
GUI “など” の “標準Cではできない事” の質問は使用している “開発環境のスレ” へGo!


961 :病的:03/05/10 13:43
>>954
相当なスキルが必要です


962 :デフォルトの名無しさん:03/05/10 13:43
C04では標準になるらしいが、今はまだ非標準。

963 :デフォルトの名無しさん:03/05/10 13:44
>>961 おだいじに。

964 :デフォルトの名無しさん:03/05/10 13:45
CでC++を使う方法を教えてけろ

965 :病的:03/05/10 13:46
>>963
もまえもな

966 :デフォルトの名無しさん:03/05/10 13:46
int C;
C++;


967 :デフォルトの名無しさん:03/05/10 13:47
>>964
ありません

968 :デフォルトの名無しさん:03/05/10 13:47
#include <C++>

969 :デフォルトの名無しさん:03/05/10 13:47
だからCで画像うんぬんは無理があるのよ。
Javaにしなさい。パッケージawtのGraphicsクラスのメソッド
g.drawImage(im,50,50);で一発で出るのよ。(imはImageで初期画済みね!gもGraphicsで)
コード全部で10行いかないわよ。

970 :デフォルトの名無しさん:03/05/10 13:48
コンパイラを落としてインストールしたんですけど、ネットで調べたらリンカーというものも必要だと知りました。
Windows2000で動くリンカーを教えてください。

971 :デフォルトの名無しさん:03/05/10 13:48
>>969
MS-DOSで動きますか?

972 :デフォルトの名無しさん:03/05/10 13:49
…本気でJAVA厨がウザくなってきた

973 :デフォルトの名無しさん:03/05/10 13:49
次スレまだぁ〜?チンチーン

974 :デフォルトの名無しさん:03/05/10 13:49
>>970
プリプロセッサはさがさんで良いのか?

975 :デフォルトの名無しさん:03/05/10 13:50
>>972
さっきから訊こうと思ってたんだが。
何故そこまでJAVAを嫌う。

976 :デフォルトの名無しさん:03/05/10 13:50
<img src="image.jpg">

977 :デフォルトの名無しさん:03/05/10 13:51
JAVAが嫌いなわけじゃない、スレ違いなネタを続ける奴が嫌いなだけ

978 :デフォルトの名無しさん:03/05/10 13:51
>>975
押し付けてくるから

979 :デフォルトの名無しさん:03/05/10 13:56
キーボードから入力された文字列を、配列に格納する際の質問です。

char str[10];
fgets(str, 10, stdin);

こう記述されいると、strに格納されるのは9文字(+ヌル)ですよね。
もしキーボードから入力されたデータが15文字くらいあった場合、
文字数が多すぎて配列に入り切らないという旨のエラーを表示させたいんですが、
文字数はどうやって判断したらいいのでしょうか?

最初は改行文字が格納されているかどうかで判断しようと思っていたのですが、
9文字丁度の文字列が入力された場合の処理がよく分からなかったので。
なにかいい方法はありますか?

980 :デフォルトの名無しさん:03/05/10 13:57
test

981 :950:03/05/10 14:00
http://pc2.2ch.net/test/read.cgi/tech/1052542761/

たてたよ。串探すのにてまどった

982 :デフォルトの名無しさん:03/05/10 14:09
>>979
入力を促す時点で、制限バイト数を提示してはどうかね。

983 :デフォルトの名無しさん:03/05/10 14:10
あんたなに言ってのよ!
fgetsはファイルから1行読み込むのよ。
char *str;
int flag=0;
do{
if(flag==1)
printf("もう一度入力しろアホ");
gets(str);
if(10<(strlen(str)))
break;
flag=1;
}while(1);
まったくJava嫌いの人はどっかいっちゃったの?

984 :デフォルトの名無しさん:03/05/10 14:10
>>979
fgets(str, 11, stdin);


985 :デフォルトの名無しさん:03/05/10 14:12
>>983
ネタやるんならキエロ

986 :デフォルトの名無しさん:03/05/10 14:17
>>979
多めに取得して strlen() で判定。

987 :デフォルトの名無しさん:03/05/10 15:20
>>979
getchar() で一文字ずつ判定。

988 :デフォルトの名無しさん:03/05/10 15:30
>>987


989 :デフォルトの名無しさん:03/05/10 15:33
本当に長さが分からないなら>>987も手ではなかろうか。てかそれしか
ないような。Cを使う理由が無いなら C++ を使う。

990 :デフォルトの名無しさん:03/05/10 15:36
>>986でいいだろ。

991 :デフォルトの名無しさん:03/05/10 15:41
>>988
どうせお前は プ しか書けないんだから、でてくんな。

992 :デフォルトの名無しさん:03/05/10 15:41
うめうめ。

993 :デフォルトの名無しさん:03/05/10 15:43
昔はfgetcの関数呼び出しのオーバーヘッドも無視できなかったなぁ

994 :デフォルトの名無しさん:03/05/10 15:45
たてたて

995 :デフォルトの名無しさん:03/05/10 16:02
995

996 :デフォルトの名無しさん:03/05/10 16:02
996

997 :996:03/05/10 16:03
1000

998 :999:03/05/10 16:03
1000!!

999 :999:03/05/10 16:04
1000?

1000 :1000:03/05/10 16:04
うひゃうひゃうひゃ

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

203 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)