C言語なら俺に聞け! Part 118
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2005/12/04(日) 20:46:55質問する前には最低限検索を。
GUIなどの標準Cではできない事の質問,ソース丸投げ、宿題、書籍 は専門の別スレッドがあるのでそこへさようなら。
エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
前スレ
C言語なら俺に聞け! Part 117
http://pc8.2ch.net/test/read.cgi/tech/1131282679/
0002デフォルトの名無しさん
2005/12/04(日) 20:49:150003デフォルトの名無しさん
2005/12/04(日) 20:49:490004デフォルトの名無しさん
2005/12/04(日) 20:53:07cでパターンまっちを実装した拡張ないですか?
0005デフォルトの名無しさん
2005/12/04(日) 20:56:19あるよ
0006デフォルトの名無しさん
2005/12/04(日) 21:02:04>>976 おしえよ
979 :デフォルトの名無しさん :2005/12/04(日) 20:51:12
>>976 おしえてよ
0007デフォルトの名無しさん
2005/12/04(日) 21:03:110008デフォルトの名無しさん
2005/12/04(日) 21:08:14一般的なパターンまっちを実装した拡張ないですか?
0009デフォルトの名無しさん
2005/12/04(日) 21:10:040010デフォルトの名無しさん
2005/12/04(日) 21:12:100011デフォルトの名無しさん
2005/12/04(日) 21:15:350012デフォルトの名無しさん
2005/12/04(日) 21:17:360013デフォルトの名無しさん
2005/12/04(日) 21:18:530014デフォルトの名無しさん
2005/12/04(日) 21:22:000015デフォルトの名無しさん
2005/12/04(日) 21:25:530016デフォルトの名無しさん
2005/12/04(日) 21:31:280017デフォルトの名無しさん
2005/12/04(日) 21:33:29まさか >>12 や、>>14 が正規表現で表せないなんていう、基地外じみたアホ発言はしないでね。
0018デフォルトの名無しさん
2005/12/04(日) 21:42:270019デフォルトの名無しさん
2005/12/04(日) 21:45:230020デフォルトの名無しさん
2005/12/04(日) 21:46:020021デフォルトの名無しさん
2005/12/04(日) 21:50:370022デフォルトの名無しさん
2005/12/04(日) 22:46:29標準出力した結果とファイルに保存した結果が違います。
何度やっても違う結果が保存されてしまいます。
なぜこのようなことになるのかご存知の方ご教授お願いします。
0023デフォルトの名無しさん
2005/12/04(日) 22:50:36具体的にどう違うんですか?
ぜんぜん違うとか、行が抜けるとか、文字が化けるとか
0024デフォルトの名無しさん
2005/12/04(日) 22:51:34とりあえず、何がどうちがうのか説明してもらわないと、
さっぱりわからん。
0025デフォルトの名無しさん
2005/12/04(日) 22:51:380026デフォルトの名無しさん
2005/12/04(日) 22:52:48・標準出力に制御文字を出力している
・標準出力がリダイレクトされている場合に出力を変えるプログラムを動かしている
0027デフォルトの名無しさん
2005/12/04(日) 22:57:250028デフォルトの名無しさん
2005/12/04(日) 23:12:12その数値はプログラム内部で計算されたものですよね。
計算の入力値はどうなっているんですか?
ファイル?それとも画面入力?それともコンスタント?
0029デフォルトの名無しさん
2005/12/04(日) 23:12:37作成できるC言語を利用するのが最適ですか?
つまり、Windowsでゲームを作成したい場合はVC++が良いですか?
0030デフォルトの名無しさん
2005/12/04(日) 23:14:030031デフォルトの名無しさん
2005/12/04(日) 23:20:41>ネイティブコードのプログラムを作成できるC言語
この「ネイティブコード」ってなんでしょうか?
0032デフォルトの名無しさん
2005/12/04(日) 23:24:260033デフォルトの名無しさん
2005/12/04(日) 23:26:130034デフォルトの名無しさん
2005/12/04(日) 23:26:51さっぱりプーです
0035デフォルトの名無しさん
2005/12/04(日) 23:27:25ゲームによるんじゃね?
PS2のゲーム作りたければ、そもそもWindowsって選択肢が間違ってるし。
0036デフォルトの名無しさん
2005/12/04(日) 23:27:280037デフォルトの名無しさん
2005/12/04(日) 23:31:12数値はファイル,コンスタントのものが含まれています。
0038デフォルトの名無しさん
2005/12/04(日) 23:31:17様はフラグみたいなもんですか?
0039・∀・)っ-●○◎- ◆Pu/ODYSSEY
2005/12/04(日) 23:31:54ネイティブコードが有利とか不利とか考える前に生産性が大事だと思うよ。
ぶっちゃけるとDirectXなんかはC/C++だと手続きが多くて結構面倒。
フリーの小物ゲームは結構VBとかC#は多いよ。
パフォーマンスを重視のために労力の増加を苦としないだけの余裕がある
のでなければ、もっと生産性の高い言語から始めるのも手だと思うよ。
0040デフォルトの名無しさん
2005/12/04(日) 23:32:35とりあえずはそういう理解でも構わないかと。
今回のCマガ(12月号)を買うと幸せになれるかも。
0041デフォルトの名無しさん
2005/12/04(日) 23:34:00セフォマじゃなくてセマフォ(semaphore)な。
郵便局や銀行に行くと順番待ちの紙をくれる機械があるだろ。
あの機械と印刷される順番の紙と番号呼び出しのおかげで、来客したお客さんが
混乱することなく次々と窓口によび出されるわけだ。
おおざっぱだが、あれだと思ったらいい。(ほんとに、おおざっぱ。つっこまないで!)
0042デフォルトの名無しさん
2005/12/04(日) 23:34:38たまに立ち読みするんですけど、
初心者には敷居が高い気がするんですよね〜・・・
0043デフォルトの名無しさん
2005/12/04(日) 23:40:490044デフォルトの名無しさん
2005/12/04(日) 23:47:22そもそも手続き型じゃないからなw
DXUT使えば多少は楽になる。
0045デフォルトの名無しさん
2005/12/04(日) 23:50:21数値はファイル,コンスタントのものが含まれています。
0046デフォルトの名無しさん
2005/12/04(日) 23:54:35まとめると、ファイルからデータを読み込んで標準出力に計算結果を出力する
Cでコーディングされたプログラム(pg)がある。
そのプログラムをコマンドラインで
>pg
と起動した場合と、リダイレクトを使って
>pg > text.out
した場合では、計算結果が異なっている。
ということだね?
0047デフォルトの名無しさん
2005/12/05(月) 00:08:29うーん、理由が思いつかないなぁ…
出力するファイルも入力に含まれてしまうって事はないよね?
プログラム示してくれるのが一番手っ取り早そうだが
0048デフォルトの名無しさん
2005/12/05(月) 00:16:58fprintf(stdout,"23\n");
0049デフォルトの名無しさん
2005/12/05(月) 00:45:55exitをよく使うんですけど
バリバリ使ってもPCにとってヤバくはないですよね?
どうもexit=非常口って感じでなんか使うのを躊躇してしまうとです
0050デフォルトの名無しさん
2005/12/05(月) 00:47:13引数
0051デフォルトの名無しさん
2005/12/05(月) 00:47:31はい,そうなんです。
二つのファイルをつかっているので,
>pg >text.out
>file1
>file2
というふうにやっています。
どこかおかしいでしょうか?
0052デフォルトの名無しさん
2005/12/05(月) 00:50:47pgは呼ばれた時点での出力をtext.outに吐いてfile1とfile2の内容は入力にならないよ
0053デフォルトの名無しさん
2005/12/05(月) 01:15:29コンソールアプリケーションならば問題はないでしょう。
環境(=OS)によっては、異常終了するときの終了方法を推奨・規定しているものがあるので、
そちらを使ったほうが無難です。
0054デフォルトの名無しさん
2005/12/05(月) 01:22:11>>992
すいません>>999は間違えましたorz
1001 名前:1001[] 投稿日:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
0055デフォルトの名無しさん
2005/12/05(月) 03:54:390056デフォルトの名無しさん
2005/12/05(月) 08:32:490057デフォルトの名無しさん
2005/12/05(月) 11:26:5701 011101 22110193 -19
↑
ここの3を読み込みたい時は、どうすればいいんですか?
どなたか教えてください。
0058デフォルトの名無しさん
2005/12/05(月) 11:37:52規則性がわかんね
[空白][-]の一つ前の数字を読みたいのか?
0059デフォルトの名無しさん
2005/12/05(月) 11:39:38char *a[] = {"01 011101 2211012 62", "01 011101 22110193 -19"};
char c = a[1][17];
printf("%c", c);
return 0;
}
0060デフォルトの名無しさん
2005/12/05(月) 11:42:11っていうかデータ構造が決まったらプログラムは自然に書ける
0061デフォルトの名無しさん
2005/12/05(月) 11:49:35struct point{
int x;
int y;
int dir;
};
struct point mark={ 320, 200 };
メンバーへのアクセスはmark.xで可能ですが
初期化以外の方法ではどのように代入できるのでしょうか?
0062デフォルトの名無しさん
2005/12/05(月) 11:51:48=
0063デフォルトの名無しさん
2005/12/05(月) 11:53:57実験したらこれでできました^^;
0064デフォルトの名無しさん
2005/12/05(月) 12:04:171 2 3 4 5
6 7 8 9 10
とし、fprintfで表をそのままdataに書き込みたいのですが、どうも上手くいきません。
アドレス一つ一つ読んで書き込むと上書きされてしまうし、改行すると縦に並んでしまうので…
どなたか、纏めて一行読み込む方法を教えて下さい…
0065デフォルトの名無しさん
2005/12/05(月) 12:12:44どこで暴れてる? 見物しにいく.
0066デフォルトの名無しさん
2005/12/05(月) 12:15:240067デフォルトの名無しさん
2005/12/05(月) 12:18:48まず、誰にでも理解できる日本語で書け
0068デフォルトの名無しさん
2005/12/05(月) 12:36:57多分無茶苦茶簡単なんだろうが説明がうんこだから誰も和漢ね
ある意味無茶苦茶難しい問題だな ( ´,_ゝ`)プッ
0069デフォルトの名無しさん
2005/12/05(月) 12:42:43やりたい事を母国語で説明できない=やりたい事を理解していない
と言う事だから、やりたい事を整理する事をお勧めする。
0070デフォルトの名無しさん
2005/12/05(月) 12:51:110071login:Penguin
2005/12/05(月) 13:50:34どこをいじえればよいですか?
0072デフォルトの名無しさん
2005/12/05(月) 14:46:52スレ違い
0073デフォルトの名無しさん
2005/12/05(月) 15:09:05スタック消費しないように書き直せ。
007464
2005/12/05(月) 15:21:40ええと、もう一つ引っかかっているところがあって、こちらだけでも教えていただけると嬉しいのですが…
fprintfで、書式を直接出力するようなことは出来ないのでしょうか?
FILE *fp;
fprintf(fp,"書式",)なのですが、例えば「あいうえお」を出力したい際にfprintf(fp,"あいうえお")ではPCがフリーズします。
関数で数字を放り込んで指定してやったり、scanfでキーボ入力経由してやる分にはOKなのですが…
こちらが指定する数字以外の文字をフロッピーに出力する方法がわかりません…
0075デフォルトの名無しさん
2005/12/05(月) 15:27:18007664
2005/12/05(月) 15:30:47int file(int x, int y,int n){
FILE *fp;
for(y=1;y<=n;y++){
for(x=1;x<=n;x++){
if(masu[x][y] != 0) fprintf(fp," %2d",masu[x][y]);
else fprintf(fp," *");
}
fprintf(fp,"\n\r");
}
return 0;
}
masuとかは脳内で補完しちゃって下さい…
とにかく、" *"と"\n\r"をフロッピーに出力したいだけです…
0077デフォルトの名無しさん
2005/12/05(月) 15:30:57単にfopenしていないとかそんなおちでは?
007877
2005/12/05(月) 15:31:43007964
2005/12/05(月) 15:35:30if((fp=fopen("data.dat","w"))==0){
printf("cannot open file \n");
return 1;
}
はその前に入れてあります。
何故か>>76の所でPCフリーズするので悩んでます…
0080デフォルトの名無しさん
2005/12/05(月) 15:43:55> masuとかは脳内で補完しちゃって下さい…
ヲイヲイ masu はちゃんと領域確保できているのかね?
masu[1][1] 〜 masu[n][n] までアクセスするから 最低でも masu[n+1][n+1] は必要なんだが...
0081デフォルトの名無しさん
2005/12/05(月) 15:46:21http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1208.txt
こんな感じなのですが…
masuは[11][11]です。
0082デフォルトの名無しさん
2005/12/05(月) 15:49:38ファイル開いてないじゃん。
関数内で確保した変数は、呼び出し先では使えないって習わなかった?
0083デフォルトの名無しさん
2005/12/05(月) 15:53:19.... やっぱ >>77 じゃん。
file() 関数内で fopen() やれやー or fp を引数で取れやー
0084デフォルトの名無しさん
2005/12/05(月) 15:59:570085デフォルトの名無しさん
2005/12/05(月) 16:02:38どう見てもローカル変数として宣言してるだろ。
008681
2005/12/05(月) 16:04:53何とか宿題の提出期限に間に合いそうです。
単純なことで迷惑かけて済みませんでした。有難う御座います〜!
0087デフォルトの名無しさん
2005/12/05(月) 16:07:21>>76 を見て省略されているのかな?と思った。
>>81 を見てコピペだと判明した。
ローカル変数宣言だけしていきなり使ってる。 ちょっとびっくらこいた
0088デフォルトの名無しさん
2005/12/05(月) 16:49:29printf("100.00%完了 (全部で%d個見つかりました)\n",cnt);
としたところ、%dがうまく置き換えられませんでした。
そこで前にある%が原因だと考え色々試してみると、%%とすることでうまく表示させることができました。
エスケープシーケンスというのは本で読んだのですが、%の場合には%%とするのが正しいのでしょうか。
また、%の他に注意する文字があれば教えてください。
0089デフォルトの名無しさん
2005/12/05(月) 16:52:030090デフォルトの名無しさん
2005/12/05(月) 17:32:46WS_OVERLAPPEDWINDOW,WS_EX_CONTROLPARENT | WS_EX_WINDOWEDGE,NULL,LoadIcon(NULL,MAKEINTRESOURCE(IDI_APPLICATION)));
これの最大化、最小化、閉じるボタンはどこを弄るんでしょうか。
弄り方も教えてくださいな。
0091デフォルトの名無しさん
2005/12/05(月) 17:35:560092デフォルトの名無しさん
2005/12/05(月) 17:41:06検索したら見つかりました。ありがとうございました。
0093デフォルトの名無しさん
2005/12/05(月) 17:52:51ソートプログラムで次のようなスワップの場合めっちゃ遅いんですけど
ヒープが遅いのはなぜなんですか?
void swap(void *a , void *b , int size)
{
char *buf = (char*)malloc(size);
memcpy(buf,a,size);
memcpy(,a,b,size);
memcpy(b,buf,size);
free(buf);
}
0094デフォルトの名無しさん
2005/12/05(月) 18:06:41速いコードが示されてないので良く分からんが、
malloc/freeに時間がかかってるんじゃないの?
0095デフォルトの名無しさん
2005/12/05(月) 18:20:250096デフォルトの名無しさん
2005/12/05(月) 19:16:25ポインタによる3次元配列はどのようにすればできるのですか?
ネットや図書館や本屋で調べても、解説すら見つけられません。
どなたか教えてください。
具体的なプログラムを掲示してくれると大変助かります。
0097デフォルトの名無しさん
2005/12/05(月) 19:25:20C言語とC++言語 のそこかしこで暴れてる。
正直、書き込みにくい。
0098デフォルトの名無しさん
2005/12/05(月) 19:26:00ポインタによる二次元配列の配列を作ればいい。
0099デフォルトの名無しさん
2005/12/05(月) 20:08:38二次元配列の配列とはどのようにすればいいのですか?
0100デフォルトの名無しさん
2005/12/05(月) 20:12:120101デフォルトの名無しさん
2005/12/05(月) 20:38:05> ポインタによる2次元配列
> ポインタによる3次元配列
とは何か?
そもそも、2次元配列は2次元配列で、
3次元配列は3次元配列でしかない。
# つまり、オレ用語を使うなと。
0102デフォルトの名無しさん
2005/12/05(月) 21:17:45あるプロセス(A)で「hogehoge00.jpg〜hogehoge09.jpg」という画像ファイルを作成しています。
またあるプロセス(B)では、作成された画像を順次読み出して表示しています。
このとき、Aのプロセスにおいて「画像をファイルとして保存している蔡中」の状態で
Bからそのファイルを読み込もうとすると、当然おかしなことになってしまいます。
system関数でfileコマンドでも読み出せば、指定したファイルがちゃんとしたJPG画像かどうかを
判別することはできるのですが、システムの仕様上system関数を使うことができません。
「今現在読み込もうとしているJPG画像が、きちんと生成されているか」というのを判別するには
一体どのようにしたらいいのでしょうか。
手ほどきのほど、よろしくお願いします。
0103デフォルトの名無しさん
2005/12/05(月) 21:26:03jpgを書き出した後に「最新のファイル名」をどこかに保存。
もしくはjpg書き出し側で
一時ファイルに書き出し→書き出し終了したらhogehoge....jpgにファイル名変更
とするとか。
0104デフォルトの名無しさん
2005/12/05(月) 21:53:380105デフォルトの名無しさん
2005/12/05(月) 22:31:12それをstat系関数で調べたファイルサイズと比べるとか
read系関数の返り値で得られたバイト数と比べるとかすればOKと思う
0106デフォルトの名無しさん
2005/12/05(月) 22:33:340107デフォルトの名無しさん
2005/12/05(月) 22:44:55関数呼び出し時に自動で確保され、関数終了時に廃棄されるのがスタック
手動で確保し、関数が終わっても残るのがヒープ
その書き方が遅いのはa/bの操作をするのに対してmalloc/freeのシステムコール呼び出しの
オーバーヘッドが大きすぎるから
特に初期化を行わないスタックがほぼコスト0で取れるのに対し、ヒープは
一旦OSを呼び出す分オーバーヘッドが大きいのが効いている
別にヒープで取ったメモリだから読み書きが遅いわけではない
あらかじめbufを確保しておけばスタックと同等の速度が出ると思われる
0108デフォルトの名無しさん
2005/12/05(月) 22:52:220109デフォルトの名無しさん
2005/12/05(月) 22:56:34あんま意味ない?
0110デフォルトの名無しさん
2005/12/05(月) 23:02:48104 だとAがファイルオープンして flock 掛ける直前にBがファイル開こうとしたときの処理が面倒
105 もAファイルヘッダを書き終わっているかのチェックが必要なんで面倒
106 はどの画像ファイルに対して所有権を設定するのか約束事を決めるのが面倒
という訳で一見愚直な感もする 103 が一番使いやすかったりする。
あとファイル共有システムに強いとかデバッグしやすいのも好印象。
あくまでも個人的経験ではそうだったということだけど。
0111デフォルトの名無しさん
2005/12/06(火) 00:07:00malloc/freeの呼び出しのせいでスタック上でやるより時間がかかっているのは確かだけど
毎回malloc/freeでOSを呼び出してるわけじゃないよ。
0112デフォルトの名無しさん
2005/12/06(火) 00:33:36某業界の電文処理は、基本的に>103の前者で実装されていたりする。
書き出し完了番号と読み出し完了番号を書く側と読む側が其々更新する仕掛け。
書き出し完了番号が更新されたら読みに行き、読み出し完了番号を更新したら1シーケンス完了。
この方式の利点は、読み出し側が処理が止まっても後から追っかけで処理できる点。
0113デフォルトの名無しさん
2005/12/06(火) 01:16:45なんかお墨付きをもらってちょっと安心な気分。
一回しかこのてのプロジェクトに関わったたこと無いもんで
書き込んだ後どんなレスがつくか戦々恐々でした。
0114デフォルトの名無しさん
2005/12/06(火) 05:28:56ちゃんと完了したときに、rename(2)で置きに行けば良いんじゃないの?
0115デフォルトの名無しさん
2005/12/06(火) 06:35:201+2-3+4-5
の答えを表示するにはどんなコードにすればいいんですか?
0116デフォルトの名無しさん
2005/12/06(火) 06:39:240117デフォルトの名無しさん
2005/12/06(火) 06:49:25int main(void)
{
int i;
int d[] = {1, +2, -3, +4, -5};
int s = 0;
for(i = 0; i < 5; i++){
s += d[i];
printf("%c%d", d[i] >= 0 ? '+' : ' ', d[i]);
}
printf(" = %d\n", s);
return 0;
}
0118デフォルトの名無しさん
2005/12/06(火) 06:58:141+2-3+4-5+…-98+99-100
の答えを表示するにはどんなコードにすればいいんですか?
0119デフォルトの名無しさん
2005/12/06(火) 07:14:13int main(void)
{
int cnt;
int num[100];
int ans = 0;
for(cnt = 0; cnt < 100; cnt++){
num[cnt] = cnt + 1;
if((cnt + 1) == 1){
ans += num[cnt];
printf("%d",num[cnt]);
}else if((cnt % 2) != 0){
ans += num[cnt];
printf("+%d",num[cnt]);
} else {
ans -= num[cnt];
printf("-%d",num[cnt]);
}
}
printf("\n=%d",ans);
return 0;
}
厨房だから間違えてても知らない
0120102
2005/12/06(火) 07:32:59アドバイス�dクス
手持ちのリファレンスブックにはflockが載ってなかったので、
いまいち分からなかったが、ちょっと調べてみようと思います。
ヘッダの中身を比べてみるってのも、候補に上がっていたんですが
解析するのがちょっと面d(ry)だったので・・・
とりあえず、>>103氏の提案でやってみようとおもう。
スレ汚しスマソ
0121デフォルトの名無しさん
2005/12/06(火) 07:36:12エラー出しすぎw
0122デフォルトの名無しさん
2005/12/06(火) 07:42:550123デフォルトの名無しさん
2005/12/06(火) 08:27:37> 1+2-3+4-5+…-98+99-100
1 + 2 + (-3) + 4 + (-5) + ... + (-98) + 99 + (-100)
どこで, 符合がつくのが奇数から偶数に変わってるんだ?
そもそも, 数列のならびに規則性はあるのか?
0124デフォルトの名無しさん
2005/12/06(火) 08:39:15{
if(value){
...
return TRUE;
}
else
return FALSE;
}
くだらないことかもしれませんが
例えば上の関数でelseがあるのとないのとでは違いが生じるのでしょうか
0125デフォルトの名無しさん
2005/12/06(火) 08:46:03読みやすさでどちらにするか決めればよかろう。
0126デフォルトの名無しさん
2005/12/06(火) 08:57:35どちらが一般的、またはよろしいと思われますか?
0127デフォルトの名無しさん
2005/12/06(火) 10:43:28elseなかったら常に実行じゃん
0128デフォルトの名無しさん
2005/12/06(火) 10:44:070129デフォルトの名無しさん
2005/12/06(火) 10:54:55読まれる場合は防ぐにはどうすればいいんですか?
0130デフォルトの名無しさん
2005/12/06(火) 11:13:03日本語勉強汁
>>123
そもそも 1 に負号が付いていない訳で
最初から既に疑問だらけだったんだが
0131112
2005/12/06(火) 12:02:40・読み出し完了番号は読み出し側のアクセスのみなので問題ない。
・書き出し完了番号は更新されるまでは古い番号が読み出されるから問題ない。
#つまり、書き出し完了番号を記録するファイルはfopen(file, "w")で開いてはいけない。
0132デフォルトの名無しさん
2005/12/06(火) 12:41:33その書き出し完了番号が複数バイトに渡っていて、
まさに書いている途中に読み出されたらどうするのかと。
# 漏れは、ちゃんとしたプロセス間通信を行った方が良いと思うよ。
0133デフォルトの名無しさん
2005/12/06(火) 13:17:45でアプリケーション呼び出せませんでしたっけ。
0134デフォルトの名無しさん
2005/12/06(火) 13:30:21ディスクシステムとドライバがどういうものか勉強した方がいいと思うよ。
#まさかキャラクタデバイスに書く香具師はいまい。
0135デフォルトの名無しさん
2005/12/06(火) 13:32:25OSによっても違うけど、パスが通っていれば(或いはなんらかの形で登録されていれば)
namaeというアプリケーションを起動できると思うよ。
#詳細は各OS関連スレか環境依存スレへ。
0136デフォルトの名無しさん
2005/12/06(火) 14:00:23返信ありがとうございます。
not foundばかりでるので、たぶんパスが通ってなかったと思います。
「./ファイル名で起動できたので」
0137デフォルトの名無しさん
2005/12/06(火) 14:36:52>ちゃんとしたプロセス間通信を行った方が良い
に同意。
ファイルの読み込みポーリングなんて愚行するなら
名前付きパイプなり何なり使えと。
0138132
2005/12/06(火) 14:46:01特定の環境スレであれば、>>132の様なレスもしないが、
標準Cの範疇では「キャラクタデバイスでない」なんて、
分かるはずもないし想定すべきでもない。
標準Cの範疇で考える以上、「キャラクタデバイス」であるかも、
と言う事もプログラマが考えるべき。
# だから、環境にあったプロセス間通信を(ry
0139デフォルトの名無しさん
2005/12/06(火) 16:00:210140デフォルトの名無しさん
2005/12/06(火) 16:21:460141デフォルトの名無しさん
2005/12/06(火) 16:25:440142デフォルトの名無しさん
2005/12/06(火) 17:45:48文盲なの?
0143デフォルトの名無しさん
2005/12/06(火) 18:07:41bの領域を確保した後に、既に領域を持つaと相互にチェインするものです。
ポインタのポインタを定義してスコープ問題を解決しています。(**bのことです。)
しかし、チェインを行うために媒介用のポインタcを用意しなくてはならなくなりました。
例・*b->back = a;は構文エラーとなります。
ポインタcを用いることなくこの関数を成立させることは可能なのでしょうか?
inline void Chain(struct test *a, struct test **b)
{
struct test *c = NULL:
*b = (struct test *)malloc(sizeof(struct test));
c = *b;
if(c == NULL)
{
printf("メモリの確保に失敗しました。強制終了します。\n");
exit(1);
}
a->next = c; c->back= a;
return;
}
を聞こうと思ってたけど、もう1個関数作れば解決するじゃないか…orz
でもなんで「*b->back = a;」はエラーになるんでしょうね?
「*bは構造体のポインタではない」とエラーが出ています。はて?
0144デフォルトの名無しさん
2005/12/06(火) 18:13:570145デフォルトの名無しさん
2005/12/06(火) 18:14:240147デフォルトの名無しさん
2005/12/06(火) 18:19:44*b->back は、わかりやすく書くと *(b->back)。
おまいが望むものは、>>144
演算子の優先順位ぐらい頭に叩きこんどけ
0148デフォルトの名無しさん
2005/12/06(火) 18:25:120149デフォルトの名無しさん
2005/12/06(火) 18:39:080150デフォルトの名無しさん
2005/12/06(火) 18:42:38池沼なの?
0151デフォルトの名無しさん
2005/12/06(火) 18:51:40見当違いな反論をした>132が>134に揶揄されたのに逆切れしたのか
>137の尻馬に乗って>138では言い訳しているわけだ。
で、「標準Cの範疇で」云々と書きながら「環境に合った」云々と矛盾を書いて、
>139に突っ込まれている。
となれば、>142=>145でかつ、>132=>138とも同一人物であると推測可能なわけだね。
0152デフォルトの名無しさん
2005/12/06(火) 18:55:33面白いやつだ
0153デフォルトの名無しさん
2005/12/06(火) 22:12:27ファイル経由のプロセス間通信をする場合は rename を使うのが定石。
Aは別名でファイルでファイル出力した後特定ファイル名にリネーム
Bは特定ファイル名をポーリングして読み込み完了したら別名にリネーム。
読み込み済みの別名ファイルは適当に削除する(常に1つは残しておく)。
Linuxを含む大抵のOSでrenameはアトミックなのでこれでオッケイ。
不具合が発生時には残されたファイル名とタイムスタンプがデバッグの道標になる。
>>132 >>137
ファイルベースは単体テストが簡単なので初心者に勧めるのはあながち間違ってないと思うよ。
0154125
2005/12/06(火) 22:17:00BOOL func(int value)
{
if (value) {
procA;
return TRUE;
} else {
procB;
return FALSE;
}
}
BOOL func(int value)
{
if (value) {
procA;
return TRUE;
}
procB;
return FALSE;
}
として、procAとprocBが意味的にも分量的に同じくらいなら前者の方がインデントが同じでバランスが取れる。
procAとprocBが分量的に差が大きいなら、後者の方が意味が掴みやすいだろう。
procAが重くてprocBが殆どないなら私は論理を逆にして重い処理のインデントを減らすけど。
#それはいいけど、BOOT/TRUE/FALSEかぁ……
0155デフォルトの名無しさん
2005/12/06(火) 22:25:28自分でstdbool.hを適当に作ってやる。
0157デフォルトの名無しさん
2005/12/07(水) 00:16:06例えば
case 2000 || 2001 || 2002:
みたいな感じです
0158デフォルトの名無しさん
2005/12/07(水) 00:17:39無理
case 2000
case 2001
case 2002
(処理)
break;
と、やるよろし
0159デフォルトの名無しさん
2005/12/07(水) 00:18:26ふつうにできるよ。
その書き方じゃ無理だけど。
0160デフォルトの名無しさん
2005/12/07(水) 00:18:41条件が多いんでifでやっちゃいますね(´・ω・`)スミマセン
0161デフォルトの名無しさん
2005/12/07(水) 00:19:12case (2000 || 2001 || 2002):で試してきます
0162デフォルトの名無しさん
2005/12/07(水) 00:19:58それじゃ、常に成立しちゃうよ
0163デフォルトの名無しさん
2005/12/07(水) 00:20:490164デフォルトの名無しさん
2005/12/07(水) 00:22:430165デフォルトの名無しさん
2005/12/07(水) 00:24:240166デフォルトの名無しさん
2005/12/07(水) 00:25:47case 2001:
case 2002:
/* */
break;
0167デフォルトの名無しさん
2005/12/07(水) 01:05:270168デフォルトの名無しさん
2005/12/07(水) 01:19:48>>158
あれだ、フォールを使え
0169デフォルトの名無しさん
2005/12/07(水) 01:48:19それにアンカー付けると「動かないんですが」とか言われてマンドクセになるかも。
>>166 だな。
0170デフォルトの名無しさん
2005/12/07(水) 05:09:28C99とかよくわからないですが使ってる処理系はBCC5.5です。
a%bでb=0はまずいのでしょうか
まずいですよね・・
0171・∀・)っ-●○◎- ◆Pu/ODYSSEY
2005/12/07(水) 06:12:59BCCはよく知らないけど、VCだと例外が投げられます。
不正な処理を行ったため強制終了(ry
まあ、例外を捕捉してやればこれだけで落ちることは無いのだけど
0172デフォルトの名無しさん
2005/12/07(水) 12:08:07するようにしたくて試行錯誤して下のような処理を作成しました。
でも、Xボタンを押したらやっぱりすぐに終了してしまいます。
どの辺が悪いでしょうか。そもそも方向違いでしょうか。
while(mbLoopFlag){
if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)) {
if(!GetMessage(&msg,NULL,0,0)){
if(msg.message == WM_CLOSE){
mbLoopFlag = false;
}
}
TranslateMessage(&msg);
DispatchMessage(&msg);
}
0173デフォルトの名無しさん
2005/12/07(水) 12:14:11方向違いだしスレ違い。
0174デフォルトの名無しさん
2005/12/07(水) 12:23:400175デフォルトの名無しさん
2005/12/07(水) 13:00:560176デフォルトの名無しさん
2005/12/07(水) 13:23:180177デフォルトの名無しさん
2005/12/07(水) 13:23:51でアプリ開こうとしても見つかりませんがでます。
どこか間違ってるのでしょうか。
0178デフォルトの名無しさん
2005/12/07(水) 13:35:02コンソールアプリはウィンドウハンドルを持たないんだよ。コマンドプロンプトというプログラムで動いてるに過ぎない。
適切なシグナルハンドラを登録してやればいいよ
http://www.shibu.jp/cppreference/stdother_details.html#signal
いちおうシグナルは標準関数みたいなもんだからここでいいかも。
>>177
スレ違いだがShellExecute
0179デフォルトの名無しさん
2005/12/07(水) 13:38:14main(){
char *D[10];
char str[6];
int i;
for(i=0;i<5;i++){
scanf("%s",str);
D[i]=str;
}
printf("\n*output*\n");
for(i=0;i<5;i++){
printf("%s : ",D[i]);
}
}
このようなプログラムを書いたのですが...
自分のイメージとしては
abc def ghi jkl mno
と入力すると
abc : def : ghi : jkl : mno :
という出力なんですけど、実際は
mno : mno : mno : mno : mno :
といった感じにってしまいます。
ポインタ配列を使う場合はどのように書いたら良いのでしょうか?ご教示お願いします
0180デフォルトの名無しさん
2005/12/07(水) 13:43:16Dはポインタの配列です
D[0]からD[4]までstrのアドレスを指しています。
strの中身は最後に入れたmnoが入っています。
だから、strの中身のmnoが5回表示されます
0181デフォルトの名無しさん
2005/12/07(水) 13:47:30文字列の入れ物はstr[6]ってchar配列が1個あるだけ。ポインタはその入れ物のアドレスを示すだけ。
5つの文字列を保存できるわけないでしょ。
Dをchar配列の配列にするか、mallocで割り当ててやるかのどっちかだね。
配列の配列でいいと思うけど。
0182デフォルトの名無しさん
2005/12/07(水) 13:51:24main(){
char D[10][6];
int i;
for(i=0;i<5;i++){
scanf("%s",D[i]);
}
printf("\n*output*\n");
for(i=0;i<5;i++){
printf("%s : ",D[i]);
}
}
0183デフォルトの名無しさん
2005/12/07(水) 14:19:05どうも、解決しました。
C言語で、アプリ(集計ソフトなど)の自動化などできますかね。
./ファイル名 で起動させたら勝手に集計するファイルが設定されて集計しだすとか。
0184VCです
2005/12/07(水) 14:33:10char Myfunc(char o);
void main(void);
char Myfunc(char o)
{
printf("私たちはMyfunc()のなかにいます。");
printf("引数として%sを受け取りました。\n",o);
printf("そのままを戻り値として返します。\n");
return(o);
}
void main(void)
{
char o;
char moji[12];
printf("文字を入力してください ");
scanf("%s",moji);
printf("\n");
o=Myfunc(moji[12]);
printf("関数から戻ってきました \n");
printf("戻り値は%sです。\n",o);
}
↑のやつを実行すると実行画面で「文字を入力してください」とでて
「もじ」と手入力すると「私たちはMyfunc()のなかにいます」という
メッセージがでるところまできて終わってしまいます。
一体なにが悪いのでしょうか?
0185デフォルトの名無しさん
2005/12/07(水) 14:43:23char *Myfunc(char o[])
0186デフォルトの名無しさん
2005/12/07(水) 14:52:40static int x, y;
int test(int n, int m)
{
printf("mainからの引数をチェックします\n");
printf("n = %d, m = %d\n", n, m);
x = n+1;
y = m+1;
return x, y;
}
void main()
{
int n,m;
printf("n =");
scanf("%d", n);
printf("\n");
printf("m =");
scanf("%d", m);
test(n-1, m-1);
printf("testからの戻り値をチェックします\n");
printf("x = %d, y = %d\n", x, y);
}
実行したところ、mainからtestへのn, mの値が正しく渡されていないようなのですが、なぜでしょうか?
0187デフォルトの名無しさん
2005/12/07(水) 14:53:33> char *Myfunc(char o[])
さらに
o=Myfunc(moji[12]); ---> o=Myfunc(moji);
0188デフォルトの名無しさん
2005/12/07(水) 14:55:57printf とか scanf のマニュアル読め!
0189VCです
2005/12/07(水) 14:56:59ためしにプロトタイプ宣言と関数の名前をchar *Myfunc(char o[])にしたのですが
o=Myfunc(moji[12]);のところでエラーがでました。
ちなみに上のソースは↓のソースをいじったものです。なんとかchar *Myfunc(char o[])
の*を使わなくてよい方法はないでしょうか?まだポインタを勉強していないので・・・
#include <stdio.h>
int Myfunc(int n); /* プロトタイプ宣言 */
void main(void);
/* 整数を受け取りその 1 / 2 の値を返す */
int Myfunc(int n)
{
printf("私たちはMyfunc( ) の中にいます。\n");
printf("引数として %d を受け取りました。\n", n);
printf("その半分を戻り値として返します。。\n");
return (n / 2); /* ここで戻り値をスタックに積んで返る */
}
void main(void)
{
int m, n;
printf("整数を入力して下さい ");
scanf("%d", &m);
printf("\n"); /* 改行 */
n = Myfunc(m); /* 自作関数の呼び出し */
/* n に戻り値が代入される */
printf("関数から戻って来ました。\n");
printf("戻り値は %d です。\n", n);
}
0190VCです
2005/12/07(水) 15:05:30アドバイスのとおりやったのですが実行の結果エラーがでました。
(25) : error C2440: '=' : 'char *' から 'char' に変換することはできません。(新しい動作 ; ヘルプを参照)
この変換には reinterpret_cast, C スタイル キャストまたは関数スタイルのキャストが必要です。
#include <stdio.h>
char *Myfunc(char o[]);
void main(void);
char *Myfunc(char o[])
{
printf("私たちはMyfunc()のなかにいます。");
printf("引数として%sを受け取りました。\n",o);
printf("そのままを戻り値として返します。\n");
return(o);
}
void main(void)
{
char o;
char moji[12];
printf("文字を入力してください ");
scanf("%s",moji);
printf("\n");
o=Myfunc(moji);
printf("関数から戻ってきました \n");
printf("戻り値は%sです。\n",o);
}
0191デフォルトの名無しさん
2005/12/07(水) 15:06:00ご指摘ありがとうございます。
0192デフォルトの名無しさん
2005/12/07(水) 15:09:50mainの頭のoの宣言をchar *oへ。
あとvoid mainは一般的でないからやめろ。
0193デフォルトの名無しさん
2005/12/07(水) 15:09:56%sじゃなくて%c
0194デフォルトの名無しさん
2005/12/07(水) 15:12:18185-192は%sを生かす方向で修正させようとしているのにそう言うのは如何なものか。
0195デフォルトの名無しさん
2005/12/07(水) 15:12:32自己レス
184に対する解決策であって、その後の展開は違う方向へ進んでるので
>>190
に対して適用しないように。
0196VCです
2005/12/07(水) 15:35:34かえるとエラーがでるのでそのままにしてあります。あとvoid main(void)のプロトタイプは
消しました。
#include <stdio.h>
char *Myfunc(char o[]);
char *Myfunc(char o[])
{
printf("私たちはMyfunc()のなかにいます。");
printf("引数として%sを受け取りました。\n",o);
printf("そのままを戻り値として返します。\n");
return(o);
}
void main(void)
{
char *o;
char moji;
printf("文字を入力してください ");
scanf("%s",moji);
printf("\n");
o=Myfunc(moji);
printf("関数から戻ってきました \n");
printf("戻り値は%sです。\n",o);
}
error C2664: 'Myfunc' : 1 番目の引数を 'char' から 'char []' に変換できません。 (新しい機能 ; ヘルプを参照)
整数型からポインタ型への変換には reinterpret_cast、C スタイル キャストまたは関数スタイル キャストが必要です。
どうしてもo=Myfunc(moji);のところでエラーが出てしまいます。
0197デフォルトの名無しさん
2005/12/07(水) 15:37:11char moji[12];の宣言は変えなくて良い。
0198VCです
2005/12/07(水) 15:41:12サンプルソースをいじっただけでこんなに苦戦するとは・・・
ありがとうプログラムの神々よ。
0199デフォルトの名無しさん
2005/12/07(水) 15:46:270200デフォルトの名無しさん
2005/12/07(水) 15:47:360201デフォルトの名無しさん
2005/12/07(水) 15:51:45char *hoge="ぬるぽ";
という記述を許可してる事だと思うのですよ
0202デフォルトの名無しさん
2005/12/07(水) 16:01:390203デフォルトの名無しさん
2005/12/07(水) 16:05:04201のコードは問題ない。
ただし書き換えるのは駄目。
0204デフォルトの名無しさん
2005/12/07(水) 16:05:110205デフォルトの名無しさん
2005/12/07(水) 16:13:01そんなこと分かってるの。
バカは黙ってて
0206デフォルトの名無しさん
2005/12/07(水) 16:14:21char hoge[] = "ガッ";
を許可してる方が変だと思うのですよ。
0207デフォルトの名無しさん
2005/12/07(水) 16:16:47だから規格でも203のとおりだ。
0208デフォルトの名無しさん
2005/12/07(水) 16:32:55積ABとBAを 求めるプログラムを作成せよ。また一般的にはABとBAが
等しくならない ことを確認せよ。』ですがどなたか教えてくれませんか?
CでもPascalでもいいのでお願いします。
0209デフォルトの名無しさん
2005/12/07(水) 16:49:100210デフォルトの名無しさん
2005/12/07(水) 17:01:41『3×3型の二つの行列A=[aij],B=[bij]を読み込み、
積ABとBAを 求めるプログラムを作成せよ。また一般的にはABとBAが
等しくならない ことを確認せよ。』ですがどなたか教えてくれませんか?
CでもPascalでもいいのでお願いします。
お前みたいな馬鹿な子はいくら勉強しても無駄だよ。
さっさと処理系消して自殺してね
0211デフォルトの名無しさん
2005/12/07(水) 17:37:240212デフォルトの名無しさん
2005/12/07(水) 17:41:16出来るけど他の人がどう書くのか見たくて
質問してるだけなのかもしれないよ?
0213デフォルトの名無しさん
2005/12/07(水) 18:13:01#define kMax 1.1;
double x, a;
/* ここで x と a に 値を入力*/
if( x+a < kMin || x-a < kMin || kMax < x+a || kMax < x-a ) hoge;
else foo;
このif文をもう少し簡潔に書けないものでしょうか
0214デフォルトの名無しさん
2005/12/07(水) 18:19:20double a_abs = abs(a);
if( x-a_abs < kMin || kMax < x+a_abs ) hoge;
0215デフォルトの名無しさん
2005/12/07(水) 18:27:43absは前に試しましたがintしか扱えないみたいで無理でした
自分でdouble MyAbs(double)とかを作ればいけると思いますが
0216デフォルトの名無しさん
2005/12/07(水) 18:29:360217デフォルトの名無しさん
2005/12/07(水) 18:33:08つーか
#define ABS(a) ( (a) > 0 ? (a) : -(a) )
これで全数値型対応可能だと思う。
0218デフォルトの名無しさん
2005/12/07(水) 18:47:47>>196 のソースの意味がわかりません。なぜchar oではなくchar *oを宣言
したのか。そして関数Myfuncがなぜ*Myfuncでなければならないのでしょうか?
自分なりに調べてみたのですがchar moji[12]は配列である。そして配列はポインタでもある。(←ここがわからない)
だからその配列(ポインタ)を渡すから関数もポインタで宣言しなければならないってことなんでしょうか?
(char *o[])になるのでは?だとしたらchar *Myfunc(char o[])ではなくchar Myfunc(char *o[])になるような気がするのですが・・・
*は何をしているのでしょうか?
0219デフォルトの名無しさん
2005/12/07(水) 18:53:17ああそうかマクロ使えばいいのか
ありがとうございます
0220デフォルトの名無しさん
2005/12/07(水) 18:54:140221デフォルトの名無しさん
2005/12/07(水) 18:54:53fabsなんてものがあったのですか
いや本当に申し訳ありませんでした
0223デフォルトの名無しさん
2005/12/07(水) 19:00:30ならない。
配列のアドレスは配列の先頭要素のアドレス
MyFuncの帰り値はなにを返してるかって言うと、引数として渡された配列の先頭のアドレスを返してるの。
charを返したら先頭の文字が帰るだけ。
0224デフォルトの名無しさん
2005/12/07(水) 19:41:24釣りじゃね?
0225デフォルトの名無しさん
2005/12/07(水) 21:15:44以下のような、3列のTSVファイルを開いて、それぞれの項目を指定した変数に
格納する部分で、上手くいかないことがあるんです。
●読み込むTSVファイルの中身
[文字列1]_[文字列2]_[文字列3] /* _はTabです */
(…以下何行も)
まぁ、単純に考えてsscanfで終了だろうやっていうことで、
「sscanf(tmp, "%s\t%s\t%s\n", v1, v2, v3);」って書いたんですが、
確かに全ての項目が埋まってる場合、それぞれの変数に格納しています。
けどここに来て、上記TSVファイル内の文字列が存在しない場合も考えないと
いけなくなっちゃったんです。具体的には、
(1)[文字列1]__[文字列3]
(2)__[文字列3]
みたいな一行が、ファイル内にあるっていうことです。
このまま上記で書いたsscanfを使った場合、その中の変数を借りて表現すると、
(1)だとv1には文字列1が、v2に文字列3が入っちゃいます。
きちんと順番通りに、NULLを考慮して、それぞれの変数に値を格納したいんですけど、
何か良いアイディアは無いでしょうか。よろしくお願いします。
PS:パターンを、"%[^\t]\t%[^\t]\t%[^\n]\n"にしても駄目でした。
もうファイルから一行拾ってきた時点で、全ての番地の中身を確認するような
ロジックにしないといけないんですかねぇ…。
0226デフォルトの名無しさん
2005/12/07(水) 21:18:330227デフォルトの名無しさん
2005/12/07(水) 21:18:55sscanfの戻り値は正常に引数へ代入されたものの数になります。
だからその例では(1)の行では2が返されます。
これを見てどうにかしたらどうでしょうか。
0228デフォルトの名無しさん
2005/12/07(水) 21:32:410229デフォルトの名無しさん
2005/12/07(水) 21:38:52こんなプログラム書くとwhileの条件式が評価されるたびに毎回"2ch"がメモリ内に確保されるのですか?
0230デフォルトの名無しさん
2005/12/07(水) 21:40:26そうとは限らない。文字列定数の入ってるアドレスを読み出してきて評価するだけ。
0231デフォルトの名無しさん
2005/12/07(水) 21:40:56いいえ。
ダブルクォーテーションで括った文字列は静的(プログラム開始時)にメモリ確保される。
whileで評価されるのはその文字列へのポインタ。
0232デフォルトの名無しさん
2005/12/07(水) 21:43:52サンクス
0233デフォルトの名無しさん
2005/12/07(水) 21:49:37strtok()は空フィールド扱えないからダメ
0234・∀・)っ-●○◎- ◆Pu/ODYSSEY
2005/12/07(水) 21:53:210235・∀・)っ-●○◎- ◆Pu/ODYSSEY
2005/12/07(水) 21:56:170236デフォルトの名無しさん
2005/12/07(水) 22:12:39typedef struct{
int eigo;
int suugaku;
int kokugo;
} score;
int main(void)
{
score data[];
int cnt = 0;
int people = 0;
int eigoh,suugakuh,kokugoh;
printf("学生の人数->");
scanf("%d",&people);
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
人数を入力し、その分構造体dataの配列を作りたいのですが、どうしてもscore data[]のところで
「'data' のサイズが不明、あるいはゼロ(関数 main )」とエラーが出てしまいます
0237デフォルトの名無しさん
2005/12/07(水) 22:17:27Cの配列はコンパイル時に要素数を決めなければならない。
ポインタとmallocなどを使ってどうにかする必要がある。
0238デフォルトの名無しさん
2005/12/07(水) 22:19:02> もうファイルから一行拾ってきた時点で、全ての番地の中身を確認するような
> ロジックにしないといけないんですかねぇ…。
質問するより、そうした方が早いと思うよ。
0239デフォルトの名無しさん
2005/12/07(水) 22:28:05すみません
ポインタとmallocについて詳しくお願いします
0240デフォルトの名無しさん
2005/12/07(水) 22:31:10ちったぁ自分で調べろや
0241デフォルトの名無しさん
2005/12/07(水) 22:33:06{
score *data;
int cnt = 0;
int people = 0;
int eigoh,suugakuh,kokugoh;
printf("学生の人数->");
scanf("%d", &people);
data = malloc(sizeof (score) * people);
if (!data)
return 1;
以下dataをあたかも配列であるかのように扱える。
0242デフォルトの名無しさん
2005/12/07(水) 22:44:59どうすればよいのか教えて下さい。
0243デフォルトの名無しさん
2005/12/07(水) 22:45:23ごめんなさい
>>241
ありがとうございます
なんとか走らせることができました
簡単にできるものだと思っていたのですが結構難しいんですね・・
そろそろ専門の本買おうかな
0244デフォルトの名無しさん
2005/12/07(水) 22:46:11>そろそろ専門の本買おうかな
>そろそろ専門の本買おうかな
>そろそろ専門の本買おうかな
>そろそろ専門の本買おうかな
>そろそろ専門の本買おうかな
>そろそろ専門の本買おうかな
>そろそろ専門の本買おうかな
>そろそろ専門の本買おうかな
>そろそろ専門の本買おうかな
0245デフォルトの名無しさん
2005/12/07(水) 22:47:49GString型なんて標準Cにはないけど。
0246デフォルトの名無しさん
2005/12/07(水) 23:00:10普通にCStringでは
0247デフォルトの名無しさん
2005/12/07(水) 23:01:10どっちでも同じだろ
0248デフォルトの名無しさん
2005/12/07(水) 23:56:540249デフォルトの名無しさん
2005/12/07(水) 23:59:44wendまで進めばwhileに戻れるようなコマンドを教えてくださいませ
0250デフォルトの名無しさん
2005/12/08(木) 00:02:02は?
0251デフォルトの名無しさん
2005/12/08(木) 00:03:40意味がよくわからんが、無限ループが欲しいなら
for(;;) {}
while(1) {}
で。
0252デフォルトの名無しさん
2005/12/08(木) 00:04:110253デフォルトの名無しさん
2005/12/08(木) 00:06:300254225
2005/12/08(木) 00:08:18レスありがとうございました。
>238の言うように、一文字ずつ番地を見ていって、
TABが来たかどうかをキーに判別処理をするしかなさそうです。
もうちょっと当方でもがんがってみます。
一応ロジックは構築が済んだので、後はコーディングのみ?
本当に助言ありがとうございました〜。
0255デフォルトの名無しさん
2005/12/08(木) 00:08:21While true
KBD(VK_F5,CLICK,150)
Sleep(1)
KBD(VK_F5,CLICK,150)
Sleep(1)
KBD(VK_F2,CLICK,150)
Sleep(1)
KBD(VK_F6,CLICK,150)
Sleep(1)
Wend
こんな感じだったんで、C言語でもできるのかな?と・・・
0256デフォルトの名無しさん
2005/12/08(木) 00:10:09HSPぐらいならともかく勘弁してください
0257デフォルトの名無しさん
2005/12/08(木) 00:14:15回答側に「ググれ」と?
0258デフォルトの名無しさん
2005/12/08(木) 00:14:29あの〜、あなた馬鹿ですか?
頭のいいやつが悪い学校行ったら宝の持ち腐れでしょ?w
0259デフォルトの名無しさん
2005/12/08(木) 00:16:12そんなマイナー言語をいきなり出されてもワカンネ
0260デフォルトの名無しさん
2005/12/08(木) 00:17:39ふざけんな
0261デフォルトの名無しさん
2005/12/08(木) 00:18:55それはすみませんでした。
0262デフォルトの名無しさん
2005/12/08(木) 00:19:11意味不明だから帰ればいいよ
BASICライクな言語とCライクな言語じゃ文法全然違ぇよ。
CとBASICの違いぐらい理解してからきてください。ここはC言語スレです。
0263デフォルトの名無しさん
2005/12/08(木) 00:20:44スレ違いだ。氏ね
0264デフォルトの名無しさん
2005/12/08(木) 00:21:08Windowsだと多分大丈夫
BSDやLinuxなら問題ない
0265デフォルトの名無しさん
2005/12/08(木) 00:21:35何が?
0266デフォルトの名無しさん
2005/12/08(木) 00:21:390267デフォルトの名無しさん
2005/12/08(木) 00:22:30vfscanfは標準じゃないんでしょうか?
#include <stdio.h>
#include <stdarg.h>
の二つを入れても参照エラーでコンパイルが止まってしまいます。
ネットでは確かに存在を確認できるんですが。なぜでしょうか?
環境はVC7.1です。
0268デフォルトの名無しさん
2005/12/08(木) 00:25:56すんごい流れが速いところならともかく・・・
0269デフォルトの名無しさん
2005/12/08(木) 00:27:57ギコナビだけど複数のスレ参照しながらレスすると間違える
ごめんなさいね
0270デフォルトの名無しさん
2005/12/08(木) 00:28:18複数のスレを巡回してるとたまに間違える
0271デフォルトの名無しさん
2005/12/08(木) 00:28:30標準ではそのような関数は存在しないらしいぞ
0272デフォルトの名無しさん
2005/12/08(木) 00:29:02C99の標準ライブラリだな。
現行のANCI C(番号忘れたからこれで勘弁)の標準ではない。
独自拡張してる処理系もあるようだがな。
>>268
ヒント:Jane
0273デフォルトの名無しさん
2005/12/08(木) 00:32:24俺の環境(Debian testing, gcc 4.0.2)だと、stdio.h で extern されてたけど、実際に定義してるヘッダは見つからんかった
0274デフォルトの名無しさん
2005/12/08(木) 00:39:33レスさんきゅー。
比較的新しい仕様だったのね。
これは困ったな。うーん、まぁいいか。
疑問がとけてよかったです。
ありがとう!!!
0275デフォルトの名無しさん
2005/12/08(木) 00:41:45すぐ近くまでやってきてるのに使えないこのもどかしさ。
情報サンキュー
0276デフォルトの名無しさん
2005/12/08(木) 00:48:53Janeはご丁寧にスレが違うと警告出るんだけどねぇ。
それでも間違うのはもう、注意不足としか思えん。
0277デフォルトの名無しさん
2005/12/08(木) 00:49:030278デフォルトの名無しさん
2005/12/08(木) 00:54:20Janeは警告なんか出さんぞ?
0279デフォルトの名無しさん
2005/12/08(木) 04:34:09while(!_kidhit)0;
こんな感じで使われていたと思います
_kidhitみたいな感じだったと思います
0280デフォルトの名無しさん
2005/12/08(木) 05:03:210281デフォルトの名無しさん
2005/12/08(木) 06:21:110282デフォルトの名無しさん
2005/12/08(木) 07:25:09簡単に書くと
char buffer[256];
fgets(buffer, 256, stdin);
で実現できますが、
文字数の制限(この場合255文字)があります。
この制限をなくす簡単な方法とかないでしょうか。
リスト構造とか使うにしても一時的に
バッファに格納して文字数を数えてmalloc()とかで
確保しないといけないと思うのですが。
0283デフォルトの名無しさん
2005/12/08(木) 07:43:53リストでひたすらmallocとgetchを一つずつ繰り返すとか。
0284デフォルトの名無しさん
2005/12/08(木) 08:00:28char a[100][10];
という領域が動的に欲しいときに、
char (*a)[10];
を定義して malloc でまとめて
a = malloc(1000);
みたいに確保したとします。
このとき、
for(int i = 0; i < 100; i++) free(a[i]);
というような解放の仕方をしても問題ないでしょうか?
0285デフォルトの名無しさん
2005/12/08(木) 08:44:070286デフォルトの名無しさん
2005/12/08(木) 08:55:18題
だ
ら
け
で
す
0287デフォルトの名無しさん
2005/12/08(木) 09:58:40for(int i = 0;
for(int i = 0;
0288デフォルトの名無しさん
2005/12/08(木) 10:39:05まとめて確保したなら
まとめて解放しましょう。
別々に解放したいなら
別々に確保しましょう。
0289デフォルトの名無しさん
2005/12/08(木) 11:38:45どこから餓鬼(kid)なんて単語が出て来るんだよ。
KeyBoardって連想はできなかったんか?
>>282
制限をなくしても、誰かが際限なくメモリ確保と連結を繰り返すことになるわけだ。
本当に制限をなくす必要があるか検討したほうがいい。
>>284
プログラミング初心者は自分で手を動かせ。それが嫌なら初心者スレで聞け。
>>287
今時C99を知らないならレスしなくていいよ。
0290デフォルトの名無しさん
2005/12/08(木) 16:56:14Cをやってる場合どうやってオブジェクト思考の問題に取り組めば良いですか?
0291デフォルトの名無しさん
2005/12/08(木) 17:30:57つttp://www.sage-p.com/process/cool.htm
0292デフォルトの名無しさん
2005/12/08(木) 20:00:55難しそうですが、面白そうです^^
0293デフォルトの名無しさん
2005/12/08(木) 20:05:040294デフォルトの名無しさん
2005/12/08(木) 20:51:01scanf("%d",&n);
sprintf(Hex,"%x",n);
で変数に受けるました。
そこからHexを配列化して1バイトずつ参照したんですが、
1→31 といった具合に数字が狂ってしまいます。
どうすればいいでしょうか?
0295デフォルトの名無しさん
2005/12/08(木) 20:54:31文字コード
0296デフォルトの名無しさん
2005/12/08(木) 21:35:28ありがとうございました!
0297デフォルトの名無しさん
2005/12/08(木) 21:43:04リストの勉強をしていて新しいノードを作るプログラムで
new_node = (node_t *)malloc( sizeof(node_t) );
というプログラムの、* の意味はポインタ演算をしているって事で合ってますか?
違うのならどのような意味なのでしょうか?お願いします。
0298デフォルトの名無しさん
2005/12/08(木) 21:47:36まず違う。それは型キャスト
mallocのプロトタイプはvoid *malloc(size_t);だから
あくまで代入先のポインタと方を合わせる必要がある
0299デフォルトの名無しさん
2005/12/08(木) 21:50:520300デフォルトの名無しさん
2005/12/08(木) 22:00:100301デフォルトの名無しさん
2005/12/08(木) 23:01:07「キーボードから西暦の年、月、日の値をy/m/dの形式で入力すると、その次の
日の年、月、日を画面に
_年_月_日の次の日は_年_月_日です。
と表示するプログラム」
と言う課題が出たんですが、みなさんならどういうやり方でしますか?
先生は、配列を使えって言ってたんですが、switch文&if文を使う方法しかわからなくて・・・
配列を使うプログラムって・・・??
0302デフォルトの名無しさん
2005/12/08(木) 23:02:14>>1
0303デフォルトの名無しさん
2005/12/08(木) 23:04:20int t = p->x;
のように一時変数を用いて、p->xをtに置き換えた方が、アロー演算子を
多用するよりも速度面で有利な気がするんだけど、違うかな?
0304デフォルトの名無しさん
2005/12/08(木) 23:04:46失礼しました。
0305デフォルトの名無しさん
2005/12/08(木) 23:04:49そーゆー問題よくあるよね。
0306デフォルトの名無しさん
2005/12/08(木) 23:19:09コンパイラがマルチスレッド対応かつpが別スレッドから参照可能なら
ローカル変数にキャッシュすることでより最適化される可能性が高い。
実際のところどうなのかは両方のアセンブリ出力を比較して確認する。
0307デフォルトの名無しさん
2005/12/08(木) 23:30:37どうも。指針になった。
0308デフォルトの名無しさん
2005/12/08(木) 23:42:29最近のコンパイラでは最適化付けたら
pがグローバル、かつvolatile指定してない限りは
ほとんどの場合勝手にレジスタ割り当ててくれるくらいの勢いだな
0309デフォルトの名無しさん
2005/12/08(木) 23:49:07実際にはpやxの部分はまず間違いなくもっと長い名前だから、
短い名前で扱えるようにするということを兼ねて俺はそんなことをやっている。
C++だけど参考までに。
http://www.emit.jp/prog/prog_opt0.html
0310306
2005/12/08(木) 23:52:36>pがグローバル、かつvolatile指定してない限りは
if (p == グローバル && p != volatile) 勝手にレジスタ割り当て
この条件式っておかしくないか。p == グローバルってとこ。
最適化レベルにもよるけど、どういう条件でレジスタ変数扱いになるかは
コンパイラによって癖があるので速度が重要な場面(でなけりゃどうでもいい)
ではアセンブリ出力させて見ることにしている。
#VC++だと混合モードで一発確認できるのがうれしい。
0311デフォルトの名無しさん
2005/12/09(金) 00:01:56横から失礼
そのページ読んでみたんだが、その1と2はメンバ変数であるためにループ中で書き換えられる
可能性があるのでループの度に逐一再読込がいるからだということは分かったんだが
その3って、ポインタが変更されかねないので同じように再読込がいるが
ループ前に一時変数にコピーしてそれを利用することで、始点がループ中
固定されることがコンパイラに分かるから最適化されるってこと?
0312学生
2005/12/09(金) 00:09:16学校の課題でpgm形式の画像ファイルを入力する関数と出力する関数を作成せよという課題がでました。
ヘッダ部分を読み込むのはできたのですが、それ以降が自分には難しすぎて手におえません。
どなたかアドバイスなどをいただけたらと思うのですが。。。
よろしくお願いします><
ただいま入力関数を作成中で出力は手をつけていません。
お粗末ですが、作成中のプログラムを載せさせていただきます。
ちなみに扱うのはP5形式のファイルで、255階調です。
ヘッダファイル
#include <stdio.h>
typedef struct picture{
int w; /*横幅*/
int h; /*縦幅*/
int **gs; /*グレイスケール*/
}
0313デフォルトの名無しさん
2005/12/09(金) 00:09:41>>1
0314デフォルトの名無しさん
2005/12/09(金) 00:11:34#include<stdio.h>
int main(void){
char ymd[10];
printf("キーボードから西暦の年、月、日の値をy/m/dの形式で入力すると、\n");
gets(ymd);
printf("%c%c%c%c年%c%c月%c%c日の",ymd[0],ymd[1],ymd[2],ymd[3],ymd[5],ymd[6],ymd[8],ymd[9]);
if(ymd[8]="3" || ymd[9]="1"){
ymd[8] = "0";
ymd[9] = "1";
ymd[6]+= 1;
if(ymd[5]="1" || ymd[6]="2"]){
ymd[5] = "0";
ymd[6] = "1";
ymd[3]+= 1;
}
}
else
printf("次の日は%c%c%c%c年%c%c月%c%c日です",ymd[0],ymd[1],ymd[2],ymd[3],ymd[5],ymd[6],ymd[8],ymd[9]+1);
return 0;
}
0315学生
2005/12/09(金) 00:12:32#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "pic.h"
void read_pic(Pic *p){
FILE *fp;
char buf[2000];
int i,j;
if((fp = fopen("pic1.pgm","r")) == NULL){
puts("file open error.");
exit(0);
}
fgets(buf,1024,fp);
if(strncmp(buf,"P5",2) != 0){
puts("This picture cannot treat.");
exit(0);
}
fgets(buf,2000,fp);
sscanf(buf,"%d %d",&p->w,&p->h);
fgets(buf,2000,fp);
p->gs = (int **)malloc(sizeof(int *)*p->h);
for(i=0;i<p->h;i++){
fread(buf,sizeof(int),p->w,fp);
*(p->gs + i) = (int *)malloc(sizeof(int)*(p->w+1));
buf[p->w]='\0';
strcpy(*(p->gs+i), buf);/*エラー部分*/
}
fclose(fp);
}
0316学生
2005/12/09(金) 00:12:54void free_pic(Pic *p){
int i;
for(i=0;i<p->h;i++)
free(*(p->gs)+i);
free(p->gs);
}
int main(void){
Pic p;
read_pic(&p);
free_pic(&p);
return 0;
}
0318デフォルトの名無しさん
2005/12/09(金) 00:26:23レス�d
ちょっと思ったんだが、メンバ変数と局所変数とでアクセス速度に違いってある?
>>311の解釈にたどり着く前に、最初に思ったのがメンバ変数ってアクセス遅いのか?ってことなんだが
0319306
2005/12/09(金) 00:35:32コンパイラレベルでは変数が別スレッドから参照可能かどうかが問題。
オブジェクトがローカル変数だったらメンバ変数もローカルなので遅くならない。
スレ違いなのでこの話はこれまで。
0320デフォルトの名無しさん
2005/12/09(金) 00:37:41そうなのか、わざわざすまね
そういやここはCスレだったな・・・スマソ>ALL
0321デフォルトの名無しさん
2005/12/09(金) 00:41:40スレ違い
C/C++の宿題を片付けます 54代目
http://pc8.2ch.net/test/read.cgi/tech/1133406672/
0322デフォルトの名無しさん
2005/12/09(金) 00:42:56必要(有効)ということ?最後に教えてちょ
0324デフォルトの名無しさん
2005/12/09(金) 00:52:080326デフォルトの名無しさん
2005/12/09(金) 07:19:59無条件でinline関数にしちゃっていいと思うんだけどどうしてだろ。
後々、複数の場所で呼ばれる可能性を考慮してinlineにしないぐらいしか考えられない俺はヘタレですか?
0327デフォルトの名無しさん
2005/12/09(金) 07:35:030328デフォルトの名無しさん
2005/12/09(金) 07:37:11え、だってinline関数にしたら関数呼び出しのコストがなくなるでしょ?
0329デフォルトの名無しさん
2005/12/09(金) 07:40:280330デフォルトの名無しさん
2005/12/09(金) 08:51:000331デフォルトの名無しさん
2005/12/09(金) 08:52:09・ループの中心部とかでない限り全体の動作速度はほとんど変わらない
・無条件でinlineにするとアセンブラ出力が追いにくい
・同じくデバッガやプロファイラで追いにくい
・宣言位置に条件があったりして保守がちょっと面倒
0332デフォルトの名無しさん
2005/12/09(金) 09:05:38一箇所です。失礼。
0333デフォルトの名無しさん
2005/12/09(金) 09:28:47>・ループの中心部とかでない限り全体の動作速度はほとんど変わらない
「ループの中心部」? 多重ループの内側と言う意味か? 俺語で語られても。
>・無条件でinlineにするとアセンブラ出力が追いにくい
inline宣言しても無条件でインライン化されませんし、それが理由でアセンブリ出力を追いにくいなら追わなければいいのでは?
>・同じくデバッガやプロファイラで追いにくい
いやだから、それが理由なら追わなければ(以下略
>・宣言位置に条件があったりして保守がちょっと面倒
意味不明。宣言位置に条件はないと思うのですが。
枝葉末節に拘ってコンパイラに任せると言うことを潔しとしないのなら、最適化などせず
のんびり実行させればよいのでは?
>>326
一ヶ所からしか呼ばれなくても、インライン化されることが期待できないような大きさの関数なら
敢えてinline宣言しなくても構わないでしょう。
勿論、宣言しても構わないわけですが。
0334デフォルトの名無しさん
2005/12/09(金) 09:36:32inline 関数は別ファイルに分けて、
inline は INLINE マクロに置き換えて、
デバッグ時は .cpp から直接インクルードして INLINE の定義はなしに、
リリース時は .h からインクルードして INLINE は inline に置き換える。
これでおk。
inline 関数にしてたけど、やっぱやめた、とかやる時、
ヘッダいじるとコンパイル範囲が広いから、
デバッグ時は非 inline 化しといた方がいい。
特に、コンパイルがそれなりに遅い環境とか、
沢山インクルードされてるヘッダとかでは。
0335デフォルトの名無しさん
2005/12/09(金) 09:52:140336デフォルトの名無しさん
2005/12/09(金) 10:08:52仕事じゃなけりゃ、好きにしていいけど。
0337326
2005/12/09(金) 10:27:06キツイ部分への限定的な使用に留めておくのが一番賢いみたいですね。
0338デフォルトの名無しさん
2005/12/09(金) 13:23:21これで使い方あってますか?
char (*pArray)[16];
pArray = (char(*)[16])malloc(sizeof(char) * 2 * 16);
pArray[0][0] = 1;
pArray[1][15] = 2;
free(pArray);
0339デフォルトの名無しさん
2005/12/09(金) 13:33:05逆に、ゲッタセッタのような1行野郎程度ならインライン展開してくれた方がデバッグが楽だと思うけど。
要は、開発の状況見ながら適当に判断すればいいのでは?
>>338
sizeof(char)は1に決まっているので、書くだけ野暮。
0340デフォルトの名無しさん
2005/12/09(金) 13:49:48エラーに関するところと思われる部分だけ抜粋します。
#define first(n) ((set) ((1U << (n)) - 1U))
first(N)を呼び出すときに、Nを大きくするとおかしくなります。なぜでしょうか。
コンパイル時に、「left shift count >= width of type」と出ます。
これだけで原因がわからなかったらすいません。プログラム全体をカキコします。
0341デフォルトの名無しさん
2005/12/09(金) 13:52:44それ以外の普通の方法よりもどの程度早いのでしょうか?
0342デフォルトの名無しさん
2005/12/09(金) 13:54:12変数の大きさ(bit数)以上のNは扱えないから。
Nの制限が書いてなかったか?
0343デフォルトの名無しさん
2005/12/09(金) 13:55:19実際にやってみて測定すればいい。
0345デフォルトの名無しさん
2005/12/09(金) 14:03:49例えば>340のように判っていない人には使いこなせないし、
あんまりマクロで書いて欲しくないなぁ。
0346デフォルトの名無しさん
2005/12/09(金) 14:04:56#define N 10
とマクロで定義して、first(N)としか使っていないのですが、、、。
それなりにNを大きくするとダメです。
>>343
すみません、理論上の計算量に関してです。それもよくわからなかったので
実際に動かそうとしたら動かないので、、、。
0347デフォルトの名無しさん
2005/12/09(金) 14:16:00int value[coin],item[coin];
printf("釣銭は=");
scanf("%d",&limit);
for(s=0;s<=limit;s++){
value[s]=0;
}
for (i=0;i<n;i++){
for(s=size[i];s<=limit;s++){
p=s-size[i];
newvalue = ?
if(newvalue<=value[s]){
value[s]=newvalue;item[s]=i;
}}}
printf("\nコインの枚数 =%3d : ",value[limit]);
for(s=limit;s>0;s=s-size[item[s]])
printf("%3d,",size[item[s]]);
このプログラムで
釣銭は=652
コインの枚数 = 5 : 500,100, 50, 1, 1
って表示さたいんだけど、?の部分に何を入れればいいかな?
いろいろ試したが、コインの枚数が0になる。
0348デフォルトの名無しさん
2005/12/09(金) 14:20:40の意味だけでいいので教えていただけると助かります。どなたかお願いします。
0349デフォルトの名無しさん
2005/12/09(金) 14:23:38宿題は宿題スレへ。そうでないなら初心者スレへでもどうぞ。
>>346
そのコンパイル時のメッセージの通り、unsignedのビット数より大きいnは指定できない。
それと、理論は兎も角その方法と普通の方法で速度の差を知りたいならソースを提示しろ。
誰もがアルゴリズム辞典を持っているわけじゃない。
0350デフォルトの名無しさん
2005/12/09(金) 14:26:28そこに書かれているsetの意味は、アルゴリズム辞典を持っていないと判らんのだが。
記憶に間違いがなければunsigned intのtypedefだったはずだが。
で、それを前提として、そのマクロの意味はビット数分の1が立った2進数値を生成している。
つまり、nが1ならば 1 << 1 - 1 = 2 - 1 = 1、nが3ならば 1 << 3 - 1 = 8 - 1 = 7 といった按配。
0351デフォルトの名無しさん
2005/12/09(金) 14:29:24失礼しました。検索するとたくさん出てくるので、アルゴリズム事典と言えば
通じるものだと勘違いしておりました。
http://www.sra.co.jp/people/miyata/algorithm/gencomb.txt
これがそのプログラムです。本は、最新アルゴリズム事典(奥村晴彦)です。
>>350
すみません、何か特殊な関数だと勘違いしていました。
0352デフォルトの名無しさん
2005/12/09(金) 14:40:18ありがとうございます。少しわかってきました。nCkを求めるために、
マクロのNを勝手に大きくしたのがダメということですよね。
少し自分で考えてみます。しかし、nCkのnとkは、マクロのNとKに対応している
わけではないのでしょうか、、、。
0353デフォルトの名無しさん
2005/12/09(金) 14:50:230354デフォルトの名無しさん
2005/12/09(金) 14:56:33このアルゴリズムではnCkの全パターンを出すためにn個のビット列を使っている。
従って、unsignedのビット数が32ならnの最大値は32になってしまう。
#実際には31である。∵firstマクロでnビットシフトしているため。
「普通の方法」でも、なんらかの形でn個のフラグを用意しなくてはいけないが、
その点以外でもそのアルゴリズムと大差あるわけではない。
ただ、ビット演算を多用することで若干高速化しているだけだ。
0355デフォルトの名無しさん
2005/12/09(金) 14:57:14このNを、例えば1000とかで実行するプログラムを作ることは可能なのでしょうか?
0356デフォルトの名無しさん
2005/12/09(金) 15:03:32だからぁ、普通が一番だって。
0358デフォルトの名無しさん
2005/12/09(金) 16:13:340359デフォルトの名無しさん
2005/12/09(金) 16:15:340360デフォルトの名無しさん
2005/12/09(金) 16:18:220361デフォルトの名無しさん
2005/12/09(金) 19:44:40fgets(line,sizeof(line),stdin);
で20文字以上入力したら、バッファに残りが残りますよね?
それで、バッファを空にしたいのですが、fflashは処理系依存
というので、他に方法ありますか?
0362デフォルトの名無しさん
2005/12/09(金) 19:55:440363デフォルトの名無しさん
2005/12/09(金) 20:49:37空白文字も読み取りたいです
0364デフォルトの名無しさん
2005/12/09(金) 20:51:30これで改行文字が現れるまで読み捨てられるはず。
0365デフォルトの名無しさん
2005/12/09(金) 21:13:49なるほど、scanfにはそんな機能があったんですね。
やってみたところ、20文字以上入力してみたら、うまくいきましたが、
入力が20文字未満だと入力を求められてしまいます。
これも何とかできないでしょうか?
0366デフォルトの名無しさん
2005/12/09(金) 21:15:05fgetsとかfgetcで入力なくなるまで空読みしろ。
0367デフォルトの名無しさん
2005/12/09(金) 21:27:19やっぱ、だめですか。
配列の要素数を大きくして対処するしかないみたいですね。
ありがとうございました。
0368デフォルトの名無しさん
2005/12/09(金) 21:40:070369デフォルトの名無しさん
2005/12/09(金) 22:29:31なるほど、盲点でした。
それで、うまくいきました。ありがとうございます。
あと、バッファに'\n'のみが残ったとき、scanf("%*[^\n]%*c"); だと
対応できなかったんで、while(getchar() != '\n') ; にしました。
0370デフォルトの名無しさん
2005/12/09(金) 22:58:53ちょっと長くなるが
scanf("%*[^\n]%*c");
scanf("%*c");
これでいいじゃまいか
0371デフォルトの名無しさん
2005/12/10(土) 00:49:09美しい..... (p1, p2 : pointer)
0372デフォルトの名無しさん
2005/12/10(土) 01:00:40あ、C++で演算子をオーバーロードすれば大丈夫かな。
0373371
2005/12/10(土) 01:47:03言われるけど純粋なポインタだったら言われない.
トリッキーだから,賛否両論あるとはおもうけど.
0374デフォルトの名無しさん
2005/12/10(土) 02:09:470375デフォルトの名無しさん
2005/12/10(土) 02:39:420376デフォルトの名無しさん
2005/12/10(土) 02:49:070377デフォルトの名無しさん
2005/12/10(土) 02:49:510378デフォルトの名無しさん
2005/12/10(土) 02:56:11VCTK
cx.c(3) : error C2106: '=' : left operand must be l-value
BCC
エラー E2277 cx.c 3: 左辺値が必要(関数 f )
0379デフォルトの名無しさん
2005/12/10(土) 04:04:20C:\Tategoto\VC\Work\TestCon\TestConC.c(8) : error C2106: '=' : 左のオペランドが、左辺値になっていません。
0380デフォルトの名無しさん
2005/12/10(土) 07:59:00デバッグ用に任意の構造体のメンバの内容を出力する関数を
作ろうと思っています.
たとえば,
struct student{
char id[20];
char name[20];
int gakunen;
};
といった構造体があるとき,
print_struct(student);
とすれば,
id : 2
name : Tashiro
gakunen : 1
というふうに標準出力に出力する感じです.
まず, 引数となる構造体がどのようなメンバ変数をもっているか
というところからいきなりつまづいています。。。
そもそもこういった関数はC言語で作るのは無理でしょうか?
なにとぞ助言をお願いしますm(_ _)m
0381デフォルトの名無しさん
2005/12/10(土) 07:59:36#define ID_NUMBER 1234
だとします。
そして、
char *idmsg = "ID = 1234";
という文字列もあるとします。
このidmsgの定義でID_NUMBERを使って、1234を一元化したいのですが、どうすればいいでしょうか?
char idmsg[0x100] = "ID = ";
sprintf(idmsg + strlen(idmsg), "%d", ID_NUMBER);
などとすることは簡単ですが、何かえらく愚かしい気がするんですが・・・
0382デフォルトの名無しさん
2005/12/10(土) 08:21:33メタ構造体を作るしかないな
0383デフォルトの名無しさん
2005/12/10(土) 08:22:300384デフォルトの名無しさん
2005/12/10(土) 08:29:28これでも嫌か?
char idmsg[0x100];
sprintf(idmsg, "ID = %d", ID_NUMBER);
嫌ならこうする方法がある。
#define ID_NUMBER 1234
#define TO_STR2(x) #x
#define TO_STR(x) TO_STR2(x)
char *idmsg = "ID = " TO_STR(ID_NUMBER);
0385デフォルトの名無しさん
2005/12/10(土) 08:33:24int i [ELM], k [ELM] ;
int *p, *t, c ;
p = i ;
t = k ;
for (c = 0 ; c < ELM ; c++) k [c] = c * 2 ;
for (c = 0 ; c < ELM ; c++) *p++ = *t++ ;
for (c = 0 ; c < ELM ; c++) printf ("%10d %10d\n", i[c], k[c]) ;
0386デフォルトの名無しさん
2005/12/10(土) 08:42:46お、通った
0387デフォルトの名無しさん
2005/12/10(土) 08:59:42なにかのパーセント(ここでは25%)をprintfで表示したいのですが、
どうしても、125%とか0,25になってしまいます。
3桁目を消して表示する方法はあるでしょうか?
0388380
2005/12/10(土) 09:00:08メタ構造体とはなんでしょか?
0389デフォルトの名無しさん
2005/12/10(土) 09:44:20あーあ、言っちゃった。
0390デフォルトの名無しさん
2005/12/10(土) 09:48:27初歩的な質問は初心者スレへ。
printf("%d%%", 25);
>>388
無理ではないけど、そういう技巧は手間と可読性の割に得る物が少ない。
C++ならばメンバ関数として実装する習慣をつければ済むだけだが。
0392デフォルトの名無しさん
2005/12/10(土) 12:25:02そのプログラムだけを配布すれば良いのですか?
MFC がどうとか聞いたのですが・・・
0393デフォルトの名無しさん
2005/12/10(土) 12:26:340394デフォルトの名無しさん
2005/12/10(土) 12:47:43基本的には。ただ、スレ違い
0395デフォルトの名無しさん
2005/12/11(日) 06:40:09if(条件式)
文←ココ
}
if文の条件式に合致した時に関数fの始めに戻りたいんですが、'ココ'にどういう命令を入れればできますか?
f(); って入れると、戻ることは戻るんですがそれだと結果を出力するときに2回してしまうので・・・
0396デフォルトの名無しさん
2005/12/11(日) 06:44:230397デフォルトの名無しさん
2005/12/11(日) 07:03:20return f(); と言う手もある
0398デフォルトの名無しさん
2005/12/11(日) 07:09:29>>397
どうもありがとうございます。
return f(); っていいですねぇ。
この後に100行くらいは続くので、whileを使うとちょっとかさばるかなと思いまして・・・
0399デフォルトの名無しさん
2005/12/11(日) 07:36:440400デフォルトの名無しさん
2005/12/11(日) 09:54:350401デフォルトの名無しさん
2005/12/11(日) 10:39:230402デフォルトの名無しさん
2005/12/11(日) 11:00:48再帰と先頭に戻るのは意味が違うよ。
って言うか、100行もある関数書くな、ボケ!
0403デフォルトの名無しさん
2005/12/11(日) 11:09:02それは、whhleループを入れた事で、かさばる訳ではない。
元々がかさばってるんだ。
かさばらない様に小分けにし、do〜whileなどを使うのが正しい。
0405デフォルトの名無しさん
2005/12/11(日) 11:33:42if(条件式)
return 1; // もう一度処理する時
..
return 0; // 普通に終了する時
}
void f(){
while(g()){
}
}
俺だったら、こんな形にする。
0406デフォルトの名無しさん
2005/12/11(日) 11:56:08union U
{
int i;
char c;
double d;
} u;
uの中にどの型が入ってるかどうかってわかる方法あります?
考えたのが、
struct S
{
enum {INT, CHAR, DOUBLE} type;
union U u;
} s;
って構造体に入れて、typeを調べる方法ですが、他にもっとスッキリした
方法ないでしょうか?
0407デフォルトの名無しさん
2005/12/11(日) 12:20:05ポインタ経由でのキャスト使って何とか汁。
0408デフォルトの名無しさん
2005/12/11(日) 12:48:32具体的に少しだけ教えてもらえないでしょうか?・・
0409デフォルトの名無しさん
2005/12/11(日) 13:14:53共用体は、場合によって一つの領域を複数の型としてアクセスするためのもの。
どの型の値が格納されているかは、プログラマが管理する。
逆に、どんな値が入っていようとも、intとしてアクセス出来れば、
charとしてもアクセス出来るものだ。
0410デフォルトの名無しさん
2005/12/11(日) 13:19:420411デフォルトの名無しさん
2005/12/11(日) 13:29:33Cではそれが一番すっきりした方法だよ。
0412デフォルトの名無しさん
2005/12/11(日) 13:33:32{
INT: ...; break;
CHAR: ...; break;
DOUBLE; ...; break;
}
といったパターンマッチぽいこともできるね。
0413デフォルトの名無しさん
2005/12/11(日) 13:52:39pが1のときには
const AA
{
BB,
CC,
DD
}
という構造体を、取得する。
ここで、pが0のときには
const AA2
{
BB,
GG,
DD
}
という構造体を取得したいため、AA2を作るとする。
0414デフォルトの名無しさん
2005/12/11(日) 13:53:14ww.c
AA *EE;
if(p==1)
{
FF = ???
}
{
FF = *EE
}
という処理を行うが、
???のところで CCではなくて新規に GGを取得したい。
しかし、constでAA2を作ると
容量が大きいので、AA の BB,DDをそのまま流用し、
ifの判定の真の場合に
CC の部分のみ GG を取得できるようにするには
何かいい方法がないか
0415デフォルトの名無しさん
2005/12/11(日) 14:20:51CCとGGの大きさが同じならそこは共用体にしてしまえばよいのではと思う。
0416デフォルトの名無しさん
2005/12/11(日) 14:45:35pが1のときには
const AA
{
BB,
CC,
DD
}
という構造体を、取得する。
ここで、pが0のときには
const AA2
{
BB,
DD
}
になるため、大きさは同じにはならないんですね。
0417デフォルトの名無しさん
2005/12/11(日) 15:52:130418デフォルトの名無しさん
2005/12/11(日) 17:00:31void main(void)
{
char s[9]={0};
s="00110001";
printf("%s\n",s);
}
なぜエラーが出るんでしょうか?
0419デフォルトの名無しさん
2005/12/11(日) 17:08:30strcpy使え
0420デフォルトの名無しさん
2005/12/11(日) 17:27:230421デフォルトの名無しさん
2005/12/11(日) 17:31:440422デフォルトの名無しさん
2005/12/11(日) 18:06:29そうだったんですね
ありがとうございました
0423デフォルトの名無しさん
2005/12/11(日) 19:01:55そうだったんですね
ありがとうございました
0424デフォルトの名無しさん
2005/12/11(日) 19:02:32>>421の間違い
0425デフォルトの名無しさん
2005/12/11(日) 19:20:18そうだったんですね
ありがとうございました
0426デフォルトの名無しさん
2005/12/11(日) 19:33:05っつーかそういう使い方をするためにあるw
0427デフォルトの名無しさん
2005/12/11(日) 20:35:00int main (int argc, char *argv[])
といった書き方をすることはよく見るのだけれどもときどき、
int main (int argc, char **argv)
といった定義を見ることがある。
前者の argv は各コマンドライン引数文字列の先頭アドレスを
ポインタ配列という形で格納しているのはわかるのだけれども、
後者は多重間接参照をおこなうためのポインタ変数として定義されているから
これには char 型ポインタ変数そのもののアドレスを保持させるべきであるのに
引数の取り出しでは、
printf (argv[n]) ; /* n : 0, 1, 2, ... */
でなければセグメンテーション違反を起こしてしまう。
これは前者であれば納得がいくけれども、後者の場合こういう書き方をしたら
char 型ポインタ変数そのもののアドレスが printf() に渡される
ため、コマンドライン文字列を表示することはできないと思うのだけれども
どうなのだろう?
0428デフォルトの名無しさん
2005/12/11(日) 20:45:510429デフォルトの名無しさん
2005/12/11(日) 20:46:36とりあえずそのpriftfの引数おかしいけどな
0430429
2005/12/11(日) 20:47:420431429
2005/12/11(日) 20:52:39*(argv+n)
じゃだめなの。
> char **argv
は、
> char 型ポインタ変数
じゃなくて、ポインタ型変数へのポインタなんじゃないの?
って、なんか論点合ってない?もしや。
0432デフォルトの名無しさん
2005/12/11(日) 21:09:44[1]char **argv
[2]char *argv[]
[3]char argv[][]
いわゆるしんたっくすしゅがーというものだが、
最近の入門書などでは[2]の書き方が好まれるようだ。
0433デフォルトの名無しさん
2005/12/11(日) 21:16:580434デフォルトの名無しさん
2005/12/11(日) 21:23:32ちょっと知ってる気分になる前に、>>1のリンクを読み直した方が良いと思うよ。
0435432
2005/12/11(日) 21:27:34http://www.coins.tsukuba.ac.jp/~yas/coins/syspro-2004/2004-04-19/argv.html
よくわかんないけどいまのとこ[3]は使わないほうがよいみたいでしゅ。
0436デフォルトの名無しさん
2005/12/11(日) 21:29:09読み飛ばす危険が高すぎる…
0437デフォルトの名無しさん
2005/12/11(日) 21:30:540438435
2005/12/11(日) 21:38:06リンク先で「伝統的には」とか書かれていたので
言語処理系レベルの話になってくるとよくわからんと書いた。
0439デフォルトの名無しさん
2005/12/11(日) 21:39:510440デフォルトの名無しさん
2005/12/11(日) 21:46:200441デフォルトの名無しさん
2005/12/11(日) 21:47:240442デフォルトの名無しさん
2005/12/11(日) 21:51:23どの規格に準拠させれば通るんだ?gccのバグ?
0443デフォルトの名無しさん
2005/12/11(日) 21:51:240444427
2005/12/11(日) 21:52:42憑き物がとれた感があってとてもすっきりした気分。
0445デフォルトの名無しさん
2005/12/11(日) 21:52:42>>432は配列とポインタの違いを全然判ってないこと
>>1のFAQを読めば配列とポインタの違いが判ること
位しか言えないが。
0446デフォルトの名無しさん
2005/12/11(日) 21:55:51スタックを利用したら良いのでしょうか?
初心者ですみません。ヒントをいただけないでしょうか?
0447デフォルトの名無しさん
2005/12/11(日) 21:59:080448デフォルトの名無しさん
2005/12/11(日) 22:04:00+ /
1 2 8 4
0449デフォルトの名無しさん
2005/12/11(日) 22:49:01conio.hがないのでgetcheの代わりになる関数が欲しいのですが
何を使ったら良いでしょうか?
ちょうど変わりになるようなのがあったら教えてください。
0450デフォルトの名無しさん
2005/12/11(日) 23:06:160451デフォルトの名無しさん
2005/12/11(日) 23:17:31終了条件を組み込んでいるんですが、
Nをいれても終了しません。
どうか間違いを指摘してください。
何卒宜しくお願いします。
int menu(void)
{
char isbn[64]; //大きく領域を確保する。
int ret;
printf("ISBNを入力してください(Nで終了です。) \n");
scanf("%s",isbn); //文字列はすべて%s
printf("入力された番号は、%sです。 \n", isbn);
if(isbn!="N")
{
ret = check_isbn(isbn);
syori(ret);
return 1;
}
else
{
return 0;
}
}
0452デフォルトの名無しさん
2005/12/11(日) 23:19:57文字列は==や!=で比較できない。
仕方がないから<string.h>のstrcmp()を使う。
0453デフォルトの名無しさん
2005/12/12(月) 00:25:04関数の引数宣言時の「一番外側の"[]"」は、ポインタ型として解釈される。
が正しい。
これは、Cでは配列を関数の引数として渡せないため。
つまり、コンパイラは以下のように判断する。
type hoge[n] → type *hoge
type hoge[n][n] → type (*hoge)[n]
type hoge[n][n][n] → type (*hoge)[n][n]
(以下略)
# 入門書などで、関数の引数宣言時、配列は一番外側の添え字が省略できる、
# などの記述はここに起因する。
0454デフォルトの名無しさん
2005/12/12(月) 00:26:29関数の引数宣言時の「一番外側の"[]"」は、ポインタ型として解釈される。
が正しい。
これは、Cでは配列を関数の引数として渡せないため。
つまり、コンパイラは以下のように判断する。
type hoge[n] → type *hoge
type hoge[n][n] → type (*hoge)[n]
type hoge[n][n][n] → type (*hoge)[n][n]
(以下略)
# 入門書などで、関数の引数宣言時、配列は一番外側の添え字が省略できる、
# などの記述はここに起因する。
0455デフォルトの名無しさん
2005/12/12(月) 00:43:050456デフォルトの名無しさん
2005/12/12(月) 00:44:52コンパイルは使えないなぁ…。
# コンパイラなら、VC++・BCB・GCC・HEWなど、
# 案件に合わせて使い分けているが。
0457デフォルトの名無しさん
2005/12/12(月) 01:02:38そうか。おれは、GCCなんだが、そろそろ、卒業しようと思うんだ。
0458デフォルトの名無しさん
2005/12/12(月) 01:05:13なにか思うところがまるのなら話は別だが。
0459デフォルトの名無しさん
2005/12/12(月) 01:08:33俺はGNU LDなんだがそろそろ卒業かなと考えているんだ
0460デフォルトの名無しさん
2005/12/12(月) 01:11:280461デフォルトの名無しさん
2005/12/12(月) 01:15:530462デフォルトの名無しさん
2005/12/12(月) 01:22:060463デフォルトの名無しさん
2005/12/12(月) 01:23:340464デフォルトの名無しさん
2005/12/12(月) 01:26:450465デフォルトの名無しさん
2005/12/12(月) 01:39:470466デフォルトの名無しさん
2005/12/12(月) 02:01:30HTTP://GCC.GNU.ORG/
0467427
2005/12/12(月) 14:58:16*argv[] というポインタ配列の先頭を指すポインタへのポインタが
argv であるから、 char **argv の宣言は main() が呼び出される際、
コマンドライン引数のポインタ配列の先頭のアドレスを char **argv に
渡すと考えれば、 argv[n] といった書き方は文字列の先頭のアドレスを
printf() に渡すことになり、当然の摂理だったんだ。
話をごっちゃにしてしまって本当に申し訳ない。
0468デフォルトの名無しさん
2005/12/12(月) 17:59:30どこの?って言われたら広島になるのかなぁ...?
0469デフォルトの名無しさん
2005/12/12(月) 18:22:21× scanf("%s",isbn);
○ scanf("%s",&isbn);
じゃないの?
0470デフォルトの名無しさん
2005/12/12(月) 18:23:58これだろ
0471デフォルトの名無しさん
2005/12/12(月) 18:47:03いやアレもう随分前に潰れたから。
0472432
2005/12/12(月) 19:53:10いまさらだけど JIS X3010:2003(ISO/IEC9899:1999) に拠れば
5.1.2.2.1 で int main(int argc, char * argv) を明記し、
更に等価な方法として脚注で「argv の型は char ** argv と書くことも出来る」
とあるので [1] と [2] は main 関数の引数型として正しいが
[3] はコンパイルエラーになって当然だ #別の言語と混同してた・・・
お詫びして訂正いたします。
0473デフォルトの名無しさん
2005/12/12(月) 20:25:13E=1+1/1!+1/2!+1/3!+…+1/n!+…
てのをどう打ったらいいのか
わがんない
0474デフォルトの名無しさん
2005/12/12(月) 20:40:36Nはお好きに
#include <stdio.h>
#define N 100
int main(void) {
double e = 1, d;
unsigned i;
for (i = d = 1; i < N; ++i) {
d /= i;
e += d;
}
printf("%f", e);
}
0475デフォルトの名無しさん
2005/12/12(月) 21:10:251+1/1+1/2+1/3+1/4+…
にならないか?
0476デフォルトの名無しさん
2005/12/12(月) 21:13:22誤って文字を入力した場合に「数字を入力してください」と帰ってくるようにしたいのですが、
どのようにすればいいのでしょうか。
現在できているのが以下の状態です。
#include <stdio.h>
main()
{
int i = 0;
int no[10];
int max = 0;
puts("数字を10回入力してください。\n");
for(i = 0; i < 10; i++){
printf("数字%d:",i + 1);
scanf("%d",&no[i]);
max = (max > no[i]) ? max : no[i];
}
printf("あなたが入力した数字の最大値は%dです。\n",max);
getchar();
}
おそらく、scanf(〜の次の行からmax〜の行の間に何かが入るのでしょうが…
0477デフォルトの名無しさん
2005/12/12(月) 21:18:17d /= i だからあってるよ (d = 1/i にアラズ)
0478デフォルトの名無しさん
2005/12/12(月) 22:01:06これじゃ駄目?
#include<stdio.h>
#include<stdlib.h>
int main(void){
int i=0;
int no;
int max=0;
char buff[10];
printf("数字を入力してください\n");
while(i<10){
fgets(buff,10,stdin);
if((no=atoi(buff))!=0){
max=(max>no) ? max:no;
i++;
}
else{
printf("それは数字ではありません。数字を入力してください\n");
}
}
printf("あなたが入力した数字の最大値は%dです。\n",max);
getchar();
}
0479デフォルトの名無しさん
2005/12/12(月) 22:18:57分割されて119201834と1872408になるのは仕様?
0480デフォルトの名無しさん
2005/12/12(月) 22:23:040481デフォルトの名無しさん
2005/12/12(月) 22:30:24理由↓
>char buff[10];
0482デフォルトの名無しさん
2005/12/12(月) 22:33:57文字列"0"から数値0への変換が出来ないね。
これって関数の欠陥?
0483デフォルトの名無しさん
2005/12/12(月) 22:35:31scanfを使わないとだめなのです。
0484デフォルトの名無しさん
2005/12/12(月) 22:40:33strtolの引数使ってみるとか。
0485480
2005/12/12(月) 22:49:030486デフォルトの名無しさん
2005/12/12(月) 22:49:320を返すとは決まっていない。
変換に失敗した場合は不定値を返す。
また、strtol()はどこで変換に失敗したかを受け取る事が出来る。
0487デフォルトの名無しさん
2005/12/12(月) 22:50:0639 55 2 444 1.0000 -0.4061E-05 0.1523E-04 0.349E-01 -0.318E-02 0.181E-02 0.999 0.5211 0.510E-03
の3つ目のデータが2の物だけを取り出して新たに出力したいのですがどうすればよいのでしょうか?
以下作ってみたのですがコンパイルすらできません。助言お願いします。
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
FILE *fin, *fout;
double a,b,c,d,e,f,g,h,i,j,k,l,m;
char infile[80], outfile[80];
printf("入力ファイル:");
gets(infile);
printf("出力ファイル:");
gets(outfile);
if ((fin=fscanf(infile, "%f %f %f %f %f %f %f %f %f %f %f %f %f\n", &a, &b, &c, &d, &e, &f, &g, &h, &i, &j, &k, &l, &m)) == NULL) {
printf("ファイルをオープンできません\n");
exit(1);
}
while (fin != NULL) {
if ( b == 2) {
fprintf(outfile, "%f %f %f %f %f %f %f %f %f %f %f %f %f\n", a, b, c, d, e, f, g, h, i, j, k, l, m);
}
}
fclose(fin);
fclose(fout);
return 0;
}
0488デフォルトの名無しさん
2005/12/12(月) 22:52:57Cじゃ無いといけないのか?
0489デフォルトの名無しさん
2005/12/12(月) 22:54:03>if ( b == 2) {
>fprintf(outfile, "%f %f %f %f %f %f %f %f %f %f %f %f %f\n", a, b, c, d, e, f, g, h, i, j, k, l, m);
>}
>}
この「ループ部分」でfscanfしていないので、1行目だけしかみていない。
0490487
2005/12/12(月) 23:02:25sortコマンドでも良いのですが抜き取った後今度は4つ目と5つ目のデータを
用いて計算すればならないのです。
まずは抜き出しだけでもなんとか出来るようにしないといけないと思いまして...
>>489
ありがとうございます。
ちょっと考えて見ます。
0491デフォルトの名無しさん
2005/12/12(月) 23:08:59エラー内容は?
0492デフォルトの名無しさん
2005/12/12(月) 23:11:42awkとか。perlとか。excelとか。
0493487
2005/12/12(月) 23:14:35で、ファイル名入力しても変化なしです。
以下エラーメッセージです。
test2.c: 関数 `main' 内:
test2.c:15: 警告: 互換性のないポインタ型からの引数 1 個の `fscanf' を渡しますです
test2.c:15: 警告: 代入により、キャストなしで整数からポインタを作りました
test2.c:21: 警告: 互換性のないポインタ型からの引数 1 個の `fprintf' を渡しますです
/tmp/ccyZguRp.o: In function `main':
/tmp/ccyZguRp.o(.text+0x2e): the `gets' function is dangerous and should not be used.
0494デフォルトの名無しさん
2005/12/12(月) 23:17:24fclose使ってるくせに、fopen使ってないから。
0495487
2005/12/12(月) 23:19:18プログラムは最近覚えたCしか使えません。
excelでもよいのですが、ファイルの行数が10万行を超えるので
excelで扱おうと思うと2^16行までしか読み込めないので分割する必要があり
手間がかかるので、できれば一つのプログラムで処理したいのです。
0496487
2005/12/12(月) 23:59:42どうすればよいでしょうか?
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
FILE *fin, *fout;
double a,b,c,d,e,f,g,h,i,j,k,l,m;
char infile[80], outfile[80];
printf("input:");
gets(infile);
printf("output:");
gets(outfile);
if ((fin=fopen(infile,"r")) == NULL){
printf("Can't open file!\n");
exit(1);
}
if ((fout=fopen(outfile,"w")) == NULL){
printf("Can't open file!\n");
exit(1);
}
while (fin != NULL) {
if ( b == 2) {
fscanf(fin, "%f %f %f %f %f %f %f %f %f %f %f %f %f\n", &a, &b, &c, &d, &e, &f, &g, &h, &i, &j, &k, &l, &m);
fprintf(fout, "%f %f %f %f %f %f %f %f %f %f %f %f %f\n", a, b, c, d, e, f, g, h, i, j, k, l, m);
}
}
fclose(fin);
fclose(fout);
return 0;
}
0497デフォルトの名無しさん
2005/12/13(火) 00:04:040498デフォルトの名無しさん
2005/12/13(火) 00:06:33fscanf(fin, "%f %f %f %f %f %f %f %f %f %f %f %f %f\n", &a, &b, &c, &d, &e, &f, &g, &h, &i, &j, &k, &l, &m);
↓
fscanf(fin, "%f %f %f %f %f %f %f %f %f %f %f %f %f\n", &a, &b, &c, &d, &e, &f, &g, &h, &i, &j, &k, &l, &m);
if ( b == 2) {
?
0499デフォルトの名無しさん
2005/12/13(火) 00:16:44どっからコピペしてきたんだよ。
0500487
2005/12/13(火) 00:17:16流れとしては
1行目を読み込み変数cが2ならoutputに書き出しそうでなければ2行目へ
2行目も同様にcが2ならoutputに書き出しそうでなければ3行目へ
以下略...
って感じです。
0502デフォルトの名無しさん
2005/12/13(火) 00:37:20これだけの話かな? Cで苦労するメリットが何にもないな。
0503デフォルトの名無しさん
2005/12/13(火) 00:45:52>while (fin != NULL) {
>if ( b == 2) {
>fscanf(fin, "%f %f %f %f %f %f %f %f %f %f %f %f %f\n", &a, &b, &c, &d, &e, &f, &g, &h, &i, &j, &k, &l, &m);
>fprintf(fout, "%f %f %f %f %f %f %f %f %f %f %f %f %f\n", a, b, c, d, e, f, g, h, i, j, k, l, m);
>}
>}
while (fscanf(fin, "%f %f %f %f %f %f %f %f %f %f %f %f %f\n", &a, &b, &c, &d, &e, &f, &g, &h, &i, &j, &k, &l, &m) == 13) {
if (b == 2) {
fprintf(fout, "%f %f %f %f %f %f %f %f %f %f %f %f %f\n", a, b, c, d, e, f, g, h, i, j, k, l, m);
}
}
例外は一切考慮していない。
Cに拘る理由がないなら>>492>>502のいうようにawkで十分。
0504デフォルトの名無しさん
2005/12/13(火) 11:15:14現在の時間から、指定した秒だけ離れた時刻を得るにはどうしたらいいんでしょう。
・・・・ちょっと分かりにくいかもしれないので、例を置いておきます。
09:00:00 ← 現在の時刻
指定する秒 = 5
前:08:59:55
0505デフォルトの名無しさん
2005/12/13(火) 11:15:56前:08:59:55
後:09:00:05
この二つが得られるような方法です・・・。
0506デフォルトの名無しさん
2005/12/13(火) 11:36:58現在の時刻(≠時間)をtime_tで取得後、加算or減算すればよろしかろ。
それをlocaltime()でばらしてstrftime()で文字列に整形すればOK。
0507デフォルトの名無しさん
2005/12/13(火) 11:42:19ttp://www.linux.or.jp/JM/html/LDP_man-pages/man2/time.2.html
ttp://www.linux.or.jp/JM/html/LDP_man-pages/man3/ctime.3.html
この辺を読めば分かるはずだ。あとは自分で試せ。
0508デフォルトの名無しさん
2005/12/13(火) 12:00:42ありがとうございます
0509デフォルトの名無しさん
2005/12/13(火) 12:44:23で、ABCの文字列をAB"Cとダブルクォーテーション入れたい場合
どうしたらいいんでしょうか?
0510デフォルトの名無しさん
2005/12/13(火) 12:46:18"AB\"C"
0512デフォルトの名無しさん
2005/12/13(火) 12:55:400513デフォルトの名無しさん
2005/12/13(火) 12:57:54どこかで提供しているライブラリを使えば可能。
または、自分で処理を実装すれば可能。
0514助けてください。。。
2005/12/13(火) 16:07:52提出期限が迫っててすごく困っています。。。。。
void PbmSetPixel(struct Pbm *pbm, int x, int y, int val)
{
if((x >= pbm->width) || (y >= pbm->height) || (x <= 0) || (y <= 0));
return;
pbm->pixel[x + y * pbm->width] = val;
}
このソースの範囲チェックが不完全とvalのチェックをしていないといわれた
のですが、どうしていいのか手も足もでません,......。
どうか助けてください(切実)
0515デフォルトの名無しさん
2005/12/13(火) 16:13:340516デフォルトの名無しさん
2005/12/13(火) 16:31:47valもわからんけど
if (!val) return;
とかそんなのでは
0517デフォルトの名無しさん
2005/12/13(火) 16:36:20仕様知らんけど。
0518デフォルトの名無しさん
2005/12/13(火) 16:38:530519デフォルトの名無しさん
2005/12/13(火) 17:03:390520デフォルトの名無しさん
2005/12/13(火) 17:09:21普通仕様無しでそういう種類の質問をしても答えてくれるワケは無いぞ。
ま、配列の計算式から言って、高々8bppのpixmapにピクセルを設定する
だけの処理だろうけど。
> if((x >= pbm->width) || (y >= pbm->height) || (x <= 0) || (y <= 0));
x<=0とy<=0はx<0, y<0で良い。それと>>519の指摘通りコロンは要らない。
valに関しては、 if (val < 0 || val > 0xff) return;
とでもしておけ。
0521& ◆yNq1OO4X9g
2005/12/13(火) 17:26:46無事コンパイルできました。
0522デフォルトの名無しさん
2005/12/13(火) 18:12:22やり方は処理系依存だが、デバッグ情報を読み出せればなんとかなりそう。
binary2.0に行き損ねてくやしい思いをしつつ見てた資料の中に、libbfdを
使えというお告げがあった。(UNIX or gcc限定?)
ぐぐってみた情報を参考に、適当に構造体を定義して作成した実行ファイルを
objdump -s で覗いてみると (objdumpなんて初めて使ったよ) .debug_info
セクションに何やら定義した構造体のメンバらしきものが。
どうやってデコードすればよいかわからんが、gdbのソースをあされば何か
出てくるんじゃないかな。
Visual C++とかの場合はどーすればいーのかね。
0523デフォルトの名無しさん
2005/12/13(火) 22:08:12おいらは独自のプリプロセッサを使った方が早いと思うよ
0524デフォルトの名無しさん
2005/12/13(火) 22:31:34方法ないですかね? L_LARGEFILE とか、
0525デフォルトの名無しさん
2005/12/13(火) 22:56:550526デフォルトの名無しさん
2005/12/13(火) 23:20:18に受ける事は可能でしょうか?すみませんがご教授下さい。
例えば
int main(int argc, int *argc[])
{
char str[128];
if(fork()){/*プロセス1*/
scanf("%s", str);
}
else{/*プロセス2*/
scanf("%s", str);
}
}
0527デフォルトの名無しさん
2005/12/13(火) 23:21:580528デフォルトの名無しさん
2005/12/13(火) 23:22:270529デフォルトの名無しさん
2005/12/13(火) 23:23:250530デフォルトの名無しさん
2005/12/13(火) 23:23:27fpos_tも大きいほうが良い。
でも別にsize_tもfpos_tも大きくなくとも
毎回の読み書きがsize_tの範囲内で収まれば問題ないはず。
0531デフォルトの名無しさん
2005/12/13(火) 23:27:450532デフォルトの名無しさん
2005/12/13(火) 23:29:59tee
0533デフォルトの名無しさん
2005/12/13(火) 23:48:38tee?
0534デフォルトの名無しさん
2005/12/14(水) 00:31:46そしてパソゲーできなひ…
0535デフォルトの名無しさん
2005/12/14(水) 00:34:460536デフォルトの名無しさん
2005/12/14(水) 00:35:040537デフォルトの名無しさん
2005/12/14(水) 00:35:46どこで聞いたらいいですか??
0538デフォルトの名無しさん
2005/12/14(水) 00:36:060539デフォルトの名無しさん
2005/12/14(水) 00:37:11Windows なら Windows 版に逝け
0540デフォルトの名無しさん
2005/12/14(水) 00:38:100541デフォルトの名無しさん
2005/12/14(水) 00:41:140542デフォルトの名無しさん
2005/12/14(水) 05:39:03tee
0543デフォルトの名無しさん
2005/12/14(水) 07:45:05teeがその目的に合うと勘違いする香具師も阿呆だな。
0544デフォルトの名無しさん
2005/12/14(水) 07:51:24stdin->tee->pipeA | stdin ->proc1
-> pipeB|stdin ->proc2
0545デフォルトの名無しさん
2005/12/14(水) 08:31:290546デフォルトの名無しさん
2005/12/14(水) 10:11:070547デフォルトの名無しさん
2005/12/14(水) 10:29:57乱数を発生させたいのですがどうすればよいでしょう?
0548デフォルトの名無しさん
2005/12/14(水) 10:53:40検索ぐらいしろ。Box-Muller法
0549デフォルトの名無しさん
2005/12/14(水) 11:06:40アルゴリズムじゃねーの?
0550547
2005/12/14(水) 11:15:14検索は一応したのですが。助かりました!
0551デフォルトの名無しさん
2005/12/14(水) 12:21:05#define AAAAA
#define BBB (defined(AAAAA))
foo(){
:
#if defined(AAAAA)
aaa();
#endif
#if BBB
bbb();
#endif
:
}
とした場合、
aaa()はコードになるのに、bbb()はコードになりません。
defind()をdefineするのはNGなのでしょうか?
0552デフォルトの名無しさん
2005/12/14(水) 12:38:03正規分布乱数でなんかしたいなら
ここも読んでおくように
ttp://www001.upp.so-net.ne.jp/isaku/rand.html
ttp://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/mt.html
ttp://www.asahi-net.or.jp/~jz6h-ymmt/toolbox/mt.htm
0553デフォルトの名無しさん
2005/12/14(水) 12:39:30#define AAAAA
#define BBB defined(AAAAA)
foo(){
:
#if defined(AAAAA)
aaa();
#endif
#if BBB
bbb();
#endif
:
}
0554デフォルトの名無しさん
2005/12/14(水) 12:44:06#ifdefや#ifndefでいいのでは?
0555551
2005/12/14(水) 12:58:43>>553
>#define BBB (defined(AAAAA))
のカッコをはずす、ということでしょうか?
試してみましたが変化ありませんでした。。。
>>554
#define HAVE_AAA
#define HAVE_BBB
#define HAVE_CCC
のようなdefineをして、
さらに
#define ENV_XXX(defined(HAVE_AAA) && defined(HAVE_BBB) && defined(HAVE_CCC))
#define ENV_YYY(defined(HAVE_AAA) && !defined(HAVE_BBB) && !defined(HAVE_CCC))
#define ENV_ZZZ(defined(HAVE_AAA) && defined(HAVE_BBB) && !defined(HAVE_CCC))
// XXXはAAA,BBB,CCCを持っている
// YYYはAAAは持っている、BBB,CCCは持っていない
// ZZZはAAA,BBBは持っている、CCCは持っていない
のような定義をし、
# if ENV_XXX
XXXの処理
#endif
# if ENV_YYY
YYYの処理
#endif
# if ENV_ZZZ
ZZZの処理
#endif
のようにしたかったのですが、意図通りにならなかったので
調べてみたところ、>>551の問題につきあたったのです。
複数のdefineのand/orを条件にしたいので#ifdef/#ifndefではうまくいきません。
0556デフォルトの名無しさん
2005/12/14(水) 13:02:20#if defined(HAVE_AAA) && defined(HAVE_BBB) && defined(HAVE_CCC)
#define ENV_XXX
#endif
#if defined(HAVE_AAA) && !defined(HAVE_BBB) && !defined(HAVE_CCC)
#define ENV_YYY
#endif
#if defined(HAVE_AAA) && defined(HAVE_BBB) && !defined(HAVE_CCC)
#define ENV_ZZZ
#endif
0557デフォルトの名無しさん
2005/12/14(水) 13:10:03gccでは通るんだけどね。
特に「definedをdefineしてはいけない」って仕様はなかったはずだし…
VCの欠陥かと
0558551
2005/12/14(水) 13:20:21>>556
確かにそのように記述すれば意図どおりになります。
ご教示ありがとうございます。
>>557
当方にもgccがあるのでやってみましたところ
(最初から試すべきでしたねorz)
確かにgccでは意図通りになりました。
VC特有の現象(仕様)でしょうか?
>>556 の書き換えで問題は解消できますが、
(その意味ではクローズで結構です)
できれば「VCだと(?)definedをdefineできない」という根拠というか情報源を
ご存知の方がいましたらご教示いただけるとありがたいです。
よろしくおねがいいたします。
0559デフォルトの名無しさん
2005/12/14(水) 14:28:18>特に「definedをdefineしてはいけない」って仕様はなかったはずだし…
「この置き換えによって字句 defined が生成される場合,又は
defined 単項演算子のマクロ置き換え前の使用法が,制約の中で
規定した二つの形式のいずれにも一致しない場合,その動作は
未定義とする。」 (JIS X 3010 : 2003 (ISO/IEC 9899 : 1999)
0560デフォルトの名無しさん
2005/12/14(水) 14:29:35× >>557
○ >>558
0561デフォルトの名無しさん
2005/12/14(水) 15:49:07char *p;
p = (char*)malloc(10000);
と領域を取ります。
*--p=1;
*--p=2;
*--p=3;
でもセグメンテーション違反は起らず、
*++p=1;
*++p=2;
*++p=3;
でもセグメンテーション違反が起きません。
どうしてでしょうか?・・・
malloc()は確保した領域の先頭アドレスを返すはずですが。。。
0562デフォルトの名無しさん
2005/12/14(水) 16:09:19それは「たまたま」起こらなかっただけ
0563デフォルトの名無しさん
2005/12/14(水) 16:11:13確保した領域外がどうなっているかなど規定されていませんが。
0564561
2005/12/14(水) 16:27:31じゃあ、どこかの領域が破壊されてることになるね。。
おそろしや、Cはなんでもありだ・・・。
0565デフォルトの名無しさん
2005/12/14(水) 16:32:560566デフォルトの名無しさん
2005/12/14(水) 16:45:030567デフォルトの名無しさん
2005/12/14(水) 17:07:050568デフォルトの名無しさん
2005/12/14(水) 18:41:10自分で簡単なmalloc/freeを実装してみれ。何故そうなってるかよく理解できるから。
0569ビル・ジョブス
2005/12/14(水) 19:14:13それは>>561にとってチョット辛いのでは・・なぜなら概念を知らないようなので・・。
>>561
Memory Control Blockって考え方知ってる?
割当てた領域毎の先頭に、こんな感じの構造体が付いているんですよ。
typedef struct mcb {
struct mcb *prev;
struct mcb *next;
unsigned size;
uchar buff[1]; // ここが確保した領域の先頭ですよ、[1]の理由は分かりますか?
} MCB;
実際に割当てた領域サイズは、sizeof MCB + (リクエストサイズ) - 1 なんですよ。
(バウンダリ合わせとか抜きにして)
0570デフォルトの名無しさん
2005/12/14(水) 19:29:51printf とかにそのままつっこめるように。
0571デフォルトの名無しさん
2005/12/14(水) 20:01:320572デフォルトの名無しさん
2005/12/14(水) 20:15:52初心者だからって、嘘を教えないように。
0573デフォルトの名無しさん
2005/12/14(水) 20:41:05int x = 20;
TextOut(hdc,10,10,"abcd"x);
みたいな使い方でいいんでしたっけ?
コンパイルする環境が今ないもので;
0574デフォルトの名無しさん
2005/12/14(水) 21:00:17スレ違い
0575デフォルトの名無しさん
2005/12/14(水) 21:09:40STL の string は(ry
0576デフォルトの名無しさん
2005/12/14(水) 21:11:12TextOut(hdc, 10, 10, buf);
0577デフォルトの名無しさん
2005/12/14(水) 21:33:41{
int ch;
do{
printf("\n練習を選択してください。\n");
printf("(1)単純ポジション(2)複合ポジション\n");
printf("(3)C言語の単語 (4)英会話 (0)終了:");
scanf("%d",&ch);
}while(ch<Term||ch>=InValid);
return((Menu)ch);
}
これなんですが、宣言の構文エラーになってしまいます。ちゃんと全部書き写したんですが・・・
0578デフォルトの名無しさん
2005/12/14(水) 21:37:29>>1
> エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。
0579デフォルトの名無しさん
2005/12/14(水) 21:37:34それとも定数か?
Menu型もワカンネ
0580デフォルトの名無しさん
2005/12/14(水) 21:37:51バッファのフラッシュって何のことですか?
0581デフォルトの名無しさん
2005/12/14(水) 21:38:31スレ違いです。
0582577
2005/12/14(水) 21:39:42ごめんなさ〜い!
0583デフォルトの名無しさん
2005/12/14(水) 21:40:090584デフォルトの名無しさん
2005/12/14(水) 21:41:56バッファの内容を露出(Flush)することです。
まだファイルに書き出されていないで、バッファに残っている内容を
ファイルに書き出すこと。
0585577
2005/12/14(水) 21:43:17{
Menu menu;
int cn=sizeof(cstr)/sizeof(cstr[0]);
int vn=sizeof(vstr)/sizeof(vstr[0]);
srand(time(NULL));
printf("■■■■■■■■■■■■■■■■■\n");
printf("■たのしいC−総合タイピング練習■\n");
printf("■■■■■■■■■■■■■■■■■\n");
do{
switch(menu=SelectMenu()){
case KeyPos:
pos_training();
break;
case KeyPosComp:
pos_training2();
break;
case Clang:
word_training("C言語の単語",cstr,cn);
break;
case Conversation:
word_training("英会話の文書",vstr,vn);
break;
}
0586577
2005/12/14(水) 21:43:58return(0);
}
エラー E2034 sample82.cpp 293: 'char * *' 型は 'const char * *' 型に変換できない(関数 main() )
エラー E2342 sample82.cpp 293: パラメータ 'str' は const char * * 型として定義されているので char * * は渡せない(関数 main() )
エラー E2034 sample82.cpp 296: 'char * *' 型は 'const char * *' 型に変換できない(関数 main() )
エラー E2342 sample82.cpp 296: パラメータ 'str' は const char * * 型として定義されているので char * * は渡せない(関数 main() )
こうなっちゃいました・・・馬鹿ですいませんが誰か指導してください・・・・
0588デフォルトの名無しさん
2005/12/14(水) 21:46:09直ったんじゃないの?
0589デフォルトの名無しさん
2005/12/14(水) 21:47:16270行もあるようには見えないんだが?
0590577
2005/12/14(水) 21:47:550591デフォルトの名無しさん
2005/12/14(水) 21:49:07つーか高々300行かよ
0592デフォルトの名無しさん
2005/12/14(水) 21:49:230593デフォルトの名無しさん
2005/12/14(水) 21:50:09エラー出る所以外にも色々アドバイスもらえるかもよ
0594デフォルトの名無しさん
2005/12/14(水) 22:00:40IsValid や Invalid なら分かるが。
0595デフォルトの名無しさん
2005/12/14(水) 22:06:40char ** を const char ** の引数には渡せない。
渡せるのは char *const * に対してだが、あまり意味が無い。
一番いいのは const char *const * で、
これに渡せて良さそうなもんだが、
C の const の仕様は不完全で渡せない。
キャストするしかない。
0596デフォルトの名無しさん
2005/12/14(水) 22:10:24横からだが、Cの仕様が不完全で非constなダブルポインタから
constなダブルポインタへの暗黙の変換が�_って事?
0597デフォルトの名無しさん
2005/12/14(水) 22:10:250598デフォルトの名無しさん
2005/12/14(水) 22:13:41C FAQかと思ったら違った。
どこかでchar **を暗黙のうちにconst char **へ変換できてしまうと
まずいことになる例が紹介されていた覚えがあるのだが。
0599デフォルトの名無しさん
2005/12/14(水) 22:35:30しかし、*p や p[?] までは保護されない。危険だ。
char *const *p; で保護されるのは、見たままの *p や p[?] だ。
しかし、**p や p[?][?] までは保護されない。もっと危険だ。
const char *const *p; ではじめて両方保護される。
こんなに const つけないといけないのはマンドクセだが、
そういう仕様なんだからしゃーない。
そして、なおかつこれに渡すにはキャストがいるってのもマンドクセだが、
そういう仕様なんだからしゃーない。
ちなみに C++ だと const char ** へは暗黙にキャストされないが、
const char *const * へは暗黙にキャストされる。
0600デフォルトの名無しさん
2005/12/14(水) 22:42:40const **p;
とか
char *
const *p;
とか書いたら理解しやすいと思う。
まあ、参照先保護の const ってのはそういうもん。
0602577
2005/12/14(水) 23:23:110603577
2005/12/14(水) 23:29:59#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#define NO 15
#define KTYPE 16
typedef enum{Term,KeyPos,KeyPosComp,Clang,Conversation,InValid}Menu;
char *kstr[]={"12345","67890-^\\",
"!\"$%2","&'()=~|",
"qwert","yuiop@[",
"QWERT","YUIOP`{",
"asdfg","hjkl;:]",
"ASDFG","HJKL+*}",
"zxcvb","nm,./\\",
"ZXCVB","NM<>_",
};
0604577
2005/12/14(水) 23:32:06"auto","break","case","char","const","continue",
"default","do","double","else","enum","extern",
"float","for","goto","if","int","long",
"register","return","short","signed","sizeof",
"static","struct","switch","typedef","union",
"unsigned","void","volatile","while","abort",
"abs","acos","asctime","asin","assert",
"atan","atan2","atexit","atof","atoi","atol",
"bsearch","calloc","ceil","clearerr","clock","cos",
"cosh","ctime","difftime","div","exit","exp",
"fabs","fclose","feof","ferroer","fflush","fgetc",
"fgetpos","fgets","floor","fmod","fopen","fprintf",
"fputc","fputs","fread","free","freopen","frexp",
"fscanf","fseek","fsetpos","ftell","fwrite","getc",
"getchar","getenv","gets","gmtime","isalnum","isalpha",
"iscntrl","isdigit","isgraph","islower","isprint","ispunct",
"isspace","isupper","isxdigit","labs","ldexp","ldiv",
"localeconv", "localtime","log","log10","longjmp",
"malloc","memchr","memcmp","memcpy","memmove","memset",
"mktime","modf","perror","pow","printf","putc",
"putchar","puts","qsort","raise","rand","realloc",
"remove","rename","rewind","scanf","setbuf","setjmp",
"setlocale","setvbuf","signal","sin","sinh","sprintf",
"sqrt","srand","sscanf","strcat","strchr","strcmp",
"strcoll","strcpy","strcspn","strerror","strftime","strlen",
"strncat","strncmp","strncpy","strpbrk","strrchr","strspn",
"strstr","strtod","strtok","strtol","strtoul","strxfrm",
"system","tan","tanh","time","tmpfile","tmpnam",
"tolower","toupper","ungetc","va_arg","va_end","va_start",
"vfprintf","vprintf","vsprintf"
};
0605デフォルトの名無しさん
2005/12/14(水) 23:34:380606577
2005/12/14(水) 23:34:48"Hello!","How are you?",
"Fine thanks.","I can't complain,thanks.",
"How do you do?","Good bye!",
"Good morning!","Good afternoon!",
"Good evening!","See you later",
"Go ahead,Please.","Thank you.",
"No,thank you.","May I have your name?",
"I'm glad to meet you.","What time is it now?",
"It's about seven.","I must go now.",
"How much?","Where is the restroom?",
"Excuse me.","Excuse us.",
"I'm sorry.","I don't know.","Ihavenochangewith me.",
"I will be back.","Are you going out?",
"I hope I'm not disturbing you.","I'll offer no excuse.",
"Shall we dance?",
"Will you do me a favor?",
"It's very unseasonable.",
"You are always welcome.",
"Hold still!",
"Follow me.",
"To be honest with you,",
};
0607577
2005/12/14(水) 23:35:18{
int i;
int len=strlen(str);
int mistake=0;
for(i=0;i<len;i++){
printf("%s \r",&str[i]);
fflush(stdout);
while(getch()!=str[i]){
mistake++;
}
}
return(mistake);
}
0608577
2005/12/14(水) 23:36:34{
int i;
int stage;
int temp,line;
int len;
int qno,pno;
int tno,mno;
clock_t start,end;
printf("\n単純ポジショントレーニングを行います\n");
printf("練習するブロックを選択してください。\n");
printf("第一段(1)左%-8s (2)右 %-8s\n",kstr[0],kstr[1]);
printf("第二段(3)左%-8s (4)右 %-8s\n",kstr[4],kstr[5]);
printf("第三段(5)左%-8s (6)右 %-8s\n",kstr[8],kstr[9]);
printf("第四段(7)左%-8s (8)右 %-8s\n",kstr[12],kstr[13]);
do{
printf("番号(練習中止は99:");
scanf("%d",&temp);
if(temp==99)return;
}while(temp<1||temp>8);
line =4*((temp-1)/2)+(temp-1)%2;
printf("%sの問題を%d回練習します\n",kstr[line],NO);
printf("スペースキーで開始します\n");
while(getch()!= ' ')
;
tno=mno=0;
len=strlen(kstr[line]);
start=clock();
0609577
2005/12/14(水) 23:37:38char str[11];
for(i=0;i<10;i++)
str[i]=kstr[line][rand()%len];
str[i]='\0';
mno+=go(str);
tno+=strlen(str);
}
end=clock();
printf("問題:%d文字/ミス:%d回\n",tno,mno);
printf("%.lf秒でした。\n",(double)(end-start)/CLOCKS_PER_SEC);
}
void pos_training2(void)
{
int i;
int stage;
int sno;
int select[KTYPE];
int temp,line;
int len[KTYPE];
int tno,mno;
clock_t start,end;
char *format="第%d段(%2d)左%-8s(%2d)右%-8s"
"(%2d)[左]%-8s(%2d)[右]%-8s\n";
printf("\n複合ポジショントレーニングを行います。\n");
printf("練習するブロックを選択してください。(複数個選べます)\n");
0610577
2005/12/14(水) 23:38:58int k=i*4;
printf(format,i+1,k+1,kstr[k], k+2,kstr[k+1],
k+3,kstr[k+2],k+4,kstr[k+3]);
}
sno=0;
while(1){
printf("番号(選択終了は50/練習中止は99):");
do{
scanf("%d",&temp);
if(temp==99)return;
}while((temp<1||temp>KTYPE)&&temp!=50);
if(temp==50)
break;
for(i=0;i<sno;i++)
if(temp==select[i]){
printf("\aその段はすでに選ばれています。\n");
break;
}
if(i==sno)
select[sno++]=temp;
}
if(sno==0)
return;
printf("以下のブロックの問題を%d回練習します。\n",NO);
for(i=0;i<sno;i++)
printf("%s",kstr[select[i]-1]);
0611デフォルトの名無しさん
2005/12/14(水) 23:39:170612577
2005/12/14(水) 23:39:24while(getch()!=' ')
;
tno=mno=0;
for(i=0;i<sno;i++)
len[i]=strlen(kstr[select[i]-1]);
start=clock();
for(stage=0;stage<NO;stage++){
char str[11];
for(i=0;i<10;i++){
int q=rand()%sno;
str[i]=kstr[select[q]-1][rand()%len[q]];
}
str[i]='\0';
mno+=go(str);
tno+=strlen(str);
}
end=clock();
printf("問題:%d文字/ミス:%d回\n",tno,mno);
printf("%.lf秒でした。\n",(double)(end-start)/CLOCKS_PER_SEC);
}
0613577
2005/12/14(水) 23:40:16{
int stage;
int qno,pno;
int tno,mno;
clock_t start,end;
printf("\n%sを%d個練習します。\n",mes,NO);
printf("スペースキーで開始します。\n");
while(getch()!=' ')
;
tno=mno=0;
pno=n;
start=clock();
for(stage=0;stage<NO;stage++){
do{
qno=rand()%n;
}while(qno==pno);
mno+=go(str[qno]);
tno+=strlen(str[qno]);
pno=qno;
}
end=clock();
printf("問題%d文字/ミス:%d回n",tno,mno);
printf("%.lf秒でした。\n",(double)(end-start)/CLOCKS_PER_SEC);
}
迷惑かけてすいません!どうしてもエラーを直したいのです・・
0614577
2005/12/14(水) 23:41:14{
int ch;
do{
printf("\n練習を選択してください。\n");
printf("(1)単純ポジション(2)複合ポジション\n");
printf("(3)C言語の単語 (4)英会話 (0)終了:");
scanf("%d",&ch);
}while(ch<Term||ch>=InValid);
return((Menu)ch);
}
int main(void)
{
Menu menu;
int cn=sizeof(cstr)/sizeof(cstr[0]);
int vn=sizeof(vstr)/sizeof(vstr[0]);
srand(time(NULL));
printf("■■■■■■■■■■■■■■■■■\n");
printf("■たのしいC−総合タイピング練習■\n");
printf("■■■■■■■■■■■■■■■■■\n");
0615577
2005/12/14(水) 23:42:27switch(menu=SelectMenu()){
case KeyPos:
pos_training();
break;
case KeyPosComp:
pos_training2();
break;
case Clang:
word_training("C言語の単語",cstr,cn);
break;
case Conversation:
word_training("英会話の文書",vstr,vn);
break;
}
}while(menu!=Term);
return(0);
}
以上です!わかる方いたら抱きしめたいです!
0616デフォルトの名無しさん
2005/12/14(水) 23:44:550617デフォルトの名無しさん
2005/12/14(水) 23:46:18×char *cstr[]={
○const char *cstr[]={
×char *vstr[]={
○const char *vstr[]={
0618577
2005/12/14(水) 23:49:02ありがとうございます!でも3、4の単語と会話のタイピングが選択しても実行されないっすorz
皆様どうもすいませんでした!
0619sage
2005/12/15(木) 00:02:02うまくひっくり返すのができません。
原因はなんなんでしょうか。
プログラムはx = 4 y = 2 c = 1を入力してひっくり返しをためしています。
下にプログラムを張ります。
0620デフォルトの名無しさん
2005/12/15(木) 00:06:10鉄格子のついた病院に帰れ莫迦。
0621デフォルトの名無しさん
2005/12/15(木) 00:08:010622デフォルトの名無しさん
2005/12/15(木) 00:16:57お前の脳味噌のエラーを直しに病院逝け
0623デフォルトの名無しさん
2005/12/15(木) 00:20:420624デフォルトの名無しさん
2005/12/15(木) 01:21:440625デフォルトの名無しさん
2005/12/15(木) 01:51:570626デフォルトの名無しさん
2005/12/15(木) 02:05:060627デフォルトの名無しさん
2005/12/15(木) 08:55:07構造体のコピーって後から加わった仕様なの?
0628デフォルトの名無しさん
2005/12/15(木) 09:00:070629デフォルトの名無しさん
2005/12/15(木) 09:00:39今ひとつ意味がわからないが構造体が=でコピー代入できるのに
配列だと出来ないことを指してるのか?
0630デフォルトの名無しさん
2005/12/15(木) 09:01:580631デフォルトの名無しさん
2005/12/15(木) 09:04:43そうなら、K&R初版のころから仕様としてはあった。
だけど、初期のコンパイラはそれを実装していなかったものが多かったようだ。
ANSI C対応のものなら、OK。
配列a[100]のaはCではポインタだから、aをポインタとして代入するならできる?
でも配列の中身のコピーはNG
0632627
2005/12/15(木) 09:05:480633627
2005/12/15(木) 09:10:07struct ABC{
int array[10];
};
void main(void){
strcut ABC hg1, hg2;
int foo1[10], foo2[10];
hg1 = hg2; ←これだと、arrayもコピされる・・・
foo1 = foo2; ←怒られる
}
が、なんか納得いかないです
0635デフォルトの名無しさん
2005/12/15(木) 09:21:10これは?
int *foo1, foo2[10];
foo1 = foo2;
0637デフォルトの名無しさん
2005/12/15(木) 09:24:42だから、できない!
foo2はポインタなんだよ。配列全部じゃないんだ。
もしやりたければ、memcpyでコピーするだね。
0638店長
2005/12/15(木) 09:49:390639デフォルトの名無しさん
2005/12/15(木) 09:50:460640デフォルトの名無しさん
2005/12/15(木) 09:54:150641デフォルトの名無しさん
2005/12/15(木) 10:36:56キモチは解らんでもないが…
// E は任意の型、n および m は1以上の整定数
E (*left)[n];
const E (*right)[m];
として
left = right;
が出来るようにしちゃうと、どっかに問題が起こりそうな…
0642デフォルトの名無しさん
2005/12/15(木) 11:03:28Cで飯食ってる人間でも構造体の代入ができることを知らない香具師がいるけどあんたもその口か?
>>633
Cでまともな配列演算がサポートされていることを期待する方が間違い。
関数に渡すこともできないし、範囲のチェックもサポートされていないのだから。
0643487
2005/12/15(木) 11:39:371行目と2行目を読み込んで計算をさせたいのですがfprintfでは1行しか読み込んでくれません。
複数行読み込むにはどうしたらいいのでしょうか?
一応対策としては元のデータの1行目にダミーデータを入れるか削るかして、
別ファイルで保存して元のファイルとそのファイルを読み込んでデータ処理すれば
1行ずれているので結果2行分扱えると考えてはいるのですが。
良い方法があればお願いします。
0644デフォルトの名無しさん
2005/12/15(木) 11:40:220645デフォルトの名無しさん
2005/12/15(木) 11:41:560646デフォルトの名無しさん
2005/12/15(木) 11:42:09あんたは全て知り尽くしてて、それまでは飯食わなかったのか?そらすげ
0647デフォルトの名無しさん
2005/12/15(木) 11:48:00if ((p = (struct list *) malloc(sizeof(struct list))) == NULL) {
printf("malloc error\n");
exit(1);
}
(struct list *)
↑*なに?かける?
0648デフォルトの名無しさん
2005/12/15(木) 11:52:20doubleなのに%lfじゃなくて%fで書式指定してるけど大丈夫なん?
0649デフォルトの名無しさん
2005/12/15(木) 11:53:11キャスト
0650デフォルトの名無しさん
2005/12/15(木) 11:54:250651デフォルトの名無しさん
2005/12/15(木) 12:02:40FILE *fin;
if((fin = fopen("aho.dat", "r")) == NULL){
fprintf(stderr, "Can't open aho.dat\n");
return 0;
}
while(!feof(fin)){
char buf[BUFSIZE];
double data[13];
int i;
for(i = 0; i < 13; i++){
if(!fscanf(fin, "%lf", &data[i])){
fprintf(stderr, "Error: fscanf %d\n", i);
}
}
if(data[2] == 2.0){
for(i = 0; i < 13; i++){
fprintf(stdout, "%8d:%25.17lf\n", i, data[i]);
}
}
}
fclose(fin);
0652642
2005/12/15(木) 12:21:04少なくとも、見習いコーダーのうちは飯食ってるとは言わないと思うが。
それじゃまぁ、一応言い直しておくよ。
何年もCプログラミングで生計を立てている(或いはCプログラマーとして仕事をしている)人間でも(以下略
0653デフォルトの名無しさん
2005/12/15(木) 12:21:58だからawkで事が足りるだろうと。
0654デフォルトの名無しさん
2005/12/15(木) 12:34:14構造体の代入くらいは目にすると思うんだがなぁ。
0655487
2005/12/15(木) 12:55:18はい。最初それがわからなくて悩んでたんですが
気がついて直しました。
>>653
なんどもいわれているのでちょっと勉強してみます。
0656デフォルトの名無しさん
2005/12/15(木) 13:11:29戻り値に構造体持ってくるケースがあるね。
コピーのオーバーヘッド大きくなりすぎるから
結局ポインタで受け渡しする方が多いけど。
0658639
2005/12/15(木) 13:31:11構造体の代入、目にはしてるし使ってはいたが、あらためて
意識したことが無かったってことだよ。
職人肌で技術プライド高いのはわかるが、ひとこと多いな。
即座に調べてミスを訂正してるにも関わらず。
プログラム以前に人格(以下略
0659デフォルトの名無しさん
2005/12/15(木) 13:46:20あんたも652と同じくらい性格が曲がっているよ。
0660デフォルトの名無しさん
2005/12/15(木) 13:52:05fprintfのdoubleの書式指定は%fだよ
C99からは%lfも指定できるようになったがそれ以前の規格では%lfを指定すると未定義動作を引き起こす
scanf系とprintf系の書式指定は微妙に対応していない
0661デフォルトの名無しさん
2005/12/15(木) 14:32:26なんで、論理の破綻した >>646 なんかにレスするかなぁ…
0662デフォルトの名無しさん
2005/12/15(木) 14:48:25char *p;
p=a ;
printf("%c",*p);
↑OK
↓動かん 何で?
int a=5;
int *p;
p=a ;
printf("%s",*p);
0663デフォルトの名無しさん
2005/12/15(木) 14:51:11普通のcharを渡しても実数を渡すだけでアドレスは渡されない
int a=5;
int *p;
p=&a ; //&を付けてaのアドレスを渡す
printf("%s",*p);
0664デフォルトの名無しさん
2005/12/15(木) 14:53:150665デフォルトの名無しさん
2005/12/15(木) 14:54:27thx
0666デフォルトの名無しさん
2005/12/15(木) 15:05:36int *p;
a[1]=5;
p=a;
printf("%d",*(p+1));
↑OK
↓動かん 何で?二次配列はアウト?
int a[2][2];
int *p;
a[1][1]=5;
p=a;
printf("%d",*(p+5));
0667デフォルトの名無しさん
2005/12/15(木) 15:10:540668デフォルトの名無しさん
2005/12/15(木) 15:18:23後者は配列ではなく配列の配列なのだからpの型が間違っている。
ついでに言えば、printf()での参照の仕方も間違っている。
0669デフォルトの名無しさん
2005/12/15(木) 15:20:26どういう結果を期待してるのか書いてもらわんとわからん
0670デフォルトの名無しさん
2005/12/15(木) 15:33:54a[0][0] 1000 0
a[0][1] 1001 0
a[0][2] 1002 0
a[1][0] 1003 0
a[1][1] 1004 1
a[1][2] 1005 0
p=aで a[0][0]のアドレス受け取って
printf("%d",*(p+4)); で動くと思った。
↑5ミスった
>668
pの型も二次元にすんの?でも無理だった
>669
5
0671デフォルトの名無しさん
2005/12/15(木) 15:35:02void main()
{
float s;
float t;
printf("身長(cm):");
scanf("%f", &s);
printf("体重(g):");
scanf("%f", &t);
}
これを実行すると身長を入力した後に何故かDebug Errorが出ます
どうして?ちなみにコンパイラはVC++
0672デフォルトの名無しさん
2005/12/15(木) 15:35:11*(p[5])
なんかこんなかんじのにするとかきいたことあるようなないような
0673デフォルトの名無しさん
2005/12/15(木) 15:40:46a[2][2]で番地が6個もあるのはおかしい
0674デフォルトの名無しさん
2005/12/15(木) 15:42:50a 番地 物
a[0][0] 1000 0
a[0][1] 1001 0
a[1][0] 1002 0
a[1][1] 1003 1
0675デフォルトの名無しさん
2005/12/15(木) 15:42:48初心者スレへどうぞ。
その際はエラーメッセージの内容もお書きください。
0676デフォルトの名無しさん
2005/12/15(木) 15:43:14本とだ、2が余分だ
0677デフォルトの名無しさん
2005/12/15(木) 15:43:39要素数=2 なんだから、範囲はa[0][0]〜a[1][1]。
p = (int*)a;
とするか、
int (*p)[2];
>>671
>void main()
何だコレは。
つかオマイラ、人に訊くレベルにも達してない。
0678デフォルトの名無しさん
2005/12/15(木) 15:45:42Scanfの%fは%lfでないの?
0679デフォルトの名無しさん
2005/12/15(木) 15:45:49ノロノロと動きが俊敏ZYない・・・・
しかもこっちに着てるし・・・・
こっから
#include <stdio.h>
int main(void)
{
int a[2][2];
int *p;
a[1][1]=5;
p=a;
printf("%d",*(p[3]));
return 0;
}
エラー E2034 D:\c\works\test\008.cpp 14: 'int ( *)[2]' 型は 'int *' 型に変換できない(関数 main() )
エラー E2062 D:\c\works\test\008.cpp 15: 無効な間接参照(関数 main() )
0680デフォルトの名無しさん
2005/12/15(木) 15:47:58そっち違う違う
0681デフォルトの名無しさん
2005/12/15(木) 15:48:13また無茶なことを
0682デフォルトの名無しさん
2005/12/15(木) 15:48:25全角文字入力してるって落ち?
0683デフォルトの名無しさん
2005/12/15(木) 15:53:040684デフォルトの名無しさん
2005/12/15(木) 15:53:27どこにあるの?
>>677
void main()はたいした問題じゃねえだろ
うちなんかmainもvoid main(void); ってプロトタイプ宣言させられるぞ
>>682
それだったら違うコンパイルエラーが出るでしょ
とにかくコンパイルは通るのです
とりあえずコピペしてやってみてよ、VC++だけど
何故か実行時にエラーが出るから
0685デフォルトの名無しさん
2005/12/15(木) 15:55:55できたわ
thx
0686デフォルトの名無しさん
2005/12/15(木) 15:57:52普通に出来たよ
bcc
0687デフォルトの名無しさん
2005/12/15(木) 15:59:28鬱
0688デフォルトの名無しさん
2005/12/15(木) 16:04:20bcc普通に通って実行出来ますよ。
VC++6.0普通に通って実行出来ますよ。
0689デフォルトの名無しさん
2005/12/15(木) 16:05:02再構築などすれば?
0690デフォルトの名無しさん
2005/12/15(木) 16:05:41をお願いします。
お忙しい中、恐縮です。
0691デフォルトの名無しさん
2005/12/15(木) 16:07:10宿題スレに行け
0692684
2005/12/15(木) 16:07:330693デフォルトの名無しさん
2005/12/15(木) 16:08:54この辺お勧め。
http://pc8.2ch.net/test/read.cgi/tech/1134181723/
http://pc8.2ch.net/test/read.cgi/tech/1133758631/
http://pc8.2ch.net/test/read.cgi/tech/1133485684/
http://pc8.2ch.net/test/read.cgi/tech/1124256027/
http://pc8.2ch.net/test/read.cgi/tech/1131691023/
0694ゴキブリハンター
2005/12/15(木) 16:09:15一個入れてエンター
一個入れてエンターだぞ
0695684
2005/12/15(木) 16:10:490696デフォルトの名無しさん
2005/12/15(木) 16:11:22いてら
0697デフォルトの名無しさん
2005/12/15(木) 16:12:53もう一度聞くが、全角文字で身長を入力してるんじゃないのか?
その名前欄からして
0698デフォルトの名無しさん
2005/12/15(木) 16:13:15http://g.pic.to/65zky
オレヤサシス
0699684
2005/12/15(木) 16:13:460700デフォルトの名無しさん
2005/12/15(木) 16:14:24HSPに帰れ
0702デフォルトの名無しさん
2005/12/15(木) 16:16:02原因を指摘して解決方法も指摘できるのだがすれ違いにつき割愛。
それはあくまでも開発環境の問題だ。
0704ゴキブリハンター
2005/12/15(木) 16:18:48http://kuroneko-upload.no-ip.info/uploader/sn/src/up3215.gif
0705デフォルトの名無しさん
2005/12/15(木) 16:24:06>>693
0706デフォルトの名無しさん
2005/12/15(木) 17:00:33高速になる理由を教えていただけませんか?
0707デフォルトの名無しさん
2005/12/15(木) 17:01:19自演やめれって
0708デフォルトの名無しさん
2005/12/15(木) 19:35:40宿題スレでかなり真面目に答えたんだが。
0709デフォルトの名無しさん
2005/12/15(木) 21:44:07なんでかは知らないが昔の人がいろいろ試してみたらそうなったんだよ。
0710デフォルトの名無しさん
2005/12/15(木) 21:46:16気にするべきことは、プログラム上では切り捨てられて整数に丸められるという特徴があるということも。
1 : 1.618 (1 : (1+√5)/2)
≒1/2.6
ttp://gakuen.gifu-net.ed.jp/~contents/museum/golden/page62.html
このサイトの一番下のを見たの思い出してそう思ったw
思いつきだけどねww
0711デフォルトの名無しさん
2005/12/15(木) 21:48:180712デフォルトの名無しさん
2005/12/15(木) 22:25:51ttp://www.research.att.com/projects/OEIS?Anum=A003462
0713デフォルトの名無しさん
2005/12/15(木) 22:50:49お願いします。
0714デフォルトの名無しさん
2005/12/15(木) 22:55:14バイナリで読み込んで、バイナリで出力
0715デフォルトの名無しさん
2005/12/15(木) 22:57:07[2] 問題文(含コード&リンク):
次の4点
(0,0),(1,0),(1,1),(0,1)
を順に通る3次のSPLINE曲線とそのグラフを描くプログラムを作成せよ。
始点と終点の接線の方向はそれぞれ(1,1)と(-1,0)とする。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラは何でもいいっていわれました
[3.3] 言語: C
[4] 期限: 2005年12月10日まで
[5] その他の制限: プログラムリストとそれによってできたグラフを印刷して提出といわれますた。
グラフのソフト等も特に制限はないそうです。
よろしくお願いします!!!!!!!!!!!!!!!
0716デフォルトの名無しさん
2005/12/15(木) 22:57:12C言語標準の内容でその機能を実現することは不可能です。
表示したい環境を特定した上で、その環境のスレッドへ移動
してください。
0717デフォルトの名無しさん
2005/12/15(木) 22:57:37誤爆ですね?
C/C++の宿題を片付けます 55代目
http://pc8.2ch.net/test/read.cgi/tech/1134128493/
0718デフォルトの名無しさん
2005/12/15(木) 22:58:36すいません、誤爆しました。
0719デフォルトの名無しさん
2005/12/15(木) 23:06:03すみません、素人中の素人なので。詳しく教えていただけませんか?
0720デフォルトの名無しさん
2005/12/15(木) 23:07:19プログラム以前の問題です。
0721デフォルトの名無しさん
2005/12/15(木) 23:11:23Windowsなら「Win32APIのみ」、「MFCを使ってもよい」、「特定の外部
ライブラリを使ってもよい」など、
Unixなら…Macなら…
と環境によってやり方がバラバラで統一した方法がないということです。
いずれにせよ、ここはスレ違いです。
0722デフォルトの名無しさん
2005/12/15(木) 23:11:41言語を変えればできるのですか?
0723デフォルトの名無しさん
2005/12/15(木) 23:11:46マジレスするとMicrosoft Photo Editor
0724デフォルトの名無しさん
2005/12/15(木) 23:12:420725デフォルトの名無しさん
2005/12/15(木) 23:14:120726デフォルトの名無しさん
2005/12/15(木) 23:19:53どうしてもわからないものにぶち当たってしましたました。
下記のソースのなかで
p = find_if(v.begin(), v.end(), iscomma);
とありますがこの中のiscommaが何も実引数を持たずに呼び出されています。
これってどういうことなのでしょうか?
もしお時間のある方いらっしゃいましたらご教授お願いいたします。
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
// find()とfind_if()の用例
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
// chがカンマならtrueを返す
bool iscomma(char ch) {
if(ch==',') return true;
return false;
}
int main() {
vector<char> v;
vector<char>::iterator p;
char str[] = "One, Two, Three";
int i;
for(i=0; i<strlen(str); i++) v.push_back(str[i]);
p = find_if(v.begin(), v.end(), iscomma);
cout << "After find first comma: ";
while(p != v.end()) cout << *p++;
cout << endl;
return 0;
}
0727726
2005/12/15(木) 23:20:250728デフォルトの名無しさん
2005/12/15(木) 23:21:540729726
2005/12/15(木) 23:23:11本当にごめんなさい。
0730デフォルトの名無しさん
2005/12/15(木) 23:53:18加えて、自分で考えたり調べようともしないヤシが増えたこと、増えたこと…。
0731デフォルトの名無しさん
2005/12/16(金) 00:34:20いま簡単な複数の接続を受け入れるEchoサーバーを作成しています
そこでWSAAsyncSelect()へListenSocketを渡し
FD_READイベントを待機します
しかしイベントが発生した際に送信元が誰なのか(誰に返送すればイイのか?)
を特定する方法に悩んでいます。
何か良い方法は無いでしょうか?
※ListenSocketとはサーバーサイドのソケットです
0732デフォルトの名無しさん
2005/12/16(金) 00:37:35スレ違い
0733デフォルトの名無しさん
2005/12/16(金) 00:40:58lesten 用のソケットでは通信出来ないよ。
って言うか激しくスレ違い。
0734731
2005/12/16(金) 04:20:42スレ汚しごめんなさい。
0735デフォルトの名無しさん
2005/12/16(金) 08:18:440736ももの
2005/12/16(金) 09:08:59教えていただけますか??
//
問題:
数人分の学生成績データ・レコードを格納したファイル(名前をstu-seiseki)がある。
各レコードの長さは次のとおりである。
学生番号 7byte
氏名 20byte
英語・数学・国語 3byte
学生番号は0番からの通し番号であり、
各レコードは学生番号の順に並んでいるものとする。
このデータを使って学生の成績に関する問い合わせを行うプログラムretrieve.cを作りたい。
このプログラムは、キーボードから学生の番号を入力し該当する学生のレコードを検索、
学生番号等の各項目のほかに、合計点と平均点を並べて表示するものとする。
プログラム終了には、^bを押すものとする。
【データの例】
0000000 山田 太郎 030050060
0000001 鈴木 花子 080075030
【実行例】
学生番号入力→1
学番 氏名 英語 数学 国語 総点 平均点
1 鈴木花子 80 75 30 185 61.7
//
っという問題です。
バイナリモードアクセスがいまいち理解できなく非常に困っています。
どうかよろしくお願いします。
0737デフォルトの名無しさん
2005/12/16(金) 09:18:55テンプレも読まないで、スレ違いの質問をする人が多くて非常に困っています。
どうかよろしくお願いします。
0738キングボンビー
2005/12/16(金) 10:10:56ただしa b cはそれぞれ任意の定数とする(なるべくは整数で)
a=0 とa=0でない場合に分ける。またa=b=0の場合は解なしと表示する
a=0でない場合は判別式Dを用いて実数解、虚数解、二重解にわけて解の公式を用いて
解を表示する
↑というプログラムを作りたいのですがC言語がまったくわかりません。
誰か作ってくれませんか??
0739デフォルトの名無しさん
2005/12/16(金) 10:12:41あれだろ。
プログラムに興味も無いのに必修でC言語とかあるから...
もちろん周りも類友なんだろ。
で、内輪で解決できなくて...
そんで2chのスレ検索『C言語』でしてここに来る。
誰も最初に『宿題』でスレ検索しようなんて考えるわけないからな。w
0740デフォルトの名無しさん
2005/12/16(金) 10:13:24じゃ、とりあえずC言語の本読むとこから初めてみようか?
0741デフォルトの名無しさん
2005/12/16(金) 10:19:49スレ違い。
C/C++の宿題を片付けます 55代目
http://pc8.2ch.net/test/read.cgi/tech/1134128493/
0742デフォルトの名無しさん
2005/12/16(金) 10:23:200743デフォルトの名無しさん
2005/12/16(金) 10:59:12しかしここ数十レス、スレ違いの質問しかねぇな…。
0744デフォルトの名無しさん
2005/12/16(金) 11:06:530745デフォルトの名無しさん
2005/12/16(金) 11:07:260746デフォルトの名無しさん
2005/12/16(金) 11:14:160747デフォルトの名無しさん
2005/12/16(金) 11:29:42なんかあったの?
0748デフォルトの名無しさん
2005/12/16(金) 11:41:26二重三重にスレ違い。勝手にそのサイトの管理者に聞いてくれ。
0749デフォルトの名無しさん
2005/12/16(金) 12:30:20小学生か?
何が楽しいのか知らんが
いい加減やめとけ。
(って反応するのが楽しいんだろうな)
0750デフォルトの名無しさん
2005/12/16(金) 12:32:080751デフォルトの名無しさん
2005/12/16(金) 13:27:180752ももの
2005/12/16(金) 15:00:550753デフォルトの名無しさん
2005/12/16(金) 16:26:02計算がわかりません
0754デフォルトの名無しさん
2005/12/16(金) 16:32:55>>693
0755デフォルトの名無しさん
2005/12/16(金) 16:33:482%3 =2 2÷3=0あまり2
3%3 =0 3÷3=1あまり0
3%4 =3 3÷4=0あまり3
10%3 =1 10÷3=3あまり1
0756デフォルトの名無しさん
2005/12/16(金) 17:47:18なんで一個だけ除数が4なんだよびっくりするじゃないか
0757デフォルトの名無しさん
2005/12/16(金) 17:59:20あまりって事ですね
ありがとうございました。
0758デフォルトの名無しさん
2005/12/16(金) 18:50:130759デフォルトの名無しさん
2005/12/16(金) 18:59:130760デフォルトの名無しさん
2005/12/16(金) 20:07:080761デフォルトの名無しさん
2005/12/16(金) 21:01:500762デフォルトの名無しさん
2005/12/16(金) 21:31:15どうかよろしくお願いします。
1バイト目を0x82固定、2バイト目に0x5Fを足したらヌルポがぬれぽになっちゃいました。
0763デフォルトの名無しさん
2005/12/16(金) 21:46:03単純に足すのではなく、テーブルで持つしか。
カタカナとひらがなでは文字数違うしね。
0764デフォルトの名無しさん
2005/12/16(金) 21:51:51作ってきます。
ありがとうございました。
0765デフォルトの名無しさん
2005/12/16(金) 22:26:140xA1 0xA1 と
0x20 0x20 があるみたい。
これ両方全角スペースで考えていいのかな?
0766デフォルトの名無しさん
2005/12/16(金) 22:34:560767デフォルトの名無しさん
2005/12/16(金) 22:36:490768デフォルトの名無しさん
2005/12/16(金) 22:42:56カタカナには 0x837F の空白があるからだな。
これに対処すればいけるはず。
ただ、ヴ、ヵ、ヶはひらがなにないので気をつけるよう。
0769デフォルトの名無しさん
2005/12/16(金) 22:52:29これはカタカナですらない。
0770デフォルトの名無しさん
2005/12/16(金) 22:58:580771デフォルトの名無しさん
2005/12/16(金) 23:11:570772デフォルトの名無しさん
2005/12/16(金) 23:27:280774デフォルトの名無しさん
2005/12/16(金) 23:38:05オモシロス
0775765
2005/12/16(金) 23:42:120776765
2005/12/16(金) 23:56:480777デフォルトの名無しさん
2005/12/17(土) 00:31:01double d;
int i, j;
という変数があるとき、double 型で d * i / j という演算をやるとして、キャストは必要になりますか?
つまり、以下の2つの書き方があったとして:
1) double answer = d * i / j;
2) double answer = d * (double)i / j;
2) なら勿論 double 型で演算できますが、1) のような書き方でもこれと同じ意味になるのでしょうか?
それとも環境によっては i / j の部分が先に int 型で演算されて違う結果になってしまったりしますか?
一応、うちの環境(Linux + GCC 3.3.2)で試した限りでは両者とも同じ結果になりました。
0778777
2005/12/17(土) 00:40:18テストプログラム自体が間違ってて、直してみたところ違う結果になりました。
つまりキャストは必要みたいですね。
0779デフォルトの名無しさん
2005/12/17(土) 00:56:20必要ありません。
0780デフォルトの名無しさん
2005/12/17(土) 08:06:48個人的には結構面白いサッカーゲームです。
一人用ですが。
某雑誌に掲載されてた記事
「一試合3分から楽しめる本格派サッカーゲーム。
グラフィックは簡素だが、やり込み派にはオススメしたい一本。
こだわりのカスタマイズが面白い。
簡素なグラフィックとは逆に、戦術面は細部まで作りこまれている。
システムやプレスのON/OFFから、なんと選手一人一人のポジショニングまで設定可能だ。
こだわりのチーム作りが楽しめる。」
フリーゲームなんですが、管理人がいないらしいので、
サッカー好きでプログラムのできる方居たら助けてやってください。
このゲームで対戦できたら面白いと思うので
RolePlaying Eleven
http://ime.st/www.geocities.co.jp/Bookend-Kenji/2279/
最近立った2chスレ
http://game10.2ch.net/test/read.cgi/netgame/1134392861/
0781デフォルトの名無しさん
2005/12/17(土) 12:32:560782デフォルトの名無しさん
2005/12/17(土) 12:35:38もしかしてこう書いたんじゃないの?
3) double answer = d * (i / j);
0783デフォルトの名無しさん
2005/12/17(土) 12:52:29それは大変失礼な言い分だ。糞なのはShiftJISだ。なぜなら、JISで平仮名とカタカナは隣の区の同じ点に存在している。
0784デフォルトの名無しさん
2005/12/17(土) 13:09:09スマソ。そういう意味では確かにそうだ。
しかし、
>ぁ あ ぃ い ぅ う ぇ え ぉ お か が き ぎ く ぐ け げ こ ご
こういう並べ方するセンスが分からん
0785デフォルトの名無しさん
2005/12/17(土) 13:15:540786デフォルトの名無しさん
2005/12/17(土) 18:00:120787デフォルトの名無しさん
2005/12/17(土) 18:38:12char型でJISコードを使う環境ならchar型にキャストしてしまえばよい。
0788デフォルトの名無しさん
2005/12/17(土) 20:41:38まず「JIS コード」が何なのか…が解ってりゃ、人に訊かないか。
>>787
2バイトコードだったらどうする気だ。
0789デフォルトの名無しさん
2005/12/17(土) 21:00:45>2バイトコードだったらどうする気だ。
charの配列に
0790デフォルトの名無しさん
2005/12/17(土) 22:33:58JIS からその環境の文字コードに変換できればあとは特に問題ないはず。
0791デフォルトの名無しさん
2005/12/17(土) 22:37:14K&R見てもよく分からん
再帰使ってるからかな
0792デフォルトの名無しさん
2005/12/17(土) 22:38:04K&R見てもよく分からん
最後に2回再帰使ってるところが
0793デフォルトの名無しさん
2005/12/17(土) 23:02:39QuickSortのAlgorithmが分かりにくいというならごまんとある解説ページを片っ端から読め
つーか、俺から見ればQuickなんかよりMergeの方が分かりにくいわけだが(何故Quickと同程度のオーダーなのかという点が)
0794デフォルトの名無しさん
2005/12/17(土) 23:19:58・数列をある値より大きいブロックと小さいブロックに分割
・それぞれのブロックを同様に分割
これだけじゃん。
0795デフォルトの名無しさん
2005/12/18(日) 00:10:27漸化式考えればすぐわからないか?
きっかり半分に出来た時は
Tn) = T(n/2) + T(n/2) + O(n)
だろ?
きっかり半分に出来なくても同じ。
つか記号が出せなくて書けねぇ。
0796デフォルトの名無しさん
2005/12/18(日) 00:21:49あぁなるほどな。�dクス
計算量について説明してある所もあったが、うだうだ説明されるより
そう書いてくれた方が分かりやすいな
0797デフォルトの名無しさん
2005/12/18(日) 02:48:53この状態でAとの通信で受け取ったソケットはbuff1に格納、Bから受け取ったソケットはbuff2に格納という具合にしたいのですが
クライアントAとBを区別するにはどうすればいいでしょうか?
0798デフォルトの名無しさん
2005/12/18(日) 02:53:01WindowsならWindowsプログラミング質問スレへどうぞ
UNIXならUNIXプログラミング質問スレへどうぞ
0799デフォルトの名無しさん
2005/12/18(日) 04:09:22UDP なら recvfrom() 使えば?
TCP ならもう考える必要はねえ。accept() した時に分かる。
0800デフォルトの名無しさん
2005/12/18(日) 04:53:46アフォか
ネットワークならネットワーク質問スレだろ
0801デフォルトの名無しさん
2005/12/18(日) 14:22:353行2列の行列を表現する浮動小数点型2次元配列bの宣言文はどう書けばいいんでしょうか?
0802デフォルトの名無しさん
2005/12/18(日) 14:26:010803デフォルトの名無しさん
2005/12/18(日) 14:34:10ありがとうございます!
0804デフォルトの名無しさん
2005/12/18(日) 14:37:570805デフォルトの名無しさん
2005/12/18(日) 14:46:43double b[3][2];
double c[2][2];
c = a * b;
なんて事はしないでくれよ。
0806デフォルトの名無しさん
2005/12/18(日) 15:03:22ってメカニズムって何だ・・・。関数はfuncでいいんだよな?
0807デフォルトの名無しさん
2005/12/18(日) 16:19:25その文字列をchar配列に入れなさい、
というのですがどうすればいいのでしょう
0808デフォルトの名無しさん
2005/12/18(日) 16:28:350809デフォルトの名無しさん
2005/12/18(日) 16:32:05宿題なら宿題スレに行けば誰かが答えてくれるかもしれない。
0810デフォルトの名無しさん
2005/12/18(日) 18:06:08さっそくですが質問させてください。
データファイルの拡張子が.TTPとして.TTPのファイルだけを次々に読み込ませることはできるのでしょうか?
ファイル名には規則性はありません。
例えば
001.TXT no.TTP yes.TTP 23.TTP tarou.NAM
というようにファイルがある場合、no.TTPとyes.TTPと23.TTPだけのデータを読み込みたいんです。
いかがでしょうか?
0811810
2005/12/18(日) 18:07:39TTPのファイルはテキストデータです。
0812デフォルトの名無しさん
2005/12/18(日) 18:12:01処理系依存
0813デフォルトの名無しさん
2005/12/18(日) 18:15:37OSはwindowsでコンパイラはboland c++です。
可能であれば方法をお教えください。
0814デフォルトの名無しさん
2005/12/18(日) 18:16:18Win32なら
FindFirstFile FindNextFile
ってAPIがあるが、他は知らん。処理系によって似たような関数があるとは思う。
ヒント:ワイルドカード
0815デフォルトの名無しさん
2005/12/18(日) 18:16:21int *p;
とするのはポインタをint型変数の特殊なもの
っていうイメージが強いですが
自分は
int* p;
のほうが意味的に分かりやすいです
でも、複数宣言したいときは
int *p1,*p2,*p3;
のように書かなければならないです。
これは美しくないと思われますが、
やはり
int *p;
で統一するのが一般的でしょうか?
0816デフォルトの名無しさん
2005/12/18(日) 18:18:57int* d,e,f; //全部ポインタ
違いを理解するだす。
0817デフォルトの名無しさん
2005/12/18(日) 18:19:11Win32のFindFirstFile()、FindNextFile()、WIN32_FIND_DATA
これで「調べて」分からなければスレ違いだからここで。
Win32API質問箱 Build38
http://pc8.2ch.net/test/read.cgi/tech/1133798345/
0818デフォルトの名無しさん
2005/12/18(日) 18:20:07int* d,e,fはポインタdとint型のe,fだろ
0819デフォルトの名無しさん
2005/12/18(日) 18:22:31int* d,e,f;
ってdだけポインタ?じゃないの?
0820デフォルトの名無しさん
2005/12/18(日) 18:23:25int *p;
になっているのでこちらが一般的であるが。
int* p;
が意味的に分かりやすいのは同意で、私もそう書いている。
同じように複数のときはかっこ悪いとも思う。
ゆえに激しい議論が飛び交うと予想される。どぞ↓
0821デフォルトの名無しさん
2005/12/18(日) 18:25:06>>816みたいな間違いを犯さないためにint *p;がAcceleratedC++でも推奨されてる
0822デフォルトの名無しさん
2005/12/18(日) 18:25:17とかキャストするからな
0823815
2005/12/18(日) 18:26:12int* d,e,f;
みたいに宣言すると
e,fはint型になった。
コードに
int *d,*e,*f;
と書いてるところと
int* a;
って書いてるとこがあったら
統一感ないじゃん?
だったら、全部
int *a;
とかで統一するのが一般的なのかな?
っていう質問
0824815
2005/12/18(日) 18:28:05おれは頭の中で既に激しい議論になってます><
客観的に多数派を教えてください
0825デフォルトの名無しさん
2005/12/18(日) 18:32:220826デフォルトの名無しさん
2005/12/18(日) 18:32:47aもd, e, fもみんなauto変数だ。
0827820
2005/12/18(日) 18:37:21私自身は>>820での書き方で、なんら問題の無い環境にいる。
int * p;
気分に合わせてこう書く日もあるが、無問題。
環境に合わせるべきであると思う。
0828デフォルトの名無しさん
2005/12/18(日) 18:37:261度に複数の変数を宣言するほうが悪い。
そんな俺はint *p;派。
0829デフォルトの名無しさん
2005/12/18(日) 18:42:02#define intp int *
ではなく
#define intp int*
って「美学」があったんだろ
typedef と #define を同一視したいらしいが
俺に言わせれば糞、くだらねー
>>824
多数派なんて現場によりけり
仮に君が地球規模の「多数派」を知ることができたとして
現場の空気を無視してそれをわめくと叩き出されるだけだぜ
いい悪いじゃないんだよ
コーディングスタイルはプロトコルであってマルチ対応できない奴は低機能ってだけだ
0830デフォルトの名無しさん
2005/12/18(日) 18:42:44たしかにポインタだってauto変数だ。>>816 は勉強やり直し。
0831デフォルトの名無しさん
2005/12/18(日) 18:48:14int *p;の方が分かりやすくなる理由を脳内でこじつけたらいいじゃないか
0832815
2005/12/18(日) 18:51:14どっちでもいいことが分かったので
適当に書くことにするよ。
その適当に美しさを見出せばいいんじゃまいか
0833815
2005/12/18(日) 18:53:05こじつけはよくない
本質が分からなくなったら本末転倒じゃね?
おれは、柔軟に対応できるようになるよ
0834デフォルトの名無しさん
2005/12/18(日) 18:56:49まあな
ただし、数学用語の「適当」な
0835デフォルトの名無しさん
2005/12/18(日) 18:58:57int* t[5];
で、いいジャマイカ。
0836デフォルトの名無しさん
2005/12/18(日) 19:14:580837815
2005/12/18(日) 19:23:05なる。
ただ名前が分かりにくいな。
柔軟に対応でFA
0838デフォルトの名無しさん
2005/12/18(日) 19:23:08int *p;は「*pがint型になる」と読めるという利点がある。
0839デフォルトの名無しさん
2005/12/18(日) 19:26:220840デフォルトの名無しさん
2005/12/18(日) 19:28:33実際にint型になるわけじゃないから困る
0841デフォルトの名無しさん
2005/12/18(日) 19:29:08なんて書く奴は得意げな顔して
#define BEGIN {
#define END }
とかやっちゃうタイプだな。
0842デフォルトの名無しさん
2005/12/18(日) 19:32:34?
pが適切なところを指していれば838だろ。
0843デフォルトの名無しさん
2005/12/18(日) 19:33:250844デフォルトの名無しさん
2005/12/18(日) 19:33:29ちなみにC++作ったStroustrup氏はint* p;派だそうな。
0845デフォルトの名無しさん
2005/12/18(日) 19:35:13言っちゃなんだけど禿はかなりアク強い
0846デフォルトの名無しさん
2005/12/18(日) 19:37:24センスの悪い奴はソースも汚い。
0847デフォルトの名無しさん
2005/12/18(日) 19:41:340848デフォルトの名無しさん
2005/12/18(日) 19:42:530849デフォルトの名無しさん
2005/12/18(日) 20:19:490850デフォルトの名無しさん
2005/12/18(日) 22:04:12と書くと、int型の変数が利用できますが、
int *a;
と書くと、int型のポインタaが示す先の&aはOSからきちんと割り当てられているのでしょうか?
0851デフォルトの名無しさん
2005/12/18(日) 22:06:24そんなわきゃない。
だから、int* a;が好まれる。
0852デフォルトの名無しさん
2005/12/18(日) 22:09:55はいともいいえとも答えられる曖昧な質問だ。
int *a;という宣言があったとして、
aの指す先*aはそのままではどこも指していない。
自分でどこかの変数へのポインタやどこかから確保したメモリへのポインタを代入する必要がある。
一方でaも一種の変数であることには違いないのだから&aとするとaへのポインタが得られる。
これはint **型の変数へ代入して有効に使うことができる。
0853850
2005/12/18(日) 22:45:51早速のレスありがとうございます。
ポインタを宣言しただけではどこかを指しているはずがないので
int i;
int *ptr;
ptr = &i;
などと書いて、自分で何を指すか指定しないといけないわけですね。
0854850
2005/12/18(日) 23:47:45int *a[5]; と書くと、
どのような型ものがいくつ確保されるのでしょうか?
まったく見当がつきません。
0855デフォルトの名無しさん
2005/12/18(日) 23:50:330856デフォルトの名無しさん
2005/12/19(月) 00:06:33試してみるのが一番速かったりする
0857デフォルトの名無しさん
2005/12/19(月) 00:19:06int* a[5];
と書きたいんだ
>>854
int a[5];
はどういう意味?
おk
じゃあ
int* a[5];
は?
おk
int *a[5];
ほーら分かった。
よな?
0858デフォルトの名無しさん
2005/12/19(月) 00:32:340859デフォルトの名無しさん
2005/12/19(月) 01:28:29TeXもPerlも汚いが偉大だ
0860デフォルトの名無しさん
2005/12/19(月) 01:33:53ということは分かった。
0861デフォルトの名無しさん
2005/12/19(月) 01:54:05君の事だなw
0862デフォルトの名無しさん
2005/12/19(月) 02:06:48int i; /* コメント */
int j; /* コメント */
int k; /* コメント */
int* p; /* コメント */
int* q; /* コメント */
int* r; /* コメント */
でいいじゃん。
0863デフォルトの名無しさん
2005/12/19(月) 02:12:480864デフォルトの名無しさん
2005/12/19(月) 02:15:56一人って確定なんだw
0865デフォルトの名無しさん
2005/12/19(月) 04:33:56int * 型の配列が5要素できる。
0866デフォルトの名無しさん
2005/12/19(月) 06:03:13誕生石: 生まれ月に因んで定めた宝石。起こりはユダヤ教の祭司の胸板の12の宝石によるとも、
新約聖書ヨハネ黙示録の「新しきエルサレムの東西南北12の門の12の石垣の基礎石」によるとも言われる。
1月ガーネット、2月アメジスト(紫水晶)、3月アクアマリーン・ブラッドストーン、4月ダイヤモンド、5月エメラルド、
6月真珠・ムーン‐ストーン(月長石)、7月ルビー、8月サードニックス・かんらん石、9月サファイア、10月オパール・トルマリン、
11月トパーズ、12月トルコ石・ラビス‐ラズリ。(1912年アメリカ宝石同業組合で決めたもの) 広辞苑による
上記データに基づいて、誕生月をキーボードから入力しその人の「誕生石」を画面に出力するプログラムを作れ。
条件 switchを使う。
0867デフォルトの名無しさん
2005/12/19(月) 06:13:33エラーメッセージは
warning: no newline at end of file
です。
pow関数を使ったのですが、それがいけないのでしょうか?
ごく簡単なプログラムなので、それくらいしか見当がつきません。
#include <math.h>
はちゃんと書いてます。
0868デフォルトの名無しさん
2005/12/19(月) 06:14:420869デフォルトの名無しさん
2005/12/19(月) 06:15:22C/C++の宿題を片付けます 55代目
http://pc8.2ch.net/test/read.cgi/tech/1134128493/
0870デフォルトの名無しさん
2005/12/19(月) 07:02:28実行ファイルが作成されたか要確認。
0871デフォルトの名無しさん
2005/12/19(月) 07:22:44char buf[600];
char data[30 + 1];
sprintf(data, "000000000000000000000000000001");
sprintf(buf, "aaaaaa(・・・長い文字列・・・)%sbbbbbb(・・・長い文字列・・・)", data);
とすると、bufの中身が242バイトで切られてしまいます。
長い文字列とは言っても600バイトをオーバーするほどではありません。
sprintfの制限とかがあるのでしょうか。printfでコンソールに出力することは
できました。
Visual C++ 6.0です。
よろしくお願いします。
0872871
2005/12/19(月) 07:28:050873デフォルトの名無しさん
2005/12/19(月) 08:43:08っていう問題があるんですが、不動小数点数って浮動小数点数のことですよね・・?
この問題の答えがよくわからないのですが、どうなるんでしょうか?
0874デフォルトの名無しさん
2005/12/19(月) 08:55:430875デフォルトの名無しさん
2005/12/19(月) 10:20:00検索能力がない
アフォが多いだけじゃね?
0876デフォルトの名無しさん
2005/12/19(月) 10:40:14返却値整数型...int型のreturn x;で終わる関数
問題が難しいだけで内容はたいしたことないよ
int型関数で引数にdouble型のbとcを受け取る関数のヘッダを書く。一行。
0877デフォルトの名無しさん
2005/12/19(月) 10:41:080878デフォルトの名無しさん
2005/12/19(月) 12:14:0105/09/20,07:10:00,000,020,+00005
というデータが数行に渡ってCSVファイルに保存されているとき
一行をfgets(s,sizeof(s),fp);でchar型配列sに保存しsscanfで各パラメータを配列に入れようとしたんですが、
うまくいきません。
アドバイスおねがいします 。
パラメータは
05/09/20 をchar型配列 date[80]
07:10:00 をchar型配列 time[80]
000 を int配列 num1
020をint配列 num2
+00005をchar配列val[80]
に格納しようと考えております。
0879デフォルトの名無しさん
2005/12/19(月) 12:17:17自分はどうやったのか
を書かないとね。
丸投げと変わらないじゃまいか。
それでも答えてくれる親切な人も
いるからダメとはいわない
0880デフォルトの名無しさん
2005/12/19(月) 12:18:320881デフォルトの名無しさん
2005/12/19(月) 12:56:14> 返却値整数型...int型のreturn x;で終わる関数
「返却値整数型関数」とは書いているが、
int とは書かれていないが?
整数型には int の他にも
signed char (unsigned char)
signed short (unsigned short)
signed long (unsigned long)
などがあるわけだが…。
> 関数のヘッダ
どこの用語ですか?
# プロトタイプ宣言なら知っているがな
0882デフォルトの名無しさん
2005/12/19(月) 13:50:560883デフォルトの名無しさん
2005/12/19(月) 14:26:30「funcの関数頭部を書け。」 という問いなのだから
頭部=ヘッダで、これも間違ってはいない。
このような質問にはなるべく分かり易く答えることが大切で
細かいことを言っても混乱させるだけ。
0884デフォルトの名無しさん
2005/12/19(月) 14:41:39ご意見ごもっともです。
#include<stdio.h>
int main(void)
{
char buf[80]="05/09/20,07:10:00,000,020,+00005";
char date[80],time[80],mode[80],val[80];
int num1,num2;
sscanf(buf, "%s,%s,%d,%d,%s", date, time, & num1, & num2, val);
printf("%s.%s.%3d.%3d.%s", date, time, num1, num2, val);
return 0;
}
最初は↑のようにしておりましたところ、date[80]にすべての文字列が入ってしまい
こまっておりました。
>>780
ありがとうございます。ご指摘のとおりにしたらできました!
よろしければ%79[^,]と%79sの意味を教えてください。
0885デフォルトの名無しさん
2005/12/19(月) 14:44:27その前に、このスレで扱う話かどうかを検討してくれ。
つか、「不動小数点」へのツッコミはなしか…
>>884
>よろしければ%79[^,]と%79sの意味を教えてください。
図に乗らない。
0886デフォルトの名無しさん
2005/12/19(月) 15:46:41できるならどうすればいいんでしょうか?
0887デフォルトの名無しさん
2005/12/19(月) 15:48:27\nと,
0888デフォルトの名無しさん
2005/12/19(月) 16:13:57C の標準関数ではできないので、別スレへどうぞ。
0889デフォルトの名無しさん
2005/12/19(月) 16:20:230890デフォルトの名無しさん
2005/12/19(月) 16:34:57どのスレだとよさそうですか?
0891デフォルトの名無しさん
2005/12/19(月) 16:36:19OSによる。次のスレで明示せよ。
【初心者歓迎】C/C++室 Ver.24【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1131691023/
0892デフォルトの名無しさん
2005/12/19(月) 16:39:34んなもんテンプレ化して>>2にでも入れとけドアホ
0893デフォルトの名無しさん
2005/12/19(月) 17:08:310894デフォルトの名無しさん
2005/12/19(月) 17:21:48時間の流れは速いな
0895デフォルトの名無しさん
2005/12/19(月) 20:52:010896デフォルトの名無しさん
2005/12/19(月) 20:57:180897デフォルトの名無しさん
2005/12/19(月) 22:03:080898デフォルトの名無しさん
2005/12/19(月) 22:20:53スレタイが読めない誰かさんたちみたいのが集まっている(≠集まる)スレだよw
0899デフォルトの名無しさん
2005/12/19(月) 22:38:06if(fp1){
for文
}
fclose(fp1);
という分があるのですがif(fp1)とはどういうことですか?
*fp1でfopenできない場合はfp1を閉じるってことですか?
0900デフォルトの名無しさん
2005/12/19(月) 22:43:28if (fp1)はif (fp1 != 0)と同じ。
fopenはファイルオープンができなかった場合ヌルポインタを返す。
その場合は逆にオープンできたらforを行うということになる。
0901デフォルトの名無しさん
2005/12/19(月) 22:49:19確かに変なコードだな
FILE *fp1=fopen("aaa.txt","r");
if(fp1){
for文
fclose(fp1); /* FOO */
} /* BAR */
FOO と BAR がこうなっていれば意味は通るが
0902デフォルトの名無しさん
2005/12/19(月) 22:51:22if((fp=fopen("aaa.txt","r"))!=NULL){
for文
}
fclose(fp1);
とかすればいいのに
0903デフォルトの名無しさん
2005/12/19(月) 22:54:43void main() {
char *a,*b;
*a="1111"; /* NG */
b="2222"; /* OK */
}
これは、*a は aが指す実体。bは アドレス。
右辺に文字列リテラルを記述した場合("1111")は、先頭アドレスをあらわす。
という理解でよろしいでしょうか。
0904デフォルトの名無しさん
2005/12/19(月) 22:56:29いいよ
でも、*aだと'1'しか表さないよ
0905デフォルトの名無しさん
2005/12/19(月) 23:08:07俺は901のスタイルのほうが好きだよ。それだけだけど。
0906デフォルトの名無しさん
2005/12/19(月) 23:09:15ありがとうござます。
aの代入は型があわないためメモリフォルトでしょうかね。
0907デフォルトの名無しさん
2005/12/19(月) 23:10:32いや、型があわないからコンパイルエラーだ。
0908デフォルトの名無しさん
2005/12/19(月) 23:16:12ありがとうござます。Linuxのgcc だと警告で*.oは作成されるようです。
警告を無視することは危険ですね。
0909デフォルトの名無しさん
2005/12/19(月) 23:24:09警告とエラーの区別がついてない
誰かさんの真似しちゃだめだよ
0910デフォルトの名無しさん
2005/12/19(月) 23:30:40ヌルポで fclose() するのは危険だったような… 自分の記憶が怪しい
0911デフォルトの名無しさん
2005/12/19(月) 23:56:29free()は無問題
0912デフォルトの名無しさん
2005/12/20(火) 00:04:07俺は fclose のがきれいだと思う
セットアップしてないポインタがぬるぽとは限らないから
0913デフォルトの名無しさん
2005/12/20(火) 00:30:46int test( void ) {
unsigned long x,y,z;
x=0xFFFFFFFF;
y=32;
z=(x>>y);
printf("%X",z);
getchar();
return 0;
}
でzの値が0にならないのは何故なんでしょうか?
y=31のときはz=1なのに??
0914デフォルトの名無しさん
2005/12/20(火) 00:32:120915デフォルトの名無しさん
2005/12/20(火) 00:34:58そういうもんですかー。
何かスッキリしない。
0916デフォルトの名無しさん
2005/12/20(火) 00:40:130917デフォルトの名無しさん
2005/12/20(火) 00:40:390918デフォルトの名無しさん
2005/12/20(火) 00:42:16一般的な処理系なら数値が変わらないんじゃないの
0919デフォルトの名無しさん
2005/12/20(火) 00:44:38z=0xFFFFFFFFで値がかわりません。
0920デフォルトの名無しさん
2005/12/20(火) 00:47:19VCで実行してるんですが
(x>>y)の部分をドラッグして反転させて
マウスカーソルを合わせてみると
この部分は 0 と表示されます。
0921デフォルトの名無しさん
2005/12/20(火) 00:48:03(unsigned long )(-1)
0922デフォルトの名無しさん
2005/12/20(火) 00:49:53もしかして
z=(x>y);
になってない?
0923922
2005/12/20(火) 00:50:470924デフォルトの名無しさん
2005/12/20(火) 00:51:49どんな翻訳環境と実行環境でそうなったの?
0925922
2005/12/20(火) 00:52:14寝るよ・・・orz
0926デフォルトの名無しさん
2005/12/20(火) 00:52:39yを31,32,33,63,64
にしたりして見ればわかるかもしれないが下5bitしか見てない。
y=0xFFFFFFFF で逐次処理してたら泣けるからだ
ものによってはy>31で何か処理しているものもあるかもしれない
intが64bitの場合も下6bitしか見てないものもあるだろう
0927デフォルトの名無しさん
2005/12/20(火) 00:53:510928デフォルトの名無しさん
2005/12/20(火) 00:53:520929デフォルトの名無しさん
2005/12/20(火) 00:54:34>その動作は、未定義とする。
from C99 6.5.7 ビット単位のシフト演算子
0930デフォルトの名無しさん
2005/12/20(火) 00:54:340931デフォルトの名無しさん
2005/12/20(火) 00:55:41何も起きないのが、仕様で保証されてる
0932デフォルトの名無しさん
2005/12/20(火) 00:55:56http://www.jisc.go.jp/app/pager?%23jps.JPSH0090D:JPSO0020:/JPS/JPSO0090.jsp=&RKKNP_vJISJISNO=X3010
0933デフォルトの名無しさん
2005/12/20(火) 00:57:49>(略) ptrが空ポインタの場合、なにもしない。
from C99 7.20.3.2 free関数
0934デフォルトの名無しさん
2005/12/20(火) 00:58:02何となく合点がいきました。
ありがとう。
0935デフォルトの名無しさん
2005/12/20(火) 00:59:130936デフォルトの名無しさん
2005/12/20(火) 01:02:02ってどいうい事?
0937デフォルトの名無しさん
2005/12/20(火) 01:02:490938デフォルトの名無しさん
2005/12/20(火) 01:02:58格上げ
0939デフォルトの名無しさん
2005/12/20(火) 01:03:090940デフォルトの名無しさん
2005/12/20(火) 01:05:55(x>>y)0x00000000unsigned long
z0xffffffffunsigned long
なんですよね。何か気持ち悪い。。
0941デフォルトの名無しさん
2005/12/20(火) 01:07:0732bitなら32以上、ってことでは?
0942デフォルトの名無しさん
2005/12/20(火) 01:08:06鼻から悪魔が飛び出してもっと気持ち悪い。
0943デフォルトの名無しさん
2005/12/20(火) 01:17:12ちなみに、x86では、shr a,bのbに%32を自動でかけるとかなんとか。
VCのクイックウォッチはインタプリタだから、この制限が適用されないだけ。
0944デフォルトの名無しさん
2005/12/20(火) 01:23:260945デフォルトの名無しさん
2005/12/20(火) 01:30:43大体そんなにシフトすることがなかったからなあ。32ビット以下の環境では。
0946デフォルトの名無しさん
2005/12/20(火) 01:33:250947デフォルトの名無しさん
2005/12/20(火) 02:18:49__int128 というのは使えますか。
0948デフォルトの名無しさん
2005/12/20(火) 02:20:140949デフォルトの名無しさん
2005/12/20(火) 02:22:15> VC2005は64bitアプリ対応だそうで
これはあくまで64bit環境で動くアプリを「作ることができる」のであって、
作ったアプリがひとりでに64bitで動き出すわけではない。で、
> int が64bitなんでしょうが
これもありえない。
0950デフォルトの名無しさん
2005/12/20(火) 02:25:43Stdくらいしか買えねーよ!
0951デフォルトの名無しさん
2005/12/20(火) 02:28:36今まで
int* a = ...;
int b = (int)a; /* (今までは32bitどうしで持ちこたえてた場合が多かったが…) */
みたいな糞コードをくさるほど見てきたが、これから大丈夫なんだろうか…
0952デフォルトの名無しさん
2005/12/20(火) 02:32:1164ビットアプリにしたいのなら、それなりに修正は必要かと。
0953デフォルトの名無しさん
2005/12/20(火) 05:26:45それは K & R の時代から普通
0954デフォルトの名無しさん
2005/12/20(火) 05:49:49今までと違う所なんだよな。
今まではレジスタサイズ変わろうが、
int がレジスタサイズと同じだったから何とかなった。
まあ、ちゃんとやってる人なら
C99 になる前から intptr_t みたいなのを定義して
使ってるんだろうけど、
別の制約で使えない可能性もなきにしもあらず、か。
0955デフォルトの名無しさん
2005/12/20(火) 10:07:22このプログラムに、関数を使ってノードを削除する機能を付け加えたいのですが、
どのようなプログラムを書けばいいのかわかりません。どなたか教えてください。
0956デフォルトの名無しさん
2005/12/20(火) 10:39:050957デフォルトの名無しさん
2005/12/20(火) 10:44:30勉強中の俺には参考になる
struct[0]を消すときはそこにstruct[1]を代入
struct[1]にstruct[2]を代入
for(i=0;i<入力済み構造体数li++){
構造体[i]=構造体[i+1];
}
をやればいいんじゃね?
0958955
2005/12/20(火) 11:12:26学校の課題なので、宿題スレで質問することにします。
0959デフォルトの名無しさん
2005/12/20(火) 14:57:53gmtime(3)のような関数は内部でtm構造体を作って、
その構造体へのポインタを渡していると考えてもいいんでしょうか?
0960デフォルトの名無しさん
2005/12/20(火) 15:23:58http://www.linux.or.jp/JM/html/LDP_man-pages/man3/gmtime.3.html
>返り値は静的に確保された構造体を指しており
0961デフォルトの名無しさん
2005/12/20(火) 15:27:29ありがとうございます。見逃していました。
0962デフォルトの名無しさん
2005/12/20(火) 18:20:17void test0(void)
{
a = b = 0;
}
をコンパイルした時、
b = 0;
a = b;
になるコンパイラって正しいんでしょうか?
b = 0;
a = 0;
になることを期待してて、bは実際には書き込んだ値と違う値が読み出される
ハードウェアで、aに0でないヘンな値が入ってるらしいとハマりました。
実装依存ってやつでしょうか…?
0963デフォルトの名無しさん
2005/12/20(火) 18:24:34=は右結合なので
b = 0;
a = b;
が正しい
0964デフォルトの名無しさん
2005/12/20(火) 18:26:00> a = b = 0;
は「a = ( b = 0 );」と言うこと。
つまり、式「b=0」の結果が代入されるのであって、
> b = 0;
> a = 0;
とは等価ではない。
a、b共に0を代入したいのなら、
> b = 0;
> a = 0;
と書くのが正解。
0965デフォルトの名無しさん
2005/12/20(火) 18:46:080966デフォルトの名無しさん
2005/12/20(火) 18:49:20何のハード?
キモ杉
0967デフォルトの名無しさん
2005/12/20(火) 18:50:01普通に使ってるじゃん
int main(int argc; char **argv)
{
}
とか
int *a[];
とか
0968デフォルトの名無しさん
2005/12/20(火) 18:51:180969デフォルトの名無しさん
2005/12/20(火) 19:08:160970デフォルトの名無しさん
2005/12/20(火) 19:08:41ポインタを理解できていない香具師のいいわけだ。
その証拠に、「トリプルポインタは自信ないですけどダブルポインタならばっちりです」などと言い出す。
0971デフォルトの名無しさん
2005/12/20(火) 19:10:06あるのは配列の配列だけだ。
0972デフォルトの名無しさん
2005/12/20(火) 19:11:220973デフォルトの名無しさん
2005/12/20(火) 19:11:550974デフォルトの名無しさん
2005/12/20(火) 19:14:120975962
2005/12/20(火) 19:24:09ハードウェアは LPC2214 という ARM7 CPU で、問題のレジスタは
Timer0 の Interrupt Register というものです。
http://www.semiconductors.philips.com/acrobat/usermanauls/UM_LPC2114_2124_2212_2214_2.pdf
この CPU に関して言えば、読み出しと書き込みで値が異なるのは
当り前にある様です。
>>964
>は「a = ( b = 0 );」と言うこと。
>つまり、式「b=0」の結果が代入されるのであって、
その通りだと思うのですが、件のコンパイラ(arm-elf-gcc 4.0.0) は
b=0 をやったあと、0 はレジスタに残ってるのに、わざわざ b を
読み出してきてその値を a に代入するということをやっていました。
volatile だとこうなる方が普通なんでしょうか。
別の言い方をすると、「「b=0」の結果」とは、右辺の 0 とは限らず、
代入後に左辺の変数を読み出すという実装も有り得るということでしょうね。
結果を使わない場合はもちろん読み出さないので、私には不自然に思えますが、
言語として仕様を満たしてない訳ではないということでしょうか。
別の CPU 用の別のコンパイラ(YCSH 4.07)で試してみると、普通に
b=0;
a=0;
というコードが出ていました。
とにかく実装依存と思うことにし、今後気をつけます。
0976デフォルトの名無しさん
2005/12/20(火) 19:27:410977デフォルトの名無しさん
2005/12/20(火) 19:35:55配列[5]を宣言又はnewで作成。
中身
[0] a
[1] b
[2] c ←削除
[3] d
[4] e
↓
[0] a
[1] b
[2] d
[3] e
[4]
↓
[0] a
[1] b
[2] d
[3] e
[4] f ←追加
<5> g ←追加
こういう配列操作をしたいのですが、
追加時は別配列で作り直さないと駄目でしょうか?
0978デフォルトの名無しさん
2005/12/20(火) 19:48:100979デフォルトの名無しさん
2005/12/20(火) 20:00:47配列のMAXが最初からわかっているなら、その大きさで配列を確保すればイイじゃん。
可変配列でないとダメならvectorだろ。
0980デフォルトの名無しさん
2005/12/20(火) 20:02:27もしかして:C++の話題?
0981デフォルトの名無しさん
2005/12/20(火) 20:16:020982デフォルトの名無しさん
2005/12/20(火) 20:17:36可変配列を作りたかったのです。
vectorって言葉は知らなかったのですが、
検索したところCStringArrayってのを使えば出来そうですね。
ありがとうございました。
0983デフォルトの名無しさん
2005/12/20(火) 20:17:370984デフォルトの名無しさん
2005/12/20(火) 20:18:56>>982
おまえらスレタイ108回くらい読んでから出直せ。
0985デフォルトの名無しさん
2005/12/20(火) 20:25:02C言語なら俺に聞け! Part 119
http://pc8.2ch.net/test/read.cgi/tech/1135077848/
0986デフォルトの名無しさん
2005/12/20(火) 20:25:24C言語なら俺に聞け! Part 119
http://pc8.2ch.net/test/read.cgi/tech/1135077848/
0987デフォルトの名無しさん
2005/12/20(火) 20:26:13108回とは信心深いな。
0988デフォルトの名無しさん
2005/12/20(火) 22:35:53b = 0;
a = b;
なら aに0が入ってないとおかしい。
>「「b=0」の結果」とは、右辺の 0 とは限らず
この場合は仕様を満たしたコンパイラなら必ず0になる。
b+=0とかならともかく
0989デフォルトの名無しさん
2005/12/20(火) 22:38:52木構造への挿入・削除はポインタのポインタを使わないとやたら面倒
再帰で書いていいなら話は別だが
0990デフォルトの名無しさん
2005/12/20(火) 22:54:19realloc
0991デフォルトの名無しさん
2005/12/20(火) 23:04:030992デフォルトの名無しさん
2005/12/20(火) 23:05:51『「b=0」の結果』は、bに0を代入した結果。
つまり、bの値を読み出してaに入れるのは当然だろう。
この時、bを読むと0になるかならないかは環境依存。
0993デフォルトの名無しさん
2005/12/20(火) 23:08:07っつーか、ポインタのこと理解出来てれば
「ダブルポインタ」の様な変な用語は使わんだろう。
0994デフォルトの名無しさん
2005/12/20(火) 23:09:15>>970
0995デフォルトの名無しさん
2005/12/20(火) 23:10:18C言語なら俺に聞け! Part 119
http://pc8.2ch.net/test/read.cgi/tech/1135077848/
0996デフォルトの名無しさん
2005/12/20(火) 23:31:310997デフォルトの名無しさん
2005/12/20(火) 23:41:13UnicodeのウィンドウにIMEを使って文字を入力する時、
入力された文字をWM_IME_COMPOSITIONやWM_IME_CHARを使わずにWM_CHARで正確に
文字が取得できますでしょうか??
ちなみにOSはWindows2000です。XPだと取れるっぽいのですが、Windows2000だと
私の環境はだと、とれないっぽいのですが、みなさんいかがでしょうか??
スレ違いなら、他で質問します。
0998デフォルトの名無しさん
2005/12/20(火) 23:42:310999デフォルトの名無しさん
2005/12/20(火) 23:43:03http://pc8.2ch.net/test/read.cgi/tech/1133798345/
1000デフォルトの名無しさん
2005/12/20(火) 23:43:3510011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。