C統合・質問スレッド at TECH
[2ch|▼Menu]
1:デフォルトの名無しさん
03/11/09 15:37
いろんなスレが乱立していますが、統合的なスレッドがないので立てました。
質問もOK

関連スレ
C#って死滅する理由がないよね! Part4
スレリンク(tech板)
C#最強伝説
スレリンク(tech板)
C#とJava、どっちをおぼえればいいの?
スレリンク(tech板)
C#Builder Professional 質問箱
スレリンク(tech板)

関連リンク
URLリンク(dir.yahoo.co.jp)


2:デフォルトの名無しさん
03/11/09 15:38
スレタイ間違った。
終了…

3:デフォルトの名無しさん
03/11/09 16:08
頼むからスレ立てフォームに目立つように「タイトルに#を入れるな」と書いてくれ。



4:デフォルトの名無しさん
03/11/09 16:28
どうして#が無視されるんだろう…

5:デフォルトの名無しさん
03/11/09 17:25
クソスレage

6:デフォルトの名無しさん
03/11/09 17:27
C言語スレ無駄に重複させんなヴォケ >>1

7:デフォルトの名無しさん
03/11/09 17:27
>>4
C#厨が嫌われているから

8:デフォルトの名無しさん
03/11/09 17:28
まだC#厨の>>1か。

「C#最強伝説」とか馬鹿な名前のスレたておって「C#最凶伝説」だろヴォケが

9:デフォルトの名無しさん
03/11/09 17:34
みんな悪かった…
半角#が無視されることを知らなかった…

10:デフォルトの名無しさん
03/11/09 22:54
2で終了かよ

11:デフォルトの名無しさん
03/11/10 07:05
>>10
ごめん。本とは♯を入れるべきだったんだが、さすがにこのスレタイでは使えない(誰がどう見てもCのスレに見える)

12:デフォルトの名無しさん
03/11/10 21:36
前の2スレの913に対する指数関数の計算。誰か答えてやれよ!
こういうのをマクローリン展開っていうんだ。覚えておけ



/* poly.c */

#include <stdio.h>

#define N (4)

main()
{
floatt, n, x, y, z;
intfact, i, j;
y=0
fact = 1
t=1
for(j = 0; j <= 7; j=j+1){
t=t*x;
for(i = 1; i<= 8; ++i){
fact = fact * i;
 y=y+ t/fact;
}
}
}


13:デフォルトの名無しさん
03/11/10 22:43
>>12はマルチ

14:デフォルトの名無しさん
03/11/11 23:25
>>12
>intfact, i, j;
しかしこれはさすがに通らない。

15:デフォルトの名無しさん
03/11/11 23:26
>floatt, n, x, y, z;
ついでにこれもな。

16:デフォルトの名無しさん
03/11/12 00:05
tabが落ちただけだろ

17:デフォルトの名無しさん
03/11/15 12:56
>>16
それ以前にここはC#スレ(の残骸)です。

18:デフォルトの名無しさん
03/11/16 05:46
プログラミングが芸術って言うけどソースをAAにするつわものはいないか?

19:デフォルトの名無しさん
03/11/16 10:21
>プログラミングが芸術

その考え、捨てた方が安全。

20:デフォルトの名無しさん
03/11/16 11:17
>>19
そうします・・・
もう少しいい物が作れるようになってから言うようにしますね

21:デフォルトの名無しさん
03/11/21 10:26
>>18
これとか
スレリンク(tech板:21番)

22:デフォルトの名無しさん
03/11/21 10:33
>>21
ほとんどコメントじゃないですか。

23:デフォルトの名無しさん
03/11/21 10:43
>>21
>>22に同じくほとんどコメントじゃんw

でも何気にワロタ

24:デフォルトの名無しさん
03/11/21 13:01
1は立て逃げ?
削除依頼ださないの?

25:デフォルトの名無しさん
03/11/21 14:16
[287] 名前: 飛べない削除屋 ★ [ sage ] 投稿日:03/10/18 16:30 ID:???
(引用前略)

>>286
スレタイを間違えたという理由では削除できませんです。
また、スレタイの変更はできません。

26:デフォルトの名無しさん
03/11/21 14:22
>>25
マジで?
じゃあ、ほっとこうか…
それとも再利用する?

27:あふ
03/12/13 01:52
くだ質でながされてしまいました。
画像や音声ファイルなどを実行ファイルに一まとめにしたいのですが、
どうすれば良いでしょうか?

C言語、gccですが、Makefileなどで何かすればよいのでしょうか?
リンクするとき*.oと一緒にリンクするのですかね?


28:デフォルトの名無しさん
03/12/13 01:56
すいません・・・・もぅ我慢できないっす・・・・















ぬるぽ

29:デフォルトの名無しさん
03/12/13 09:32
>>28
そろそろ八時間経ちますね。

30:デフォルトの名無しさん
03/12/13 09:51
ポインタ不要論
URLリンク(member.nifty.ne.jp)

説明だけ読むとポインタが参照になっただけでなんにも変わってない気がします。

31:デフォルトの名無しさん
03/12/13 10:15
>>30
文字列処理や動的配列なんかの仕方なくポインタを使わざるを得なかった部分で
ポインタを使わなくてすむだけでもだいぶ楽ではあるんだろうけど

32:デフォルトの名無しさん
03/12/13 15:24
C言語統合スレですかここは。
なら質問します。

C言語でお勧めのコンパイラはなんですか?

33:デフォルトの名無しさん
03/12/13 15:28
>>32
GNU C Compiler

34:デフォルトの名無しさん
03/12/13 16:16
>>33
そんなレガシーなモノ!


35:デフォルトの名無しさん
03/12/13 18:21
>>34
何年製のタイムマシンをお使いですか?

36:デフォルトの名無しさん
03/12/13 19:37
gccはGNU Compiler Collectionで、GNU C Compilerだったのは昔の話。

37:34
03/12/13 19:49
>>36
でも、GNUなCのコンパイラに関してはGNU C Compilerと言う名が残っているよ。

彼はどこにもgccとは書いてないから耐えがたきを耐えて黙ってたんだ。俺は。




38:デフォルトの名無しさん
03/12/13 21:02
GNU Compiler is not C Compiler

39:デフォルトの名無しさん
03/12/13 21:03
>>38
gccはね。大丈夫か?

40:デフォルトの名無しさん
03/12/14 10:12
Gcc is not C Compilerにすべきだったな

41:デフォルトの名無しさん
03/12/14 10:20
>>40
Collectionはどこに消えたんだ?

42:デフォルトの名無しさん
03/12/14 20:15
>>33
どうもありがとうございます

43:デフォルトの名無しさん
04/01/06 22:10
void*の使い方についてお聞きしたいのですが。
bsearchやqsortなどの関数で探したい値の型は何でも探せる
ようになってますが、その際にサイズとしてsize_t型を引数として
与えていますよね。
で、探したい値や探す配列はvoid*型の引数として
受け取っているので、size_tで受け取った型にキャストしないと使えない
と思うんですよ。
その時size_t型でバイト数はわかるけれども実際にint型なのかlong型
なのかって判らないと思うのですが、どんなふうにしてキャストしてるんでしょうか?
知っている方が居ればご指導下さい。よろしくお願いします。


44:デフォルトの名無しさん
04/01/06 22:17
>>43
自明なので勝手に指定して下さい。


45:デフォルトの名無しさん
04/01/07 10:22
>>43
何書いてあるのかよくわからん。

46:デフォルトの名無しさん
04/01/07 16:23
>>43
bsearchやqsortはポインタの指す中身にはまったく関知しない。
そのために比較関数を渡すようになってる。

47:デフォルトの名無しさん
04/01/17 23:45
ファイルが更新されたというのをCのプログラムへ渡せますか?
ディレクトリ内を延々と読み込んで判定するというようなのではなく、
「更新された」という情報をトリガにして読みにいきたいんです。

48:デフォルトの名無しさん
04/01/18 00:14
>>47
FindFirstChangeNotification

49:デフォルトの名無しさん
04/01/18 00:40
>>48
標準の関数ですか?<FindFirstChangeNotification

50:ただし、Windows 限定だけどな。
04/01/18 09:49
>>49
標準だよ。

51:デフォルトの名無しさん
04/01/18 12:48
Win32標準。

52:デフォルトの名無しさん
04/01/18 12:54
>>51
いいえ、シェル拡張です。

53:デフォルトの名無しさん
04/01/18 13:24
>>52
ふーん、俺の Windows2000 では kernel32.dll にあるみたいなんだけど、君のは違うんだな。

54:デフォルトの名無しさん
04/01/18 20:52
SDKにあるね。FindFirstChangeNotification。
MSDN参照。おしまい。

55:デフォルトの名無しさん
04/02/14 16:39
C++で質問なんですが
2行3列の行列の和を求める関数 int sum(int x[][3],int y[][3],int z[][3])
で仮引数x[][3]をx[][]と出来ないのは何故ですか?

また、この関数だとn行3列の行列の和しか出せないのですが
n行m列の行列の和を出す関数は作れないんでしょうか?


56:デフォルトの名無しさん
04/02/14 17:05
>>55
>で仮引数x[][3]をx[][]と出来ないのは何故ですか?
サイズのわからない型を要素とした配列は定義できないからです。
サイズがわからないと、添え字によるアクセスができないので。

>n行m列の行列の和を出す関数は作れないんでしょうか?
作れます。

57:56
04/02/14 17:13
「作れます。」ではあまりに不親切ですね…
一例を書いておきます。
int sum(int *x, const int *y, const int *z, int n, int m)
{
    for(int i = 0; i < n; i++)
        for(int j = 0; j < m; j++)
            x[i * m + j] = y[i * m + j] + z[i * m + j];
    return 0;
}

58:デフォルトの名無しさん
04/02/14 17:28
>56さんありがとうございます。
これで次章に進めます。

59:デフォルトの名無しさん
04/02/16 18:32
文字列を数値に変換してそれをint型の変数に入れたいのですが
例えば
char buf[] = "23456";
int num;

こんな形だった場合、numに数値の23456を入れるにはどのようにするんでしょうか?
bufに入るのは数字のみです。
よろしくお願いします(´・ω・`)

60:デフォルトの名無しさん
04/02/16 18:33
atoi

61:59
04/02/16 18:34
sage忘れ&宿題スレと間違いました。。。すいません
首吊って逝ってきます(´・ω・`)

62:デフォルトの名無しさん
04/02/16 21:29
西成広告
■ ソフトの総合商社 そふとはうす ■
Windows日本語製品版です。Macもあります。 単位はすべて円です
Office 2003 Pro 10,000 
WindowsXP Pro 4,000 
Windows2000 Pro 4,000 
Windows2003 ServerEnterprise 15,000 
FrontPage 2003 4,000 
OneNote 2003 4,000 
Acrobat 6.0 Pro 7,000 
AfterEffects 6.0 Pro 15,000 
CreativeSuite Premium 20,000 
Premiere Pro 10,000 
DreamweaverMX 2004 5,000 
FlashMX 2004 5,000 
FireworksMX 2004 5,000 
StudioMX2004 with FlashPro 10,000 
LightWave3D 7.5 10,000 
Shade6 Pro 10,000 
AutoCAD 2004 20,000 
AutoCAD LT 2004 12,000 
VectorWorks Ver10.5 10,000 
RenderWorks Ver10.5 10,000 
3DStudioMAX 6J 10,000 
NortonSystemWorks 2004 Pro 3,000 
NortonInternetSecurity 2004 Pro 3,000 
Painter8 5,000 
すべてユーザー登録できません。windows日本語製品版です。
ご注文はここ→ chuumon@jumpy.it

63:デフォルトの名無しさん
04/02/19 12:25
デジタルマーズってどうやってつかうのでつか?
コンパイルはできまつたが、リンクでおちまつ。

64:デフォルトの名無しさん
04/02/20 18:34
Lineage2, ResonanceAge等の3Dゲームのマクロ or BOTをCで作りたいのですが知識が無くて製作できません
お勧めの書籍やツール等あったら教えてもらえないでしょうか?
資金はバイトで貯めた5万円です、BOTを作るにあたってアドバイスなど頂けたら嬉しいです

65:デフォルトの名無しさん
04/02/20 18:35
age忘れました

66:デフォルトの名無しさん
04/02/20 18:55
質問でふ。
コンパイルして作られる実行ファイルのアイコンを
Windowsのデフォルトのアイコンでなくて別のビットマップに
したい時はどうしたらよいでしょう?
ググったけどわからなかった・・

67:デフォルトの名無しさん
04/02/20 18:56
Windowsでしたらリソースでググって下さい。

68:66
04/02/20 19:51
>>67
なんかわかったっぽいです。
心から礼を言いたい。

69:
04/02/22 19:19
列挙型で質問なんですが

enum menu{ add, kill };

menu selemenu(void)
{
int a;

return (menu(a));
}

int main(void)
{
menu b;

switch( b = selemenu() )
{

}
return 0;
}

私が参考にしている本では上記のように
selemenu関数の返却値a(menu型)をmain関数でb(menu型)に代入しています。
しかし、bがint型でもa(menu型)が代入できてしまいます。

なぜですか?

70:デフォルトの名無しさん
04/02/22 19:23
>>69
互換性があるからです。ポインタと配列のようなものです。

71:デフォルトの名無しさん
04/02/22 19:38
まだポインタまで勉強してないんですが
配列の要素一つ一つに型が設定できるとか言う話と関係するんですか?

レスありがとうございます。

72:デフォルトの名無しさん
04/02/22 22:02
enum型は int の値に名前を付けて、その集合を定義していると考えればいい。
通常は0から順に値が自動的に当てはめられるが、
enum menu{ add = 10, kill = 20 };
みたいに値を指定することもできる。

73:デフォルトの名無しさん
04/02/22 22:29
あまり詳しいことを言うと混乱するかもしれないので言わないが、
列挙体型の値は int 型へ明示的なキャストなしで変換される。
それは仕様。

で、逆に int 値から列挙体型へは明示的にキャストしないといけない。

74:デフォルトの名無しさん
04/02/23 11:23
>>71
> 配列の要素一つ一つに型が設定できるとか言う話と関係するんですか?
意味不明。

75:デフォルトの名無しさん
04/02/29 18:38
C++で質問なんですが
typedefがなんなのかが良くわかりません。
staticやautoは解かるんですが・・・

76:デフォルトの名無しさん
04/02/29 20:50
>>75
ある型に別の名前を付ける予約語です。
Cの時代は構造体のstructが省けなかったのでそれの除去などによく使われていました。

77:デフォルトの名無しさん
04/02/29 22:55
C++だと、名前空間とかクラステンプレートの指定を省略するのによく使われている。

78:デフォルトの名無しさん
04/03/07 13:01
名前空間はエイリアスが作れるが。

namespace A = B::C::D;


79:デフォルトの名無しさん
04/03/07 13:15
>>78
>>77が言っているのは
typedef std::string string;
のような話じゃないか?
クラス内では名前空間に対するusingができないから
有効なこともあるかと。

80:デフォルトの名無しさん
04/03/07 13:20
std::stringの実体ってびろーんと長いテンプレートの具体化なんでしょ?


81:デフォルトの名無しさん
04/03/07 13:35
>>79
なるほど。そういうことか。

82:デフォルトの名無しさん
04/03/13 17:45
ポインタについて質問です

int* a;
a = &b;

この場合aがポインタ?
ポインタだとすると&bの名前は何でしょうか?

それともint* a; a = &b; 二つでポインタ?

83:デフォルトの名無しさん
04/03/13 17:59
>>82
ポインタは「型」について言うときと「変数」について言うときがある。
int* a; /* aは「intへのポインタ」型の変数。単に、aはintへのポインタであるとも言う。 */
a = &b; /* &bは「intへのポインタ」型の式。型が同じなのでaに代入できる。 */

84:デフォルトの名無しさん
04/03/13 18:03
>83
即レスありがとうございます。

85:デフォルトの名無しさん
04/03/13 19:34
>>83
アドレスとポインタは違うものだと思うぞ。

86:デフォルトの名無しさん
04/03/14 18:00
関数へのポインタに関して質問です
double型の引数を受け取って、double型を返却する関数へのポインタfuncを
double (*func)(double x)
と宣言するそうなんですが
int* a = &bとオブジェクトへのポインタを宣言するなら、関数へのポインタの宣言は

double* func(double x)
になるんじゃないでしょうか?



87:デフォルトの名無しさん
04/03/14 18:04
>>86
int ???;
は、"???の型がintである。"と読むといい。
int *a;
なら、*aの型がint、
double (*func)(double);
なら、(*func)(0.0)の型がdouble
double *func(double);
なら、*func(0.0)の型がdouble

88:デフォルトの名無しさん
04/03/14 18:56
>87
int* a = &bとint *a = &bは同じ宣言なんですか?

>double (*func)(double);
なら、(*func)(0.0)の型がdouble
double *func(double);
なら、*func(0.0)の型がdouble

*funcに()のある無しで何か違いはあるんでしょうか?

89:デフォルトの名無しさん
04/03/14 19:06
関数ポインタと普通のをごっちゃにするなよ

90:デフォルトの名無しさん
04/03/14 19:16
ごっちゃにしてたみたいです;

double *func();とするとdouble型へのポインタを返すfunc関数
double (*func)();とすると整数を返す関数へのポインタfunc
ってことでしょうか?

double *func();とするとdouble型へのポインタを返すfunc関数
は番地を受けとってなにか処理をして番地を渡す関数になるんでしょうか?

91:デフォルトの名無しさん
04/03/14 19:26
ごっちゃになってるのは君の頭だ。と言ってみる。

>>87
> int* a = &bとint *a = &bは同じ宣言なんですか?
同じ。

> *funcに()のある無しで何か違いはあるんでしょうか?
ポインタなら変数だから中身を入れ替えられる。
逆に普通の関数は定数だとでも思って。

>>90
> double *func();とするとdouble型へのポインタを返すfunc関数
> double (*func)();とすると整数を返す関数へのポインタfunc
doubleを返す関数へのポインタ、ね。

> double *func();とするとdouble型へのポインタを返すfunc関数
> は番地を受けとってなにか処理をして番地を渡す関数になるんでしょうか?
意味不明。引数にアドレスを取るような宣言には見えない。
番地を渡すというのが返すという意味なら、そこは正しい。

92:デフォルトの名無しさん
04/03/14 20:08
なるほど
レスありがとうございました。

93:デフォルトの名無しさん
04/03/17 23:10
素朴な疑問なんだけどfloorって関数があるじゃない。
実数xに対してxを超えない最大の整数を返すやつ。
例:floor(5.3)=5 floor(-1.5)=-2

で、これってなんで戻り値が実数になってるの?
double floor(double x)
じゃなくて
int floor(double x)
のほうが自然だと思うのだけど。
何か理由があるんですか?

94:デフォルトの名無しさん
04/03/17 23:14
int(double x)
のほうがもっと自然だな

95:デフォルトの名無しさん
04/03/17 23:15
>>93
intの範囲を越えた場合どうしましょう?

96:デフォルトの名無しさん
04/03/17 23:25
>>95
あーなるほど。
どうもありがとん

97:デフォルトの名無しさん
04/03/18 03:32
Web用のCのCGIで、<form>から受け取ったデータの解釈はどうやればいいのでしょうか?
環境変数を得るまではできたのですが・・・
GETとPOST両方教えてください。

Perlはそこそこできますが、Cは初心者です

98:デフォルトの名無しさん
04/03/18 03:49
>>97
URLリンク(www-cms.phys.s.u-tokyo.ac.jp)

99:デフォルトの名無しさん
04/03/18 03:57
>98
既に見ました。
C++じゃなくてCでありませんか?

100:デフォルトの名無しさん
04/03/18 04:19
>>99
お前、全然読んでねーだろ。

101:デフォルトの名無しさん
04/03/18 05:05
>100
読んでもさっぱりです。

そういえばCって仮想配列むりなんですよね

102:デフォルトの名無しさん
04/03/18 05:59
>100
URLリンク(www.coins.tsukuba.ac.jp)
ここので一応、取得はできました。

103:プログラムだめぽ
04/03/23 20:46
しょぼい質問で悪いのですが(´・ω・`)
下のifとelseifの部分で何も実行しないように
作りたいのですが、エラーがでてしまいます
どうすれば解決します?

void remove_dead_path(struct survival_path *root){
if(root->upper!=NULL)remove_dead_path(root->upper);
if(root->lower!=NULL)remove_dead_path(root->lower);
if(root==leaf[0])              ←ここから
else if(root==leaf[1])
else if(root==leaf[2])
else if(root==leaf[3])           ←ここまでなにも実行したくない
else free(root);
}

104:デフォルトの名無しさん
04/03/23 20:51
>>103
if(root==leaf[0])              ←ここから
    ;
else if(root==leaf[1])
    ;
else if(root==leaf[2])
    ;
else if(root==leaf[3])           ←ここまでなにも実行したくない
    ;
else free(root);


105:プログラムだめぽ
04/03/23 20:55
>>104
セミコロンつけるだけでよかったのか
ありがとう〜助かった。・゚・(ノД`)・゚・。

106:デフォルトの名無しさん
04/03/24 20:18
>>25
この削除人て、アホだろ

107:デフォルトの名無しさん
04/03/29 15:21
あほなのはむしろ>>106であるという趣旨の書き込み

108:デフォルトの名無しさん
04/04/10 13:58
むしろくそスレほどageる価値があるという趣旨の書き込み

109:デフォルトの名無しさん
04/04/30 21:09
現在勉強中のC初心者です。
独習Cの次に読むとよさげな本を教えてください。

110:デフォルトの名無しさん
04/04/30 21:41
独習Cが終わっても、まだそんなこと言ってるのか。

111:デフォルトの名無しさん
04/04/30 21:52
>>110
だめですか?

112:デフォルトの名無しさん
04/04/30 21:54
猫でも分かるWindowsプログラミング、でもやってみれば?

113:デフォルトの名無しさん
04/04/30 21:57
あ、Windowsプログラミング、興味ありました!
そうか、そういけばいいのですね。
すみません、ご親切にありがとうございます!!!

114:デフォルトの名無しさん
04/04/30 23:09
独習Cの次は初めてのCだ。
間違いない。

115:陽一
04/05/03 11:59
分からないときは、
作ってわかるCプログラミング。
分かったら、CCレモンを飲む。
間違いない。

116:デフォルトの名無しさん
04/05/08 16:39
質問です。
キーボードの入力をscanfとかじゃなくて押された瞬間処理をする関数ってないですか?
HSPのstick見たいな奴・・・

117:デフォルトの名無しさん
04/05/08 16:43
>>116
<conio.h>があれば、その中のgetche

118:デフォルトの名無しさん
04/05/08 23:28
>117
具体的な使い方がワカリマセン
(´・ω・`)ヘルプで命令が見つからない・・・

119:デフォルトの名無しさん
04/05/09 04:56
        ∧_∧∩   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
       ( ´∀`)/  < 先生!やっぱ無限ループですね!
  __ / /   /     \________
  \ ⊂ノ ̄ ̄ ̄ ̄ ̄\
  ||\           \   
  ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄||
  ||  || ̄ ̄ ̄ ̄ ̄ ̄ ̄||
     .||              ||

120:デフォルトの名無しさん
04/05/09 07:38
>>116
それは、windowsアプリにしたほうが楽。

121:116
04/05/09 15:03
キーボードが打たれたときだけ反応して
打たれてなかったらそのままプログラムを進める。
打たれたキーによって処理をさせる。(Iが押されたら〜とか)

そのやり方がワカリマセン
getcheだと打たれるまでとまるので・・・
教えてクレクレ厨でスマソ 吊ってきまつΛ||Λ

122:デフォルトの名無しさん
04/05/10 17:08
# include <conio.h>
int c;
if(kbhit()) /* キーが押下されている */
    c = getch();
else
    /* 何か別のことをする */;

123:116
04/05/10 19:33
if(kbhit())のkbhitは何なんでしょうか・・・?
あとiが押されたらiが押されたと分かるようにするにはどうしたら・・・?(´・ω・`)

124:デフォルトの名無しさん
04/05/10 20:26
>>123
kbhitはキーボードのキーが押されているかを判定する関数。
iが押されたらgetch()から'i'が返る。
if(kbhit() && getch() == 'i') /* 今iが押されている */

125:116
04/05/10 21:33
>124
おお とてもわかりやすいです。
アリがd。ニューソクで47氏逮捕祭りか・・・

126:116
04/05/11 23:21
また迷惑かけに来ました。

if(kbhit()&&getch()=='a'){printf("a");}else if(kbhit()&&getch()=='b'){printf("b");}

上のようにするとキーボードの処理が遅くなります。どうしたら?

127:デフォルトの名無しさん
04/05/12 00:50
kbhitとgetchを複数回使わなければ良いのでは?

128:116
04/05/12 19:49
>127
それ以外のやり方しらないんで・・・

129:デフォルトの名無しさん
04/05/12 20:34
// なにをしたいのか知らないが、これで参考になるだろ。
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

#define END_CODE '\n'
const char *EndCodeName = "Enter";

int dispatch(int event){
  switch(event){
  case END_CODE:
    printf("プログラムを終了します。");
    exit(0);
  default:
    printf("[0x%02x] が押された。\n", event); 
  }
  return 0;
}

main(){
  int prev,cur;
  printf(" ********************\nキーコード表示。\n[%s]で終了します。\n********************\n", EndCodeName); 
  for(;;){
    if(!kbhit()) continue;
    if(prev != (cur = getch())){
      dispatch(cur);
      prev = cur;
    }
  }
}

130:116
04/05/12 20:53
>129

ありがとうございます。
とても参考になりました。

131:デフォルトの名無しさん
04/05/12 21:14
C言語で、JPEG画像ファイルを表示させようとした場合、どんなコントロールがありますか?
VBだったら、ピクチャーボックスなるものがあるけど、Cで扱えるコントロールにはどんなのがありますか。
当然ウィンドウ上で表示させるということです。

132:デフォルトの名無しさん
04/05/12 21:41
すいません、初歩的な質問なのですが

char型の変数って何バイトまで値を格納できますか?

ファイルから読んだ値を格納したいのですが、どの程度の大きさまで可能なのか分かりません

133:デフォルトの名無しさん
04/05/12 21:50
char自身は1バイト。

配列ならば・・・・・・自分で試してみろ。
char 2ch[10000000] // About 10M byte
とか。エラーが出たら駄目ー。出なかったらOK−


134:デフォルトの名無しさん
04/05/12 22:46
エラトステネスの篩を作ろうと思ったんですが、
配列の個数を1000000000000(1兆)個にしようとすると
うまくコンパイルできません。
配列の数をメモリの許す限り使いたい場合はどうしたらよいのですか?
とりあえず、配列の数が1兆個あれば問題ないんです。

135:デフォルトの名無しさん
04/05/12 22:53
>>134
1TByte以上のメモリを積んでください。
1.0005TByteくらいのメモリであれば問題無いと思います。

136:134
04/05/12 23:07
>>135
そんなの無理です。
計算してみたら私の言っていることが
いかに無理難題だったかがわかりました。
配列の数をなるべく多くするにはどうしたらいいのですか?
メモリの許す限り配列を並べる方法はありますか?

137:デフォルトの名無しさん
04/05/13 00:40
mallocとかでは駄目なのかい?

138:デフォルトの名無しさん
04/05/13 02:00
size_tが32bitだと無理

139:デフォルトの名無しさん
04/05/13 13:23
>>136
Windows2000(XP)だったら2GBが限界だよ。64bitのOSに乗り換えて1TB以上の
ディスクアレイを組んでやるしかない。

140:デフォルトの名無しさん
04/05/13 13:41
「配列の個数」ではなく「配列のサイズ」だろ
配列のサイズの上限は言語処理系のマニュアルに書いてあるはず
#メモリ上に乗らないデータを扱うというのは大昔からあるテーマだな

141:136
04/05/13 18:40
[10000][10000]で一億をやってみたいと思います。
[10000]だったら
9592個の素数を入れれましたので

142:デフォルトの名無しさん
04/05/13 19:33
配列じゃなくてリストを使ってみたらどうだろう?
動的にメモリを確保していくので可能な限り最大の値まで求められるし、
非素数と判明したノードはすぐに開放 or 再利用できるから、無駄も少ないだろ。

「エラトステネスのふるい」では無いかもしれないが。

143:デフォルトの名無しさん
04/05/13 20:20
あぁ、そんなことしなくてもいいじゃん。
動的に確保して、配列満杯になったら、全てファイルに書き出し。
んでまたそれ以上の数字について調べる。

これだったら、[10000]くらいでいいじゃん。
ただし処理が多少遅くなる可能性もあるけど。

これだったら、パソコンが扱える最大の数字まで、計算できるじゃん。

144:デフォルトの名無しさん
04/05/15 00:39
ファイルをセーブして、そのファイルに変数を保存しておく方法(int型など)は無いですか?
講座などを見てもchar型くらいしかのってないので。
char型から整数を取り出すしかないですかね?

145:デフォルトの名無しさん
04/05/15 00:48
fread&fwrite

146:デフォルトの名無しさん
04/05/15 01:25
fscanf&fprintfでもいい。

147:144
04/05/15 02:00
う〜ん fprintfとfscanfを使っても保存できるんですが
保存した変数の取り出し方がワカリマセン。ちゃんと保存できているのかも怪しいです。


148:デフォルトの名無しさん
04/05/15 02:14
データ形式は自分で責任持ってください。

149:デフォルトの名無しさん
04/05/16 16:22

ポインタへのポインタはどうやるんですか?

150:デフォルトの名無しさん
04/05/17 02:27
>>149
ポインタへのポインタをつくります。

151:デフォルトの名無しさん
04/05/19 16:18
URLリンク(do.sakura.ne.jp)
にはってある二つのソースは

sosuu[]=2;の配列の中の数字が違うのですが、
sosuu[0]を最初の配列として使用すると
最後に素数を表示するときになって
2番目の素数は1311096です。
と表示されてしまいます。
なぜなんでしょうか?

152:151
04/05/19 18:29
すいません、どなたもいらっしゃらないようなので
あげますね

153:デフォルトの名無しさん
04/05/19 18:53
>>152
sosuu[1]に何も値を代入してないから。
> sosuu[n+1] = sosuukouho;

> m += 1;
の間に
printf("n = %d, m = %d, sosuu[%d] = %d\n", n, m, n+1, sosuu[n+1]);
を入れて確認してみ

154:151
04/05/19 19:13
>>153さんわかりました。

if((sosuukouho % sosuu[n] != 0) && (n == m)) の部分の

(n==m)ここが原因だったんですね

(n==m-1)としたら直りました。

ここが影響したので
printf("素数の数は%d個で、最後の素数は%dです。\n",m,sosuu[m]); を

printf("素数の数は%d個で、最後の素数は%dです。\n",m,sosuu[m-1]);

になおして無事意図したとおりに動くようになりました。
ありがとうございました。



155:デフォルトの名無しさん
04/05/20 21:33
なーんでこのすれは閑古鳥がないてんだよう

156:デフォルトの名無しさん
04/05/20 21:43
>>155
それは、このスレの存在自体が「間違い」だから。
正しくはスレタイをミスっただけなんだが、そのミスが致命的なミスだったわけで・・・。

157:155
04/05/20 21:52
んじゃ、お気に入りから削除しますね

158:149
04/05/21 19:48
二次元配列のポインタの宣言しかたがわかりません

char a[2][2],*ptr,*ptr2

ここから自分なりに考えてもコンパイルエラーになります。


159:デフォルトの名無しさん
04/05/21 20:21
>>158
char (*pa22c)[2][2]; /* 2次元配列へのポインタ */
char *a22pc[2][2]; /* ポインタの2次元配列 */

160:デフォルトの名無しさん
04/05/22 17:11
>>159

dクス

161:160
04/05/25 22:10
またまたポインタの質問です

*(pointa + (指定一次元添字 * 二次元要素数) + 指定二次元添字) 某C講座から

上の指定一次元添字と二次元要素数というのはどういう意味なんでしょうか?
指定一次元添字が指定する一次元の配列番号なんですか?

日本語おかしいです。スミマセン

162:デフォルトの名無しさん
04/05/25 23:18
type array[N][M];
type *p = array;
array[4][12] = *(p + 4 * N + 12);


163:デフォルトの名無しさん
04/05/25 23:19
>>161

pointa[N * M]; /* pointa[N][M]; みたいに使う */
/* ... */
  a = pointa[i * M + j]; /* a = pointa[i][j]の代わり */

なので、
i : 指定一次元添字
j : 指定二次元添字
M : 二次元要素数
と思われます。

164:160
04/05/25 23:30
M+jとするのはなぜなんでしょうか?

165:デフォルトの名無しさん
04/05/26 22:58
>>164
M + jじゃなくて
(i * M)そこに + j している感じで

166:160
04/05/27 20:14
#include <stdio.h>
#include <conio.h>

int main()
{
int *ptr;
int a[2][2],b;

*ptr = a;

a[1][2]=5;

b=*ptr[1*2+1];

printf("%d",b);
getch();
}

167:160
04/05/27 20:15
アァ・・・
まちがえて送信してしまった・・・
166のソースがコンパイルできません

int ( *)[2]型はint型に変換できない
無効な間接参照

の二つです。

168:デフォルトの名無しさん
04/05/28 11:26
*p: int型
a: int(*)[2]型
b: int型
*p[1*2+1]: int*型

169:デフォルトの名無しさん
04/05/28 20:10
*p[1*2+1]はおかしい。
これは*(p[1*2+1])と解釈され、p[1*2+1]の型はintだから、*を適用できない。
無効な間接参照とはこのことだろう。

170:デフォルトの名無しさん
04/05/28 20:11
*p[1*2+1]はおかしい。
これは*(p[1*2+1])と解釈され、p[1*2+1]の型はintだから*を適用できない。
無効な間接参照とはこのことだろう。

171:160
04/05/28 20:35
>168
ptr=(int *)a;
としてなかったのが原因ですか。

ptr=(int *)a;
*ptr[1*2+1]=70 とやると失敗します。
*(ptr + (1*2)+1)=70とすると動くんですが・・・。

あと*(ptr + (1*2) + 1)とするとptrに(1*2)+1を足してますがptrはどんどん増えていかないのでしょうか?




172:160
04/05/28 20:36
>168
ptr=(int *)a;
としてなかったのが原因ですか。

ptr=(int *)a;
*ptr[1*2+1]=70 とやると失敗します。
*(ptr + (1*2)+1)=70とすると動くんですが・・・。

あと*(ptr + (1*2) + 1)とするとptrに(1*2)+1を足してますがptrはどんどん増えていかないのでしょうか?




173:160
04/05/28 20:39
>168
ptr=(int *)a;
としてなかったのが原因ですか。

ptr=(int *)a;
*ptr[1*2+1]=70 とやると失敗します。
*(ptr + (1*2)+1)=70とすると動くんですが・・・。

あと*(ptr + (1*2) + 1)とするとptrに(1*2)+1を足してますがptrはどんどん増えていかないのでしょうか?

174:デフォルトの名無しさん
04/05/28 21:13
>>166 のソースを正しくとこうなるんだよね
(便宜上aは初期化させてくれ)
#include <stdio.h>
#include <conio.h>
int main()
{
int (*ptr)[2], a[2][2] = {{0, 1}, {2, 3}},b;

ptr = a;

a[1][2]=5;

b=ptr[1][1];

printf("%d",b);
getch();
}



175:160
04/05/28 23:52
なんか3回も書き込んである・・・orz

>>174
おお ありがとうございます。

(*ptr)[2]は*ptrの変数配列ですか?

ptr[1][1]と*(ptr+(1*2)+1)ではどっちの方が処理早いですかね?

176:デフォルトの名無しさん
04/05/29 16:03
>>175
最適化でどっちも同じになるだろ

177:デフォルトの名無しさん
04/05/29 19:54
>>175
>(*ptr)[2]は*ptrの変数配列ですか?
>>159参照。
ptrはint[2]へのポインタ。

>ptr[1][1]と*(ptr+(1*2)+1)ではどっちの方が処理早いですかね?
この二つは全く意味が違う。
後者はptr[3]と同じで、型はintの配列。

178:177
04/05/29 20:42
>>160が理解していないと思われることを補足しておく。
必要がなかったらスルーしてくれ。

まず、二次元配列は、配列の配列である。つまり、
int arr[2][3];
という宣言があるとき、arr[0]やarr[1]はintの配列で、要素数は3である。
ここで、配列はその先頭要素へのポインタに変換されることを思い出して欲しい。
だから、arrはarr[0]へのポインタに変換される。arr[0]はintの配列だから、
変換された後のarrはintの配列へのポインタ、つまり型はint (*)[3]である。
int (*)[3]型の変数pを宣言するにはint (*p)[3];と書く。これが、>>174
ptr = a;
が正しくコンパイルされる理由だ。

次に、配列の要素を指しているポインタに整数nを足すと、
はじめに指していた要素のn個先の要素を指すポインタができる。
これは、その配列が、配列への配列(二次元配列)であっても同じことである。
だから、>>174の例で*(ptr+(1*2)+1)と書くと、ptrの三番目の要素が得られる。
実際にはptrには二つの要素しかないから、この結果は意味を成さない。

最後に、配列はメモリ上で、各要素が隙間なく並べられる。たとえば、
int arr[2][3];
と宣言した場合、arr[0]とarr[1]が隙間なく並べられる。
このとき、arr[0]やarr[1]も配列だから、これらの各要素も隙間なく並べられる。結果的に、
arr[0][0] arr[0][1] arr[0][2] arr[1][0] arr[1][1] arr[1][2]
と並ぶことになる。
この並びを一次元配列とみなしてアクセスするのが、>>161の方法である。
このとき、一次元配列の各要素はintであることに注意してくれ。
これを実現するには、添え字を一次元配列用に計算してarr[0][0]へのポインタに足せば良い。
arrはarr[0]へのポインタであってarr[0][0]へのポインタではないから、そのままでは使えない。
そこで、素直に&arr[0][0]と書くか、(int *)arrと強引にキャストする。

179:177
04/05/29 20:52
#include <stdio.h>
#include <conio.h>
int main()
{
int *p, a[2][2] = {{0, 1}, {2, 3}},b;

p = &a[0][0]; /* p = (int *)a;と書いても同じ */

a[1][1] = 5; /* a[1][2]は配列の外 */

b = *(p + (1*2+1)); /* b = p[1*2+1]; と書いても同じ */

printf("%d",b);
getch();
}

>>160がやりたかったのはこれかな?

180:160
04/05/29 21:43
>177-179
おお 分かりやすい説明ありがとうございます。
p=&arr[0][0]の方法は2次元以上の配列だと楽ですね。



181:デフォルトの名無しさん
04/06/09 15:05
調べても分からなかったんで教えてください。

イーサネット接続するときに connect()を使うわけですが
これのタイムアウト値を設定したいときどうすればよいのでしょうか。
settimeoutとか見かけたけど使い方が分かりませんでした。


182:デフォルトの名無しさん
04/06/29 16:56
連立方程式を解くプログラムを教えて下さい〜!

ax+by+c=0
dx+ey+f=0

のときx,yをとくような奴です。

C言語でおながいいいい

183:デフォルトの名無しさん
04/06/29 17:07
>>182 代数・幾何学の勉強しなさい。逆行列を作れば簡単に解ける。
理系の大学生なら授業でやると思われ。


184:デフォルトの名無しさん
04/07/04 01:11
初めまして。色々と試しているのですが、プログラムが作れません。
よろしければ、教えてください。
「チーム研究発表会の評価を集計するプログラムを作る。3人以内の学生メンバーで構成される4
チームが発表会に参加する。評価は調査内容、提案内容、発表資料、発表方法の4つのポイントで
行われ、各々のチームに対して合計点数が付けられる。」
1.評価に必要なデータを全て含むようなチームを表す構造体を作成し、typedefで名前を付けよ。
  変数名はできる限り理解しやすいものを考え、各チームのメンバーのフルネームと学籍番号も
  分かるようにすること。また、各チームにはチーム番号をつけよ。

という物なのですが、ここまで指定されていたら作れるのが当たりまえなのかもしれませんが、初心者
なものでほぼ手につきません。よろしければ、ヒント的なものでもかまわないので教えてください。

185:デフォルトの名無しさん
04/07/04 10:03
>>184

ヒント
こちらで聞いたほうがいいでしょう。

ぼるじょあがC/C++の宿題を片づけますYO! 25代目
スレリンク(tech板)l50

書き込む前に
スレリンク(tech板:1番)
を読むことをお忘れなく。

186:184
04/07/04 19:32
>>185
ありがとうございます。そちらの方で聞いてみます。

187:デフォルトの名無しさん
04/07/09 16:53
質問です.
循環リストの長所と短所と、どのようなアプリケーションに
循環リストは向いているかを教えてください。

188:デフォルトの名無しさん
04/10/09 22:28:31
すみません。

C言語 dos で
msecの時間を表示したいのですが、
どのようにすればよいでしょうか?

よろしくお願いします。

189:デフォルトの名無しさん
04/10/09 23:07:53
>>1
> いろんなスレが乱立していますが、
お前が言うことではないな。


190:デフォルトの名無しさん
04/10/15 19:31:51
C/C++ でフリーのライブラリとかでperl相当の正規表現処理
とかテキスト処理とかしてくれるようなものって存在しませんか?
あるいはperlのスクリプトをそのまま使えるような・・・
フリーで無ければ有料でも構いませんが。


191:190
04/10/15 19:32:10
age忘れました

192:デフォルトの名無しさん
04/10/15 19:59:47
>>190
C++ならboostでも使っとけ

193:190
04/10/15 20:34:31
紹介thx.

194:デフォルトの名無しさん
04/11/09 21:13:39
LSI C-86 超簡単セットアップの  
Setlsic.batを実行したんですが
LSI C-86試食版をF:\LSIC86にセットアップします。
と表示されてドライブを指定できません。
何ででしょうか?

195:デフォルトの名無しさん
04/11/09 21:23:34
>>194
そのSetlsic.batとやらを直接書き換えてみたらどうだ?

196:デフォルトの名無しさん
04/11/11 15:25:53
今Cのコンパイラしかないプラットフォームで開発をしていまして、
もともとC++で書いていたコードを移植しています。
クラスになっている箇所は、C++のクラスみたいに、

struct AbstractClass{
 int (*funcA)(void);
 int (*funcB)(void);
 int (*funcC)(void);
};

struct ConcreteClass{
 struct AbstractClass _super;
};


という風に仮想関数テーブルみたいなものを作ってるんですが、

struct ConcreteClass c;
struct AbstractClass *abstract;

abstract = (struct AbstractClass*)c;
abstract->funcA(abstract);

とかいちいち先頭に呼び出しのオブジェクトを入れたりするのが面倒だったり、
構造体のメンバのスコープを限定できなかったり、と色々不便です。
C++みたいなシンタクス(仮想関数テーブルとか構造体のメンバのスコープの限定とか)で書けて、
普通のC言語のコードを吐き出してくれるパーサーとかないでしょうか?
以前、昔のC++コンパイラは一旦Cのコードに変換してからコンパイルしていた、と読んだのですが、
今でもそのようなものはありますでしょうか?

197:デフォルトの名無しさん
04/11/11 18:02:27
今Cのコンパイラしかないプラットフォームで開発をしていまして、
もともとC++で書いていたコードを移植しています。
クラスになっている箇所は、C++のクラスみたいに、

struct AbstractClass{
 int (*funcA)(void);
 int (*funcB)(void);
 int (*funcC)(void);
};

struct ConcreteClass{
 struct AbstractClass _super;
};


という風に仮想関数テーブルみたいなものを作ってるんですが、

struct ConcreteClass c;
struct AbstractClass *abstract;

abstract = (struct AbstractClass*)c;
abstract->funcA(abstract);

とかいちいち先頭に呼び出しのオブジェクトを入れたりするのが面倒だったり、
構造体のメンバのスコープを限定できなかったり、と色々不便です。
C++みたいなシンタクス(仮想関数テーブルとか構造体のメンバのスコープの限定とか)で書けて、
普通のC言語のコードを吐き出してくれるパーサーとかないでしょうか?
以前、昔のC++コンパイラは一旦Cのコードに変換してからコンパイルしていた、と読んだのですが、
今でもそのようなものはありますでしょうか?

198:デフォルトの名無しさん
04/11/11 18:05:37
C++の方のオプションで出来たような希ガス

199:デフォルトの名無しさん
04/11/11 18:11:01
>>196
今まともに使えるのはないっぽい。

200:196
04/11/11 18:38:21
>>198
gccのman見たけど見つからなかった。
どのコンパイラで使えるかご存知でしたら教えていただけませんか?

>>199
一部機能が使えない(関数のオーバーロードとか)くらいなら問題ないんですが、
プリプロセスの結果が怪しい、ってことでしょうか?

201:デフォルトの名無しさん
04/11/11 19:44:30
>>197
>普通のC言語のコードを吐き出してくれるパーサーとかないでしょうか?

普通、そういうのは「パーサー」と呼ばず「トランスレータ」と呼ぶ。
後は自分で調べれ。


202:デフォルトの名無しさん
04/11/11 20:00:30
gccの環境ってどこでDLすればいいんでしょうか?
ググッたけれど見つからないので(´・ω・`)

203:デフォルトの名無しさん
04/11/11 20:07:28
>>202
Windows?Linux?


204:202
04/11/11 20:18:24
Windowsです。
そろそろLinuxに移行しようと思ってるのでLinuxも教えていただければ幸いです。

205:デフォルトの名無しさん
04/11/11 20:23:10
>>204
WindowsならCygwinをインストールするときにgccを指定できるし、
MinGWというフリー環境もある。
Linuxだと大抵のディストリビューションに付属しているので特に問題はないと思う。
debianなどのディストリビューションでは初めから入っているわけではないが、
apt-getなどのツールで一発でインストールできる場合がほとんどなので、
Linuxの場合は開発環境に悩まされる事はほとんどないと思うよ。

206:デフォルトの名無しさん
04/11/11 20:25:56
>>205
即レスありがとうございます。
Cygwinを入れたときに指定していなかったらしいのでMinGWを使ってみます。

207:デフォルトの名無しさん
04/11/11 20:29:32
>>206
もう一度Cygwinのセットアッププログラムを実行して、gccを指定すれば
そのままインストールできるけれど。
再インストールではなく追加インストールになる。

208:デフォルトの名無しさん
04/11/11 20:44:11
>>207
MinWinでどれをDLしてよいかわからなかったのでCygwinのほうでやってみます。
とりあえずパッケージ選択時に全部選択しました。疲れたorz


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5373日前に更新/239 KB
担当:undef