C統合・質問スレッドat TECH
C統合・質問スレッド - 暇つぶし2ch1:デフォルトの名無しさん
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
おお とてもわかりやすいです。
アリが㌧。ニューソクで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

㌧クス

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

209:デフォルトの名無しさん
04/11/11 20:54:30
Cygwinはデフォルトでgcc3.3.3だから、3.4入れたければ設定替えないとね

210:196
04/11/11 21:25:17
>>201
ありがとうございまつ。

探したけどもう全然ないんですね(´・ω・`)

211:デフォルトの名無しさん
04/11/11 22:41:57
>>210
Objective-Cならトランスレーターがあるが・・・

212:デフォルトの名無しさん
04/11/11 23:02:50
プログラマさんからみて、unixのソースコードってどうなんでしょう?
インターフェース関係ぐらいしか読んでないのでわかりませんが、
やっぱりプロはすごい。

213:デフォルトの名無しさん
04/11/12 21:39:10
#include <stdio.h>

main ()
{
int res;
char ans;

printf("何番目を選びますか?\n");
printf("整数を入力してください。\n");

scanf("%d",&res);

if(res == 1)
ans = 'A';
else
ans = 'B';

printf("%cコースを選択しました。\n",res);

return 0;
}


って本に書いてたんでコンパイルしようとしたら
ansに代入した値は使われていない。
と表示されてコンパイルできません。
なんででしょうか?

214:デフォルトの名無しさん
04/11/12 21:47:16
printf("%cコースを選択しました。\n",res);
 ↓
printf("%cコースを選択しました。\n",ans);

215:213
04/11/12 22:25:31
>>214
ありがとうございます。
できました。
これで先に進めます。

216:215
04/11/12 22:31:43
すいません。
次のsampleもできません。
内容は
#include <stdio.h>

main ()
[
int res;
char ans;

printf("何番目を選びますか?\n");
printf("整数を入力してください。\n");

scanf("%d",&res);

ans = (res==1) ? 'A' : 'B';

printf("%cコースを選択しました。\n",ans);

return 0;
}

というのものですがどこが変なんでしょうか?

217:デフォルトの名無しさん
04/11/12 22:39:53
>>216
main()の直後の [ を { へ。

218:216
04/11/12 23:05:27
>>217
コンパイルできました。
こんな質問にも答えてくれてありがとうございます。

219:デフォルトの名無しさん
04/11/15 09:09:01
目の前にあるバグが見えるか見えないかは経験の問題だからな


220:196
04/11/16 15:36:24
>>211
禿しくありがとう!!
試してみまつ。

221:デフォルトの名無しさん
04/11/16 21:55:34
①for(i=0;i<5;i++)
②for(i=0;<=5;i++)

①は0,1,2,3,4と5回
②は0,1,2,3,4,5と6回繰り返す
という意味合いでいいんですか?

222:デフォルトの名無しさん
04/11/16 22:03:19
あげさせてもらいますよ

223:デフォルトの名無しさん
04/11/16 22:05:55
>>222
氏ね

224:デフォルトの名無しさん
04/11/16 22:08:37
>>221
それであっている。

225:デフォルトの名無しさん
04/11/16 22:09:27
②は違う

226:デフォルトの名無しさん
04/11/16 22:09:27
いまくだらんプログラム作っていまして、ビルドしたらエラーが12・・・orz
何回も見直したんですが、原因が見いだせなくて・・・
初歩ですが、どうかよろしくお願いいたします。
/*shm.c*/
#include<stdio.h>
#include<conio.h>

int main(void){
int age;
int seito;
printf("▼はENTERを押してください。\nまた、INPUT[というのが出た場合は、整数値を入力してENTERを押してください\n");
printf("A:ちょっと聞きたいことがあるんだよ。いいかな?.....▼\n");
getch();
printf("A:一応、自分刑事で、極秘の捜査中でね。秘密だよ。お願いがあるんだけど年齢教えてくれないかな?▼\n");
getch();
printf("俺の年齢は......INPUT[");
scanf("%d", &age);
printf("俺の年齢は%dです。", age);
printf("A:ありがとう。%d歳なんだね。ところでMONEY IS LIFEという学校をしているかい?捜査中で必要な情報なんでね。知らないか?▼\n",age);
   getch();
printf("自分がその学校の生徒ということを教える.....YES=1 NO=0.....INPUT[");
scanf("%d", &seito);


227:226
04/11/16 22:09:52
if(age >= 15){
printf("A:ありがとう。君は好青年だね。ところでお金をくれないか?あぁ?残念だったな。いろいろ教えてくれてありがとうよ。あとは金奪ってサヨナラだ。( ゚Д゚)イッテヨシ!▼\n");
}else if(seito == 1){
printf("A:ありがとう。君は好青年だね。ところでお金をくれないか?あぁ?残念だったな。いろいろ教えてくれてありがとうよ。あとは金奪ってサヨナラだ。( ゚Д゚)イッテヨシ!▼\n");
}else{
printf("A:いろいろ教えてくれてありがとう。じゃぁマタね。▼\n");
}
getch();
printf("こういう奴には気をつけよう▼!\n");
  getch();
printf("おわり。▼\n");
return 0;
}

228:221
04/11/16 22:15:36
ほかのスレで聞いてきます

229:デフォルトの名無しさん
04/11/16 22:15:55
カワイソウナショウネン…

230:デフォルトの名無しさん
04/11/17 00:39:05
>>225
違うかのか?

231:デフォルトの名無しさん
04/11/17 00:47:59
>>230
とりあえずコンパイルできなかった

232:デフォルトの名無しさん
04/11/17 00:52:13
>>231
すいませんでした。

233:デフォルトの名無しさん
04/11/18 00:45:36
goto文って飛べるの関数内だけだけでしたっけ?
その場合にかなり深い位置にある関数内からmainのある位置に戻すいい方法ってありますか?

234:デフォルトの名無しさん
04/11/18 00:54:11
>>233
setjmp,longjmp

235:デフォルトの名無しさん
04/11/18 00:55:09
>>233
gotoは関数内のみ。 もっと飛ぶならlongjmp。

236:デフォルトの名無しさん
04/11/18 00:57:46
>>233
setjmp と longjmp でいけます。

237:233
04/11/18 01:20:14
>>234-236
ありがとうございます

238:デフォルトの名無しさん
04/11/18 03:23:17
>>226 はスルーなのか・・・
「人工無能」でぐぐってくれ


239:デフォルトの名無しさん
04/11/18 09:33:22
   getch();

240:デフォルトの名無しさん
04/11/18 12:03:53
再確認。

  こ こ は ス レ タ イ ト ル を ミ ス っ た C ♯ ス レ で す にょ

241:デフォルトの名無しさん
04/11/22 15:01:17


242:デフォルトの名無しさん
05/01/03 17:19:42
UnixとWindows両方で使えるCのZip操作ライブラリが欲しいんですが、どんなのがありますか?
zipという単語が一般的過ぎてぐぐってもノイズばかり…

243:デフォルトの名無しさん
05/01/03 17:21:05
重複スレ

= = = = = = = = = = = 終 了 = = = = = = = = = = =

244:デフォルトの名無しさん
05/01/03 17:58:01
じゃあ本スレってどこ?

245:デフォルトの名無しさん
05/01/03 18:00:55
>>244
スレリンク(tech板)

246:デフォルトの名無しさん
05/01/03 18:11:50
>>242
zlibでいいんじゃないの? Windows端末でもCygwin使えば使えるし。

247:デフォルトの名無しさん
05/01/04 10:26:26
とりあえずexeファイル作りたいんですが
どうすればいいんですか。

248:デフォルトの名無しさん
05/01/04 14:12:58
>247
解決

249:247
05/01/04 15:29:13
>>248
ありがとうございます。
それを使ってみます。


250:デフォルトの名無しさん
05/02/03 00:21:32
マルチメディアタイマを使って、8Hz(125ms周期)にある関数を起動させたいのですが、
方法(できればコード)を教えて下さい。

251:デフォルトの名無しさん
05/02/03 00:42:03
while(1){foo();sleep(125);}

252:デフォルトの名無しさん
05/02/03 02:59:07
>>251
煽りはいいけど、マルチメディアタイマ使ってないですね。

253:デフォルトの名無しさん
05/02/03 03:30:26
>>252
悔しい?w

254:デフォルトの名無しさん
05/02/03 06:23:35
1次元配列と2次元配列でたとえば
int a[6],b[2][3]を確保して
a[0]とb[0][0]、a[1]とb[0][1]、a[2]とb[0][2]、
a[3]とb[1][0]、a[4]とb[1][1]、a[5]とb[1][2]が
それぞれ同じアドレスを参照してa[0]を変えたらb[0][0]も一緒に中身が変わるようにしたいんだけど

#include <stdio.h>
void main(void)
{
int *a[2];
int b[6];

a[0]=&b[0];
a[1]=&b[3];
}

って書き方でいいかな?
なんか問題ある気がするんだけど他にいい方法ないかな?
あとポインタにするのは2次元配列のほうにしてほしいのよ

255:254
05/02/03 06:30:01
ここC#スレだったのか
スレ違いスマソ
他スレ行ってきます

256:デフォルトの名無しさん
05/02/03 14:03:04
【質問】 VC++でdouble型の数字を小数点以下を切り捨ててCString型に変換するにはどうすればいいか?

CString strAAA;
double dBBB;

dBBB = (double)50.0;
strAAA.Format(_T("%f"), dBBB);

とすると、strAAAには"50.00000"
という文字列が入りますが、
strAAAには"50"という文字列を入れたいのです。
どうすればいいのでしょうか?

257:デフォルトの名無しさん
05/02/03 14:10:26
>>256
%gにしろ

258:デフォルトの名無しさん
05/02/03 14:17:48
>>257
サンクス。
MSDNライブラリで
%d や %f
に関する説明ページが見つからなかったもので。

259:デフォルトの名無しさん
05/02/03 15:05:03
>>258
探し方が悪い。
CString::Format()の説明からリンクを二回手繰れば書いてある。

260:デフォルトの名無しさん
05/02/03 15:19:09
っていうか、それ以前に、幼児期の直感教育がしっかりなされていない。
書式がprintfと同じではないかとどうして想像できなかったんだろう。
想像していたら%gを試していたはずだ。
知らなかったとしてもprintfの書式で調べていたはずだ。

261:デフォルトの名無しさん
05/02/03 16:18:18
【追加質問】 double型の数字を7桁にすると ***e+006となってしまうのを、7桁の文字列にしたい。

CString strAAA;
CString strBBB;
double dCCC;
double dDDD;

dCCC = (double)1234567;
dDDD = (double)123456;
strAAA.Format(_T("%g"), dCCC);
strBBB.Format(_T("%g"), dDDD);

とするとstrAAAには"123456"という文字列が入りますが
strBBBには"1.23457e+006"という文字列が入ってしまいます。
strBBBに"1234567"という文字列を入れたい場合はどうすればいいのでしょうか?
最高10桁までちゃんと入るようにしたいんです。


262:デフォルトの名無しさん
05/02/03 16:28:41
多倍長浮動小数点演算ライブラリ使えよ

263:デフォルトの名無しさん
05/02/03 16:45:28
>>261
%.7g
7の部分は精度。

264:デフォルトの名無しさん
05/02/03 16:46:59
10桁までなら%.10g

265:デフォルトの名無しさん
05/02/03 16:49:45
>>263
>>264
デキターありがとう!

>>262
よくわかりません。

266:デフォルトの名無しさん
05/02/03 16:50:59
>>259
>>260

しんでしまえ

267:デフォルトの名無しさん
05/02/03 16:55:03
>>266
>>259=>>260=>>263=>>264なんだがね。

268:259
05/02/03 19:08:08
違うよ。

269:259=268
05/02/03 19:09:08
つーか、260,263,264は私じゃない。

270:デフォルトの名無しさん
05/02/03 20:03:35
スレリンク(tech板:247番)n-

此処で訊いたら、こう言われましたが、何故かC言語の教本のサンプルはは
#include <stdio.h>

main() {
printf("Hello!");
return 0;
}

の様に空白欄が在るのに、自分が書いたのに空白欄を作ると
何故か上記のアドレスに出た、エラーが出てしまいます
調べても、本にも書いていませんでした、ご教授お願い致します。

271:デフォルトの名無しさん
05/02/03 20:09:55
あれ・・・?空白欄がない。
メモ帳で見るとあるんです。

272:デフォルトの名無しさん
05/02/03 20:28:27
ネタかなあ・・

ヒント:全角スペース

273:デフォルトの名無しさん
05/02/03 20:29:44
>>270
もしかすると、君は全角スペースを入れているのでないだろうか。
使っても良いのは半角スペースとアルファベット、半角の記号のみ。

274:デフォルトの名無しさん
05/02/03 20:32:56
ま、全角スペースを解釈しないコンパイラが悪いんだな。
うんうん。

275:デフォルトの名無しさん
05/02/03 20:33:39
それは言えてる。

276:デフォルトの名無しさん
05/02/03 20:34:03
ありがとうございました
要は空欄を空けてもいいけど、半角を使えと言う事でしょうか?

277:デフォルトの名無しさん
05/02/03 20:35:38
だめだこいつ
全然わかってない・・

278:デフォルトの名無しさん
05/02/03 20:40:51
すみません・・・
簡単に言えば、空欄(スペース)は空けない方がいいですよね?

279:デフォルトの名無しさん
05/02/03 20:43:28
ブラウン運動を非整数階微積分するプログラムを作成したのですが、上手く動きません。どこがわるいのでしょうか??
実行結果は数値を出し、エクセルでグラフ化しています。(window.hが使えないため)
#include <stdio.h>  #include <stdlib.h>
#include <time.h>  #include <math.h>
#define KMAX 100  #define XMAX 300
#define PI 3.14159265358979323846
double gar()
{double r = 0.0;
int i;
for(i = 0; i < 10; i++){r += ((double)rand() / RAND_MAX) - 0.5;}
return r;}
int main(void)
{int x, k;     float d; scanf("%f",&d);
double ek = PI * 2.0 * 0.7 / XMAX; double a = 5.0 – 2*d;
double f[XMAX];  double g[KMAX];
srand((unsigned)time(NULL));
for(k = 1; k < KMAX; k++){
g[k]=pow(( ek * rk ),-a/2);}
for(x = 0; x < XMAX; x++){  f[x] = 0.0;
for(k = 1; k < KMAX; k++){  double kx = ek * rk * x;
f[x] = f[x]+g[k]*(gar() * cos(kx) - gai() * sin(kx));}
printf("%g\n",f[x]);}
}

280:デフォルトの名無しさん
05/02/03 20:51:47
>>278
先頭に付けてもいいのは半角スペースとTABのみ。
スペースを空けるのは括弧同士の対応や意味的な違いを付けるためで、それをインデント
を付けるといいます。
これをしないとプログラムが見憎くなります。
的確にスペースを空けてください。

281:デフォルトの名無しさん
05/02/03 20:54:30
>>280
ありがとうございます!!
とりあえず、半角でスペースを空けたら、何の問題もなく
実行できました。
たぶん、全角だったのでエラー出たみたいでした。

282:ななし
05/02/03 22:14:53
どなたかC言語でHTTPリクエストを送信できるようなライブラリを
ご存知のかたいらっしゃいませんか?
ヘッダーを意識しなくてすむような形のもので!


283:デフォルトの名無しさん
05/02/04 00:40:29
WinInet

284:デフォルトの名無しさん
05/02/06 23:45:27
質問です。
以下の環境で、外部バイナリ(画像)ファイルを実行ファイルにリンクしたいのです。
何かスマートな方法はあるのでしょうか?

開発環境OS : FreeBSD 5.3
コンパイラ : gcc 2.95.4

調べたこと :
binutils の objcopy でオブジェクトファイルに変換n出来るかなと
ドキュメントを流し読みしましたが、出来そうにありません。

以上、よろしくお願いします。

285:デフォルトの名無しさん
05/02/09 12:50:59
Labeling.c1: "#include" expect "FILENAME"or<FILENAME>

このエラーを回避する方法わかる方いますか?よろしくお願いします

286:285
05/02/09 13:00:42
すみません。なんか初歩的入力ミス見たいです

287:デフォルトの名無しさん
05/02/09 13:14:18
ウインドウズプログラミングで仮想キーコードを使って
数字を表示したいのですが、0が表示できません。
keybd_event(VK_NUMPAD0,0,0,0);
keybd_event(VK_NUMPAD0, 0, KEYEVENTF_KEYUP, 0);
文法的に誤りがあるのでしょうか?
わかる方いましたら、お願いします。

288:デフォルトの名無しさん
05/02/09 13:36:43
誰かFTPサーバのソースプログラム教えてくれない?
今すぐ欲しいから誰かお願いします。Cの初心者なんで、そ
んなの簡単だよって思うかもしれませんが、どうかC言語
できる人よろしくお願いします。


289:デフォルトの名無しさん
05/02/09 13:41:16
Linuxのソースがあるべ、バカだな

290:デフォルトの名無しさん
05/02/09 13:51:38
おい!そいつは初心者だぞ。Linuxのソースの見れる方法も
ついでに教えてやれ。たぶんわかっとらんと思うぞ。

291:デフォルトの名無しさん
05/02/09 13:55:53
おっしゃるとおりです・・・。教えていただけます?


292:デフォルトの名無しさん
05/02/09 13:56:22
嫌だね、プ

293:デフォルトの名無しさん
05/02/09 14:03:09
RFC FTPでぐぐれば仕様書が出てくるからそれで作るのもいいかも

294:デフォルトの名無しさん
05/02/09 14:12:10
>>287
VK_NUMPAD0の代わりに'0'にしてみたらどう?

295:デフォルトの名無しさん
05/02/09 14:22:03
あのー・・・いまいちよくわかりません・・・。どなたかサンプルプログラム
書けるひといます?もしよかったらここに表示していただけたらと思い
ます。それをそのまま打ち込んでいくんで・・・。

296:デフォルトの名無しさん
05/02/09 14:26:11
ポート20をリッスン、認証できたら、ポート20のコマンドどうりに
ポート21でデータ転送。以上

297:デフォルトの名無しさん
05/02/09 15:11:36
私はCommonArchiverProjectのftp.dllを参考にしたことがあるなぁ。
バグがあって笑えたけど。

298:デフォルトの名無しさん
05/02/09 15:13:55
わらってはいけない。只で提供してるんだから。
金取ってるやつには罵詈雑言OK

299:デフォルトの名無しさん
05/02/09 15:16:10
いやぁ、使ってる人いないんだろうなぁと。<笑えた
尤も、作者に指摘メール送ったが黙殺されたので、本当のところは知らん。

300:デフォルトの名無しさん
05/02/09 17:03:27
#include <stdio.h>

void main(void)
{
int i;
char a[5];
for(i = 0; i < 5; i++){
printf("何か1文字入力する\n");
scanf("%c",&a[i]);
}
printf("%c,%c,%c,%c,%c\n",a[1],a[2],a[3],a[4],a[5]);
}

非常に簡単な質問で申し訳ないのですが…
このプログラムを実行するとforのi=2,i=4のときのscanfが飛ばされてしまいます。
その後の結果表示も何かおかしいのです。

自分なりに調べてはみましたが、一体何が悪いのかがわかりません。
コンパイラはBorland C++ Compiler 5.5を使っています。


301:デフォルトの名無しさん
05/02/09 17:06:20
改行コードもsacanfだな

302:デフォルトの名無しさん
05/02/09 17:37:54
void main(void)
{
int i;
char a[5]; // ←範囲は、0~4までで 5個
char b[1024];
for(i = 0; i < 5; i++){
printf("何か1文字入力する\n");
scanf("%s",&b); // バッファーフォローの危険性があり、実務だと駄目!
a[i] = b[0];
}
printf("%c,%c,%c,%c,%c\n",a[0],a[1],a[2],a[3],a[4]);
}

こんな感じだけど、入力は別関数を作ってね!

303:デフォルトの名無しさん
05/02/09 17:48:30
ださ

304:デフォルトの名無しさん
05/02/09 18:10:25
>>302
突っ込みどころ満載だな。
・バッファオーバフローの心配するなら指定子で制限しろ。
・配列のアドレスを渡すな。
・バッファーフォローなんて俺語を作るな。
・main()の戻り値を勝手にvoidにするな。

305:デフォルトの名無しさん
05/02/09 18:43:32
>>300
最後のprintfところでa[1]~a[5]になってるとこをa[0]~a[4]になおして、
それから一回目の入力で入れたい数字を全部連続でいれてみ?2468って感じで
最後の出力だけはきれいにでるとおもうよw

306:デフォルトの名無しさん
05/02/09 21:05:07
>>304
で、模範解答は?
文字列の読み込みって、簡単なようで難しいんだよね。

scanf を使って・・・・

307:300
05/02/09 21:22:25
300です。
皆さんレスありがとうございます。

あれからも考えてみましたが、やっぱりわかりませんでした。
aの配列というのが不味いのかと思って、a,b,c,d,eと定義してみましたが、これもまた同じ結果になってしまいます。
もうあきらめた方がいいんでしょうか。
バグの原因がわからないと、また再発させそうで非常に気になるんですが…

308:デフォルトの名無しさん
05/02/09 22:31:28
scanf使うのが悪い
fgetsしてsscanf使え


309:デフォルトの名無しさん
05/02/09 22:35:34
>>300
まず1文字目を入力した後、Enterを打つだろ。
そのEnterもscanfの%cで入力されているのだろう。
と、俺は予想した。
#include <stdio.h>
int main(void)
{
    int i;
    char a[5];
    for (i = 0; i < sizeof a; i++)
        scanf("%c%*[^\n]%*c", &a[i]);
        //%*[^\n]は'\n'が出るまで読み飛ばす指定
        //%*cは1文字読み飛ばし('\n'まで読み飛ばしたので当然'\n'を読み飛ばす事になる)
    printf("%c, %c, %c, %c, %c\n", a[0], a[1], a[2], a[3], a[4]);
    return 0;
}


310:デフォルトの名無しさん
05/02/09 22:41:35
>>300
301さんが解答ですよ。

  scanf("%c",&a[i]);

で一文字読み込んだとき、まだ標準入力のバッファには改行文字が残っているのです。
それが自動的に偶数回のscanf(...)の入力となっています。

  scanf("%c",&a[i]);
  fflush(stdin);

として標準入力のバッファをクリアしてあげれば、一文字ずつ入力できます。


311:デフォルトの名無しさん
05/02/09 22:47:26
>>310
fflushは出力バッファのフラッシュ用なんで残念!
stdinに対しては未定義り!

312:デフォルトの名無しさん
05/02/09 22:49:21
>>301-310
皆さんどうもありがとうございました。
おかげで解決しました。



313:デフォルトの名無しさん
05/02/09 22:53:31
#include <stdio.h>
#include <stdlib.h>

int GetStdinToInt()
{
  char buf[256];
  int result;
  char* check;

  while(1){
    fgets(buf, 255, stdin);
    result = (int)strtol(buf, &check, 0);
    if(check != buf) break;
    printf("もう一度入力してください:");
  }

  return result;
}


314:310
05/02/09 22:55:12
>>311
そのようですね。今調べて認識しました。

URLリンク(www9.plala.or.jp)

今回の解答は

URLリンク(www9.plala.or.jp)

に書いてありました。

315:302
05/02/09 23:02:16
>scanf("%s",&b);
scanf("%s",b); ←訂正すんまそ

最近、JavaとVBしかやってないから・・・・ (ーー

316:310
05/02/09 23:08:39
>>300

fflush(stdin)

のかわりに、

fseek(stdin, 0, SEEK_SET);

が動作保証されています。

でも、今回の場合は314で2番目のURLに書いてあることが一番いいかも。


317:310
05/02/09 23:11:50
失礼
fseek(stdin, 0L, SEEK_SET);
でした。

318:デフォルトの名無しさん
05/02/09 23:35:32
simpson法の中で関数を呼び出してその中で積分の計算を行うプログラムを作っています。
しかし、計算速度がものすごく遅いんですがなにかいい方法ありませんか?


319:デフォルトの名無しさん
05/02/09 23:37:51
で、今の計算機は?

320:デフォルトの名無しさん
05/02/09 23:50:30
>>318
難しいことやってるんだね、学生さん。
おいらにはよく分からないけど...。

URLリンク(www.mech.tohoku-gakuin.ac.jp)
にjavaだけれどコードがのってますよ。
良かったら参考にしてみたら。

321:デフォルトの名無しさん
05/02/09 23:57:32
>>320
thx
SSEつかって高速化図ってみます、、

322:デフォルトの名無しさん
05/02/11 00:36:27
C言語のバージョン教えてと言われた。
どうやって知ればいいんだろうか。

323:デフォルトの名無しさん
05/02/11 00:41:21
sにcharを足すstrcatってないの?

324:デフォルトの名無しさん
05/02/11 00:42:42
>>322
URLリンク(seclan.dll.jp)
の__STDC_VERSION__

325:デフォルトの名無しさん
05/02/11 01:14:37
>>323
ありませんよ。

Cで一般的に言われる文字列というものは、最後がヌル文字'\0'で終わることを前提
としています。提供されるシステム関数strcat()などもそうです。
一文字のcharはそういった関数で使用することはできません。

char dest[100];
char src1[] = "abc";
char src2 = 'x';
int len;

len = strlen(strcpy(dest, src1));
dest[len] = src2;
dest[len + 1] = '\0';

こんな感じですかね。もっとアクロバット的な方法もあるんでしょうが...。

326:デフォルトの名無しさん
05/02/11 01:49:10
int n = c;
strcat(s, &n);

327:デフォルトの名無しさん
05/02/11 02:14:49
>>326
関数内の自動変数の場合、
int n
の場合、cを代入した次のバイトがNULLである保証はありませんよ。

328:デフォルトの名無しさん
05/02/11 02:16:47
補足。
CPUのアーキテクチャによって異なります。
言語としてそういったことに依存すべきではないと言いたかったのです。

329:デフォルトの名無しさん
05/02/11 02:50:54
>>327
ん? cは1バイトだから他の3バイトは当然0になるでしょう。 しかしこれは
endianによっては右に詰まってだめだと思うので >>328は正しいと
思うけど。

ちなみにこんなのはどう?
sprintf(s, "%s%c", s, c);


330:デフォルトの名無しさん
05/02/11 06:51:06
>>329
未定義

>>326
char s2[] = {c, '\0'};
strcat(s, s2);でいいじゃん。

C99ならstrcat(s, (char []){c, '\0'});って書ける筈だけど。

331:デフォルトの名無しさん
05/02/11 10:17:54
私はこんな幹事かな。
sprintf(strchr(str, '\0'), "%c", ch);
或いはこう。
char * p = str + strlen(str);
p[0] = ch;
p[1] = '\0';

332:デフォルトの名無しさん
05/02/27 16:56:10
すみません、妙な質問で恐縮ですが、どなたか教えてください。

sprintf() の s ってどういう意味ですか?f は format の意味だと思うのですが。

333:デフォルトの名無しさん
05/02/27 16:59:08
stringじゃない?

334:デフォルトの名無しさん
05/02/27 17:01:38
sはsecond。fはfirst

335:デフォルトの名無しさん
05/02/27 18:04:22
string ですか。ありがとうございました。
scond ですか(ry

336:デフォルトの名無しさん
05/02/28 12:51:53
>>332
printf()「系」とかssanf()「系」とか言う言葉があるよ。
先頭の's'はstring、'f'は自分でオープンしたファイル、付かないものは対象がstdinか
stdout。結構系統立てられているんですよ。

337:336
05/02/28 12:53:07
メンゴです。
一行目のssanf()はscanf()でした。

338:デフォルトの名無しさん
05/02/28 14:16:48
>>336
さらにva_listを引数に取るvprintf/vscanfも有る。当然fとsも有る。
vscanf系はC99で追加されたものだけど。

339:デフォルトの名無しさん
05/02/28 18:51:54
springfというのもある

340:デフォルトの名無しさん
05/02/28 22:45:28
さらに最新最強はsnprintf。 渡したchar *のサイズを2つ目の引数で指定でき、
そのサイズを超えて書かないことが保障されているのでやや安全。

341:デフォルトの名無しさん
05/03/02 16:40:40
アドレスに関する質問。
型は不明で、要素一つのサイズは分かってる場合。

次の要素にアクセスする方法を教えて下さい。
または次の要素へのアドレスを取得する方法。


342:342
05/03/02 16:42:50
サイズがBYTEだってことに気づかなかった....。
解決しました。

343:デフォルトの名無しさん
05/03/09 14:33:38
POINT point[3] = { {0,0} , {1,0} , {0,1} };
っていう初期化はできるんですが

point[3] = { {0,0} , {1,0} , {0,1} }
という風に値を入れることが出来ません
配列全体に値を入れる方法は無いんですか?

344:デフォルトの名無しさん
05/03/09 16:00:29
>>343
配列に代入はできません。
精々コピー用の関数を用意するのが関の山です。
要素数が3で固定ならば、構造体にしてしまえば(直値ではありませんが)代入できなくもありません。


345:デフォルトの名無しさん
05/03/09 16:10:27
>344
関数でもつくってそれで入力するようにします
ありがとうございました。

346:デフォルトの名無しさん
05/03/10 00:43:33
Cって、こういうとこアフォだよなあ

347:デフォルトの名無しさん
05/03/10 19:02:05
やっぱりRubyがいいね

348:デフォルトの名無しさん
05/03/13 17:13:30
cでコンパイルする際に

windres: can't open `obj/EK-MAMEko/ui/mame32k.res' No such for directory
make: *** [obj/EK-MAMEko/ui/mame32.res] Error 1

こういうエラーが出て困ってるんだけど
これってどういう意味かわかる?

349:デフォルトの名無しさん
05/03/13 17:14:00
age

350:デフォルトの名無しさん
05/03/13 18:48:41
>>347
いや、Rubyは問題外。

351:デフォルトの名無しさん
05/03/17 00:52:33
変数を入れ替えるときに別の変数を用意せず、

X = X ^ Y, Y = X ^ Y, X = X ^ Y;

とするのがよくないのはなぜ?

352:デフォルトの名無しさん
05/03/17 00:56:22
>>351
数値以外には使えない
XとYが同じ変数を指していると上手くいかない

353:351
05/03/17 01:17:15
>>352
なるほど。
これをプリプロッセスでやって構造体なんかを渡しちゃうとマズーだ。
アリガト。

354:デフォルトの名無しさん
05/03/22 21:55:06
new演算子で作ったオブジェクトをdeleteした後に
デストラクタでdeleteすると何か問題ありますか?

355:デフォルトの名無しさん
05/03/22 23:09:33
mallocで確保した領域をfreeで開放しますが、
システムはどのようにして、はじめに確保した領域を知ることができるのでしょうか。

356:デフォルトの名無しさん
05/03/23 01:23:39
>>354
deleteしたら、0を入れておけば大丈夫。

>>355
malloc()で戻されたポインタの指すメモリの直前辺りに管理情報を埋めておくのが一般的。

357:デフォルトの名無しさん
05/04/03 14:07:55
配列同士の数値の比較をしたいのですが、下記のようだとうまくいきません。
どのようにすればよいのでしょうか?
for(i=0;i<5;i++)
for(j=0; j<5; j++)
if(group[i] == group[j] && i != j) count[i]++;

358:デフォルトの名無しさん
05/04/03 15:10:03
>>357
j = i

359:デフォルトの名無しさん
05/04/03 15:22:36
>>357
配列の同じインデックスを持つ要素同士を比較したいのであれば、単純な(一重の)ループでいい。
つーか、>357では日本語の説明が足りんし、コードがおかしいし、何がしたいのか判らんのだが。

360:デフォルトの名無しさん
05/04/04 00:24:27
すみません。初歩的な質問をさせていただきます。

char *func1(){
 return "a";
}

char *func2(){
 char *s = "a";
 return s;
}

こんな2つの関数があったとして、これらが関数の呼び出し元に返ってきた際に
戻り値のポインタが正しい場所を指し示すことはどこまで(いつまで)保障できるんでしょうか?
func1は保障できる、func2はできる、それとも両方できない/できる、どこまでなのか…等。
また、私の勉強不足のせいで、両者のメモリ上での違いがいまいちはっきりしてません。

一応どちらでも動作するにはするんですが、いつか不正な参照とかで
落ちちゃうんじゃないかと気になって怖くて夜も眠れません。

参考になるサイトを教えていただけるだけでも結構ですのでよろしくお願いします。

361:デフォルトの名無しさん
05/04/04 01:05:29
規格ではどうか忘れたけど、たいがいいけるはず。
どうしても心配ならstatic const char ret_str[] = "a";とかすれば?
あとchar *じゃなくてconst char *を使え。

362:デフォルトの名無しさん
05/04/04 01:08:07
>>360
定数(リテラル)の寿命はプログラムの開始から終了まで。
関数内で宣言されたauto変数の寿命は、関数の開始から終了まで。

char *func1(){
 return "a"; /* "a" を指すポインタを返している */
}
char *func2(){
 char *s = "a"; /* ポインタ s を "a" を指すポインタで初期化 */
 return s; /* ポインタ s の値、つまり "a" を指すポインタを返している */
}

つまり、どっちも同じ。
リテラルはいつでもどこからでも参照出来るので、戻り値を使ってても大丈夫。

363:360
05/04/04 02:05:28
>>361-362
ありがとうございます!だいぶスッキリしました。
リテラルに関しては参照先が不正な値になるんじゃないかとかいう
心配は無用なわけですね。逆の場合(変数、関数のポインタ)は気をつけろと。

すみません。あとここからもう一段階お願いします。
実は言うと今、Unix系ソフトの移植作業をやってまして
こいつらと同等の動作をするものを作りました。

char *dirname(char *path);
char *basename(char *path);

basename()はパス名からディレクトリを除いた部分(ファイル名)を返せばいいので
引数のポインタをそのまま使い回してreturn path+pos;のようにして返してます。

dirname()の方は引数で与えられたパス名からファイル名を除いたものを返すものなので、
関数内でdir[MAX_PATH]のように宣言した配列に、引数の文字列からファイル名部分を
除いたものをstrncpyでコピーなどして、最後にdir(先頭アドレス)を戻り値にしてます。
(ちなみにさっきの質問は"."「カレントディレクトリ」を返す場合でした。)

長すぎるのでまとめると、
・basename()の戻り値は呼び出し先のローカル変数とは無関係である。
・dirname()の戻り値は呼び出し先のローカル変数に依存している。

この場合だと、dirで確保していたアドレスは戻り先で参照しても安全なのでしょうか?
ちゃんと動くし、自分でも大丈夫だと思ってたのに警告が出たので不安になりました。

やたら長くてすみません。何かこれより良い実装方法がもしあればご教授願います。

364:360
05/04/04 02:14:47
何度もすみません。つまりさっき私が言ったdirname()の実装は

char *func2(){
 char *s = "a"; /* ポインタ s を "a" を指すポインタで初期化 */
 return s; /* ポインタ s の値、つまり "a" を指すポインタを返している */
}

この場合と同じと考えていいんでしょうか?ってことですね。
私の目には全く同じものに映るのですが、間違いありませんでしょうか。

365:デフォルトの名無しさん
05/04/04 02:15:23
floatがもてる最大値はどのように調べればよいのでしょうか?

366:デフォルトの名無しさん
05/04/04 02:30:48
>>363-364
const char *func3(void){
const char s[] = "a";
return s; /* ローカルな配列 s へのポインタを返す */
}

const char *p;
p = func(); /* 0, func() の s へのポインタを受け取る */
printf("%p\n", p); /* 1, これは構わない */
printf("%s\n", p); /* 2, これは駄目 */

0 は何ら構わない。戻ってきたアドレスをコピーしているだけ。
1 も何ら構わない。コピーしたアドレスを表示しているだけ。

2 は駄目。アドレスの先を参照してしまっているから。
何故参照してはいけなかというと、アドレスの先にある func3() の s の寿命は、
func3() を抜けた時点で既に尽きてしまっているから。

func2(), func3() は全然違う関数。

367:デフォルトの名無しさん
05/04/04 02:35:17
>>365
float.h にある FLT_MAX マクロで定義されてる。

#include <stdio.h>
#include <float.h>
int main(void)
{
 printf("%f\n", FLT_MAX);
 return 0;
}

368:デフォルトの名無しさん
05/04/04 02:50:42
>364
ダメ。変数の寿命について学んでください。

1.関数の引数を変える。
void dirname(char *dest,int dest_size,const char *path)

2.静的に保持する。使用に若干注意が加わる
static char dir[]

3.動的に確保する。呼び出し側に解放義務が発生する
char *dir = malloc()

369:デフォルトの名無しさん
05/04/04 03:05:49
>>367
thx
limit.hしか知らなかった

370:360
05/04/04 03:13:01
そのまま貼っちゃいます。今はこんな状態です。

char* dirname(char* path)
{
  int pos = strlen(path)-1;
  int lastPathSepFoundPos = -1;
  static dir[MAX_PATH]="";
  while(pos >= 0) {
    if (path[pos] == '/' || path[pos] == '\\') {
      lastPathSepFoundPos = pos;
      break;
    }
    else pos--;
  }
  if (lastPathSepFoundPos == -1) return "."; // current dir
  else{
    strncpy(dir,path,lastPathSepFoundPos);
    dir[lastPathSepFoundPos] = 0;
    return dir;
  }
}

static dir[MAX_PATH]="";をchar dir[MAX_PATH]にすると
→警告「ローカル変数またはテンポラリのアドレスを返します」
となってました。今考えてみれば当然ですよね。。

>>368
どうもです。ちょうど昨日、その2を回避策としてやってみてたとこでした。
その注意というのは関数へのアクセスが同時に起こるような場合でしょうか?

条件コンパイル(#ifdef-#endif)等が面倒になりそうですが、
1の方法が一番簡単そうなので、その方向でやってみることにします。

371:デフォルトの名無しさん
05/04/04 03:14:54
↑static char dir[MAX_PATH]="";の間違いです。

372:デフォルトの名無しさん
05/04/04 12:12:39
strrchr 使えば簡単にみえるな・・・

373:デフォルトの名無しさん
05/04/04 16:49:40
すみません最近C++触ったばかしですみませんが

class auのコントラクタ関数
au(string s) : enr(s) {}について
文字列をsに代入し enrを生成する時にsを代入すると読めるのですが
なぜ au(string s) { enr(s); }とできないんですか?

個人的に関数内容 { }内 は動作命令のみの記述と解釈すれば
au(string s) { enr = s; }
はenr = s;という動作命令であるから適応であるが
{ enr(s); }・・・であるから不適と思ってしまうのですが・・

書いててよくわからなくなってきた・・
au (string s) : enr(s) {}について
なぜ : で区切るのかと enr(s)はなぜ{}内に記述してはいけないのかについて詳しくお願いします

374:デフォルトの名無しさん
05/04/04 17:09:15
>>373
:の後は初期化。{}の中だとメンバ変数への代入になってしまう。

例えば、
class foo {
const int bar;
foo() : bar(0) {}
};
とした場合、この例のように初期化はできるが、
class foo {
const int bar;
foo() {bar = 0;}
};
このような代入はできない。

375:デフォルトの名無しさん
05/04/04 17:33:16
>>374
全て解決できました。
どうもありがとです

376:デフォルトの名無しさん
05/04/19 19:50:11
共用体ってどういうときに使うんですか?
また利点とかあるんですか?

377:デフォルトの名無しさん
05/04/20 00:05:37
すみません。教えてください。
下記のようなプログラムを書くと、結果に必ず0.0が混ざってしまい、困っています。
乱数を3つ表示させたいのですが、0.0を含まないようにするにはどうしたらよいのでしょうか?

#include <stdio.h>
#include <stdlib.h>
#include<time.h>
#define N 3
int main(void)
{ int i,j=0,check;
double data[N],dia[N],tmp;
srand((unsigned)time(NULL));
printf("\n乱数のつもり:\n");
for (i=1; i<=N; i++)
{data[i]=rand()%100+(double)rand()/32768.0;}
/* 並替えの計算 */
for (i = 1; i < N - 1; i++)
for (j = i + 1; j < N; j++)
if (data[j] < data[i]) /* <: 昇順, >: 降順 */
{ tmp = data[i];
data[i] = data[j];
data[j] = tmp;};
for (i = 0; i < N; i++)
printf("%.1f ", data[i]); /*並替えデータの表示*/
}

378:デフォルトの名無しさん
05/04/20 00:47:24
>>376

それくらい調べろよ。

379:デフォルトの名無しさん
05/04/20 01:25:42
>>376
メモリの節約
同じメモリブロックを複数の型として解釈したい時

380:デフォルトの名無しさん
05/04/20 11:52:18
>>377
取り敢えず落ち着け。
深呼吸でもした後、data[] の添え字の範囲が
0~N-1 だと言うことを思い出せ。

381:デフォルトの名無しさん
05/04/20 13:25:48
>>376
通信などで、整数型や実数型をバイト列と相互変換したい場合、
ポートアクセスなどでビットフィールドとバイト列を相互変換したい場合などに使う。
メリットは、他の方法に較べて簡便に書けること。
デメリットとしてよく言われる非互換性については、元々汎用的でないコードを書く場合には無視できる。
#勿論、それ相応のコメントは必要。

382:デフォルトの名無しさん
05/04/23 00:09:57
C、C++ある程度覚えるまで、どのくらい掛かった?今から、勉強しようと思うのですが、C→C++→C#か、Javaって感じに逝こうかと思うのですが、C++から移行した人、する人は、C#か、Javaどっち盗ります?←煮たスレあるけどノリで…ゴメソ

383:デフォルトの名無しさん
05/04/23 00:19:39
>>382
無意味なアンケートするな。

384:デフォルトの名無しさん
05/04/23 10:31:57
無意味っていいよね。
まぁ答えてやんなよ。発想の無い、IT土方プログラマーの行く末までを……ハァー 


385:デフォルトの名無しさん
05/04/23 12:04:48
なんでこう勉強する前にウダウダ人に聞くやつが多いんだろう

386:デフォルトの名無しさん
05/04/23 12:20:20
>何でこう勉強する前にウダウダ人にきく奴が、多いのだろう 
って、自分も聞いてるじゃんWWW プギャー、と云ってみたくなる。まあ、オイラは聞かなかった、お陰でプログラマーなんかになってしまった訳だが…ハァー

387:デフォルトの名無しさん
05/04/23 12:23:43
ageんなやボケがあああああ、と自分に云ってみるテst
すまんです

388:デフォルトの名無しさん
05/04/26 11:13:11
  ∧_∧
 ( ´∀`) < ぬるぽ

389:デフォルトの名無しさん
05/04/27 10:54:11
1+2+3+・・・+N を計算する関数を作成せよ。

390:デフォルトの名無しさん
05/04/27 11:48:18
>>389
int f(int N){return((1+N)*N/2);}

391:デフォルトの名無しさん
05/04/27 11:57:21
1/2/3/・・・/N を計算する関数を作成せよ。

392:デフォルトの名無しさん
05/04/27 12:05:48
>>391
int f(int N){return0;}

393:デフォルトの名無しさん
05/04/27 12:45:24
>>390
感動した
>>392
ワロタ

394:デフォルトの名無しさん
05/04/28 04:36:53
>>391
double f(int N){double x=1.0;if(N>1)while(N)x*=(double)N--;return 1.0/x;}

395:394
05/04/28 04:42:40
あんま変わらんけど、こっちの方が良かったかな…?
double f(int N){double x;for(x=1.0;N>1;N--)x*=(double)N;return 1.0/x;}

396:デフォルトの名無しさん
05/05/04 18:36:51
スレリンク(news4vip板:18番)
↑exitするならfcloseもfreeもしなくていいんだけど
  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ってあるんですが、そうなんですか?
ファイルディスクリプタはプログラム終了時に閉じられるとしても
メモリリークっすよねコレ

397:デフォルトの名無しさん
05/05/04 19:00:23
>>28
ガッ

398:デフォルトの名無しさん
05/05/04 19:58:54
>>396
大丈夫。真っ当なOSならアプリケーション終了時にきちんと開放する。

399:デフォルトの名無しさん
05/05/04 20:06:09
>真っ当なOSなら


400:デフォルトの名無しさん
05/05/04 22:08:18
OSが真っ当かどうかに関わらず真っ当な規格合致処理系なら、
exit()を呼んでいなくてもmain()からreturnすればファイルは閉じられる。
main()でのreturnはexit()の呼び出しと等価とも書かれている。(他の関数からmain()を呼んだ場合は別だが)

しかしfree()の方にはそのような記述は見当たらない。
(free()を呼ばないで終了するとどうなるかということは書いていない)

401:デフォルトの名無しさん
05/05/04 22:14:15
>>400
>(free()を呼ばないで終了するとどうなるかということは書いていない)

free() を読んで終了すればどうなるかということも書いていないけどな。


402:デフォルトの名無しさん
05/05/04 22:23:14
またこの話題か
好きにすれ

403:デフォルトの名無しさん
05/05/04 22:31:48
gotoを使うのは不味いのでしょうか?
どなたかおすえてください

404:デフォルトの名無しさん
05/05/04 22:57:09
Cで質問です。
変数nの値が??のとき、filename??という名前のファイルを開きたい
という場合に、fopenの第1引数にはどのように記述すればよいでしょうか?
先にsprintfを使えばできるようですが
直接引数の部分に記述して何とかする方法がないかと思いまして。

405:デフォルトの名無しさん
05/05/04 23:19:00
>>404
char *filename(int n) { static char buf[100]; sprintf(buf, "filename%d", n); return buf; }

fopen(filename(n), ... )



406:デフォルトの名無しさん
05/05/04 23:26:43
>>405
なるほど!その手がありましたか!
おめでとうございます!ありがとうございます!


(ノ´Д`)ノ 彡┻┻

407:デフォルトの名無しさん
05/05/05 19:22:25
次にこんなことをしてハマると見た。
rename( filename(1), filename(2) ); // filename.1 を filename.2 にバックアップ

408:デフォルトの名無しさん
05/05/05 23:19:39
>fopenの第1引数
そもそもパスとか編集しなくていいのか?

素直に
>先にsprintfを使え

409:デフォルトの名無しさん
05/05/05 23:28:04
そこでC++ですよ。
std::string filename(int n) {return "filename" + boost::lexcal_cast<std::string>(n);}

410:デフォルトの名無しさん
05/05/09 09:50:14
C言語をはじめたばかりであまりわからないのですが、
ビットシフトはなんの役に立つのでしょうか?

411:デフォルトの名無しさん
05/05/09 09:51:19
URLリンク(p6222ed.kyotac00.ap.so-net.ne.jp)

うはっwwwwwwwwwwwwwww

っうぇwwwwww
っうぇうぇwww
wおkwwwwうはっwww
おkwww

っwwwwww

うぇwww


412:デフォルトの名無しさん
05/05/09 10:07:08
URLリンク(EAOcf-526p83.ppp15.odn.ne.jp)
おkwwwwwwwwwwwwおkうぇおkwwwwww
うはっwwwwwwwwwwwwwwwwwwwwwwwwwwwww
うはっうはっwwwwwwwwwwwwwww
wwwwwwwwwwwwっっうぇうぇ
うはっ

413:デフォルトの名無しさん
05/05/09 10:14:46
URLリンク(pdf791d.tokynt01.ap.so-net.ne.jp)

wwwおkwwwwwwうぇwwwwwwwwwっうぇ

おkwwwっうぇうはっwwwwうぇwww

wっうぇうはっwwwwwwwwwwwwwwwwww

414:デフォルトの名無しさん
05/05/10 16:35:01
>>410
ビットシフトしたいときに役に立つ

415:デフォルトの名無しさん
05/05/10 18:01:05
あと、2進数の桁をずらしたいときにも役に立つね。

416:デフォルトの名無しさん
05/05/10 18:29:55
>>410
任意の上位Nビットを取り出したいとかその逆をしたいときとかに。
DWORD dw = 0x12345678;
WORD wHigh = dw >> 16; // 0x1234
WORD wLow = dw & 0xffff // 0x5678
DWORD dw2 = dw << 16 | wLow // 0x12345678


417:デフォルトの名無しさん
05/05/11 18:16:54
<質問>
ピクチャポックに表示した画像をマウスドラッグで範囲選択します。
その選択範囲をマウスのドラッグ中、リアルタイムに枠線で囲みたいのですが
どういう処理が一般的でしょうか?

DrawLineで線を書いたり消したりとかは、おかしいですよね?


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