C統合・質問スレッド
..
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++)
Afor(i=0;<=5;i++)
@は0,1,2,3,4と5回
Aは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
Aは違う
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しか知らなかった
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5373日前に更新/239 KB
担当:undef