C言語なら俺に聞け! Part 118

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。

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/
2デフォルトの名無しさん:2005/12/04(日) 20:49:15
IDチェック
3デフォルトの名無しさん:2005/12/04(日) 20:49:49
printf("乙");
4デフォルトの名無しさん:2005/12/04(日) 20:53:07
75 名前:デフォルトの名無しさん :2005/12/04(日) 20:43:31
cでパターンまっちを実装した拡張ないですか?
5デフォルトの名無しさん:2005/12/04(日) 20:56:19
976 名前: デフォルトの名無しさん [sage] 投稿日: 2005/12/04(日) 20:47:07
あるよ
6デフォルトの名無しさん:2005/12/04(日) 21:02:04
978 :デフォルトの名無しさん :2005/12/04(日) 20:50:20
>>976 おしえよ


979 :デフォルトの名無しさん :2005/12/04(日) 20:51:12
>>976 おしえてよ
7デフォルトの名無しさん:2005/12/04(日) 21:03:11
8デフォルトの名無しさん:2005/12/04(日) 21:08:14
cで(正規表現だけじゃなく、ユーザ定義のパターンも含めた)
一般的なパターンまっちを実装した拡張ないですか?
9デフォルトの名無しさん:2005/12/04(日) 21:10:04
一般的なユーザー定義のパターンマッチを扱うのが正規表現なのだが。
10デフォルトの名無しさん:2005/12/04(日) 21:12:10
A -> aAb みたいなパターンを扱わないとだめなんですが。
11デフォルトの名無しさん:2005/12/04(日) 21:15:35
え、なんだって?
12デフォルトの名無しさん:2005/12/04(日) 21:17:36
A -> aAb みたいなパターンを扱わないとだめなんですが。
13デフォルトの名無しさん:2005/12/04(日) 21:18:53
意味が分からない。
14デフォルトの名無しさん:2005/12/04(日) 21:22:00
ab , aabb, aaabbb, aaaabbbb, aaaaabbbbb, ........ みたいなパターンを扱わないとだめなんですが。
15デフォルトの名無しさん:2005/12/04(日) 21:25:53
何がしたいのか分からない。
16デフォルトの名無しさん:2005/12/04(日) 21:31:28
正規表現じゃ表せない、パターンを扱う必要があるってことだけ。
17デフォルトの名無しさん:2005/12/04(日) 21:33:29
興味深いね。どんなパターンだろう。
まさか >>12 や、>>14 が正規表現で表せないなんていう、基地外じみたアホ発言はしないでね。
18デフォルトの名無しさん:2005/12/04(日) 21:42:27
画像データのエンコードされたものかなんか?
19デフォルトの名無しさん:2005/12/04(日) 21:45:23
うん。ジャストじゃないけど、そんなもん。
20デフォルトの名無しさん:2005/12/04(日) 21:46:02
bison/flex でも使えば?
21デフォルトの名無しさん:2005/12/04(日) 21:50:37
う〜ん、パーサーか…
22デフォルトの名無しさん:2005/12/04(日) 22:46:29
標準出力した結果をリダイレクトしてファイルに保存しているのですが,
標準出力した結果とファイルに保存した結果が違います。
何度やっても違う結果が保存されてしまいます。
なぜこのようなことになるのかご存知の方ご教授お願いします。
23デフォルトの名無しさん:2005/12/04(日) 22:50:36
>>22
具体的にどう違うんですか?
ぜんぜん違うとか、行が抜けるとか、文字が化けるとか
24デフォルトの名無しさん:2005/12/04(日) 22:51:34
>>22
とりあえず、何がどうちがうのか説明してもらわないと、
さっぱりわからん。
25デフォルトの名無しさん:2005/12/04(日) 22:51:38
>>22エラーが出ないとかですか?
26デフォルトの名無しさん:2005/12/04(日) 22:52:48
・標準出力と標準エラー出力が混じってる
・標準出力に制御文字を出力している
・標準出力がリダイレクトされている場合に出力を変えるプログラムを動かしている
27デフォルトの名無しさん:2005/12/04(日) 22:57:25
大体同じなのですが,10行〜20行の間の数値が違って出力されてしまいます。
28デフォルトの名無しさん:2005/12/04(日) 23:12:12
>>27
その数値はプログラム内部で計算されたものですよね。
計算の入力値はどうなっているんですか?
ファイル?それとも画面入力?それともコンスタント?
29デフォルトの名無しさん:2005/12/04(日) 23:12:37
ゲームプログラムを作成したい場合、ネイティブコードのプログラムを
作成できるC言語を利用するのが最適ですか?
つまり、Windowsでゲームを作成したい場合はVC++が良いですか?
30デフォルトの名無しさん:2005/12/04(日) 23:14:03
何をしたいかによるんじゃないの
31デフォルトの名無しさん:2005/12/04(日) 23:20:41
>>29
>ネイティブコードのプログラムを作成できるC言語
この「ネイティブコード」ってなんでしょうか?
32デフォルトの名無しさん:2005/12/04(日) 23:24:26
突然ですが、セフォマってなんですか?
33デフォルトの名無しさん:2005/12/04(日) 23:26:13
排他的リソース管理の仕組み
34デフォルトの名無しさん:2005/12/04(日) 23:26:51
>>33
さっぱりプーです
35デフォルトの名無しさん:2005/12/04(日) 23:27:25
>>29
ゲームによるんじゃね?
PS2のゲーム作りたければ、そもそもWindowsって選択肢が間違ってるし。
36デフォルトの名無しさん:2005/12/04(日) 23:27:28
セマフォだし
37デフォルトの名無しさん:2005/12/04(日) 23:31:12
>>27
数値はファイル,コンスタントのものが含まれています。
38デフォルトの名無しさん:2005/12/04(日) 23:31:17
どおりでぐぐっても出てこない訳ですか・・・
様はフラグみたいなもんですか?
39・∀・)っ-●○◎- ◆Pu/ODYSSEY :2005/12/04(日) 23:31:54
>>29
ネイティブコードが有利とか不利とか考える前に生産性が大事だと思うよ。
ぶっちゃけるとDirectXなんかはC/C++だと手続きが多くて結構面倒。
フリーの小物ゲームは結構VBとかC#は多いよ。

パフォーマンスを重視のために労力の増加を苦としないだけの余裕がある
のでなければ、もっと生産性の高い言語から始めるのも手だと思うよ。
40デフォルトの名無しさん:2005/12/04(日) 23:32:35
>>38
とりあえずはそういう理解でも構わないかと。
今回のCマガ(12月号)を買うと幸せになれるかも。
41デフォルトの名無しさん:2005/12/04(日) 23:34:00
>>32
セフォマじゃなくてセマフォ(semaphore)な。

郵便局や銀行に行くと順番待ちの紙をくれる機械があるだろ。
あの機械と印刷される順番の紙と番号呼び出しのおかげで、来客したお客さんが
混乱することなく次々と窓口によび出されるわけだ。
おおざっぱだが、あれだと思ったらいい。(ほんとに、おおざっぱ。つっこまないで!)
42デフォルトの名無しさん:2005/12/04(日) 23:34:38
>>40
たまに立ち読みするんですけど、
初心者には敷居が高い気がするんですよね〜・・・
43デフォルトの名無しさん:2005/12/04(日) 23:40:49
セマファってそんなにすごいの?
44デフォルトの名無しさん:2005/12/04(日) 23:47:22
>>39
そもそも手続き型じゃないからなw

DXUT使えば多少は楽になる。
45デフォルトの名無しさん:2005/12/04(日) 23:50:21
>>28
数値はファイル,コンスタントのものが含まれています。
46デフォルトの名無しさん:2005/12/04(日) 23:54:35
>>45
まとめると、ファイルからデータを読み込んで標準出力に計算結果を出力する
Cでコーディングされたプログラム(pg)がある。

そのプログラムをコマンドラインで
>pg
と起動した場合と、リダイレクトを使って
>pg > text.out
した場合では、計算結果が異なっている。

ということだね?
47デフォルトの名無しさん:2005/12/05(月) 00:08:29
>>45
うーん、理由が思いつかないなぁ…
出力するファイルも入力に含まれてしまうって事はないよね?

プログラム示してくれるのが一番手っ取り早そうだが
48デフォルトの名無しさん:2005/12/05(月) 00:16:58
fprintf(stderr,"1");
fprintf(stdout,"23\n");
49デフォルトの名無しさん:2005/12/05(月) 00:45:55
質問ですが,
exitをよく使うんですけど
バリバリ使ってもPCにとってヤバくはないですよね?

どうもexit=非常口って感じでなんか使うのを躊躇してしまうとです
50デフォルトの名無しさん:2005/12/05(月) 00:47:13
>>49
引数
51デフォルトの名無しさん:2005/12/05(月) 00:47:31
>>46
はい,そうなんです。
二つのファイルをつかっているので,
>pg >text.out
>file1
>file2
というふうにやっています。
どこかおかしいでしょうか?
52デフォルトの名無しさん:2005/12/05(月) 00:50:47
そりゃ無理だ
pgは呼ばれた時点での出力をtext.outに吐いてfile1とfile2の内容は入力にならないよ
53デフォルトの名無しさん:2005/12/05(月) 01:15:29
>>49
コンソールアプリケーションならば問題はないでしょう。
環境(=OS)によっては、異常終了するときの終了方法を推奨・規定しているものがあるので、
そちらを使ったほうが無難です。
54デフォルトの名無しさん:2005/12/05(月) 01:22:11
1000 名前:991[sage] 投稿日:2005/12/05(月) 01:18:36
>>992
すいません>>999は間違えましたorz

1001 名前:1001[] 投稿日:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
55デフォルトの名無しさん:2005/12/05(月) 03:54:39
mixi から糞壁 kick できねーかな。
56デフォルトの名無しさん:2005/12/05(月) 08:32:49
こわがりすぎ(^ω^;)
57デフォルトの名無しさん:2005/12/05(月) 11:26:57
01 011101 2211012 62
01 011101 22110193 -19
         ↑
        ここの3を読み込みたい時は、どうすればいいんですか?
        どなたか教えてください。
58デフォルトの名無しさん:2005/12/05(月) 11:37:52
>>57
規則性がわかんね
[空白][-]の一つ前の数字を読みたいのか?
59デフォルトの名無しさん:2005/12/05(月) 11:39:38
int main(void){

char *a[] = {"01 011101 2211012 62", "01 011101 22110193 -19"};

char c = a[1][17];

printf("%c", c);

return 0;
}
60デフォルトの名無しさん:2005/12/05(月) 11:42:11
データ構造も規定されていない状態でまともに答えられない

っていうかデータ構造が決まったらプログラムは自然に書ける
61デフォルトの名無しさん:2005/12/05(月) 11:49:35
構造体で定義したのメンバの値を後から更新する方法についてお聞きしたいのですが
struct point{
int x;
int y;
int dir;
};
struct point mark={ 320, 200 };
メンバーへのアクセスはmark.xで可能ですが
初期化以外の方法ではどのように代入できるのでしょうか?
62デフォルトの名無しさん:2005/12/05(月) 11:51:48
>>61
=
63デフォルトの名無しさん:2005/12/05(月) 11:53:57
mark.x = num;
実験したらこれでできました^^;
64デフォルトの名無しさん:2005/12/05(月) 12:04:17
xとy、入力のnでfor(x=1;x<=n;x++)…を使って表を作成して
1 2 3 4 5
6 7 8 9 10
とし、fprintfで表をそのままdataに書き込みたいのですが、どうも上手くいきません。
アドレス一つ一つ読んで書き込むと上書きされてしまうし、改行すると縦に並んでしまうので…
どなたか、纏めて一行読み込む方法を教えて下さい…
65デフォルトの名無しさん:2005/12/05(月) 12:12:44
>>55
どこで暴れてる? 見物しにいく.
66デフォルトの名無しさん:2005/12/05(月) 12:15:24
書き込みたいのか読み込みたいのかどっちだよ。
67デフォルトの名無しさん:2005/12/05(月) 12:18:48
>>64
まず、誰にでも理解できる日本語で書け
68デフォルトの名無しさん:2005/12/05(月) 12:36:57
>>64
多分無茶苦茶簡単なんだろうが説明がうんこだから誰も和漢ね
ある意味無茶苦茶難しい問題だな ( ´,_ゝ`)プッ
69デフォルトの名無しさん:2005/12/05(月) 12:42:43
>>64
やりたい事を母国語で説明できない=やりたい事を理解していない

と言う事だから、やりたい事を整理する事をお勧めする。
70デフォルトの名無しさん:2005/12/05(月) 12:51:11
こんなに釣れたw
71login:Penguin:2005/12/05(月) 13:50:34
linuxで、RLIMIT_STACKの上限を変更したいのだが、
どこをいじえればよいですか?
72デフォルトの名無しさん:2005/12/05(月) 14:46:52
>>71
スレ違い
73デフォルトの名無しさん:2005/12/05(月) 15:09:05
>>71
スタック消費しないように書き直せ。
7464:2005/12/05(月) 15:21:40
うまく説明出来そうにないので前述の質問は自力で何とかします。

ええと、もう一つ引っかかっているところがあって、こちらだけでも教えていただけると嬉しいのですが…
fprintfで、書式を直接出力するようなことは出来ないのでしょうか?

FILE *fp;
fprintf(fp,"書式",)なのですが、例えば「あいうえお」を出力したい際にfprintf(fp,"あいうえお")ではPCがフリーズします。
関数で数字を放り込んで指定してやったり、scanfでキーボ入力経由してやる分にはOKなのですが…

こちらが指定する数字以外の文字をフロッピーに出力する方法がわかりません…
75デフォルトの名無しさん:2005/12/05(月) 15:27:18
過去に事故か何かで左側頭部を怪我したことはありませんか?
7664:2005/12/05(月) 15:30:47
説明するより張ったほうが早そうです…

int 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"をフロッピーに出力したいだけです…
77デフォルトの名無しさん:2005/12/05(月) 15:30:57
>>74
単にfopenしていないとかそんなおちでは?
7877:2005/12/05(月) 15:31:43
図星だなw。
7964:2005/12/05(月) 15:35:30
/* Open Error Check */
if((fp=fopen("data.dat","w"))==0){
printf("cannot open file \n");
return 1;
}
はその前に入れてあります。
何故か>>76の所でPCフリーズするので悩んでます…

80デフォルトの名無しさん:2005/12/05(月) 15:43:55
>>76
> masuとかは脳内で補完しちゃって下さい…
ヲイヲイ masu はちゃんと領域確保できているのかね?

masu[1][1] 〜 masu[n][n] までアクセスするから 最低でも masu[n+1][n+1] は必要なんだが...
81デフォルトの名無しさん:2005/12/05(月) 15:46:21
初心者版のところでもカキコしてきたのでアプロダに上げてきました。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1208.txt

こんな感じなのですが…
masuは[11][11]です。
82デフォルトの名無しさん:2005/12/05(月) 15:49:38
>>81
ファイル開いてないじゃん。
関数内で確保した変数は、呼び出し先では使えないって習わなかった?
83デフォルトの名無しさん:2005/12/05(月) 15:53:19
>>81
.... やっぱ >>77 じゃん。
file() 関数内で fopen() やれやー or fp を引数で取れやー
84デフォルトの名無しさん:2005/12/05(月) 15:59:57
fpってグローバルなん?
85デフォルトの名無しさん:2005/12/05(月) 16:02:38
>>84
どう見てもローカル変数として宣言してるだろ。
8681:2005/12/05(月) 16:04:53
わー!動きました!
何とか宿題の提出期限に間に合いそうです。

単純なことで迷惑かけて済みませんでした。有難う御座います〜!
87デフォルトの名無しさん:2005/12/05(月) 16:07:21
>>84
>>76 を見て省略されているのかな?と思った。
>>81 を見てコピペだと判明した。
ローカル変数宣言だけしていきなり使ってる。 ちょっとびっくらこいた
88デフォルトの名無しさん:2005/12/05(月) 16:49:29
あるプログラムで
printf("100.00%完了 (全部で%d個見つかりました)\n",cnt);
としたところ、%dがうまく置き換えられませんでした。
そこで前にある%が原因だと考え色々試してみると、%%とすることでうまく表示させることができました。
エスケープシーケンスというのは本で読んだのですが、%の場合には%%とするのが正しいのでしょうか。
また、%の他に注意する文字があれば教えてください。
89デフォルトの名無しさん:2005/12/05(月) 16:52:03
>質問する前には最低限検索を。
90デフォルトの名無しさん:2005/12/05(月) 17:32:46
CreateMainWindow(600,550,"クライアントとサーバーを通信する",hInstance,nCmdShow,(WNDPROC)WindowProc,
WS_OVERLAPPEDWINDOW,WS_EX_CONTROLPARENT | WS_EX_WINDOWEDGE,NULL,LoadIcon(NULL,MAKEINTRESOURCE(IDI_APPLICATION)));
これの最大化、最小化、閉じるボタンはどこを弄るんでしょうか。
弄り方も教えてくださいな。
91デフォルトの名無しさん:2005/12/05(月) 17:35:56
>GUIなどの標準Cではできない事の質問,ソース丸投げ、宿題、書籍 は専門の別スレッドがあるのでそこへさようなら。
92デフォルトの名無しさん:2005/12/05(月) 17:41:06
>>89
検索したら見つかりました。ありがとうございました。
93デフォルトの名無しさん: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);
}
94デフォルトの名無しさん:2005/12/05(月) 18:06:41
>>93
速いコードが示されてないので良く分からんが、
malloc/freeに時間がかかってるんじゃないの?
95デフォルトの名無しさん:2005/12/05(月) 18:20:25
汚い記述ばっかりですなスンスンスーン(´Д`)(゚Д゚)ハァ
96デフォルトの名無しさん:2005/12/05(月) 19:16:25
ポインタによる2次元配列はできるのですが、
ポインタによる3次元配列はどのようにすればできるのですか?

ネットや図書館や本屋で調べても、解説すら見つけられません。

どなたか教えてください。
具体的なプログラムを掲示してくれると大変助かります。
97デフォルトの名無しさん:2005/12/05(月) 19:25:20
>>65
C言語とC++言語 のそこかしこで暴れてる。
正直、書き込みにくい。
98デフォルトの名無しさん:2005/12/05(月) 19:26:00
>>96
ポインタによる二次元配列の配列を作ればいい。
99デフォルトの名無しさん:2005/12/05(月) 20:08:38
ポインタによる二次元配列の配列・・・理解できませんorz
二次元配列の配列とはどのようにすればいいのですか?

100デフォルトの名無しさん:2005/12/05(月) 20:12:12
思考停止乙
101デフォルトの名無しさん:2005/12/05(月) 20:38:05
>>96
> ポインタによる2次元配列
> ポインタによる3次元配列

とは何か?

そもそも、2次元配列は2次元配列で、
3次元配列は3次元配列でしかない。

# つまり、オレ用語を使うなと。
102デフォルトの名無しさん:2005/12/05(月) 21:17:45
Linux環境でCを組んでいるんですが、1つ質問させてください。

あるプロセス(A)で「hogehoge00.jpg〜hogehoge09.jpg」という画像ファイルを作成しています。
またあるプロセス(B)では、作成された画像を順次読み出して表示しています。

このとき、Aのプロセスにおいて「画像をファイルとして保存している蔡中」の状態で
Bからそのファイルを読み込もうとすると、当然おかしなことになってしまいます。

system関数でfileコマンドでも読み出せば、指定したファイルがちゃんとしたJPG画像かどうかを
判別することはできるのですが、システムの仕様上system関数を使うことができません。

「今現在読み込もうとしているJPG画像が、きちんと生成されているか」というのを判別するには
一体どのようにしたらいいのでしょうか。

手ほどきのほど、よろしくお願いします。
103デフォルトの名無しさん:2005/12/05(月) 21:26:03
>>102
jpgを書き出した後に「最新のファイル名」をどこかに保存。
もしくはjpg書き出し側で
一時ファイルに書き出し→書き出し終了したらhogehoge....jpgにファイル名変更
とするとか。
104デフォルトの名無しさん:2005/12/05(月) 21:53:38
flock使う。
105デフォルトの名無しさん:2005/12/05(月) 22:31:12
JPEGのファイルヘッダにJPEGのバイト数があるので
それをstat系関数で調べたファイルサイズと比べるとか
read系関数の返り値で得られたバイト数と比べるとかすればOKと思う
106デフォルトの名無しさん:2005/12/05(月) 22:33:34
セマフォ?
107デフォルトの名無しさん:2005/12/05(月) 22:44:55
>>93
関数呼び出し時に自動で確保され、関数終了時に廃棄されるのがスタック
手動で確保し、関数が終わっても残るのがヒープ
その書き方が遅いのはa/bの操作をするのに対してmalloc/freeのシステムコール呼び出しの
オーバーヘッドが大きすぎるから
特に初期化を行わないスタックがほぼコスト0で取れるのに対し、ヒープは
一旦OSを呼び出す分オーバーヘッドが大きいのが効いている
別にヒープで取ったメモリだから読み書きが遅いわけではない
あらかじめbufを確保しておけばスタックと同等の速度が出ると思われる
108デフォルトの名無しさん:2005/12/05(月) 22:52:22
C++ templateのコンテナとauto pointerだけが欲しい
109デフォルトの名無しさん:2005/12/05(月) 22:56:34
デストラクタを自分で呼ぶなら作れなくもないけども。
あんま意味ない?
110デフォルトの名無しさん:2005/12/05(月) 23:02:48
>>102
104 だとAがファイルオープンして flock 掛ける直前にBがファイル開こうとしたときの処理が面倒
105 もAファイルヘッダを書き終わっているかのチェックが必要なんで面倒
106 はどの画像ファイルに対して所有権を設定するのか約束事を決めるのが面倒

という訳で一見愚直な感もする 103 が一番使いやすかったりする。
あとファイル共有システムに強いとかデバッグしやすいのも好印象。
あくまでも個人的経験ではそうだったということだけど。
111デフォルトの名無しさん:2005/12/06(火) 00:07:00
>>107
malloc/freeの呼び出しのせいでスタック上でやるより時間がかかっているのは確かだけど
毎回malloc/freeでOSを呼び出してるわけじゃないよ。
112デフォルトの名無しさん:2005/12/06(火) 00:33:36
>>110
某業界の電文処理は、基本的に>103の前者で実装されていたりする。
書き出し完了番号と読み出し完了番号を書く側と読む側が其々更新する仕掛け。
書き出し完了番号が更新されたら読みに行き、読み出し完了番号を更新したら1シーケンス完了。
この方式の利点は、読み出し側が処理が止まっても後から追っかけで処理できる点。
113デフォルトの名無しさん:2005/12/06(火) 01:16:45
>112
なんかお墨付きをもらってちょっと安心な気分。
一回しかこのてのプロジェクトに関わったたこと無いもんで
書き込んだ後どんなレスがつくか戦々恐々でした。
114デフォルトの名無しさん:2005/12/06(火) 05:28:56
テンポラリディレクトリあたりにjpegファイルを書き出して、
ちゃんと完了したときに、rename(2)で置きに行けば良いんじゃないの?
115デフォルトの名無しさん:2005/12/06(火) 06:35:20
for文で
1+2-3+4-5
の答えを表示するにはどんなコードにすればいいんですか?
116デフォルトの名無しさん:2005/12/06(火) 06:39:24
丸投げ乙
117デフォルトの名無しさん:2005/12/06(火) 06:49:25
#include <stdio.h>

int 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;
}
118デフォルトの名無しさん:2005/12/06(火) 06:58:14
for文で
1+2-3+4-5+…-98+99-100
の答えを表示するにはどんなコードにすればいいんですか?
119デフォルトの名無しさん:2005/12/06(火) 07:14:13
#include <stdio.h>

int 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;
}

厨房だから間違えてても知らない
120102:2005/12/06(火) 07:32:59
>>103-105,110
アドバイスdクス
手持ちのリファレンスブックにはflockが載ってなかったので、
いまいち分からなかったが、ちょっと調べてみようと思います。
ヘッダの中身を比べてみるってのも、候補に上がっていたんですが
解析するのがちょっと面d(ry)だったので・・・

とりあえず、>>103氏の提案でやってみようとおもう。
スレ汚しスマソ
121デフォルトの名無しさん:2005/12/06(火) 07:36:12
>>119
エラー出しすぎw
122デフォルトの名無しさん:2005/12/06(火) 07:42:55
全角スペースをtabに置き換えてる?
123デフォルトの名無しさん:2005/12/06(火) 08:27:37
>>118
> 1+2-3+4-5+…-98+99-100
1 + 2 + (-3) + 4 + (-5) + ... + (-98) + 99 + (-100)
どこで, 符合がつくのが奇数から偶数に変わってるんだ?
そもそも, 数列のならびに規則性はあるのか?
124デフォルトの名無しさん:2005/12/06(火) 08:39:15
BOOL func(int value)
{
  if(value){
    ...
    return TRUE;
  }
  else
    return FALSE;
}
くだらないことかもしれませんが
例えば上の関数でelseがあるのとないのとでは違いが生じるのでしょうか
125デフォルトの名無しさん:2005/12/06(火) 08:46:03
大抵のコンパイラが同じコードを吐きそうだが気にするな。
読みやすさでどちらにするか決めればよかろう。
126デフォルトの名無しさん:2005/12/06(火) 08:57:35
レスありがとうございます。となるとコーディングスタイルの問題でしょうか
どちらが一般的、またはよろしいと思われますか?
127デフォルトの名無しさん:2005/12/06(火) 10:43:28
>>124
elseなかったら常に実行じゃん
128デフォルトの名無しさん:2005/12/06(火) 10:44:07
あぁ、returnだったのか...w
129デフォルトの名無しさん:2005/12/06(火) 10:54:55
書き出し・読み出し完了番号が更新されている途中で
読まれる場合は防ぐにはどうすればいいんですか?
130デフォルトの名無しさん:2005/12/06(火) 11:13:03
>>129
日本語勉強汁

>>123
そもそも 1 に負号が付いていない訳で
最初から既に疑問だらけだったんだが
131112:2005/12/06(火) 12:02:40
>>129
・読み出し完了番号は読み出し側のアクセスのみなので問題ない。
・書き出し完了番号は更新されるまでは古い番号が読み出されるから問題ない。
#つまり、書き出し完了番号を記録するファイルはfopen(file, "w")で開いてはいけない。
132デフォルトの名無しさん:2005/12/06(火) 12:41:33
>>131
その書き出し完了番号が複数バイトに渡っていて、
まさに書いている途中に読み出されたらどうするのかと。


# 漏れは、ちゃんとしたプロセス間通信を行った方が良いと思うよ。
133デフォルトの名無しさん:2005/12/06(火) 13:17:45
system("namae")
でアプリケーション呼び出せませんでしたっけ。
134デフォルトの名無しさん:2005/12/06(火) 13:30:21
>>132
ディスクシステムとドライバがどういうものか勉強した方がいいと思うよ。
#まさかキャラクタデバイスに書く香具師はいまい。
135デフォルトの名無しさん:2005/12/06(火) 13:32:25
>>133
OSによっても違うけど、パスが通っていれば(或いはなんらかの形で登録されていれば)
namaeというアプリケーションを起動できると思うよ。
#詳細は各OS関連スレか環境依存スレへ。
136デフォルトの名無しさん:2005/12/06(火) 14:00:23
>>135
返信ありがとうございます。
not foundばかりでるので、たぶんパスが通ってなかったと思います。
「./ファイル名で起動できたので」
137デフォルトの名無しさん:2005/12/06(火) 14:36:52
>>132
>ちゃんとしたプロセス間通信を行った方が良い
に同意。
ファイルの読み込みポーリングなんて愚行するなら
名前付きパイプなり何なり使えと。
138132:2005/12/06(火) 14:46:01
>>134
特定の環境スレであれば、>>132の様なレスもしないが、
標準Cの範疇では「キャラクタデバイスでない」なんて、
分かるはずもないし想定すべきでもない。

標準Cの範疇で考える以上、「キャラクタデバイス」であるかも、
と言う事もプログラマが考えるべき。


# だから、環境にあったプロセス間通信を(ry
139デフォルトの名無しさん:2005/12/06(火) 16:00:21
ほほぉ、プロセス間通信は標準Cにあるとでも?
140デフォルトの名無しさん:2005/12/06(火) 16:21:46
スレ違いということでは?
141デフォルトの名無しさん:2005/12/06(火) 16:25:44
あまり私を怒らせない方がいい・・・
142デフォルトの名無しさん:2005/12/06(火) 17:45:48
>>139
文盲なの?
143デフォルトの名無しさん:2005/12/06(火) 18:07:41
自己参照構造体「test」のポインタ2つを引数とした関数です。
bの領域を確保した後に、既に領域を持つ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は構造体のポインタではない」とエラーが出ています。はて?
144デフォルトの名無しさん:2005/12/06(火) 18:13:57
(*b)->back = a;
145デフォルトの名無しさん:2005/12/06(火) 18:14:24
可哀想な>>139がいるスレはここですか?
146143:2005/12/06(火) 18:17:05
>>144
あ、そういや試してなかった…
入門書を一から読み直そう…
147デフォルトの名無しさん:2005/12/06(火) 18:19:44
>>143
*b->back は、わかりやすく書くと *(b->back)。
おまいが望むものは、>>144
演算子の優先順位ぐらい頭に叩きこんどけ
148デフォルトの名無しさん:2005/12/06(火) 18:25:12
とりあえず括弧で囲んでしまう俺はヘタレ
149デフォルトの名無しさん:2005/12/06(火) 18:39:08
type ** になりそうになると type * を typedef する俺もヘタレ
150デフォルトの名無しさん:2005/12/06(火) 18:42:38
>>139
池沼なの?
151デフォルトの名無しさん:2005/12/06(火) 18:51:40
そういう実装があると紹介しているだけの>112に対して、
見当違いな反論をした>132が>134に揶揄されたのに逆切れしたのか
>137の尻馬に乗って>138では言い訳しているわけだ。
で、「標準Cの範疇で」云々と書きながら「環境に合った」云々と矛盾を書いて、
>139に突っ込まれている。
となれば、>142=>145でかつ、>132=>138とも同一人物であると推測可能なわけだね。
152デフォルトの名無しさん:2005/12/06(火) 18:55:33
相当悔しかったんだなw
面白いやつだ
153デフォルトの名無しさん:2005/12/06(火) 22:12:27
>>129
ファイル経由のプロセス間通信をする場合は rename を使うのが定石。
Aは別名でファイルでファイル出力した後特定ファイル名にリネーム
Bは特定ファイル名をポーリングして読み込み完了したら別名にリネーム。
読み込み済みの別名ファイルは適当に削除する(常に1つは残しておく)。
Linuxを含む大抵のOSでrenameはアトミックなのでこれでオッケイ。

不具合が発生時には残されたファイル名とタイムスタンプがデバッグの道標になる。

>>132 >>137
ファイルベースは単体テストが簡単なので初心者に勧めるのはあながち間違ってないと思うよ。
154125:2005/12/06(火) 22:17:00
>>126
BOOL 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かぁ……
155デフォルトの名無しさん:2005/12/06(火) 22:25:28
>>154
自分でstdbool.hを適当に作ってやる。
156125:2005/12/06(火) 22:31:55
>>155
基本だw
#つーか、最近はC99で書くことが多いから当たり前のようにインクルードしてるよ。
157デフォルトの名無しさん:2005/12/07(水) 00:16:06
switch 〜caseでcaseには複数の条件は当てはめられますか?
例えば

case 2000 || 2001 || 2002:
みたいな感じです
158デフォルトの名無しさん:2005/12/07(水) 00:17:39
>>157
無理

case 2000
case 2001
case 2002
(処理)
break;

と、やるよろし
159デフォルトの名無しさん:2005/12/07(水) 00:18:26
>>157
ふつうにできるよ。
その書き方じゃ無理だけど。
160デフォルトの名無しさん:2005/12/07(水) 00:18:41
無理ですか・・
条件が多いんでifでやっちゃいますね(´・ω・`)スミマセン
161デフォルトの名無しさん:2005/12/07(水) 00:19:12
あら?
case (2000 || 2001 || 2002):で試してきます
162デフォルトの名無しさん:2005/12/07(水) 00:19:58
>>161
それじゃ、常に成立しちゃうよ
163デフォルトの名無しさん:2005/12/07(水) 00:20:49
orzそうですね
164デフォルトの名無しさん:2005/12/07(水) 00:22:43
そもそも、caseに条件式は置けないんだけどね
165デフォルトの名無しさん:2005/12/07(水) 00:24:24
159が出来るとか書いてるでやってみたのですが、そうですか。
166デフォルトの名無しさん:2005/12/07(水) 00:25:47
case 2000:
case 2001:
case 2002:
/* */
break;
167デフォルトの名無しさん:2005/12/07(水) 01:05:27
範囲指定の方がすっきりするところは default で if 使うのもありだな。
168デフォルトの名無しさん:2005/12/07(水) 01:19:48
>>165
>>158

あれだ、フォールを使え
169デフォルトの名無しさん:2005/12/07(水) 01:48:19
>>158 はコロンが欠けてるので、
それにアンカー付けると「動かないんですが」とか言われてマンドクセになるかも。
>>166 だな。
170デフォルトの名無しさん:2005/12/07(水) 05:09:28
mod演算子で6%0とかでは数値が帰ってきてません。
C99とかよくわからないですが使ってる処理系はBCC5.5です。
a%bでb=0はまずいのでしょうか
まずいですよね・・
171・∀・)っ-●○◎- ◆Pu/ODYSSEY :2005/12/07(水) 06:12:59
割り算は0で割っちゃいけませんよ。
BCCはよく知らないけど、VCだと例外が投げられます。
不正な処理を行ったため強制終了(ry

まあ、例外を捕捉してやればこれだけで落ちることは無いのだけど
172デフォルトの名無しさん:2005/12/07(水) 12:08:07
コンソールアプリで、ループ中にXボタンを押されても、ループを抜けて終了処理を
するようにしたくて試行錯誤して下のような処理を作成しました。
でも、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);
}
173デフォルトの名無しさん:2005/12/07(水) 12:14:11
>>172
方向違いだしスレ違い。
174デフォルトの名無しさん:2005/12/07(水) 12:23:40
ごめん、どっか行ってくる。
175デフォルトの名無しさん:2005/12/07(水) 13:00:56
最小2乗法の1次多項式のプログラムをc言語のプログラムに作るにはどうしたらいいのでしょうか?
176デフォルトの名無しさん:2005/12/07(水) 13:23:18
C言語でコードを書いてコンパイルすればいいんじゃないかな
177デフォルトの名無しさん:2005/12/07(水) 13:23:51
system("C:\\ProgramFiles\\フォルダ名\\ファイル名")
でアプリ開こうとしても見つかりませんがでます。
どこか間違ってるのでしょうか。
178デフォルトの名無しさん:2005/12/07(水) 13:35:02
>>172
コンソールアプリはウィンドウハンドルを持たないんだよ。コマンドプロンプトというプログラムで動いてるに過ぎない。
適切なシグナルハンドラを登録してやればいいよ
http://www.shibu.jp/cppreference/stdother_details.html#signal
いちおうシグナルは標準関数みたいなもんだからここでいいかも。


>>177
スレ違いだがShellExecute
179デフォルトの名無しさん:2005/12/07(水) 13:38:14
#include <stdio.h>

main(){
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 :
といった感じにってしまいます。
ポインタ配列を使う場合はどのように書いたら良いのでしょうか?ご教示お願いします
180デフォルトの名無しさん:2005/12/07(水) 13:43:16

Dはポインタの配列です
D[0]からD[4]までstrのアドレスを指しています。

strの中身は最後に入れたmnoが入っています。
だから、strの中身のmnoが5回表示されます
181デフォルトの名無しさん:2005/12/07(水) 13:47:30
ポインタだとコピーが簡単だと思ったのかな?
文字列の入れ物はstr[6]ってchar配列が1個あるだけ。ポインタはその入れ物のアドレスを示すだけ。
5つの文字列を保存できるわけないでしょ。

Dをchar配列の配列にするか、mallocで割り当ててやるかのどっちかだね。
配列の配列でいいと思うけど。
182デフォルトの名無しさん:2005/12/07(水) 13:51:24
#include <stdio.h>

main(){
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]);
}
}
183デフォルトの名無しさん:2005/12/07(水) 14:19:05
>>178
どうも、解決しました。

C言語で、アプリ(集計ソフトなど)の自動化などできますかね。
./ファイル名 で起動させたら勝手に集計するファイルが設定されて集計しだすとか。
184VCです:2005/12/07(水) 14:33:10
#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[12]);

printf("関数から戻ってきました \n");
printf("戻り値は%sです。\n",o);
}
↑のやつを実行すると実行画面で「文字を入力してください」とでて
「もじ」と手入力すると「私たちはMyfunc()のなかにいます」という
メッセージがでるところまできて終わってしまいます。
 一体なにが悪いのでしょうか?
185デフォルトの名無しさん:2005/12/07(水) 14:43:23
>>184
char *Myfunc(char o[])
186デフォルトの名無しさん:2005/12/07(水) 14:52:40
#include <stdio.h>

static 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の値が正しく渡されていないようなのですが、なぜでしょうか?
187デフォルトの名無しさん:2005/12/07(水) 14:53:33
>>185
> char *Myfunc(char o[])
さらに
o=Myfunc(moji[12]); ---> o=Myfunc(moji);
188デフォルトの名無しさん:2005/12/07(水) 14:55:57
>>186 おまえ >>184 と同一人物?
printf とか scanf のマニュアル読め!
189VCです: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);
}
190VCです:2005/12/07(水) 15:05:30
>>185 >>187 ありがとうございます。いいえ同一人物ではありません。
アドバイスのとおりやったのですが実行の結果エラーがでました。
(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);
}
191デフォルトの名無しさん:2005/12/07(水) 15:06:00
>>188
ご指摘ありがとうございます。
192デフォルトの名無しさん:2005/12/07(水) 15:09:50
>>190
mainの頭のoの宣言をchar *oへ。
あとvoid mainは一般的でないからやめろ。
193デフォルトの名無しさん:2005/12/07(水) 15:09:56
>>184
%sじゃなくて%c
194デフォルトの名無しさん:2005/12/07(水) 15:12:18
>>193
185-192は%sを生かす方向で修正させようとしているのにそう言うのは如何なものか。
195デフォルトの名無しさん:2005/12/07(水) 15:12:32
>>193
自己レス
184に対する解決策であって、その後の展開は違う方向へ進んでるので
>>190
に対して適用しないように。
196VCです:2005/12/07(水) 15:35:34
皆さんありがとう!しかしダメでした。void main(void)をint main(void)に
かえるとエラーがでるのでそのままにしてあります。あと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);のところでエラーが出てしまいます。
197デフォルトの名無しさん:2005/12/07(水) 15:37:11
>>196
char moji[12];の宣言は変えなくて良い。
198VCです:2005/12/07(水) 15:41:12
やった!!!!!!できたよ。できました。本当にありがとう。

サンプルソースをいじっただけでこんなに苦戦するとは・・・

ありがとうプログラムの神々よ。

199デフォルトの名無しさん:2005/12/07(水) 15:46:27
こんなんで神ではさぞかし本物の神は浮かばれないでしょうな。
200デフォルトの名無しさん:2005/12/07(水) 15:47:36
そういうのを何回か弄っていくうちにポインタとか変数の関係が分かってくるよ。
201デフォルトの名無しさん:2005/12/07(水) 15:51:45
C言語の最大の汚点は

char *hoge="ぬるぽ";
という記述を許可してる事だと思うのですよ
202デフォルトの名無しさん:2005/12/07(水) 16:01:39
それって規格が許してるんだっけ?
203デフォルトの名無しさん:2005/12/07(水) 16:05:04
>>202
201のコードは問題ない。
ただし書き換えるのは駄目。
204デフォルトの名無しさん:2005/12/07(水) 16:05:11
言語仕様
205デフォルトの名無しさん:2005/12/07(水) 16:13:01
>>203
そんなこと分かってるの。
バカは黙ってて
206デフォルトの名無しさん:2005/12/07(水) 16:14:21
>>201
char hoge[] = "ガッ";
を許可してる方が変だと思うのですよ。
207デフォルトの名無しさん:2005/12/07(水) 16:16:47
>>205
だから規格でも203のとおりだ。
208デフォルトの名無しさん:2005/12/07(水) 16:32:55
『3×3型の二つの行列A=[aij],B=[bij]を読み込み、
積ABとBAを 求めるプログラムを作成せよ。また一般的にはABとBAが
等しくならない ことを確認せよ。』ですがどなたか教えてくれませんか?
CでもPascalでもいいのでお願いします。
209デフォルトの名無しさん:2005/12/07(水) 16:49:10
マルチに答える人はいません
210デフォルトの名無しさん:2005/12/07(水) 17:01:41
669 名前: デフォルトの名無しさん 投稿日: 2005/12/07(水) 16:30:23
『3×3型の二つの行列A=[aij],B=[bij]を読み込み、
積ABとBAを 求めるプログラムを作成せよ。また一般的にはABとBAが
等しくならない ことを確認せよ。』ですがどなたか教えてくれませんか?
CでもPascalでもいいのでお願いします。

お前みたいな馬鹿な子はいくら勉強しても無駄だよ。
さっさと処理系消して自殺してね
211デフォルトの名無しさん:2005/12/07(水) 17:37:24
配列のかけ算が出来ない子って事か?
212デフォルトの名無しさん:2005/12/07(水) 17:41:16
本当に出来なきゃ確かに低脳だけど、
出来るけど他の人がどう書くのか見たくて
質問してるだけなのかもしれないよ?
213デフォルトの名無しさん:2005/12/07(水) 18:13:01
#define kMin -1.1
#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文をもう少し簡潔に書けないものでしょうか
214デフォルトの名無しさん:2005/12/07(水) 18:19:20

double a_abs = abs(a);
if( x-a_abs < kMin || kMax < x+a_abs ) hoge;
215デフォルトの名無しさん:2005/12/07(水) 18:27:43
>>214
absは前に試しましたがintしか扱えないみたいで無理でした
自分でdouble MyAbs(double)とかを作ればいけると思いますが
216デフォルトの名無しさん:2005/12/07(水) 18:29:36
fabs
217デフォルトの名無しさん:2005/12/07(水) 18:33:08
いや、マクロでいける。
つーか
#define ABS(a) ( (a) > 0 ? (a) : -(a) )

これで全数値型対応可能だと思う。
218デフォルトの名無しさん: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[])になるような気がするのですが・・・
  *は何をしているのでしょうか?





219デフォルトの名無しさん:2005/12/07(水) 18:53:17
>>217
ああそうかマクロ使えばいいのか
ありがとうございます
220デフォルトの名無しさん:2005/12/07(水) 18:54:14
>>218 変な文章になってしまいました。
221デフォルトの名無しさん:2005/12/07(水) 18:54:53
>>216
fabsなんてものがあったのですか
いや本当に申し訳ありませんでした
222伝説新人タクシ:2005/12/07(水) 18:58:06
>>218
Line13:char[] moji;かchar* moji;
Line15:scanf("%s",&moji);
223デフォルトの名無しさん:2005/12/07(水) 19:00:30
>>218
ならない。

配列のアドレスは配列の先頭要素のアドレス

MyFuncの帰り値はなにを返してるかって言うと、引数として渡された配列の先頭のアドレスを返してるの。
charを返したら先頭の文字が帰るだけ。
224デフォルトの名無しさん:2005/12/07(水) 19:41:24
>>123
釣りじゃね?
225デフォルトの名無しさん: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"にしても駄目でした。
  もうファイルから一行拾ってきた時点で、全ての番地の中身を確認するような
  ロジックにしないといけないんですかねぇ…。
226デフォルトの名無しさん:2005/12/07(水) 21:18:33
なんで、なにがなんでもsscanfでやりたがるんだろう・・・
227デフォルトの名無しさん:2005/12/07(水) 21:18:55
>>225
sscanfの戻り値は正常に引数へ代入されたものの数になります。
だからその例では(1)の行では2が返されます。
これを見てどうにかしたらどうでしょうか。
228デフォルトの名無しさん:2005/12/07(水) 21:32:41
fgetsで拾ってstrtok
229デフォルトの名無しさん:2005/12/07(水) 21:38:52
while("2ch") {};

こんなプログラム書くとwhileの条件式が評価されるたびに毎回"2ch"がメモリ内に確保されるのですか?
230デフォルトの名無しさん:2005/12/07(水) 21:40:26
>>229
そうとは限らない。文字列定数の入ってるアドレスを読み出してきて評価するだけ。
231デフォルトの名無しさん:2005/12/07(水) 21:40:56
>>229
いいえ。
ダブルクォーテーションで括った文字列は静的(プログラム開始時)にメモリ確保される。
whileで評価されるのはその文字列へのポインタ。
232デフォルトの名無しさん:2005/12/07(水) 21:43:52
>>230,231
サンクス
233デフォルトの名無しさん:2005/12/07(水) 21:49:37
>>228
strtok()は空フィールド扱えないからダメ
234・∀・)っ-●○◎- ◆Pu/ODYSSEY :2005/12/07(水) 21:53:21
っ[PCRE]
235・∀・)っ-●○◎- ◆Pu/ODYSSEY :2005/12/07(水) 21:56:17
iostreamとSTLだけでCSVパーザ組んだことがあったがソースどこいったかな
236デフォルトの名無しさん:2005/12/07(水) 22:12:39
#include <stdio.h>

typedef 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 )」とエラーが出てしまいます
237デフォルトの名無しさん:2005/12/07(水) 22:17:27
>>236
Cの配列はコンパイル時に要素数を決めなければならない。
ポインタとmallocなどを使ってどうにかする必要がある。
238デフォルトの名無しさん:2005/12/07(水) 22:19:02
>>225
> もうファイルから一行拾ってきた時点で、全ての番地の中身を確認するような
> ロジックにしないといけないんですかねぇ…。
質問するより、そうした方が早いと思うよ。
239デフォルトの名無しさん:2005/12/07(水) 22:28:05
>>237
すみません
ポインタとmallocについて詳しくお願いします
240デフォルトの名無しさん:2005/12/07(水) 22:31:10
>>239
ちったぁ自分で調べろや
241デフォルトの名無しさん:2005/12/07(水) 22:33:06
int main(void)
{
    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をあたかも配列であるかのように扱える。
242デフォルトの名無しさん:2005/12/07(水) 22:44:59
GString型の文字列をlong型の数値にしたいんだけど、
どうすればよいのか教えて下さい。
243デフォルトの名無しさん:2005/12/07(水) 22:45:23
>>240
ごめんなさい

>>241
ありがとうございます
なんとか走らせることができました
簡単にできるものだと思っていたのですが結構難しいんですね・・
そろそろ専門の本買おうかな
244デフォルトの名無しさん:2005/12/07(水) 22:46:11
>そろそろ専門の本買おうかな
>そろそろ専門の本買おうかな
>そろそろ専門の本買おうかな
>そろそろ専門の本買おうかな
>そろそろ専門の本買おうかな
>そろそろ専門の本買おうかな
>そろそろ専門の本買おうかな
>そろそろ専門の本買おうかな
>そろそろ専門の本買おうかな
>そろそろ専門の本買おうかな
245デフォルトの名無しさん:2005/12/07(水) 22:47:49
>>242
GString型なんて標準Cにはないけど。
246デフォルトの名無しさん:2005/12/07(水) 23:00:10
>>245
普通にCStringでは
247デフォルトの名無しさん:2005/12/07(水) 23:01:10
>>246
どっちでも同じだろ
248デフォルトの名無しさん:2005/12/07(水) 23:56:54
glibだろ
249デフォルトの名無しさん:2005/12/07(水) 23:59:44
C言語で、" while wend " のようにwhileの後に条件式を付けなくても、
wendまで進めばwhileに戻れるようなコマンドを教えてくださいませ
250デフォルトの名無しさん:2005/12/08(木) 00:02:02
>>249
は?
251デフォルトの名無しさん:2005/12/08(木) 00:03:40
>>249
意味がよくわからんが、無限ループが欲しいなら
for(;;) {}
while(1) {}
で。
252デフォルトの名無しさん:2005/12/08(木) 00:04:11
よくわからんがGOTO文使え
253デフォルトの名無しさん:2005/12/08(木) 00:06:30
continue でええやん。
254225:2005/12/08(木) 00:08:18
>226>227>228>233>238

レスありがとうございました。
>238の言うように、一文字ずつ番地を見ていって、
TABが来たかどうかをキーに判別処理をするしかなさそうです。

もうちょっと当方でもがんがってみます。
一応ロジックは構築が済んだので、後はコーディングのみ?

本当に助言ありがとうございました〜。
255デフォルトの名無しさん:2005/12/08(木) 00:08:21
すみません、uwscを使ってたときは
While 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言語でもできるのかな?と・・・
256デフォルトの名無しさん:2005/12/08(木) 00:10:09
uwscって何
HSPぐらいならともかく勘弁してください
257デフォルトの名無しさん:2005/12/08(木) 00:14:15
>>255
回答側に「ググれ」と?
258デフォルトの名無しさん:2005/12/08(木) 00:14:29
>>256
あの〜、あなた馬鹿ですか?
頭のいいやつが悪い学校行ったら宝の持ち腐れでしょ?w
259デフォルトの名無しさん:2005/12/08(木) 00:16:12
uwsc って何だよ
そんなマイナー言語をいきなり出されてもワカンネ
260デフォルトの名無しさん:2005/12/08(木) 00:17:39
ぐぐってみたが、キーロガープログラムのスクリプトらしい
ふざけんな
261デフォルトの名無しさん:2005/12/08(木) 00:18:55
へ〜、みなさんオンラインゲームとか全くしたことないんですか・・・
それはすみませんでした。
262デフォルトの名無しさん:2005/12/08(木) 00:19:11
>>258
意味不明だから帰ればいいよ

BASICライクな言語とCライクな言語じゃ文法全然違ぇよ。
CとBASICの違いぐらい理解してからきてください。ここはC言語スレです。
263デフォルトの名無しさん:2005/12/08(木) 00:20:44
>>261
スレ違いだ。氏ね
264デフォルトの名無しさん:2005/12/08(木) 00:21:08
>>318
Windowsだと多分大丈夫
BSDやLinuxなら問題ない
265デフォルトの名無しさん:2005/12/08(木) 00:21:35
>>264
何が?
266デフォルトの名無しさん:2005/12/08(木) 00:21:39
ごめスレ間違えた
267デフォルトの名無しさん:2005/12/08(木) 00:22:30
質問。
vfscanfは標準じゃないんでしょうか?
#include <stdio.h>
#include <stdarg.h>
の二つを入れても参照エラーでコンパイルが止まってしまいます。
ネットでは確かに存在を確認できるんですが。なぜでしょうか?
環境はVC7.1です。
268デフォルトの名無しさん:2005/12/08(木) 00:25:56
一つ聞きたかったんだけど、どうやったらスレ間違えれるの?
すんごい流れが速いところならともかく・・・
269デフォルトの名無しさん:2005/12/08(木) 00:27:57
>>268
ギコナビだけど複数のスレ参照しながらレスすると間違える
ごめんなさいね
270デフォルトの名無しさん:2005/12/08(木) 00:28:18
>>268
複数のスレを巡回してるとたまに間違える
271デフォルトの名無しさん:2005/12/08(木) 00:28:30
>>267
標準ではそのような関数は存在しないらしいぞ
272デフォルトの名無しさん:2005/12/08(木) 00:29:02
>>267
C99の標準ライブラリだな。
現行のANCI C(番号忘れたからこれで勘弁)の標準ではない。

独自拡張してる処理系もあるようだがな。

>>268
ヒント:Jane
273デフォルトの名無しさん:2005/12/08(木) 00:32:24
>>267
俺の環境(Debian testing, gcc 4.0.2)だと、stdio.h で extern されてたけど、実際に定義してるヘッダは見つからんかった
274デフォルトの名無しさん:2005/12/08(木) 00:39:33
>>271&272
レスさんきゅー。
比較的新しい仕様だったのね。
これは困ったな。うーん、まぁいいか。
疑問がとけてよかったです。
ありがとう!!!
275デフォルトの名無しさん:2005/12/08(木) 00:41:45
>>273
すぐ近くまでやってきてるのに使えないこのもどかしさ。
情報サンキュー
276デフォルトの名無しさん:2005/12/08(木) 00:48:53
>>272
Janeはご丁寧にスレが違うと警告出るんだけどねぇ。
それでも間違うのはもう、注意不足としか思えん。
277デフォルトの名無しさん:2005/12/08(木) 00:49:03
しかしvfscanfって生涯使いそうにも無い関数だな
278デフォルトの名無しさん:2005/12/08(木) 00:54:20
>>276
Janeは警告なんか出さんぞ?
279デフォルトの名無しさん:2005/12/08(木) 04:34:09
入力されてたら0を返す関数が思い出せません
while(!_kidhit)0;
こんな感じで使われていたと思います
_kidhitみたいな感じだったと思います
280デフォルトの名無しさん:2005/12/08(木) 05:03:21
_kbhit()じゃないかな。無論標準の関数ではないよ。
281デフォルトの名無しさん:2005/12/08(木) 06:21:11
それです。さんくす
282デフォルトの名無しさん:2005/12/08(木) 07:25:09
キーボードから入力した1行の文字列を読み込むとき、
簡単に書くと

char buffer[256];
fgets(buffer, 256, stdin);

で実現できますが、
文字数の制限(この場合255文字)があります。

この制限をなくす簡単な方法とかないでしょうか。

リスト構造とか使うにしても一時的に
バッファに格納して文字数を数えてmalloc()とかで
確保しないといけないと思うのですが。
283デフォルトの名無しさん:2005/12/08(木) 07:43:53
>>282
リストでひたすらmallocとgetchを一つずつ繰り返すとか。
284デフォルトの名無しさん:2005/12/08(木) 08:00:28
仮に、

char a[100][10];

という領域が動的に欲しいときに、

char (*a)[10];

を定義して malloc でまとめて

a = malloc(1000);

みたいに確保したとします。

このとき、

for(int i = 0; i < 100; i++) free(a[i]);

というような解放の仕方をしても問題ないでしょうか?
285デフォルトの名無しさん:2005/12/08(木) 08:44:07
^^
286デフォルトの名無しさん:2005/12/08(木) 08:55:18


 題

  だ

 ら



 で

  す
287デフォルトの名無しさん:2005/12/08(木) 09:58:40
for(int i = 0;
for(int i = 0;
for(int i = 0;
288デフォルトの名無しさん:2005/12/08(木) 10:39:05
>>284
まとめて確保したなら
まとめて解放しましょう。
別々に解放したいなら
別々に確保しましょう。
289デフォルトの名無しさん:2005/12/08(木) 11:38:45
>>279
どこから餓鬼(kid)なんて単語が出て来るんだよ。
KeyBoardって連想はできなかったんか?

>>282
制限をなくしても、誰かが際限なくメモリ確保と連結を繰り返すことになるわけだ。
本当に制限をなくす必要があるか検討したほうがいい。


>>284
プログラミング初心者は自分で手を動かせ。それが嫌なら初心者スレで聞け。

>>287
今時C99を知らないならレスしなくていいよ。
290デフォルトの名無しさん:2005/12/08(木) 16:56:14
IPAのプログラミングの選択問題にC++が入っていない理由を教えて下さい

Cをやってる場合どうやってオブジェクト思考の問題に取り組めば良いですか?
291デフォルトの名無しさん:2005/12/08(木) 17:30:57
292デフォルトの名無しさん:2005/12/08(木) 20:00:55
>>291
難しそうですが、面白そうです^^
293デフォルトの名無しさん:2005/12/08(木) 20:05:04
継承を考えなければFILE *とfopen〜fcloseのやり方を応用するだけ。
294デフォルトの名無しさん:2005/12/08(木) 20:51:01
10進数→16進数のプログラムなんですが、
scanf("%d",&n);
sprintf(Hex,"%x",n);
で変数に受けるました。

そこからHexを配列化して1バイトずつ参照したんですが、
1→31 といった具合に数字が狂ってしまいます。
どうすればいいでしょうか?
295デフォルトの名無しさん:2005/12/08(木) 20:54:31
>>294
文字コード
296デフォルトの名無しさん:2005/12/08(木) 21:35:28
しばらくやって意味が解りました。
ありがとうございました!
297デフォルトの名無しさん:2005/12/08(木) 21:43:04
質問です。
リストの勉強をしていて新しいノードを作るプログラムで

new_node = (node_t *)malloc( sizeof(node_t) );

というプログラムの、* の意味はポインタ演算をしているって事で合ってますか?
違うのならどのような意味なのでしょうか?お願いします。
298デフォルトの名無しさん:2005/12/08(木) 21:47:36
>>297
まず違う。それは型キャスト
mallocのプロトタイプはvoid *malloc(size_t);だから
あくまで代入先のポインタと方を合わせる必要がある
299デフォルトの名無しさん:2005/12/08(木) 21:50:52
キャスト
300デフォルトの名無しさん:2005/12/08(木) 22:00:10
ありがとう
301デフォルトの名無しさん:2005/12/08(木) 23:01:07
学校で、
「キーボードから西暦の年、月、日の値をy/m/dの形式で入力すると、その次の
日の年、月、日を画面に

_年_月_日の次の日は_年_月_日です。

と表示するプログラム」
と言う課題が出たんですが、みなさんならどういうやり方でしますか?
先生は、配列を使えって言ってたんですが、switch文&if文を使う方法しかわからなくて・・・
配列を使うプログラムって・・・??
302デフォルトの名無しさん:2005/12/08(木) 23:02:14
303デフォルトの名無しさん:2005/12/08(木) 23:04:20
同じp->xという式が大量に出てくる場合、

int t = p->x;

のように一時変数を用いて、p->xをtに置き換えた方が、アロー演算子を
多用するよりも速度面で有利な気がするんだけど、違うかな?
304デフォルトの名無しさん:2005/12/08(木) 23:04:46
>>302
失礼しました。
305デフォルトの名無しさん:2005/12/08(木) 23:04:49
>>301
そーゆー問題よくあるよね。
306デフォルトの名無しさん:2005/12/08(木) 23:19:09
>>303
コンパイラがマルチスレッド対応かつpが別スレッドから参照可能なら
ローカル変数にキャッシュすることでより最適化される可能性が高い。
実際のところどうなのかは両方のアセンブリ出力を比較して確認する。
307デフォルトの名無しさん:2005/12/08(木) 23:30:37
>306

どうも。指針になった。
308デフォルトの名無しさん:2005/12/08(木) 23:42:29
>>306
最近のコンパイラでは最適化付けたら
pがグローバル、かつvolatile指定してない限りは
ほとんどの場合勝手にレジスタ割り当ててくれるくらいの勢いだな
309デフォルトの名無しさん:2005/12/08(木) 23:49:07
>>303
実際にはpやxの部分はまず間違いなくもっと長い名前だから、
短い名前で扱えるようにするということを兼ねて俺はそんなことをやっている。

C++だけど参考までに。
http://www.emit.jp/prog/prog_opt0.html
310306:2005/12/08(木) 23:52:36
>>308
>pがグローバル、かつvolatile指定してない限りは
if (p == グローバル && p != volatile) 勝手にレジスタ割り当て
この条件式っておかしくないか。p == グローバルってとこ。

最適化レベルにもよるけど、どういう条件でレジスタ変数扱いになるかは
コンパイラによって癖があるので速度が重要な場面(でなけりゃどうでもいい)
ではアセンブリ出力させて見ることにしている。
#VC++だと混合モードで一発確認できるのがうれしい。
311デフォルトの名無しさん:2005/12/09(金) 00:01:56
>>309
横から失礼
そのページ読んでみたんだが、その1と2はメンバ変数であるためにループ中で書き換えられる
可能性があるのでループの度に逐一再読込がいるからだということは分かったんだが
その3って、ポインタが変更されかねないので同じように再読込がいるが
ループ前に一時変数にコピーしてそれを利用することで、始点がループ中
固定されることがコンパイラに分かるから最適化されるってこと?
312学生:2005/12/09(金) 00:09:16
初めまして。早速ですが、質問させていただきます><。

学校の課題でpgm形式の画像ファイルを入力する関数と出力する関数を作成せよという課題がでました。

ヘッダ部分を読み込むのはできたのですが、それ以降が自分には難しすぎて手におえません。

どなたかアドバイスなどをいただけたらと思うのですが。。。
よろしくお願いします><

ただいま入力関数を作成中で出力は手をつけていません。


お粗末ですが、作成中のプログラムを載せさせていただきます。

ちなみに扱うのはP5形式のファイルで、255階調です。

ヘッダファイル
#include <stdio.h>

typedef struct picture{
int w; /*横幅*/
int h; /*縦幅*/
int **gs; /*グレイスケール*/
}
313デフォルトの名無しさん:2005/12/09(金) 00:09:41
314デフォルトの名無しさん:2005/12/09(金) 00:11:34
>>301
#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;
}
315学生:2005/12/09(金) 00:12:32
ソースファイル1
#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);
}
316学生:2005/12/09(金) 00:12:54
ソース2
void 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;
}
317306:2005/12/09(金) 00:23:39
>>309 >>311
更に横レス失礼。
結論のみ言うと 311 の解釈はその通りで正解。
318デフォルトの名無しさん:2005/12/09(金) 00:26:23
>>317
レスd
ちょっと思ったんだが、メンバ変数と局所変数とでアクセス速度に違いってある?
>>311の解釈にたどり着く前に、最初に思ったのがメンバ変数ってアクセス遅いのか?ってことなんだが
319306:2005/12/09(金) 00:35:32
>>318
コンパイラレベルでは変数が別スレッドから参照可能かどうかが問題。
オブジェクトがローカル変数だったらメンバ変数もローカルなので遅くならない。
スレ違いなのでこの話はこれまで。
320デフォルトの名無しさん:2005/12/09(金) 00:37:41
>>319
そうなのか、わざわざすまね
そういやここはCスレだったな・・・スマソ>ALL
321デフォルトの名無しさん:2005/12/09(金) 00:41:40
>>312
スレ違い
C/C++の宿題を片付けます 54代目
http://pc8.2ch.net/test/read.cgi/tech/1133406672/
322デフォルトの名無しさん:2005/12/09(金) 00:42:56
すまん、更に横から・・・ではオブジェクトがグローバルだったら>>309の最適化は
必要(有効)ということ?最後に教えてちょ
323306:2005/12/09(金) 00:49:15
>>322
有効である可能性が高い。実際に有効かどうかはアセンブリ出力を比較すること。
いじょっ、しゅーりょー。
324デフォルトの名無しさん:2005/12/09(金) 00:52:08
サンクス!終了、退散〜
325学生:2005/12/09(金) 01:03:40
>>321
そのようなスレもあったのですね。
失礼しました。
326デフォルトの名無しさん:2005/12/09(金) 07:19:59
一度しか呼ばれていないstatic関数をinline関数にしないことの意味とは??
無条件でinline関数にしちゃっていいと思うんだけどどうしてだろ。
後々、複数の場所で呼ばれる可能性を考慮してinlineにしないぐらいしか考えられない俺はヘタレですか?
327デフォルトの名無しさん:2005/12/09(金) 07:35:03
一度しか呼ばれないのなら、inlineにする必要ないじゃん。
328デフォルトの名無しさん:2005/12/09(金) 07:37:11
>>327
え、だってinline関数にしたら関数呼び出しのコストがなくなるでしょ?
329デフォルトの名無しさん:2005/12/09(金) 07:40:28
一度だけなのか、一カ所からだけ、なのかどっちだ?
330デフォルトの名無しさん:2005/12/09(金) 08:51:00
どうせ最適化されるんじゃないの?
331デフォルトの名無しさん:2005/12/09(金) 08:52:09
一箇所からだけ、として・・・
・ループの中心部とかでない限り全体の動作速度はほとんど変わらない
・無条件でinlineにするとアセンブラ出力が追いにくい
・同じくデバッガやプロファイラで追いにくい
・宣言位置に条件があったりして保守がちょっと面倒
332デフォルトの名無しさん:2005/12/09(金) 09:05:38
>>329
一箇所です。失礼。
333デフォルトの名無しさん:2005/12/09(金) 09:28:47
>>331
>・ループの中心部とかでない限り全体の動作速度はほとんど変わらない
「ループの中心部」? 多重ループの内側と言う意味か? 俺語で語られても。

>・無条件でinlineにするとアセンブラ出力が追いにくい
inline宣言しても無条件でインライン化されませんし、それが理由でアセンブリ出力を追いにくいなら追わなければいいのでは?

>・同じくデバッガやプロファイラで追いにくい
いやだから、それが理由なら追わなければ(以下略

>・宣言位置に条件があったりして保守がちょっと面倒
意味不明。宣言位置に条件はないと思うのですが。

枝葉末節に拘ってコンパイラに任せると言うことを潔しとしないのなら、最適化などせず
のんびり実行させればよいのでは?

>>326
一ヶ所からしか呼ばれなくても、インライン化されることが期待できないような大きさの関数なら
敢えてinline宣言しなくても構わないでしょう。
勿論、宣言しても構わないわけですが。
334デフォルトの名無しさん:2005/12/09(金) 09:36:32
そもそもデバッグ時に inline にしなけりゃいいじゃんかよ。

inline 関数は別ファイルに分けて、
inline は INLINE マクロに置き換えて、
デバッグ時は .cpp から直接インクルードして INLINE の定義はなしに、
リリース時は .h からインクルードして INLINE は inline に置き換える。
これでおk。

inline 関数にしてたけど、やっぱやめた、とかやる時、
ヘッダいじるとコンパイル範囲が広いから、
デバッグ時は非 inline 化しといた方がいい。
特に、コンパイルがそれなりに遅い環境とか、
沢山インクルードされてるヘッダとかでは。
335デフォルトの名無しさん:2005/12/09(金) 09:52:14
そもそも、inlineが必要になるほどタイトなコードを書いてるのかと。
336デフォルトの名無しさん:2005/12/09(金) 10:08:52
inline だと、アドレスが無いからデバッグ時に面倒なことがある。
仕事じゃなけりゃ、好きにしていいけど。
337326:2005/12/09(金) 10:27:06
いろんな意見を読ませてもらいました。関数呼び出しのコストが気になるぐらい
キツイ部分への限定的な使用に留めておくのが一番賢いみたいですね。
338デフォルトの名無しさん:2005/12/09(金) 13:23:21
2次元配列を動的確保したいのですが、
これで使い方あってますか?

char (*pArray)[16];
pArray = (char(*)[16])malloc(sizeof(char) * 2 * 16);
pArray[0][0] = 1;
pArray[1][15] = 2;
free(pArray);
339デフォルトの名無しさん:2005/12/09(金) 13:33:05
>>337
逆に、ゲッタセッタのような1行野郎程度ならインライン展開してくれた方がデバッグが楽だと思うけど。
要は、開発の状況見ながら適当に判断すればいいのでは?

>>338
sizeof(char)は1に決まっているので、書くだけ野暮。
340デフォルトの名無しさん:2005/12/09(金) 13:49:48
アルゴリズム事典からなんですが、、、組み合わせに関してです。
エラーに関するところと思われる部分だけ抜粋します。
#define first(n) ((set) ((1U << (n)) - 1U))
first(N)を呼び出すときに、Nを大きくするとおかしくなります。なぜでしょうか。
コンパイル時に、「left shift count >= width of type」と出ます。
これだけで原因がわからなかったらすいません。プログラム全体をカキコします。
341デフォルトの名無しさん:2005/12/09(金) 13:52:44
ちなみに、ビットのオンオフを用いる、組み合わせ全パターン生成というのは、
それ以外の普通の方法よりもどの程度早いのでしょうか?
342デフォルトの名無しさん:2005/12/09(金) 13:54:12
>>340
変数の大きさ(bit数)以上のNは扱えないから。
Nの制限が書いてなかったか?
343デフォルトの名無しさん:2005/12/09(金) 13:55:19
>>341
実際にやってみて測定すればいい。
344338:2005/12/09(金) 13:57:51
>>339
ありがとうございました
345デフォルトの名無しさん:2005/12/09(金) 14:03:49
>340のようなビット演算は、判っている人には隠蔽するまでもないし、
例えば>340のように判っていない人には使いこなせないし、
あんまりマクロで書いて欲しくないなぁ。
346デフォルトの名無しさん:2005/12/09(金) 14:04:56
>>341
#define N 10
とマクロで定義して、first(N)としか使っていないのですが、、、。
それなりにNを大きくするとダメです。
>>343
すみません、理論上の計算量に関してです。それもよくわからなかったので
実際に動かそうとしたら動かないので、、、。
347デフォルトの名無しさん:2005/12/09(金) 14:16:00
int size[]={1,5,10,50,100,500},limit,i,s,p,newvalue;
int 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になる。
348デフォルトの名無しさん:2005/12/09(金) 14:20:40
#define first(n) ((set) ((1U << (n)) - 1U))
の意味だけでいいので教えていただけると助かります。どなたかお願いします。
349デフォルトの名無しさん:2005/12/09(金) 14:23:38
>>347
宿題は宿題スレへ。そうでないなら初心者スレへでもどうぞ。

>>346
そのコンパイル時のメッセージの通り、unsignedのビット数より大きいnは指定できない。
それと、理論は兎も角その方法と普通の方法で速度の差を知りたいならソースを提示しろ。
誰もがアルゴリズム辞典を持っているわけじゃない。
350デフォルトの名無しさん:2005/12/09(金) 14:26:28
>>348
そこに書かれているsetの意味は、アルゴリズム辞典を持っていないと判らんのだが。
記憶に間違いがなければunsigned intのtypedefだったはずだが。

で、それを前提として、そのマクロの意味はビット数分の1が立った2進数値を生成している。
つまり、nが1ならば 1 << 1 - 1 = 2 - 1 = 1、nが3ならば 1 << 3 - 1 = 8 - 1 = 7 といった按配。
351デフォルトの名無しさん:2005/12/09(金) 14:29:24
>>349
失礼しました。検索するとたくさん出てくるので、アルゴリズム事典と言えば
通じるものだと勘違いしておりました。
http://www.sra.co.jp/people/miyata/algorithm/gencomb.txt
これがそのプログラムです。本は、最新アルゴリズム事典(奥村晴彦)です。
>>350
すみません、何か特殊な関数だと勘違いしていました。
352デフォルトの名無しさん:2005/12/09(金) 14:40:18
>>350
ありがとうございます。少しわかってきました。nCkを求めるために、
マクロのNを勝手に大きくしたのがダメということですよね。
少し自分で考えてみます。しかし、nCkのnとkは、マクロのNとKに対応している
わけではないのでしょうか、、、。
353デフォルトの名無しさん:2005/12/09(金) 14:50:23
だから、増やすにしても上限っつーものがあるんだって。
354デフォルトの名無しさん:2005/12/09(金) 14:56:33
>>352
このアルゴリズムではnCkの全パターンを出すためにn個のビット列を使っている。
従って、unsignedのビット数が32ならnの最大値は32になってしまう。
#実際には31である。∵firstマクロでnビットシフトしているため。

「普通の方法」でも、なんらかの形でn個のフラグを用意しなくてはいけないが、
その点以外でもそのアルゴリズムと大差あるわけではない。
ただ、ビット演算を多用することで若干高速化しているだけだ。
355デフォルトの名無しさん:2005/12/09(金) 14:57:14
>>353
このNを、例えば1000とかで実行するプログラムを作ることは可能なのでしょうか?
356デフォルトの名無しさん:2005/12/09(金) 15:03:32
>>355
だからぁ、普通が一番だって。
357デフォルトの名無しさん:2005/12/09(金) 15:38:31
>>354
ありがとうございました。理解できました。
>>356
了解
358デフォルトの名無しさん:2005/12/09(金) 16:13:34
C言語は何から作られてるの
359デフォルトの名無しさん:2005/12/09(金) 16:15:34
優しさ。
360デフォルトの名無しさん:2005/12/09(金) 16:18:22
客の我侭とSEのプライドとPGの怨念
361デフォルトの名無しさん:2005/12/09(金) 19:44:40
char line[20];
fgets(line,sizeof(line),stdin);
で20文字以上入力したら、バッファに残りが残りますよね?
それで、バッファを空にしたいのですが、fflashは処理系依存
というので、他に方法ありますか?
362デフォルトの名無しさん:2005/12/09(金) 19:55:44
scanf("%*s");
363デフォルトの名無しさん:2005/12/09(金) 20:49:37
>>362
空白文字も読み取りたいです
364デフォルトの名無しさん:2005/12/09(金) 20:51:30
scanf("%*[^\n]%*c");
これで改行文字が現れるまで読み捨てられるはず。
365デフォルトの名無しさん:2005/12/09(金) 21:13:49
>>364
なるほど、scanfにはそんな機能があったんですね。
やってみたところ、20文字以上入力してみたら、うまくいきましたが、
入力が20文字未満だと入力を求められてしまいます。
これも何とかできないでしょうか?
366デフォルトの名無しさん:2005/12/09(金) 21:15:05
それはscanfの使用上無理。
fgetsとかfgetcで入力なくなるまで空読みしろ。
367デフォルトの名無しさん:2005/12/09(金) 21:27:19
>>366
やっぱ、だめですか。
配列の要素数を大きくして対処するしかないみたいですね。
ありがとうございました。
368デフォルトの名無しさん:2005/12/09(金) 21:40:07
よくわからないけど、fgetsで取ってきた文字列に\nが含まれているかで判定できるんじゃないの?
369デフォルトの名無しさん:2005/12/09(金) 22:29:31
>>368
なるほど、盲点でした。
それで、うまくいきました。ありがとうございます。
あと、バッファに'\n'のみが残ったとき、scanf("%*[^\n]%*c"); だと
対応できなかったんで、while(getchar() != '\n') ; にしました。
370デフォルトの名無しさん:2005/12/09(金) 22:58:53
>>369
ちょっと長くなるが
scanf("%*[^\n]%*c");
scanf("%*c");

これでいいじゃまいか
371デフォルトの名無しさん:2005/12/10(土) 00:49:09
p1++ = p2++ ;
美しい..... (p1, p2 : pointer)
372デフォルトの名無しさん:2005/12/10(土) 01:00:40
↑がエラーにならないコンパイラを、俺は知らない。
あ、C++で演算子をオーバーロードすれば大丈夫かな。
373371:2005/12/10(土) 01:47:03
p1, p2 が配列とかにくっついてるポインタ a[] つまり a とかだったら左辺値が必要とか
言われるけど純粋なポインタだったら言われない.
トリッキーだから,賛否両論あるとはおもうけど.
374デフォルトの名無しさん:2005/12/10(土) 02:09:47
実際に試してから書いてるのか?
375デフォルトの名無しさん:2005/12/10(土) 02:39:42
可読性の悪いコードを書いて、嬉々としてる奴みると後ろから刺したくなる
376デフォルトの名無しさん:2005/12/10(土) 02:49:07
error: invalid lvalue in assignment
377デフォルトの名無しさん:2005/12/10(土) 02:49:51
こういう奴相手なら Kusakabe も頼もしいんだけどな。
378デフォルトの名無しさん:2005/12/10(土) 02:56:11
>>373
VCTK
cx.c(3) : error C2106: '=' : left operand must be l-value
BCC
エラー E2277 cx.c 3: 左辺値が必要(関数 f )
379デフォルトの名無しさん:2005/12/10(土) 04:04:20
VC6SP5

C:\Tategoto\VC\Work\TestCon\TestConC.c(8) : error C2106: '=' : 左のオペランドが、左辺値になっていません。
380デフォルトの名無しさん: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
381デフォルトの名無しさん: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);
などとすることは簡単ですが、何かえらく愚かしい気がするんですが・・・
382デフォルトの名無しさん:2005/12/10(土) 08:21:33
>>380
メタ構造体を作るしかないな
383デフォルトの名無しさん:2005/12/10(土) 08:22:30
 char *idmsg = "ID = "ID_NUMBER;
384デフォルトの名無しさん:2005/12/10(土) 08:29:28
>>381
これでも嫌か?
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);
385デフォルトの名無しさん:2005/12/10(土) 08:33:24
#define ELM 20

int 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]) ;
386デフォルトの名無しさん:2005/12/10(土) 08:42:46
>>385
お、通った
387デフォルトの名無しさん:2005/12/10(土) 08:59:42
初歩的な質問で申し訳ありません。

なにかのパーセント(ここでは25%)をprintfで表示したいのですが、
どうしても、125%とか0,25になってしまいます。
3桁目を消して表示する方法はあるでしょうか?
388380:2005/12/10(土) 09:00:08
>>382
メタ構造体とはなんでしょか?
389デフォルトの名無しさん:2005/12/10(土) 09:44:20
>>385
あーあ、言っちゃった。
390デフォルトの名無しさん:2005/12/10(土) 09:48:27
>>387
初歩的な質問は初心者スレへ。
printf("%d%%", 25);

>>388
無理ではないけど、そういう技巧は手間と可読性の割に得る物が少ない。
C++ならばメンバ関数として実装する習慣をつければ済むだけだが。
391387:2005/12/10(土) 10:21:53
>>390
お答えありがとうございました。逝って来ます
392デフォルトの名無しさん:2005/12/10(土) 12:25:02
Visual C++ でプログラムを作成すれば、
そのプログラムだけを配布すれば良いのですか?
MFC がどうとか聞いたのですが・・・
393デフォルトの名無しさん:2005/12/10(土) 12:26:34
MFCはCでは無いのだが。
394デフォルトの名無しさん:2005/12/10(土) 12:47:43
>>392
基本的には。ただ、スレ違い
395デフォルトの名無しさん:2005/12/11(日) 06:40:09
void f(){
if(条件式)
文←ココ
}

if文の条件式に合致した時に関数fの始めに戻りたいんですが、'ココ'にどういう命令を入れればできますか?
f(); って入れると、戻ることは戻るんですがそれだと結果を出力するときに2回してしまうので・・・
396デフォルトの名無しさん:2005/12/11(日) 06:44:23
do、whileを使えば良いんじゃね?
397デフォルトの名無しさん:2005/12/11(日) 07:03:20
まぁwhile文とかでループにするのが一番良いけど、
return f(); と言う手もある
398デフォルトの名無しさん:2005/12/11(日) 07:09:29
>>396
>>397
どうもありがとうございます。
return f(); っていいですねぇ。
この後に100行くらいは続くので、whileを使うとちょっとかさばるかなと思いまして・・・
399デフォルトの名無しさん:2005/12/11(日) 07:36:44
ちょっ・・おまっ・・・
400デフォルトの名無しさん:2005/12/11(日) 09:54:35
goto使え。
401デフォルトの名無しさん:2005/12/11(日) 10:39:23
goto?おいしい?
402デフォルトの名無しさん:2005/12/11(日) 11:00:48
>>398
再帰と先頭に戻るのは意味が違うよ。


って言うか、100行もある関数書くな、ボケ!
403デフォルトの名無しさん:2005/12/11(日) 11:09:02
>>398
それは、whhleループを入れた事で、かさばる訳ではない。
元々がかさばってるんだ。

かさばらない様に小分けにし、do〜whileなどを使うのが正しい。
404403:2005/12/11(日) 11:11:01
>>403
×whhleループ
〇whileループ


orz
405デフォルトの名無しさん:2005/12/11(日) 11:33:42
int g(){
if(条件式)
return 1; // もう一度処理する時
..
return 0; // 普通に終了する時
}

void f(){
while(g()){
}
}

俺だったら、こんな形にする。
406デフォルトの名無しさん:2005/12/11(日) 11:56:08
共用体で

union U
{
int i;
char c;
double d;
} u;

uの中にどの型が入ってるかどうかってわかる方法あります?

考えたのが、

struct S
{
enum {INT, CHAR, DOUBLE} type;
union U u;
} s;

って構造体に入れて、typeを調べる方法ですが、他にもっとスッキリした
方法ないでしょうか?
407デフォルトの名無しさん:2005/12/11(日) 12:20:05
型をシカトするための共有体なのに型情報が必要って時点で設計ミス。
ポインタ経由でのキャスト使って何とか汁。
408デフォルトの名無しさん:2005/12/11(日) 12:48:32
>ポインタ経由でのキャスト使って何とか汁。

具体的に少しだけ教えてもらえないでしょうか?・・
409デフォルトの名無しさん:2005/12/11(日) 13:14:53
>>406
共用体は、場合によって一つの領域を複数の型としてアクセスするためのもの。
どの型の値が格納されているかは、プログラマが管理する。


逆に、どんな値が入っていようとも、intとしてアクセス出来れば、
charとしてもアクセス出来るものだ。
410デフォルトの名無しさん:2005/12/11(日) 13:19:42
intとして、値を代入して、charとして取り出すことも可能だからな。
411デフォルトの名無しさん:2005/12/11(日) 13:29:33
>>406
Cではそれが一番すっきりした方法だよ。
412デフォルトの名無しさん:2005/12/11(日) 13:33:32
case (S.type)
{
INT: ...; break;
CHAR: ...; break;
DOUBLE; ...; break;
}

といったパターンマッチぽいこともできるね。
413デフォルトの名無しさん:2005/12/11(日) 13:52:39
qq.h

pが1のときには

const AA
{
BB,
CC,
DD
}

という構造体を、取得する。
ここで、pが0のときには

const AA2
{
BB,
GG,
DD
}

という構造体を取得したいため、AA2を作るとする。
414デフォルトの名無しさん:2005/12/11(日) 13:53:14
実際のソースでは

ww.c
AA *EE;

if(p==1)
{
FF = ???
}
{
FF = *EE
}

という処理を行うが、
???のところで CCではなくて新規に GGを取得したい。
しかし、constでAA2を作ると
容量が大きいので、AA の BB,DDをそのまま流用し、
ifの判定の真の場合に
CC の部分のみ GG を取得できるようにするには
何かいい方法がないか
415デフォルトの名無しさん:2005/12/11(日) 14:20:51
>>413
CCとGGの大きさが同じならそこは共用体にしてしまえばよいのではと思う。
416デフォルトの名無しさん:2005/12/11(日) 14:45:35
説明不足で大変申し訳ございません。
pが1のときには

const AA
{
BB,
CC,
DD
}

という構造体を、取得する。
ここで、pが0のときには

const AA2
{
BB,
DD
}
になるため、大きさは同じにはならないんですね。
417デフォルトの名無しさん:2005/12/11(日) 15:52:13
C++でやれ。
418デフォルトの名無しさん:2005/12/11(日) 17:00:31
#include <stdio.h>

void main(void)
{
  char s[9]={0};
  s="00110001";
  printf("%s\n",s);
}

なぜエラーが出るんでしょうか?
419デフォルトの名無しさん:2005/12/11(日) 17:08:30
s="00110001"; こんなのはサポートされてない
strcpy使え
420デフォルトの名無しさん:2005/12/11(日) 17:27:23
コマンドライン引数って括弧入れちゃ駄目なの?
421デフォルトの名無しさん:2005/12/11(日) 17:31:44
それはC言語の話ではありません
422デフォルトの名無しさん:2005/12/11(日) 18:06:29
>>419
そうだったんですね
ありがとうございました
423デフォルトの名無しさん:2005/12/11(日) 19:01:55
>>420
そうだったんですね
ありがとうございました
424デフォルトの名無しさん:2005/12/11(日) 19:02:32
>>423
>>421の間違い
425デフォルトの名無しさん:2005/12/11(日) 19:20:18
>>424
そうだったんですね
ありがとうございました
426デフォルトの名無しさん:2005/12/11(日) 19:33:05
>>410
っつーかそういう使い方をするためにあるw
427デフォルトの名無しさん:2005/12/11(日) 20:35:00
main() の定義において、
int main (int argc, char *argv[])
といった書き方をすることはよく見るのだけれどもときどき、
int main (int argc, char **argv)
といった定義を見ることがある。
前者の argv は各コマンドライン引数文字列の先頭アドレスを
ポインタ配列という形で格納しているのはわかるのだけれども、
後者は多重間接参照をおこなうためのポインタ変数として定義されているから
これには char 型ポインタ変数そのもののアドレスを保持させるべきであるのに
引数の取り出しでは、
printf (argv[n]) ; /* n : 0, 1, 2, ... */
でなければセグメンテーション違反を起こしてしまう。
これは前者であれば納得がいくけれども、後者の場合こういう書き方をしたら
char 型ポインタ変数そのもののアドレスが printf() に渡される
ため、コマンドライン文字列を表示することはできないと思うのだけれども
どうなのだろう?
428デフォルトの名無しさん:2005/12/11(日) 20:45:51
関数の仮引数なんだから問題ないんじゃない
429デフォルトの名無しさん:2005/12/11(日) 20:46:36
>>427
とりあえずそのpriftfの引数おかしいけどな
430429:2005/12/11(日) 20:47:42
と、いう俺のスペルも間違っている件
431429:2005/12/11(日) 20:52:39
良くわかんないけど
*(argv+n)
じゃだめなの。

> char **argv
は、
> char 型ポインタ変数
じゃなくて、ポインタ型変数へのポインタなんじゃないの?

って、なんか論点合ってない?もしや。
432デフォルトの名無しさん:2005/12/11(日) 21:09:44
型宣言においてコンパイラから見れば下の3つは同じ意味になる。
[1]char **argv
[2]char *argv[]
[3]char argv[][]

いわゆるしんたっくすしゅがーというものだが、
最近の入門書などでは[2]の書き方が好まれるようだ。
433デフォルトの名無しさん:2005/12/11(日) 21:16:58
[3]はコンパイルできないですけど。
434デフォルトの名無しさん:2005/12/11(日) 21:23:32
>>432
ちょっと知ってる気分になる前に、>>1のリンクを読み直した方が良いと思うよ。
435432:2005/12/11(日) 21:27:34
ドキッ。ぐぐって見たら↓をみつけた。
http://www.coins.tsukuba.ac.jp/~yas/coins/syspro-2004/2004-04-19/argv.html
よくわかんないけどいまのとこ[3]は使わないほうがよいみたいでしゅ。
436デフォルトの名無しさん:2005/12/11(日) 21:29:09
…これが通用するのは、 関数定義の引数定義という特殊な状況だけだという点を
読み飛ばす危険が高すぎる…
437デフォルトの名無しさん:2005/12/11(日) 21:30:54
よくわからん奴が人に教えるなよ
438435:2005/12/11(日) 21:38:06
いや、ISO/IEC9899 的にはOKなのはわかってる。
リンク先で「伝統的には」とか書かれていたので
言語処理系レベルの話になってくるとよくわからんと書いた。
439デフォルトの名無しさん:2005/12/11(日) 21:39:51
よくわからん奴が人に教えるなよ
440デフォルトの名無しさん:2005/12/11(日) 21:46:20
判ってないくせに開き直るなよ。
441デフォルトの名無しさん:2005/12/11(日) 21:47:24
それしか言えない奴が煽るなよ
442デフォルトの名無しさん:2005/12/11(日) 21:51:23
gccで通らん〜。
どの規格に準拠させれば通るんだ?gccのバグ?
443デフォルトの名無しさん:2005/12/11(日) 21:51:24
お前は姉歯かよ
444427 :2005/12/11(日) 21:52:42
おぉ、沢山のご返答ありがとうございます。
憑き物がとれた感があってとてもすっきりした気分。
445デフォルトの名無しさん:2005/12/11(日) 21:52:42
俺は
>>432は配列とポインタの違いを全然判ってないこと
>>1のFAQを読めば配列とポインタの違いが判ること
位しか言えないが。
446デフォルトの名無しさん:2005/12/11(日) 21:55:51
(1+2)*(8/4) を2分木であらわすにはどうしたらよいのでしょうか?
スタックを利用したら良いのでしょうか?
初心者ですみません。ヒントをいただけないでしょうか?
447デフォルトの名無しさん:2005/12/11(日) 21:59:08
という宿題でした、まる。
448デフォルトの名無しさん:2005/12/11(日) 22:04:00
  *
 +  /
1 2 8 4
449デフォルトの名無しさん:2005/12/11(日) 22:49:01
Linux環境で独習Cを勉強し始めたのですが
conio.hがないのでgetcheの代わりになる関数が欲しいのですが
何を使ったら良いでしょうか?
ちょうど変わりになるようなのがあったら教えてください。
450デフォルトの名無しさん:2005/12/11(日) 23:06:16
環境依存スレへいけ
451デフォルトの名無しさん: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;
}
}
452デフォルトの名無しさん:2005/12/11(日) 23:19:57
>>451
文字列は==や!=で比較できない。
仕方がないから<string.h>のstrcmp()を使う。
453デフォルトの名無しさん:2005/12/12(月) 00:25:04
>>432
 関数の引数宣言時の「一番外側の"[]"」は、ポインタ型として解釈される。

が正しい。
これは、Cでは配列を関数の引数として渡せないため。
つまり、コンパイラは以下のように判断する。

type hoge[n] → type *hoge
type hoge[n][n] → type (*hoge)[n]
type hoge[n][n][n] → type (*hoge)[n][n]
(以下略)


# 入門書などで、関数の引数宣言時、配列は一番外側の添え字が省略できる、
# などの記述はここに起因する。
454デフォルトの名無しさん:2005/12/12(月) 00:26:29
>>432
 関数の引数宣言時の「一番外側の"[]"」は、ポインタ型として解釈される。

が正しい。
これは、Cでは配列を関数の引数として渡せないため。
つまり、コンパイラは以下のように判断する。

type hoge[n] → type *hoge
type hoge[n][n] → type (*hoge)[n]
type hoge[n][n][n] → type (*hoge)[n][n]
(以下略)


# 入門書などで、関数の引数宣言時、配列は一番外側の添え字が省略できる、
# などの記述はここに起因する。
455デフォルトの名無しさん:2005/12/12(月) 00:43:05
みんな。どんなコンパイルつかってる?
456デフォルトの名無しさん:2005/12/12(月) 00:44:52
>>455
コンパイルは使えないなぁ…。


# コンパイラなら、VC++・BCB・GCC・HEWなど、
# 案件に合わせて使い分けているが。
457デフォルトの名無しさん:2005/12/12(月) 01:02:38
>>456
そうか。おれは、GCCなんだが、そろそろ、卒業しようと思うんだ。
458デフォルトの名無しさん:2005/12/12(月) 01:05:13
特に卒業する理由がないのならそのまま使い続けてればいいと思うよ。
なにか思うところがまるのなら話は別だが。
459デフォルトの名無しさん:2005/12/12(月) 01:08:33
みんなリンカは何使ってる?
俺はGNU LDなんだがそろそろ卒業かなと考えているんだ
460デフォルトの名無しさん:2005/12/12(月) 01:11:28
おれは Turbo-C なんだがそろそろ卒業かなと考えてるんだ
461デフォルトの名無しさん:2005/12/12(月) 01:15:53
卒業してCL.EXEに逝くんだろ?
462デフォルトの名無しさん:2005/12/12(月) 01:22:06
俺はINTEL C CONPIRERなんだけどそろそろ卒業かな(照
463デフォルトの名無しさん:2005/12/12(月) 01:23:34
二番煎じはツマンネ
464デフォルトの名無しさん:2005/12/12(月) 01:26:45
IntelC++Compilerといえば、まだVS2005対応版出てないよな?
465デフォルトの名無しさん:2005/12/12(月) 01:39:47
ごめん、どこで、gccだんろーどできますか?
466デフォルトの名無しさん:2005/12/12(月) 02:01:30
ここえ団ロードできますお^^
HTTP://GCC.GNU.ORG/
467427 :2005/12/12(月) 14:58:16
私は大変な勘違いを犯していたようだ。
*argv[] というポインタ配列の先頭を指すポインタへのポインタが
argv であるから、 char **argv の宣言は main() が呼び出される際、
コマンドライン引数のポインタ配列の先頭のアドレスを char **argv に
渡すと考えれば、 argv[n] といった書き方は文字列の先頭のアドレスを
printf() に渡すことになり、当然の摂理だったんだ。
話をごっちゃにしてしまって本当に申し訳ない。
468デフォルトの名無しさん:2005/12/12(月) 17:59:30
>>455
どこの?って言われたら広島になるのかなぁ...?
469デフォルトの名無しさん:2005/12/12(月) 18:22:21
>>451
× scanf("%s",isbn);
○ scanf("%s",&isbn);

じゃないの?
470デフォルトの名無しさん:2005/12/12(月) 18:23:58
if(isbn!="N")

これだろ
471デフォルトの名無しさん:2005/12/12(月) 18:47:03
>>468
いやアレもう随分前に潰れたから。
472432: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] はコンパイルエラーになって当然だ #別の言語と混同してた・・・

お詫びして訂正いたします。
473デフォルトの名無しさん:2005/12/12(月) 20:25:13
自然対数の底Eを求めたいんだけど

E=1+1/1!+1/2!+1/3!+…+1/n!+…
てのをどう打ったらいいのか
わがんない
474デフォルトの名無しさん:2005/12/12(月) 20:40:36
>>473
Nはお好きに
#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);
}
475デフォルトの名無しさん:2005/12/12(月) 21:10:25
それだと
1+1/1+1/2+1/3+1/4+…
にならないか?
476デフォルトの名無しさん:2005/12/12(月) 21:13:22
scanf関数を用い、10個のintの配列の中に数字を入力して、最大値を返すプログラムを作っていて、
誤って文字を入力した場合に「数字を入力してください」と帰ってくるようにしたいのですが、
どのようにすればいいのでしょうか。
現在できているのが以下の状態です。

#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〜の行の間に何かが入るのでしょうが…
477デフォルトの名無しさん:2005/12/12(月) 21:18:17
>>475
d /= i だからあってるよ (d = 1/i にアラズ)
478デフォルトの名無しさん:2005/12/12(月) 22:01:06
>>476
これじゃ駄目?


#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();

}
479デフォルトの名無しさん:2005/12/12(月) 22:18:57
1192018341872408みたいな大きな数字が
分割されて119201834と1872408になるのは仕様?
480デフォルトの名無しさん:2005/12/12(月) 22:23:04
strtol使っちゃだめか?
481デフォルトの名無しさん:2005/12/12(月) 22:30:24
>>479
理由↓
>char buff[10];
482デフォルトの名無しさん:2005/12/12(月) 22:33:57
atoiもstrtolも文字列→数値の変換が失敗したら0を返すから
文字列"0"から数値0への変換が出来ないね。
これって関数の欠陥?
483デフォルトの名無しさん:2005/12/12(月) 22:35:31
>>478
scanfを使わないとだめなのです。
484デフォルトの名無しさん:2005/12/12(月) 22:40:33
>>482
strtolの引数使ってみるとか。
485480:2005/12/12(月) 22:49:03
俺の意図は484のとおり。
486デフォルトの名無しさん:2005/12/12(月) 22:49:32
>>482
0を返すとは決まっていない。
変換に失敗した場合は不定値を返す。


また、strtol()はどこで変換に失敗したかを受け取る事が出来る。
487デフォルトの名無しさん:2005/12/12(月) 22:50:06
1行にスペースで区切られた13個のデータを持つファイル
39 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;
}
488デフォルトの名無しさん:2005/12/12(月) 22:52:57
>>487
Cじゃ無いといけないのか?
489デフォルトの名無しさん:2005/12/12(月) 22:54:03
>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);
>}
>}
この「ループ部分」でfscanfしていないので、1行目だけしかみていない。
490487:2005/12/12(月) 23:02:25
>>488
sortコマンドでも良いのですが抜き取った後今度は4つ目と5つ目のデータを
用いて計算すればならないのです。
まずは抜き出しだけでもなんとか出来るようにしないといけないと思いまして...

>>489
ありがとうございます。
ちょっと考えて見ます。
491デフォルトの名無しさん:2005/12/12(月) 23:08:59
コンパイルすらできてないってみてなかった。
エラー内容は?
492デフォルトの名無しさん:2005/12/12(月) 23:11:42
>>490
awkとか。perlとか。excelとか。
493487: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.
494デフォルトの名無しさん:2005/12/12(月) 23:17:24
>>493
fclose使ってるくせに、fopen使ってないから。
495487:2005/12/12(月) 23:19:18
>>492
プログラムは最近覚えたCしか使えません。
excelでもよいのですが、ファイルの行数が10万行を超えるので
excelで扱おうと思うと2^16行までしか読み込めないので分割する必要があり
手間がかかるので、できれば一つのプログラムで処理したいのです。
496487:2005/12/12(月) 23:59:42
ちょっと作り直してみたのですがコンパイルした後inputいれてoutputファイル名入れた後うんともすんともいいません。
どうすればよいでしょうか?
#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;
}
497デフォルトの名無しさん:2005/12/13(火) 00:04:04
bの値はいつとってきていつ判定するんだっけ?
498デフォルトの名無しさん:2005/12/13(火) 00:06:33
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);



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) {

499デフォルトの名無しさん:2005/12/13(火) 00:16:44
> while (fin != NULL) {
どっからコピペしてきたんだよ。
500487:2005/12/13(火) 00:17:16
すいません。3つ目のデータを判別するのでbではなくcですね。
流れとしては
1行目を読み込み変数cが2ならoutputに書き出しそうでなければ2行目へ
2行目も同様にcが2ならoutputに書き出しそうでなければ3行目へ
以下略...
って感じです。
501487:2005/12/13(火) 00:21:01
>>499
一応新訂c言語入門を参考にしてるんですが....
全然違いますか?ぐぐってきます
502デフォルトの名無しさん:2005/12/13(火) 00:37:20
awk '$3 == 2 {print;}' < input > output
これだけの話かな? Cで苦労するメリットが何にもないな。
503デフォルトの名無しさん:2005/12/13(火) 00:45:52
>>496

>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で十分。
504デフォルトの名無しさん:2005/12/13(火) 11:15:14
簡単な質問かもしれませんが教えてください。

現在の時間から、指定した秒だけ離れた時刻を得るにはどうしたらいいんでしょう。

・・・・ちょっと分かりにくいかもしれないので、例を置いておきます。

09:00:00 ← 現在の時刻
指定する秒 = 5

前:08:59:55
505デフォルトの名無しさん:2005/12/13(火) 11:15:56
・・・わすれてた・・・

前:08:59:55
後:09:00:05

この二つが得られるような方法です・・・。
506デフォルトの名無しさん:2005/12/13(火) 11:36:58
>>504
現在の時刻(≠時間)をtime_tで取得後、加算or減算すればよろしかろ。
それをlocaltime()でばらしてstrftime()で文字列に整形すればOK。
507デフォルトの名無しさん:2005/12/13(火) 11:42:19
508デフォルトの名無しさん:2005/12/13(火) 12:00:42
>>506,507
ありがとうございます
509デフォルトの名無しさん:2005/12/13(火) 12:44:23
strcpy(c, "ABC")
で、ABCの文字列をAB"Cとダブルクォーテーション入れたい場合
どうしたらいいんでしょうか?
510デフォルトの名無しさん:2005/12/13(火) 12:46:18
>>509
"AB\"C"
511509:2005/12/13(火) 12:54:32
>>510
ありがとうござました
512デフォルトの名無しさん:2005/12/13(火) 12:55:40
Cの中では正規表現使えないのか?
513デフォルトの名無しさん:2005/12/13(火) 12:57:54
>>512
どこかで提供しているライブラリを使えば可能。
または、自分で処理を実装すれば可能。
514助けてください。。。: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のチェックをしていないといわれた
のですが、どうしていいのか手も足もでません,......。
どうか助けてください(切実)
515デフォルトの名無しさん:2005/12/13(火) 16:13:34
宿題は宿題スレへ
516デフォルトの名無しさん:2005/12/13(火) 16:31:47
Pbmこうぞうたいがどんなのかわからん

valもわからんけど
if (!val) return;
とかそんなのでは
517デフォルトの名無しさん:2005/12/13(火) 16:36:20
とりあえず、x<=0とかy<=0とかじゃない?
仕様知らんけど。
518デフォルトの名無しさん:2005/12/13(火) 16:38:53
;
519デフォルトの名無しさん:2005/12/13(火) 17:03:39
if((x >= pbm->width) || (y >= pbm->height) || (x <= 0) || (y <= 0)); <-コノセミコロンハヤバイ
520デフォルトの名無しさん:2005/12/13(火) 17:09:21
>>514
普通仕様無しでそういう種類の質問をしても答えてくれるワケは無いぞ。
ま、配列の計算式から言って、高々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;
とでもしておけ。
521& ◆yNq1OO4X9g :2005/12/13(火) 17:26:46
違うスレに書き込んだのに丁寧に教えてくださってありがとうございます(>_<)
無事コンパイルできました。
522デフォルトの名無しさん:2005/12/13(火) 18:12:22
>>380
やり方は処理系依存だが、デバッグ情報を読み出せればなんとかなりそう。
binary2.0に行き損ねてくやしい思いをしつつ見てた資料の中に、libbfdを
使えというお告げがあった。(UNIX or gcc限定?)
ぐぐってみた情報を参考に、適当に構造体を定義して作成した実行ファイルを
objdump -s で覗いてみると (objdumpなんて初めて使ったよ) .debug_info
セクションに何やら定義した構造体のメンバらしきものが。
どうやってデコードすればよいかわからんが、gdbのソースをあされば何か
出てくるんじゃないかな。
Visual C++とかの場合はどーすればいーのかね。
523デフォルトの名無しさん:2005/12/13(火) 22:08:12
そりゃ、VCでもpdbをどーこーすればいんだけどさ。
おいらは独自のプリプロセッサを使った方が早いと思うよ
524デフォルトの名無しさん:2005/12/13(火) 22:31:34
巨大ファイルを扱いたいのですが、open()でオプション指定するしか
方法ないですかね? L_LARGEFILE とか、
525デフォルトの名無しさん:2005/12/13(火) 22:56:55
size_tが充分巨大な処理系使えば。
526デフォルトの名無しさん: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);

}

}
527デフォルトの名無しさん:2005/12/13(火) 23:21:58
デュアルコアでスレッド使えば可能?
528デフォルトの名無しさん:2005/12/13(火) 23:22:27
マルチスレッド?
529デフォルトの名無しさん:2005/12/13(火) 23:23:25
スレッドでなく、プロセスで実現したいのですが・・・
530デフォルトの名無しさん:2005/12/13(火) 23:23:27
>>524
fpos_tも大きいほうが良い。

でも別にsize_tもfpos_tも大きくなくとも
毎回の読み書きがsize_tの範囲内で収まれば問題ないはず。
531デフォルトの名無しさん:2005/12/13(火) 23:27:45
あっ、プロセスはわからね
532デフォルトの名無しさん:2005/12/13(火) 23:29:59
>>526
tee
533デフォルトの名無しさん:2005/12/13(火) 23:48:38
>>532
tee?
534デフォルトの名無しさん:2005/12/14(水) 00:31:46
ATIドライバーとかATIプログラムってなんですか?パソ起動したときに警告ってでるんですけれど…
そしてパソゲーできなひ…
535デフォルトの名無しさん:2005/12/14(水) 00:34:46
激しくスレ違い
536デフォルトの名無しさん:2005/12/14(水) 00:35:04
↑ATIドライバーがインストールできませんでした。ってみたいなことの警告がでます。
537デフォルトの名無しさん:2005/12/14(水) 00:35:46
すいません。
どこで聞いたらいいですか??
538デフォルトの名無しさん:2005/12/14(水) 00:36:06
スレ違いだって言ってんだろうが!
539デフォルトの名無しさん:2005/12/14(水) 00:37:11
>>537
Windows なら Windows 版に逝け
540デフォルトの名無しさん:2005/12/14(水) 00:38:10
すいません。ありがとうございます!
541デフォルトの名無しさん:2005/12/14(水) 00:41:14
>>535 = >>538 = >>539 は、ツンデレ
542デフォルトの名無しさん:2005/12/14(水) 05:39:03
>>526
tee
543デフォルトの名無しさん:2005/12/14(水) 07:45:05
標準入力を複数プロセスでどうやって受け取るつもりなのか質問者も阿呆だけど、
teeがその目的に合うと勘違いする香具師も阿呆だな。
544デフォルトの名無しさん:2005/12/14(水) 07:51:24
teeを参考に、stdinを分岐して子プロセスに渡せばいいんじゃないの。
stdin->tee->pipeA | stdin ->proc1
       -> pipeB|stdin ->proc2
545デフォルトの名無しさん:2005/12/14(水) 08:31:29
漏れもteeで良いと思う
546デフォルトの名無しさん:2005/12/14(水) 10:11:07
teeとはteaのドイツ語
547デフォルトの名無しさん:2005/12/14(水) 10:29:57
平均と偏差を入力して正規分布に乗った
乱数を発生させたいのですがどうすればよいでしょう?
548デフォルトの名無しさん:2005/12/14(水) 10:53:40
>>547
検索ぐらいしろ。Box-Muller法
549デフォルトの名無しさん:2005/12/14(水) 11:06:40
てか、こういう質問ってCなのか?
アルゴリズムじゃねーの?
550547:2005/12/14(水) 11:15:14
ありがとうございます!
検索は一応したのですが。助かりました!
551デフォルトの名無しさん:2005/12/14(水) 12:21:05
.NET 2003で、

#define AAAAA
#define BBB (defined(AAAAA))

foo(){
:
#if defined(AAAAA)
aaa();
#endif
#if BBB
bbb();
#endif
:
}

とした場合、
aaa()はコードになるのに、bbb()はコードになりません。
defind()をdefineするのはNGなのでしょうか?
552デフォルトの名無しさん:2005/12/14(水) 12:38:03
553デフォルトの名無しさん:2005/12/14(水) 12:39:30
>>551

#define AAAAA
#define BBB defined(AAAAA)

foo(){
:
#if defined(AAAAA)
aaa();
#endif
#if BBB
bbb();
#endif
:
}
554デフォルトの名無しさん:2005/12/14(水) 12:44:06
>>551
#ifdefや#ifndefでいいのでは?
555551: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ではうまくいきません。
556デフォルトの名無しさん:2005/12/14(水) 13:02:20
>>>555
#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
557デフォルトの名無しさん:2005/12/14(水) 13:10:03
>>555
gccでは通るんだけどね。
特に「definedをdefineしてはいけない」って仕様はなかったはずだし…
VCの欠陥かと
558551:2005/12/14(水) 13:20:21
レスありがとうございます。

>>556
確かにそのように記述すれば意図どおりになります。
ご教示ありがとうございます。

>>557
当方にもgccがあるのでやってみましたところ
(最初から試すべきでしたねorz)
確かにgccでは意図通りになりました。
VC特有の現象(仕様)でしょうか?


>>556 の書き換えで問題は解消できますが、
(その意味ではクローズで結構です)
できれば「VCだと(?)definedをdefineできない」という根拠というか情報源を
ご存知の方がいましたらご教示いただけるとありがたいです。

よろしくおねがいいたします。
559デフォルトの名無しさん:2005/12/14(水) 14:28:18
>>557
>特に「definedをdefineしてはいけない」って仕様はなかったはずだし…
「この置き換えによって字句 defined が生成される場合,又は
 defined 単項演算子のマクロ置き換え前の使用法が,制約の中で
 規定した二つの形式のいずれにも一致しない場合,その動作は
 未定義とする。」 (JIS X 3010 : 2003 (ISO/IEC 9899 : 1999)
560デフォルトの名無しさん:2005/12/14(水) 14:29:35
違った。
× >>557
○ >>558
561デフォルトの名無しさん:2005/12/14(水) 15:49:07
mallocに関してですが、

char *p;

p = (char*)malloc(10000);
と領域を取ります。

*--p=1;
*--p=2;
*--p=3;

でもセグメンテーション違反は起らず、

*++p=1;
*++p=2;
*++p=3;

でもセグメンテーション違反が起きません。
どうしてでしょうか?・・・
malloc()は確保した領域の先頭アドレスを返すはずですが。。。
562デフォルトの名無しさん:2005/12/14(水) 16:09:19
>>561
それは「たまたま」起こらなかっただけ
563デフォルトの名無しさん:2005/12/14(水) 16:11:13
>>561
確保した領域外がどうなっているかなど規定されていませんが。
564561:2005/12/14(水) 16:27:31
なるほど。
じゃあ、どこかの領域が破壊されてることになるね。。
おそろしや、Cはなんでもありだ・・・。
565デフォルトの名無しさん:2005/12/14(水) 16:32:56
そんなのCじゃなくても動的メモリ割り当てを持ってる言語ならほとんどに該当するわけだが
566デフォルトの名無しさん:2005/12/14(水) 16:45:03
だが、それがいい
567デフォルトの名無しさん:2005/12/14(水) 17:07:05
なあに、かえって免疫がつく
568デフォルトの名無しさん:2005/12/14(水) 18:41:10
>>561
自分で簡単なmalloc/freeを実装してみれ。何故そうなってるかよく理解できるから。
569ビル・ジョブス:2005/12/14(水) 19:14:13
>>568
それは>>561にとってチョット辛いのでは・・なぜなら概念を知らないようなので・・。

>>561
Memory Control Blockって考え方知ってる?
割当てた領域毎の先頭に、こんな感じの構造体が付いているんですよ。
typedef struct mcb {
  struct mcb *prev;
  struct mcb *next;
  unsigned size;
  uchar buff[1];  // ここが確保した領域の先頭ですよ、[1]の理由は分かりますか?
} MCB;
実際に割当てた領域サイズは、sizeof MCB + (リクエストサイズ) - 1 なんですよ。
(バウンダリ合わせとか抜きにして)
570デフォルトの名無しさん:2005/12/14(水) 19:29:51
そういや、MFC の CString もそんな感じに確保してるね。
printf とかにそのままつっこめるように。
571デフォルトの名無しさん:2005/12/14(水) 20:01:32
そりゃCStringだし
572デフォルトの名無しさん:2005/12/14(水) 20:15:52
>>569
初心者だからって、嘘を教えないように。
573デフォルトの名無しさん:2005/12/14(水) 20:41:05
javaのやりすぎでとち狂ってしまい文字列と変数の組み合わせ方を忘れてしまいました。

int x = 20;

TextOut(hdc,10,10,"abcd"x);

みたいな使い方でいいんでしたっけ?
コンパイルする環境が今ないもので;
574デフォルトの名無しさん:2005/12/14(水) 21:00:17
>>573
スレ違い
575デフォルトの名無しさん:2005/12/14(水) 21:09:40
>>571
STL の string は(ry
576デフォルトの名無しさん:2005/12/14(水) 21:11:12
sprintf(buf, "abcd%d", x);
TextOut(hdc, 10, 10, buf);
577デフォルトの名無しさん:2005/12/14(水) 21:33:41
Menu SelectMenu(void)
{
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);
}
これなんですが、宣言の構文エラーになってしまいます。ちゃんと全部書き写したんですが・・・
578デフォルトの名無しさん:2005/12/14(水) 21:37:29
>>577
>>1
> エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。
579デフォルトの名無しさん:2005/12/14(水) 21:37:34
TermとかInValidはグローバル変数なのか?
それとも定数か?

Menu型もワカンネ
580デフォルトの名無しさん:2005/12/14(水) 21:37:51
質問です。
バッファのフラッシュって何のことですか?
581デフォルトの名無しさん:2005/12/14(水) 21:38:31
>>580
スレ違いです。
582577:2005/12/14(水) 21:39:42
自力で解決しました。小文字と大文字の違いってだけでしたw
ごめんなさ〜い!
583デフォルトの名無しさん:2005/12/14(水) 21:40:09
Menu、 Term、InValidの宣言がないんじゃないの?>>577
584デフォルトの名無しさん:2005/12/14(水) 21:41:56
>>580
バッファの内容を露出(Flush)することです。

まだファイルに書き出されていないで、バッファに残っている内容を
ファイルに書き出すこと。
585577:2005/12/14(水) 21:43:17
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");

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;
}
586577:2005/12/14(水) 21:43:58
}while(menu!=Term);

return(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() )

こうなっちゃいました・・・馬鹿ですいませんが誰か指導してください・・・・
587580:2005/12/14(水) 21:45:38
>>584
ありがとうございます
588デフォルトの名無しさん:2005/12/14(水) 21:46:09
>>577
直ったんじゃないの?
589デフォルトの名無しさん:2005/12/14(水) 21:47:16
>>577
270行もあるようには見えないんだが?
590577:2005/12/14(水) 21:47:55
いや、またエラーが出ちゃいました。300行以上あるコードなんでなんとか実行したいんです・・・
591デフォルトの名無しさん:2005/12/14(水) 21:49:07
直して欲しいならソースコード全部うpしろ


つーか高々300行かよ
592デフォルトの名無しさん:2005/12/14(水) 21:49:23
c言語の基本を勉強してください。
593デフォルトの名無しさん:2005/12/14(水) 21:50:09
全部晒せよ
エラー出る所以外にも色々アドバイスもらえるかもよ
594デフォルトの名無しさん:2005/12/14(水) 22:00:40
InValid って何だ?
IsValid や Invalid なら分かるが。
595デフォルトの名無しさん:2005/12/14(水) 22:06:40
>>586
char ** を const char ** の引数には渡せない。
渡せるのは char *const * に対してだが、あまり意味が無い。
一番いいのは const char *const * で、
これに渡せて良さそうなもんだが、
C の const の仕様は不完全で渡せない。
キャストするしかない。
596デフォルトの名無しさん:2005/12/14(水) 22:10:24
>>595
横からだが、Cの仕様が不完全で非constなダブルポインタから
constなダブルポインタへの暗黙の変換が_って事?
597デフォルトの名無しさん:2005/12/14(水) 22:10:25
func((const char**)str);
598デフォルトの名無しさん:2005/12/14(水) 22:13:41
http://www.kouno.jp/home/c_faq/c11.html#10
C FAQかと思ったら違った。
どこかでchar **を暗黙のうちにconst char **へ変換できてしまうと
まずいことになる例が紹介されていた覚えがあるのだが。
599デフォルトの名無しさん:2005/12/14(水) 22:35:30
const char **p; で保護されるのは、見たままの **p や p[?][?] だ。
しかし、*p や p[?] までは保護されない。危険だ。

char *const *p; で保護されるのは、見たままの *p や p[?] だ。
しかし、**p や p[?][?] までは保護されない。もっと危険だ。

const char *const *p; ではじめて両方保護される。
こんなに const つけないといけないのはマンドクセだが、
そういう仕様なんだからしゃーない。
そして、なおかつこれに渡すにはキャストがいるってのもマンドクセだが、
そういう仕様なんだからしゃーない。

ちなみに C++ だと const char ** へは暗黙にキャストされないが、
const char *const * へは暗黙にキャストされる。
600デフォルトの名無しさん:2005/12/14(水) 22:42:40
char
 const **p;

とか

char *
 const *p;

とか書いたら理解しやすいと思う。
まあ、参照先保護の const ってのはそういうもん。
601487:2005/12/14(水) 22:47:14
>>502,503
レスが遅れてすいません
無事実行できました
本当にありがとうございました。
602577:2005/12/14(水) 23:23:11
本が間違ってるのに気が付きました。すいませんでした〜
603577:2005/12/14(水) 23:29:59
#include<time.h>
#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<>_",
};
604577:2005/12/14(水) 23:32:06
char *cstr[]={
"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"
};
605デフォルトの名無しさん:2005/12/14(水) 23:34:38
ちょwwww嫌がらせ?wwww
606577:2005/12/14(水) 23:34:48
char *vstr[]={
"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,",
};
607577:2005/12/14(水) 23:35:18
int go( const char *str)
{
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);
}
608577:2005/12/14(水) 23:36:34
void pos_training(void)
{
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();
609577:2005/12/14(水) 23:37:38
for(stage=0;stage<NO;stage++){
char 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");
610577:2005/12/14(水) 23:38:58
for(i=0;i<4;i++){
int 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]);
611デフォルトの名無しさん:2005/12/14(水) 23:39:17
うpろだ使ってくれ
612577:2005/12/14(水) 23:39:24
printf("\nスペースキーで開始します。\n");
while(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);

}
613577:2005/12/14(水) 23:40:16
void word_training(const char *mes,const char *str[],int n)
{
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);
}


迷惑かけてすいません!どうしてもエラーを直したいのです・・
614577:2005/12/14(水) 23:41:14
Menu SelectMenu(void)
{
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");

615577:2005/12/14(水) 23:42:27
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;
}
}while(menu!=Term);

return(0);
}
以上です!わかる方いたら抱きしめたいです!
616デフォルトの名無しさん:2005/12/14(水) 23:44:55
何この荒らし
617デフォルトの名無しさん:2005/12/14(水) 23:46:18
>>577
×char *cstr[]={
○const char *cstr[]={
×char *vstr[]={
○const char *vstr[]={
618577:2005/12/14(水) 23:49:02
>>617
ありがとうございます!でも3、4の単語と会話のタイピングが選択しても実行されないっすorz

皆様どうもすいませんでした!
619sage:2005/12/15(木) 00:02:02
オセロ。
うまくひっくり返すのができません。
原因はなんなんでしょうか。
プログラムはx = 4 y = 2 c = 1を入力してひっくり返しをためしています。

下にプログラムを張ります。
620デフォルトの名無しさん:2005/12/15(木) 00:06:10
>>569
鉄格子のついた病院に帰れ莫迦。
621デフォルトの名無しさん:2005/12/15(木) 00:08:01
あー、>>577 も二度と来るな。
622デフォルトの名無しさん:2005/12/15(木) 00:16:57
> 迷惑かけてすいません!どうしてもエラーを直したいのです・・
お前の脳味噌のエラーを直しに病院逝け
623デフォルトの名無しさん:2005/12/15(木) 00:20:42
分かりました!今から閉まっている病院のドアを叩きに行きます・・
624デフォルトの名無しさん:2005/12/15(木) 01:21:44
こういう香具師って、自殺したらしたで、地獄で迷惑掛け捲るんだろうな。
625デフォルトの名無しさん:2005/12/15(木) 01:51:57
地獄って、お前…
626デフォルトの名無しさん:2005/12/15(木) 02:05:06
ワラ
627デフォルトの名無しさん:2005/12/15(木) 08:55:07
構造体のコピーはOKで、配列のコピーはNGってなんで?
構造体のコピーって後から加わった仕様なの?
628デフォルトの名無しさん:2005/12/15(木) 09:00:07
んなこたぁない
629デフォルトの名無しさん:2005/12/15(木) 09:00:39
>>627
今ひとつ意味がわからないが構造体が=でコピー代入できるのに
配列だと出来ないことを指してるのか?
630デフォルトの名無しさん:2005/12/15(木) 09:01:58
自演やめれ
631デフォルトの名無しさん:2005/12/15(木) 09:04:43
コピーって代入(=)のことですか?
そうなら、K&R初版のころから仕様としてはあった。
だけど、初期のコンパイラはそれを実装していなかったものが多かったようだ。
ANSI C対応のものなら、OK。

配列a[100]のaはCではポインタだから、aをポインタとして代入するならできる?
でも配列の中身のコピーはNG
632627:2005/12/15(木) 09:05:48
自己解決しました。
633627:2005/12/15(木) 09:10:07
そうです、代入の事です

struct ABC{
   int array[10];
};

void main(void){
   strcut ABC hg1, hg2;
   int foo1[10], foo2[10];

   hg1 = hg2;      ←これだと、arrayもコピされる・・・
   foo1 = foo2;  ←怒られる
}

が、なんか納得いかないです
634627:2005/12/15(木) 09:11:38
>>632
だれ?

初期化してないだろ
とかいう突っ込みは無しでお願いします
635デフォルトの名無しさん:2005/12/15(木) 09:21:10
>>634
これは?

int *foo1, foo2[10];

foo1 = foo2;
636627:2005/12/15(木) 09:22:23
>>635
中身を丸ごとコピーしたいんです
=で
637デフォルトの名無しさん:2005/12/15(木) 09:24:42
>>636
だから、できない!
foo2はポインタなんだよ。配列全部じゃないんだ。

もしやりたければ、memcpyでコピーするだね。
638店長:2005/12/15(木) 09:49:39
CASLU 分かります?
639デフォルトの名無しさん:2005/12/15(木) 09:50:46
構造体が代入できるのはCでなくC++で=を演算子オーバーロードしてるからでは。
640デフォルトの名無しさん:2005/12/15(木) 09:54:15
オーバーロードしなくてもできるなorz
641デフォルトの名無しさん:2005/12/15(木) 10:36:56
>>633
キモチは解らんでもないが…
  // E は任意の型、n および m は1以上の整定数
  E (*left)[n];
  const E (*right)[m];
として
  left = right;
が出来るようにしちゃうと、どっかに問題が起こりそうな…
642デフォルトの名無しさん:2005/12/15(木) 11:03:28
>>639
Cで飯食ってる人間でも構造体の代入ができることを知らない香具師がいるけどあんたもその口か?

>>633
Cでまともな配列演算がサポートされていることを期待する方が間違い。
関数に渡すこともできないし、範囲のチェックもサポートされていないのだから。
643487:2005/12/15(木) 11:39:37
おかげさまで取り出しは可能となったのですが、同じデータで
1行目と2行目を読み込んで計算をさせたいのですがfprintfでは1行しか読み込んでくれません。
複数行読み込むにはどうしたらいいのでしょうか?

一応対策としては元のデータの1行目にダミーデータを入れるか削るかして、
別ファイルで保存して元のファイルとそのファイルを読み込んでデータ処理すれば
1行ずれているので結果2行分扱えると考えてはいるのですが。

良い方法があればお願いします。
644デフォルトの名無しさん:2005/12/15(木) 11:40:22
関数に渡すこともできないし
645デフォルトの名無しさん:2005/12/15(木) 11:41:56
fscanfなんか使ってるからだよ
646デフォルトの名無しさん:2005/12/15(木) 11:42:09
>>642
あんたは全て知り尽くしてて、それまでは飯食わなかったのか?そらすげ
647デフォルトの名無しさん:2005/12/15(木) 11:48:00
/* 記憶領域の確保 */
if ((p = (struct list *) malloc(sizeof(struct list))) == NULL) {
printf("malloc error\n");
exit(1);
}


(struct list *)
↑*なに?かける?
648デフォルトの名無しさん:2005/12/15(木) 11:52:20
>>487 == >>643
doubleなのに%lfじゃなくて%fで書式指定してるけど大丈夫なん?
649デフォルトの名無しさん:2005/12/15(木) 11:53:11
>>647
キャスト
650デフォルトの名無しさん:2005/12/15(木) 11:54:25
thx
651デフォルトの名無しさん:2005/12/15(木) 12:02:40
>>487
FILE *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);
652642:2005/12/15(木) 12:21:04
>>646
少なくとも、見習いコーダーのうちは飯食ってるとは言わないと思うが。
それじゃまぁ、一応言い直しておくよ。

何年もCプログラミングで生計を立てている(或いはCプログラマーとして仕事をしている)人間でも(以下略
653デフォルトの名無しさん:2005/12/15(木) 12:21:58
>>487
だからawkで事が足りるだろうと。
654デフォルトの名無しさん:2005/12/15(木) 12:34:14
自分ひとりで作ってるのならともかく、チームの一員として働いてれば
構造体の代入くらいは目にすると思うんだがなぁ。
655487:2005/12/15(木) 12:55:18
>>648
はい。最初それがわからなくて悩んでたんですが
気がついて直しました。

>>653
なんどもいわれているのでちょっと勉強してみます。
656デフォルトの名無しさん:2005/12/15(木) 13:11:29
>>654
戻り値に構造体持ってくるケースがあるね。
コピーのオーバーヘッド大きくなりすぎるから
結局ポインタで受け渡しする方が多いけど。
657487:2005/12/15(木) 13:16:58
>>651
すいません。見落としてました。
これで試してみます。ありがとうございます。
658639:2005/12/15(木) 13:31:11
>>652>>654
構造体の代入、目にはしてるし使ってはいたが、あらためて
意識したことが無かったってことだよ。
職人肌で技術プライド高いのはわかるが、ひとこと多いな。
即座に調べてミスを訂正してるにも関わらず。
プログラム以前に人格(以下略
659デフォルトの名無しさん:2005/12/15(木) 13:46:20
あれで当人が言い直したようには見えないしね。
あんたも652と同じくらい性格が曲がっているよ。
660デフォルトの名無しさん:2005/12/15(木) 13:52:05
>>651
fprintfのdoubleの書式指定は%fだよ
C99からは%lfも指定できるようになったがそれ以前の規格では%lfを指定すると未定義動作を引き起こす
scanf系とprintf系の書式指定は微妙に対応していない
661デフォルトの名無しさん:2005/12/15(木) 14:32:26
>>652
なんで、論理の破綻した >>646 なんかにレスするかなぁ…
662デフォルトの名無しさん:2005/12/15(木) 14:48:25
char a[10]="ABC";
char *p;
p=a ;
printf("%c",*p);

↑OK
↓動かん 何で?

int a=5;
int *p;
p=a ;
printf("%s",*p);
663デフォルトの名無しさん:2005/12/15(木) 14:51:11
char配列を渡すとアドレスの最初[0]が渡される
普通のcharを渡しても実数を渡すだけでアドレスは渡されない


int a=5;
int *p;
p=&a ; //&を付けてaのアドレスを渡す
printf("%s",*p);
664デフォルトの名無しさん:2005/12/15(木) 14:53:15
%sを%dにする
665デフォルトの名無しさん:2005/12/15(木) 14:54:27
char配列のときだけ特別ってわけね
thx
666デフォルトの名無しさん:2005/12/15(木) 15:05:36
int a[2];
int *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));
667デフォルトの名無しさん:2005/12/15(木) 15:10:54
お前の態度が気に入らない
668デフォルトの名無しさん:2005/12/15(木) 15:18:23
>>666
後者は配列ではなく配列の配列なのだからpの型が間違っている。
ついでに言えば、printf()での参照の仕方も間違っている。
669デフォルトの名無しさん:2005/12/15(木) 15:20:26
>>666
どういう結果を期待してるのか書いてもらわんとわからん
670デフォルトの名無しさん:2005/12/15(木) 15:33:54
a 番地 物
a[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
671デフォルトの名無しさん:2005/12/15(木) 15:35:02
#include <stdio.h>
void main()
{
float s;
float t;

printf("身長(cm):");
scanf("%f", &s);
printf("体重(g):");
scanf("%f", &t);

}

これを実行すると身長を入力した後に何故かDebug Errorが出ます
どうして?ちなみにコンパイラはVC++
672デフォルトの名無しさん:2005/12/15(木) 15:35:11
>>668
*(p[5])
なんかこんなかんじのにするとかきいたことあるようなないような
673デフォルトの名無しさん:2005/12/15(木) 15:40:46
>>670
a[2][2]で番地が6個もあるのはおかしい
674デフォルトの名無しさん:2005/12/15(木) 15:42:50
>>670
a 番地 物
a[0][0] 1000 0
a[0][1] 1001 0
a[1][0] 1002 0
a[1][1] 1003 1
675デフォルトの名無しさん:2005/12/15(木) 15:42:48
>>671
初心者スレへどうぞ。
その際はエラーメッセージの内容もお書きください。
676デフォルトの名無しさん:2005/12/15(木) 15:43:14
あ〜
本とだ、2が余分だ
677デフォルトの名無しさん:2005/12/15(木) 15:43:39
>>670
要素数=2 なんだから、範囲はa[0][0]〜a[1][1]。
p = (int*)a;
とするか、
int (*p)[2];

>>671
>void main()
何だコレは。

つかオマイラ、人に訊くレベルにも達してない。
678デフォルトの名無しさん:2005/12/15(木) 15:45:42
>>671
Scanfの%fは%lfでないの?
679デフォルトの名無しさん: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() )
680デフォルトの名無しさん:2005/12/15(木) 15:47:58
>>679
そっち違う違う
681デフォルトの名無しさん:2005/12/15(木) 15:48:13
>>679
また無茶なことを
682デフォルトの名無しさん:2005/12/15(木) 15:48:25
>>671
全角文字入力してるって落ち?
683デフォルトの名無しさん:2005/12/15(木) 15:53:04
ゴキブリ捕まえた
684デフォルトの名無しさん:2005/12/15(木) 15:53:27
>>675
どこにあるの?

>>677
void main()はたいした問題じゃねえだろ
うちなんかmainもvoid main(void); ってプロトタイプ宣言させられるぞ

>>682
それだったら違うコンパイルエラーが出るでしょ


とにかくコンパイルは通るのです
とりあえずコピペしてやってみてよ、VC++だけど
何故か実行時にエラーが出るから
685デフォルトの名無しさん:2005/12/15(木) 15:55:55
>677
できたわ
thx
686デフォルトの名無しさん:2005/12/15(木) 15:57:52
>684
普通に出来たよ
bcc
687デフォルトの名無しさん:2005/12/15(木) 15:59:28
これで、ゴキブリ二匹目だ
688デフォルトの名無しさん:2005/12/15(木) 16:04:20
>>684
bcc普通に通って実行出来ますよ。
VC++6.0普通に通って実行出来ますよ。
689デフォルトの名無しさん:2005/12/15(木) 16:05:02
再起動
再構築などすれば?
690デフォルトの名無しさん:2005/12/15(木) 16:05:41
16進数から2進数に変換するプログラム
をお願いします。
お忙しい中、恐縮です。
691デフォルトの名無しさん:2005/12/15(木) 16:07:10
>>690
宿題スレに行け
692684:2005/12/15(木) 16:07:33
身長(cm):って出た後に入力してみた?
693デフォルトの名無しさん:2005/12/15(木) 16:08:54
694ゴキブリハンター:2005/12/15(木) 16:09:15
二個同時に入力してるの?
一個入れてエンター
一個入れてエンターだぞ
695684:2005/12/15(木) 16:10:49
俺に聞いてるの?もちろんそうやってるさ
696デフォルトの名無しさん:2005/12/15(木) 16:11:22
>>684
いてら
697デフォルトの名無しさん:2005/12/15(木) 16:12:53
>>684
もう一度聞くが、全角文字で身長を入力してるんじゃないのか?
その名前欄からして
698デフォルトの名無しさん:2005/12/15(木) 16:13:15
>>684
http://g.pic.to/65zky
オレヤサシス
699684:2005/12/15(木) 16:13:46
そこまで初心者じゃないよ
700デフォルトの名無しさん:2005/12/15(木) 16:14:24
あきらめて
HSPに帰れ
701684:2005/12/15(木) 16:14:47
>>698
さんくす
何故だろうな
702デフォルトの名無しさん:2005/12/15(木) 16:16:02
>>684
原因を指摘して解決方法も指摘できるのだがすれ違いにつき割愛。
それはあくまでも開発環境の問題だ。
703684:2005/12/15(木) 16:17:38
>>702
すれ違いならどこ行けばいいの?
704ゴキブリハンター:2005/12/15(木) 16:18:48
705デフォルトの名無しさん:2005/12/15(木) 16:24:06
706デフォルトの名無しさん:2005/12/15(木) 17:00:33
シェルソートので間隔を h=3h+1にしたら
高速になる理由を教えていただけませんか?
707デフォルトの名無しさん:2005/12/15(木) 17:01:19
過去の恥ずかしいレス消したい気持ちは分かるが
自演やめれって
708デフォルトの名無しさん:2005/12/15(木) 19:35:40
>>690
宿題スレでかなり真面目に答えたんだが。
709デフォルトの名無しさん:2005/12/15(木) 21:44:07
>>706
なんでかは知らないが昔の人がいろいろ試してみたらそうなったんだよ。
710デフォルトの名無しさん: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
711デフォルトの名無しさん:2005/12/15(木) 21:48:18
計算式違ったw
712デフォルトの名無しさん:2005/12/15(木) 22:25:51
713デフォルトの名無しさん:2005/12/15(木) 22:50:49
画像を読み込んで表示するプログラムを教えてください。超素人です。
お願いします。
714デフォルトの名無しさん:2005/12/15(木) 22:55:14
>>713
バイナリで読み込んで、バイナリで出力
715デフォルトの名無しさん:2005/12/15(木) 22:57:07
[1] 授業単元:生産工学
[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] その他の制限: プログラムリストとそれによってできたグラフを印刷して提出といわれますた。
            グラフのソフト等も特に制限はないそうです。

よろしくお願いします!!!!!!!!!!!!!!!
716デフォルトの名無しさん:2005/12/15(木) 22:57:12
>>713
C言語標準の内容でその機能を実現することは不可能です。
表示したい環境を特定した上で、その環境のスレッドへ移動
してください。
717デフォルトの名無しさん:2005/12/15(木) 22:57:37
>>715
誤爆ですね?
C/C++の宿題を片付けます 55代目
http://pc8.2ch.net/test/read.cgi/tech/1134128493/
718デフォルトの名無しさん:2005/12/15(木) 22:58:36
>>717&all
すいません、誤爆しました。
719デフォルトの名無しさん:2005/12/15(木) 23:06:03
>>716さん
すみません、素人中の素人なので。詳しく教えていただけませんか?
720デフォルトの名無しさん:2005/12/15(木) 23:07:19
>>719
プログラム以前の問題です。
721デフォルトの名無しさん:2005/12/15(木) 23:11:23
>>719
Windowsなら「Win32APIのみ」、「MFCを使ってもよい」、「特定の外部
ライブラリを使ってもよい」など、
Unixなら…Macなら…
と環境によってやり方がバラバラで統一した方法がないということです。
いずれにせよ、ここはスレ違いです。
722デフォルトの名無しさん:2005/12/15(木) 23:11:41
>>720
言語を変えればできるのですか?
723デフォルトの名無しさん:2005/12/15(木) 23:11:46
>>713
マジレスするとMicrosoft Photo Editor
724デフォルトの名無しさん:2005/12/15(木) 23:12:42
WINAPIを使えるようになったらいいんじゃないか?
725デフォルトの名無しさん:2005/12/15(木) 23:14:12
スレ違いなのに答えるから、次から次へとスレ違いの質問がやってくる。
726デフォルトの名無しさん:2005/12/15(木) 23:19:53
ハーバート・シルトのSTL標準講座という本でSTLの勉強をしていたのですが
どうしてもわからないものにぶち当たってしましたました。
下記のソースのなかで
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;
}
727726:2005/12/15(木) 23:20:25
あ・・・スレ間違えました・・・ごめんなさい。
728デフォルトの名無しさん:2005/12/15(木) 23:21:54
最近スレ違いを素でやる連中が多いのか、それともただの嵐か・・・

729726:2005/12/15(木) 23:23:11
素で間違えました。
本当にごめんなさい。
730デフォルトの名無しさん:2005/12/15(木) 23:53:18
>>728
加えて、自分で考えたり調べようともしないヤシが増えたこと、増えたこと…。
731デフォルトの名無しさん:2005/12/16(金) 00:34:20
Winsockのプログラミングについてお伺いしたいことがあります
いま簡単な複数の接続を受け入れるEchoサーバーを作成しています

そこでWSAAsyncSelect()へListenSocketを渡し
FD_READイベントを待機します
しかしイベントが発生した際に送信元が誰なのか(誰に返送すればイイのか?)
を特定する方法に悩んでいます。

何か良い方法は無いでしょうか?
※ListenSocketとはサーバーサイドのソケットです
732デフォルトの名無しさん:2005/12/16(金) 00:37:35
>>731
スレ違い
733デフォルトの名無しさん:2005/12/16(金) 00:40:58
>>731
lesten 用のソケットでは通信出来ないよ。
って言うか激しくスレ違い。
734731:2005/12/16(金) 04:20:42
もともと純Cで作ってたので間違えました・・・
スレ汚しごめんなさい。
735デフォルトの名無しさん:2005/12/16(金) 08:18:44
>>712 訳せません(>_<)
736ももの:2005/12/16(金) 09:08:59
初めまして、C言語の宿題に困っています。
教えていただけますか??
//
問題:
 数人分の学生成績データ・レコードを格納したファイル(名前をstu-seiseki)がある。
 各レコードの長さは次のとおりである。
 学生番号     7byte
 氏名      20byte
 英語・数学・国語  3byte
 
 学生番号は0番からの通し番号であり、
 各レコードは学生番号の順に並んでいるものとする。

 このデータを使って学生の成績に関する問い合わせを行うプログラムretrieve.cを作りたい。
 このプログラムは、キーボードから学生の番号を入力し該当する学生のレコードを検索、
 学生番号等の各項目のほかに、合計点と平均点を並べて表示するものとする。
 プログラム終了には、^bを押すものとする。

 【データの例】
 0000000 山田 太郎     030050060
 0000001 鈴木 花子     080075030

 【実行例】
 学生番号入力→1
 学番       氏名  英語 数学 国語 総点 平均点
  1        鈴木花子 80  75  30  185   61.7

//
っという問題です。
バイナリモードアクセスがいまいち理解できなく非常に困っています。
どうかよろしくお願いします。
737デフォルトの名無しさん:2005/12/16(金) 09:18:55
>>736
テンプレも読まないで、スレ違いの質問をする人が多くて非常に困っています。
どうかよろしくお願いします。
738キングボンビー:2005/12/16(金) 10:10:56
二次方程式ax^2+bx+c をとくプログラムを作成せよ。
ただしa b cはそれぞれ任意の定数とする(なるべくは整数で)
a=0 とa=0でない場合に分ける。またa=b=0の場合は解なしと表示する
a=0でない場合は判別式Dを用いて実数解、虚数解、二重解にわけて解の公式を用いて
解を表示する

↑というプログラムを作りたいのですがC言語がまったくわかりません。
 誰か作ってくれませんか??
739デフォルトの名無しさん:2005/12/16(金) 10:12:41
>>730
あれだろ。
プログラムに興味も無いのに必修でC言語とかあるから...

もちろん周りも類友なんだろ。
で、内輪で解決できなくて...
そんで2chのスレ検索『C言語』でしてここに来る。

誰も最初に『宿題』でスレ検索しようなんて考えるわけないからな。w
740デフォルトの名無しさん:2005/12/16(金) 10:13:24
>>738
じゃ、とりあえずC言語の本読むとこから初めてみようか?
741デフォルトの名無しさん:2005/12/16(金) 10:19:49
>>736,738
スレ違い。
C/C++の宿題を片付けます 55代目
http://pc8.2ch.net/test/read.cgi/tech/1134128493/
742デフォルトの名無しさん:2005/12/16(金) 10:23:20
むしろ宿題スレに次スレタイトルにC言語を入れてくれる様に頼めば良いんジャマイカ?
743デフォルトの名無しさん:2005/12/16(金) 10:59:12
タイトルに宿題禁止っていれる?
しかしここ数十レス、スレ違いの質問しかねぇな…。
744デフォルトの名無しさん:2005/12/16(金) 11:06:53
むしろタイトルからC言語を外して、C/C++にしたら厨の検索にかからなくなるのでわ?
745デフォルトの名無しさん:2005/12/16(金) 11:07:26
あ、++はいらんか?
746デフォルトの名無しさん:2005/12/16(金) 11:14:16
とても残念なことにここは厨な俺の巡回スレ
747デフォルトの名無しさん:2005/12/16(金) 11:29:42
VC++超初心者のホームページ見れない・・・
なんかあったの?
748デフォルトの名無しさん:2005/12/16(金) 11:41:26
>>747
二重三重にスレ違い。勝手にそのサイトの管理者に聞いてくれ。
749デフォルトの名無しさん:2005/12/16(金) 12:30:20
>>736 >>738
小学生か?
何が楽しいのか知らんが
いい加減やめとけ。

(って反応するのが楽しいんだろうな)
750デフォルトの名無しさん:2005/12/16(金) 12:32:08
反応する馬鹿がいるから・・
751デフォルトの名無しさん:2005/12/16(金) 13:27:18
冬休み間近ですね
752ももの:2005/12/16(金) 15:00:55
スレ違いの書き込みをしてしまって本当に申し訳ありませんでした;
753デフォルトの名無しさん:2005/12/16(金) 16:26:02
1%3=?

計算がわかりません
754デフォルトの名無しさん:2005/12/16(金) 16:32:55
755デフォルトの名無しさん:2005/12/16(金) 16:33:48
1%3 =1   1÷3=0あまり1
2%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
756デフォルトの名無しさん:2005/12/16(金) 17:47:18
>>755
なんで一個だけ除数が4なんだよびっくりするじゃないか
757デフォルトの名無しさん:2005/12/16(金) 17:59:20
>755
あまりって事ですね
ありがとうございました。
758デフォルトの名無しさん:2005/12/16(金) 18:50:13
剰余演算子くらい本やサイト見れば載ってるだろwwwwwwwwwwwwwwwwwwww
759デフォルトの名無しさん:2005/12/16(金) 18:59:13
いまは、自分で調べずに質問するのが流行です。
760デフォルトの名無しさん:2005/12/16(金) 20:07:08
ゆと(ry
761デフォルトの名無しさん:2005/12/16(金) 21:01:50
略せてない略せてない
762デフォルトの名無しさん:2005/12/16(金) 21:31:15
簡単にカタカナをひらがなに変換する方法を教えてください。
どうかよろしくお願いします。
1バイト目を0x82固定、2バイト目に0x5Fを足したらヌルポがぬれぽになっちゃいました。
763デフォルトの名無しさん:2005/12/16(金) 21:46:03
>>762
単純に足すのではなく、テーブルで持つしか。
カタカナとひらがなでは文字数違うしね。
764デフォルトの名無しさん:2005/12/16(金) 21:51:51
分かりました。
作ってきます。
ありがとうございました。
765デフォルトの名無しさん:2005/12/16(金) 22:26:14
EUCの全角スペースを検出したいんだけど、
0xA1 0xA1 と
0x20 0x20 があるみたい。
これ両方全角スペースで考えていいのかな?
766デフォルトの名無しさん:2005/12/16(金) 22:34:56
2020の方は半角スペース2つだろ(w
767デフォルトの名無しさん:2005/12/16(金) 22:36:49
糞ワロタwww
768デフォルトの名無しさん:2005/12/16(金) 22:42:56
>>762
カタカナには 0x837F の空白があるからだな。
これに対処すればいけるはず。
ただ、ヴ、ヵ、ヶはひらがなにないので気をつけるよう。
769デフォルトの名無しさん:2005/12/16(金) 22:52:29
>ヶ
これはカタカナですらない。
770デフォルトの名無しさん:2005/12/16(金) 22:58:58
しかしJISコードでカタカナ扱いされているという現実。
771デフォルトの名無しさん:2005/12/16(金) 23:11:57
ァアィイ・・・ヰヱヲンヴヵヶ
772デフォルトの名無しさん:2005/12/16(金) 23:27:28
謎のモノリスを発掘したスレはここですか?
773765:2005/12/16(金) 23:37:42
>>766
あぁホントだ。

>>767
ありがとう

ちょうど768さんよーることみたいに、他の空白もあるんかな?
774デフォルトの名無しさん:2005/12/16(金) 23:38:05
>>765
オモシロス
775765:2005/12/16(金) 23:42:12
man ascii
776765:2005/12/16(金) 23:56:48
man co
777デフォルトの名無しさん:2005/12/17(土) 00:31:01
初歩的な事柄であれなんだけれど

double 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)で試した限りでは両者とも同じ結果になりました。
778777:2005/12/17(土) 00:40:18
すみません、自己解決しました。
テストプログラム自体が間違ってて、直してみたところ違う結果になりました。
つまりキャストは必要みたいですね。
779デフォルトの名無しさん:2005/12/17(土) 00:56:20
>>777
必要ありません。
780デフォルトの名無しさん: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/
781デフォルトの名無しさん:2005/12/17(土) 12:32:56
全角カタカナ/ひらがなの文字コード作った香具師(JIS)は糞だな
782デフォルトの名無しさん:2005/12/17(土) 12:35:38
>>777
もしかしてこう書いたんじゃないの?
3) double answer = d * (i / j);
783デフォルトの名無しさん:2005/12/17(土) 12:52:29
>>781
それは大変失礼な言い分だ。糞なのはShiftJISだ。なぜなら、JISで平仮名とカタカナは隣の区の同じ点に存在している。
784デフォルトの名無しさん:2005/12/17(土) 13:09:09
>>783
スマソ。そういう意味では確かにそうだ。
しかし、

>ぁ あ ぃ い ぅ う ぇ え ぉ お か が き ぎ く ぐ け げ こ ご

こういう並べ方するセンスが分からん
785デフォルトの名無しさん:2005/12/17(土) 13:15:54
ヒント:日本語タイプライタの配列
786デフォルトの名無しさん:2005/12/17(土) 18:00:12
C言語で、int型に入ってる数字をJISコード表に沿って文字として出力するにはどうすればいいのでしょうか?
787デフォルトの名無しさん:2005/12/17(土) 18:38:12
>>786
char型でJISコードを使う環境ならchar型にキャストしてしまえばよい。
788デフォルトの名無しさん:2005/12/17(土) 20:41:38
>>786
まず「JIS コード」が何なのか…が解ってりゃ、人に訊かないか。

>>787
2バイトコードだったらどうする気だ。
789デフォルトの名無しさん:2005/12/17(土) 21:00:45
>>788
>2バイトコードだったらどうする気だ。

charの配列に
790デフォルトの名無しさん:2005/12/17(土) 22:33:58
>>786
JIS からその環境の文字コードに変換できればあとは特に問題ないはず。
791デフォルトの名無しさん:2005/12/17(土) 22:37:14
qsortのアルゴって難しいな
K&R見てもよく分からん
再帰使ってるからかな
792デフォルトの名無しさん:2005/12/17(土) 22:38:04
qsortのアルゴって難しいな
K&R見てもよく分からん
最後に2回再帰使ってるところが
793デフォルトの名無しさん:2005/12/17(土) 23:02:39
そもそも標準ライブラリ関数のqsortがどんな実装かは未定義だけどな
QuickSortのAlgorithmが分かりにくいというならごまんとある解説ページを片っ端から読め


つーか、俺から見ればQuickなんかよりMergeの方が分かりにくいわけだが(何故Quickと同程度のオーダーなのかという点が)
794デフォルトの名無しさん:2005/12/17(土) 23:19:58
quick sort のアルゴリズムなんて、

・数列をある値より大きいブロックと小さいブロックに分割
・それぞれのブロックを同様に分割

これだけじゃん。
795デフォルトの名無しさん:2005/12/18(日) 00:10:27
>>793
漸化式考えればすぐわからないか?
きっかり半分に出来た時は
Tn) = T(n/2) + T(n/2) + O(n)
だろ?
きっかり半分に出来なくても同じ。
つか記号が出せなくて書けねぇ。
796デフォルトの名無しさん:2005/12/18(日) 00:21:49
>>795
あぁなるほどな。dクス
計算量について説明してある所もあったが、うだうだ説明されるより
そう書いてくれた方が分かりやすいな
797デフォルトの名無しさん:2005/12/18(日) 02:48:53
ソケットをつかってデータ通信をしたいのですが、クライアントがそれぞれA,Bと2つで受信サーバが1つ
この状態でAとの通信で受け取ったソケットはbuff1に格納、Bから受け取ったソケットはbuff2に格納という具合にしたいのですが
クライアントAとBを区別するにはどうすればいいでしょうか?

798デフォルトの名無しさん:2005/12/18(日) 02:53:01
スレ違い
WindowsならWindowsプログラミング質問スレへどうぞ
UNIXならUNIXプログラミング質問スレへどうぞ
799デフォルトの名無しさん:2005/12/18(日) 04:09:22
>>797
UDP なら recvfrom() 使えば?
TCP ならもう考える必要はねえ。accept() した時に分かる。
800デフォルトの名無しさん:2005/12/18(日) 04:53:46
>>798
アフォか
ネットワークならネットワーク質問スレだろ
801デフォルトの名無しさん:2005/12/18(日) 14:22:35
質問なんですが
3行2列の行列を表現する浮動小数点型2次元配列bの宣言文はどう書けばいいんでしょうか?
802デフォルトの名無しさん:2005/12/18(日) 14:26:01
double b[3][2];
803デフォルトの名無しさん:2005/12/18(日) 14:34:10
>>802
ありがとうございます!
804デフォルトの名無しさん:2005/12/18(日) 14:37:57
そんなこともわからないのに、そこから先のプログラムを書けるんだろうか・・・
805デフォルトの名無しさん:2005/12/18(日) 14:46:43
double a[2][3];
double b[3][2];
double c[2][2];

c = a * b;

なんて事はしないでくれよ。
806デフォルトの名無しさん:2005/12/18(日) 15:03:22
関数の引数は値でやりとりされる。このメカニズムは何?この処理で自分自身を呼び出す関数は何?

ってメカニズムって何だ・・・。関数はfuncでいいんだよな?
807デフォルトの名無しさん:2005/12/18(日) 16:19:25
ファイル名を標準入力して
その文字列をchar配列に入れなさい、
というのですがどうすればいいのでしょう
808デフォルトの名無しさん:2005/12/18(日) 16:28:35
日本中の馬鹿がこのスレに集まってきてる気がする
809デフォルトの名無しさん:2005/12/18(日) 16:32:05
>>807
宿題なら宿題スレに行けば誰かが答えてくれるかもしれない。
810デフォルトの名無しさん:2005/12/18(日) 18:06:08
こんばんは。
さっそくですが質問させてください。

データファイルの拡張子が.TTPとして.TTPのファイルだけを次々に読み込ませることはできるのでしょうか?
ファイル名には規則性はありません。
例えば

001.TXT no.TTP yes.TTP 23.TTP tarou.NAM

というようにファイルがある場合、no.TTPとyes.TTPと23.TTPだけのデータを読み込みたいんです。
いかがでしょうか?
811810:2005/12/18(日) 18:07:39
すいません。追記です。
TTPのファイルはテキストデータです。
812デフォルトの名無しさん:2005/12/18(日) 18:12:01
>>810
処理系依存
813デフォルトの名無しさん:2005/12/18(日) 18:15:37
>>812
OSはwindowsでコンパイラはboland c++です。
可能であれば方法をお教えください。
814デフォルトの名無しさん:2005/12/18(日) 18:16:18
>>810
Win32なら
FindFirstFile FindNextFile
ってAPIがあるが、他は知らん。処理系によって似たような関数があるとは思う。
ヒント:ワイルドカード
815デフォルトの名無しさん:2005/12/18(日) 18:16:21
ポインタについての質問です。
int *p;
とするのはポインタをint型変数の特殊なもの
っていうイメージが強いですが
自分は
int* p;
のほうが意味的に分かりやすいです

でも、複数宣言したいときは
int *p1,*p2,*p3;
のように書かなければならないです。

これは美しくないと思われますが、
やはり
int *p;
で統一するのが一般的でしょうか?
816デフォルトの名無しさん:2005/12/18(日) 18:18:57
int *a,b,c;  //aはポインタ、bとcはauto変数
int* d,e,f;  //全部ポインタ

違いを理解するだす。
817デフォルトの名無しさん:2005/12/18(日) 18:19:11
>>813
Win32のFindFirstFile()、FindNextFile()、WIN32_FIND_DATA
これで「調べて」分からなければスレ違いだからここで。
Win32API質問箱 Build38
http://pc8.2ch.net/test/read.cgi/tech/1133798345/
818デフォルトの名無しさん:2005/12/18(日) 18:20:07
>>816
int* d,e,fはポインタdとint型のe,fだろ
819デフォルトの名無しさん:2005/12/18(日) 18:22:31
>>816

int* d,e,f;
ってdだけポインタ?じゃないの?
820デフォルトの名無しさん:2005/12/18(日) 18:23:25
多くのヘルプやサンプル、書籍では
int *p;
になっているのでこちらが一般的であるが。
int* p;
が意味的に分かりやすいのは同意で、私もそう書いている。
同じように複数のときはかっこ悪いとも思う。

ゆえに激しい議論が飛び交うと予想される。どぞ↓
821デフォルトの名無しさん:2005/12/18(日) 18:25:06
>>820
>>816みたいな間違いを犯さないためにint *p;がAcceleratedC++でも推奨されてる
822デフォルトの名無しさん:2005/12/18(日) 18:25:17
(int *) p
とかキャストするからな
823815:2005/12/18(日) 18:26:12
>>816
int* d,e,f;
みたいに宣言すると
e,fはint型になった。

コードに
int *d,*e,*f;
と書いてるところと
int* a;
って書いてるとこがあったら
統一感ないじゃん?

だったら、全部
int *a;
とかで統一するのが一般的なのかな?
っていう質問
824815:2005/12/18(日) 18:28:05
>>820
おれは頭の中で既に激しい議論になってます><
客観的に多数派を教えてください
825デフォルトの名無しさん:2005/12/18(日) 18:32:22
シンタックスシュガーだろ
826デフォルトの名無しさん:2005/12/18(日) 18:32:47
>>816
aもd, e, fもみんなauto変数だ。 
827820:2005/12/18(日) 18:37:21
>>815
私自身は>>820での書き方で、なんら問題の無い環境にいる。
int * p;
気分に合わせてこう書く日もあるが、無問題。
環境に合わせるべきであると思う。
828デフォルトの名無しさん:2005/12/18(日) 18:37:26
>>823
1度に複数の変数を宣言するほうが悪い。

そんな俺はint *p;派。
829デフォルトの名無しさん:2005/12/18(日) 18:42:02
根本的な発想として
#define intp int *
ではなく
#define intp int*
って「美学」があったんだろ
typedef と #define を同一視したいらしいが

俺に言わせれば糞、くだらねー


>>824
多数派なんて現場によりけり
仮に君が地球規模の「多数派」を知ることができたとして
現場の空気を無視してそれをわめくと叩き出されるだけだぜ

いい悪いじゃないんだよ
コーディングスタイルはプロトコルであってマルチ対応できない奴は低機能ってだけだ
830デフォルトの名無しさん:2005/12/18(日) 18:42:44
>>826
たしかにポインタだってauto変数だ。>>816 は勉強やり直し。
831デフォルトの名無しさん:2005/12/18(日) 18:48:14
int* p;の方が分かりやすいってのは何らかの理由があるんだから
int *p;の方が分かりやすくなる理由を脳内でこじつけたらいいじゃないか
832815:2005/12/18(日) 18:51:14
なるほど。
どっちでもいいことが分かったので
適当に書くことにするよ。

その適当に美しさを見出せばいいんじゃまいか
833815:2005/12/18(日) 18:53:05
>>831
こじつけはよくない
本質が分からなくなったら本末転倒じゃね?

おれは、柔軟に対応できるようになるよ
834デフォルトの名無しさん:2005/12/18(日) 18:56:49
>>832
まあな
ただし、数学用語の「適当」な
835デフォルトの名無しさん:2005/12/18(日) 18:58:57
複数使うときは、
int* t[5];
で、いいジャマイカ。
836デフォルトの名無しさん:2005/12/18(日) 19:14:58
ぶっちゃけ一行一変数宣言煮汁
837815:2005/12/18(日) 19:23:05
>>835
なる。
ただ名前が分かりにくいな。
柔軟に対応でFA
838デフォルトの名無しさん:2005/12/18(日) 19:23:08
>>831
int *p;は「*pがint型になる」と読めるという利点がある。
839デフォルトの名無しさん:2005/12/18(日) 19:26:22
スペースの場所が違うとしか考えて無かった俺はなんだかいけない気がしてきた。
840デフォルトの名無しさん:2005/12/18(日) 19:28:33
>>838
実際にint型になるわけじゃないから困る
841デフォルトの名無しさん:2005/12/18(日) 19:29:08
int* p;
なんて書く奴は得意げな顔して
#define BEGIN {
#define END }
とかやっちゃうタイプだな。
842デフォルトの名無しさん:2005/12/18(日) 19:32:34
>>840

pが適切なところを指していれば838だろ。
843デフォルトの名無しさん:2005/12/18(日) 19:33:25
泗ぢってどんな意味なんですか??
844デフォルトの名無しさん:2005/12/18(日) 19:33:29
>>841
ちなみにC++作ったStroustrup氏はint* p;派だそうな。
845デフォルトの名無しさん:2005/12/18(日) 19:35:13
>>844
言っちゃなんだけど禿はかなりアク強い
846デフォルトの名無しさん:2005/12/18(日) 19:37:24
perlのソースもめちゃ汚いよな。
センスの悪い奴はソースも汚い。
847デフォルトの名無しさん:2005/12/18(日) 19:41:34
たしかに TeX のソースもかなりアクが強い。
848デフォルトの名無しさん:2005/12/18(日) 19:42:53
あと、おたふくソースもアクが強い。
849デフォルトの名無しさん:2005/12/18(日) 20:19:49
それでうまいこといったつもりか
850デフォルトの名無しさん:2005/12/18(日) 22:04:12
int a;
と書くと、int型の変数が利用できますが、
int *a;
と書くと、int型のポインタaが示す先の&aはOSからきちんと割り当てられているのでしょうか?

851デフォルトの名無しさん:2005/12/18(日) 22:06:24
>>850
そんなわきゃない。
だから、int* a;が好まれる。
852デフォルトの名無しさん:2005/12/18(日) 22:09:55
>>850
はいともいいえとも答えられる曖昧な質問だ。

int *a;という宣言があったとして、
aの指す先*aはそのままではどこも指していない。
自分でどこかの変数へのポインタやどこかから確保したメモリへのポインタを代入する必要がある。

一方でaも一種の変数であることには違いないのだから&aとするとaへのポインタが得られる。
これはint **型の変数へ代入して有効に使うことができる。
853850:2005/12/18(日) 22:45:51
>>851&852
早速のレスありがとうございます。
ポインタを宣言しただけではどこかを指しているはずがないので
int i;
int *ptr;
ptr = &i;
などと書いて、自分で何を指すか指定しないといけないわけですね。



854850:2005/12/18(日) 23:47:45
たびたび質問で申し訳ありません。
int *a[5]; と書くと、
どのような型ものがいくつ確保されるのでしょうか?
まったく見当がつきません。
855デフォルトの名無しさん:2005/12/18(日) 23:50:33
とりあえず本でも買って読め。
856デフォルトの名無しさん:2005/12/19(月) 00:06:33
>>854
試してみるのが一番速かったりする
857デフォルトの名無しさん:2005/12/19(月) 00:19:06
だからおれは
int* a[5];
と書きたいんだ

>>854
int a[5];
はどういう意味?

おk

じゃあ
int* a[5];
は?

おk



int *a[5];
ほーら分かった。


よな?
858デフォルトの名無しさん:2005/12/19(月) 00:32:34
>>850 レベルの奴にいちいち反応しなくていいから。
859デフォルトの名無しさん:2005/12/19(月) 01:28:29
ソースが綺麗でも動かないと役に立たない
TeXもPerlも汚いが偉大だ
860デフォルトの名無しさん:2005/12/19(月) 01:33:53
とりあえず、int *p; の書き方に固執してるヤツってのは、器が小さい
ということは分かった。
861デフォルトの名無しさん:2005/12/19(月) 01:54:05
>>860
君の事だなw
862デフォルトの名無しさん:2005/12/19(月) 02:06:48
ローカル変数を100も200も使うわけ無いんだから
int i; /* コメント */
int j; /* コメント */
int k; /* コメント */
int* p; /* コメント */
int* q; /* コメント */
int* r; /* コメント */
でいいじゃん。
863デフォルトの名無しさん:2005/12/19(月) 02:12:48
このint*のヒト、ずっと張り付いて主張してるの?
864デフォルトの名無しさん:2005/12/19(月) 02:15:56
>>863
一人って確定なんだw
865デフォルトの名無しさん:2005/12/19(月) 04:33:56
>>854
int * 型の配列が5要素できる。
866デフォルトの名無しさん:2005/12/19(月) 06:03:13
授業単元:プログラミングです。
誕生石: 生まれ月に因んで定めた宝石。起こりはユダヤ教の祭司の胸板の12の宝石によるとも、
新約聖書ヨハネ黙示録の「新しきエルサレムの東西南北12の門の12の石垣の基礎石」によるとも言われる。
1月ガーネット、2月アメジスト(紫水晶)、3月アクアマリーン・ブラッドストーン、4月ダイヤモンド、5月エメラルド、
6月真珠・ムーン‐ストーン(月長石)、7月ルビー、8月サードニックス・かんらん石、9月サファイア、10月オパール・トルマリン、
11月トパーズ、12月トルコ石・ラビス‐ラズリ。(1912年アメリカ宝石同業組合で決めたもの) 広辞苑による


上記データに基づいて、誕生月をキーボードから入力しその人の「誕生石」を画面に出力するプログラムを作れ。
条件 switchを使う。
867デフォルトの名無しさん:2005/12/19(月) 06:13:33
どうしても理由のわからないエラーが出て困っています。
エラーメッセージは
warning: no newline at end of file
です。
pow関数を使ったのですが、それがいけないのでしょうか?
ごく簡単なプログラムなので、それくらいしか見当がつきません。
#include <math.h>
はちゃんと書いてます。
868デフォルトの名無しさん:2005/12/19(月) 06:14:42
その程度の英語も読めないのか。
869デフォルトの名無しさん:2005/12/19(月) 06:15:22
>>866
C/C++の宿題を片付けます 55代目
http://pc8.2ch.net/test/read.cgi/tech/1134128493/
870デフォルトの名無しさん:2005/12/19(月) 07:02:28
エラーじゃなくて警告だしな。
実行ファイルが作成されたか要確認。

871デフォルトの名無しさん:2005/12/19(月) 07:22:44
VCスレで聞くべきなのかもしれませんが・・・

char buf[600];
char data[30 + 1];
sprintf(data, "000000000000000000000000000001");
sprintf(buf, "aaaaaa(・・・長い文字列・・・)%sbbbbbb(・・・長い文字列・・・)", data);

とすると、bufの中身が242バイトで切られてしまいます。
長い文字列とは言っても600バイトをオーバーするほどではありません。
sprintfの制限とかがあるのでしょうか。printfでコンソールに出力することは
できました。

Visual C++ 6.0です。

よろしくお願いします。
872871:2005/12/19(月) 07:28:05
すいません。解決しました。
873デフォルトの名無しさん:2005/12/19(月) 08:43:08
「不動小数点型引数b,cを引数とする返却値整数型関数funcの関数頭部を書け。」
っていう問題があるんですが、不動小数点数って浮動小数点数のことですよね・・?
この問題の答えがよくわからないのですが、どうなるんでしょうか?
874デフォルトの名無しさん:2005/12/19(月) 08:55:43
何このスレ・・・他力本願の人がモッサモッサ集まってくるスレなの?
875デフォルトの名無しさん:2005/12/19(月) 10:20:00
いくら調べてもなかなか答えに近づけない
検索能力がない
アフォが多いだけじゃね?
876デフォルトの名無しさん:2005/12/19(月) 10:40:14
不動小数点型...double型(flota型)
返却値整数型...int型のreturn x;で終わる関数

問題が難しいだけで内容はたいしたことないよ

int型関数で引数にdouble型のbとcを受け取る関数のヘッダを書く。一行。
877デフォルトの名無しさん:2005/12/19(月) 10:41:08
誤字 flota > float
878デフォルトの名無しさん:2005/12/19(月) 12:14:01
こんにちはさっそくですが質問させてください。

05/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]

に格納しようと考えております。


879デフォルトの名無しさん:2005/12/19(月) 12:17:17
>>878
自分はどうやったのか
を書かないとね。
丸投げと変わらないじゃまいか。
それでも答えてくれる親切な人も
いるからダメとはいわない
880デフォルトの名無しさん:2005/12/19(月) 12:18:32
sscanf(s, "%79[^,],%79[^,],%d,%d,%79s", date, time, & num1, & num2, val);
881デフォルトの名無しさん:2005/12/19(月) 12:56:14
>>876
> 返却値整数型...int型のreturn x;で終わる関数

「返却値整数型関数」とは書いているが、
int とは書かれていないが?

整数型には int の他にも

signed char (unsigned char)
signed short (unsigned short)
signed long (unsigned long)

などがあるわけだが…。


> 関数のヘッダ

どこの用語ですか?
# プロトタイプ宣言なら知っているがな
882デフォルトの名無しさん:2005/12/19(月) 13:50:56
みんなやさしス
883デフォルトの名無しさん:2005/12/19(月) 14:26:30
int でなんの問題もない。もっとも無難な型だと思われる。
「funcの関数頭部を書け。」 という問いなのだから
頭部=ヘッダで、これも間違ってはいない。

このような質問にはなるべく分かり易く答えることが大切で
細かいことを言っても混乱させるだけ。
884デフォルトの名無しさん:2005/12/19(月) 14:41:39
>>779
ご意見ごもっともです。
#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の意味を教えてください。
885デフォルトの名無しさん:2005/12/19(月) 14:44:27
>>883
その前に、このスレで扱う話かどうかを検討してくれ。

つか、「不動小数点」へのツッコミはなしか…

>>884
>よろしければ%79[^,]と%79sの意味を教えてください。
図に乗らない。
886デフォルトの名無しさん:2005/12/19(月) 15:46:41
プログラムでフォルダを作ることってできますか?
できるならどうすればいいんでしょうか?
887デフォルトの名無しさん:2005/12/19(月) 15:48:27
>>884
\nと,
888デフォルトの名無しさん:2005/12/19(月) 16:13:57
>>886
C の標準関数ではできないので、別スレへどうぞ。
889デフォルトの名無しさん:2005/12/19(月) 16:20:23
C言語はクソむずいぞ!!orz
890デフォルトの名無しさん:2005/12/19(月) 16:34:57
>>888
どのスレだとよさそうですか?
891デフォルトの名無しさん:2005/12/19(月) 16:36:19
>>890
OSによる。次のスレで明示せよ。
【初心者歓迎】C/C++室 Ver.24【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1131691023/
892デフォルトの名無しさん:2005/12/19(月) 16:39:34
なんつう無駄なやり取りだ
んなもんテンプレ化して>>2にでも入れとけドアホ
893デフォルトの名無しさん:2005/12/19(月) 17:08:31
すぐキレる世代乙
894デフォルトの名無しさん:2005/12/19(月) 17:21:48
キレる世代もそろそろ部下もつ頃か
時間の流れは速いな
895デフォルトの名無しさん:2005/12/19(月) 20:52:01
誰がキレてんのん?
896デフォルトの名無しさん:2005/12/19(月) 20:57:18
キレてないっすよ
897デフォルトの名無しさん:2005/12/19(月) 22:03:08
僕の頭はキレます><
898デフォルトの名無しさん:2005/12/19(月) 22:20:53
>>874-875
スレタイが読めない誰かさんたちみたいのが集まっている(≠集まる)スレだよw
899デフォルトの名無しさん:2005/12/19(月) 22:38:06
FILE *fp1=fopen("aaa.txt","r");
if(fp1){
for文
}
fclose(fp1);

という分があるのですがif(fp1)とはどういうことですか?
*fp1でfopenできない場合はfp1を閉じるってことですか?
900デフォルトの名無しさん:2005/12/19(月) 22:43:28
>>899
if (fp1)はif (fp1 != 0)と同じ。
fopenはファイルオープンができなかった場合ヌルポインタを返す。

その場合は逆にオープンできたらforを行うということになる。
901デフォルトの名無しさん:2005/12/19(月) 22:49:19
>>899
確かに変なコードだな

FILE *fp1=fopen("aaa.txt","r");
if(fp1){
for文
fclose(fp1); /* FOO */
} /* BAR */

FOO と BAR がこうなっていれば意味は通るが
902デフォルトの名無しさん:2005/12/19(月) 22:51:22
FILE *fp1;
if((fp=fopen("aaa.txt","r"))!=NULL){
for文
}
fclose(fp1);

とかすればいいのに
903デフォルトの名無しさん:2005/12/19(月) 22:54:43
教えてください。

void main() {
char *a,*b;
*a="1111"; /* NG */
b="2222"; /* OK */
}

これは、*a は aが指す実体。bは アドレス。
右辺に文字列リテラルを記述した場合("1111")は、先頭アドレスをあらわす。
という理解でよろしいでしょうか。
904デフォルトの名無しさん:2005/12/19(月) 22:56:29
>>903
いいよ
でも、*aだと'1'しか表さないよ
905デフォルトの名無しさん:2005/12/19(月) 23:08:07
>>902
俺は901のスタイルのほうが好きだよ。それだけだけど。
906デフォルトの名無しさん:2005/12/19(月) 23:09:15
>>904
ありがとうござます。
aの代入は型があわないためメモリフォルトでしょうかね。

907デフォルトの名無しさん:2005/12/19(月) 23:10:32
>>906
いや、型があわないからコンパイルエラーだ。
908デフォルトの名無しさん:2005/12/19(月) 23:16:12
>> 907
ありがとうござます。Linuxのgcc だと警告で*.oは作成されるようです。
警告を無視することは危険ですね。
909デフォルトの名無しさん:2005/12/19(月) 23:24:09
>>908
警告とエラーの区別がついてない
誰かさんの真似しちゃだめだよ
910デフォルトの名無しさん:2005/12/19(月) 23:30:40
>>901-902
ヌルポで fclose() するのは危険だったような… 自分の記憶が怪しい
911デフォルトの名無しさん:2005/12/19(月) 23:56:29
fclose()は危険
free()は無問題
912デフォルトの名無しさん:2005/12/20(火) 00:04:07
クリーンアップ関数(セットアップされてないポインタ);

俺は fclose のがきれいだと思う
セットアップしてないポインタがぬるぽとは限らないから
913デフォルトの名無しさん:2005/12/20(火) 00:30:46
教えてください。

int 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なのに??
914デフォルトの名無しさん:2005/12/20(火) 00:32:12
そういう仕様だから。
915デフォルトの名無しさん:2005/12/20(火) 00:34:58
>>914
そういうもんですかー。
何かスッキリしない。
916デフォルトの名無しさん:2005/12/20(火) 00:40:13
で、z はいくつになったの?
917デフォルトの名無しさん:2005/12/20(火) 00:40:39
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<913
918デフォルトの名無しさん:2005/12/20(火) 00:42:16
>>916
一般的な処理系なら数値が変わらないんじゃないの
919デフォルトの名無しさん:2005/12/20(火) 00:44:38
>>916
z=0xFFFFFFFFで値がかわりません。
920デフォルトの名無しさん:2005/12/20(火) 00:47:19
ついでに書くと
VCで実行してるんですが
(x>>y)の部分をドラッグして反転させて
マウスカーソルを合わせてみると
この部分は 0 と表示されます。
921デフォルトの名無しさん:2005/12/20(火) 00:48:03
>>919
(unsigned long )(-1)
922デフォルトの名無しさん:2005/12/20(火) 00:49:53
>>913
もしかして
z=(x>y);
になってない?
923922:2005/12/20(火) 00:50:47
てか、>> シフトしてんじゃん
924デフォルトの名無しさん:2005/12/20(火) 00:51:49
>>919
どんな翻訳環境と実行環境でそうなったの?
925922:2005/12/20(火) 00:52:14
ゴメン、シフトしたいのか
寝るよ・・・orz
926デフォルトの名無しさん:2005/12/20(火) 00:52:39
>>913
yを31,32,33,63,64
にしたりして見ればわかるかもしれないが下5bitしか見てない。
y=0xFFFFFFFF で逐次処理してたら泣けるからだ
ものによってはy>31で何か処理しているものもあるかもしれない

intが64bitの場合も下6bitしか見てないものもあるだろう
927デフォルトの名無しさん:2005/12/20(火) 00:53:51
え?free(NULL)って安全であることが保証されてるんですか?
928デフォルトの名無しさん:2005/12/20(火) 00:53:52
環境はVC++2005Expressです。
929デフォルトの名無しさん:2005/12/20(火) 00:54:34
>右オペランドの値が負であるか、又は拡張した左オペランドの幅以上の場合、
>その動作は、未定義とする。
from C99 6.5.7 ビット単位のシフト演算子
930デフォルトの名無しさん:2005/12/20(火) 00:54:34
環境はVC++2005Expressです
931デフォルトの名無しさん:2005/12/20(火) 00:55:41
>>927
何も起きないのが、仕様で保証されてる
932デフォルトの名無しさん:2005/12/20(火) 00:55:56
933デフォルトの名無しさん:2005/12/20(火) 00:57:49
>void free(void *ptr);
>(略) ptrが空ポインタの場合、なにもしない。
from C99 7.20.3.2 free関数
934デフォルトの名無しさん:2005/12/20(火) 00:58:02
>>926,929
何となく合点がいきました。
ありがとう。
935デフォルトの名無しさん:2005/12/20(火) 00:59:13
VC++2005Expressのせいでアフォみたいな質問が増えそうだな・・・
936デフォルトの名無しさん:2005/12/20(火) 01:02:02
>又は拡張した左オペランドの幅以上の場合
ってどいうい事?
937デフォルトの名無しさん:2005/12/20(火) 01:02:49
ってどいうい事?
938デフォルトの名無しさん:2005/12/20(火) 01:02:58
>>936
格上げ
939デフォルトの名無しさん:2005/12/20(火) 01:03:09
ってどいうい事?
940デフォルトの名無しさん:2005/12/20(火) 01:05:55
しかしクイックウォッチで値を参照してみると
(x>>y)0x00000000unsigned long
z0xffffffffunsigned long
なんですよね。何か気持ち悪い。。
941デフォルトの名無しさん:2005/12/20(火) 01:07:07
>>936
32bitなら32以上、ってことでは?
942デフォルトの名無しさん:2005/12/20(火) 01:08:06
未定義なんだから仕方ない。おいらの環境では
鼻から悪魔が飛び出してもっと気持ち悪い。
943デフォルトの名無しさん:2005/12/20(火) 01:17:12
x<<yのxがchar,shortでもy<=INT_BITの場合は未定義ってことでは。
ちなみに、x86では、shr a,bのbに%32を自動でかけるとかなんとか。
VCのクイックウォッチはインタプリタだから、この制限が適用されないだけ。
944デフォルトの名無しさん:2005/12/20(火) 01:23:26
わかりました。どうもです。
945デフォルトの名無しさん:2005/12/20(火) 01:30:43
へぇ〜知らんかったわ。勉強になりました。
大体そんなにシフトすることがなかったからなあ。32ビット以下の環境では。
946デフォルトの名無しさん:2005/12/20(火) 01:33:25
これが有名なpen4の割り算バグか
947デフォルトの名無しさん:2005/12/20(火) 02:18:49
128bitの整数演算をしたいのですが、VC2005は64bitアプリ対応だそうで、int が64bitなんでしょうが
__int128 というのは使えますか。
948デフォルトの名無しさん:2005/12/20(火) 02:20:14
どうしてこんな勘違いする人間が後を絶たないのか
949デフォルトの名無しさん:2005/12/20(火) 02:22:15
>>947
> VC2005は64bitアプリ対応だそうで
これはあくまで64bit環境で動くアプリを「作ることができる」のであって、
作ったアプリがひとりでに64bitで動き出すわけではない。で、
> int が64bitなんでしょうが
これもありえない。
950デフォルトの名無しさん:2005/12/20(火) 02:25:43
64bitアプリを作れるのはVSProだけだけどね・・・
Stdくらいしか買えねーよ!
951デフォルトの名無しさん:2005/12/20(火) 02:28:36
intは32ビットのままなんでしょ?
今まで
int* a = ...;
int b = (int)a; /* (今までは32bitどうしで持ちこたえてた場合が多かったが…) */
みたいな糞コードをくさるほど見てきたが、これから大丈夫なんだろうか…
952デフォルトの名無しさん:2005/12/20(火) 02:32:11
大丈夫も何も、32ビットアプリとしてコンパイルすればよいだけじゃね?
64ビットアプリにしたいのなら、それなりに修正は必要かと。
953デフォルトの名無しさん:2005/12/20(火) 05:26:45
>>951
それは K & R の時代から普通
954デフォルトの名無しさん:2005/12/20(火) 05:49:49
64 ビット環境で int が 32 ビットってところが
今までと違う所なんだよな。
今まではレジスタサイズ変わろうが、
int がレジスタサイズと同じだったから何とかなった。

まあ、ちゃんとやってる人なら
C99 になる前から intptr_t みたいなのを定義して
使ってるんだろうけど、
別の制約で使えない可能性もなきにしもあらず、か。
955デフォルトの名無しさん:2005/12/20(火) 10:07:22
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1296.txt
このプログラムに、関数を使ってノードを削除する機能を付け加えたいのですが、
どのようなプログラムを書けばいいのかわかりません。どなたか教えてください。
956デフォルトの名無しさん:2005/12/20(火) 10:39:05
ソース丸投げ乙
957デフォルトの名無しさん:2005/12/20(火) 10:44:30
面白いソースだな
勉強中の俺には参考になる
struct[0]を消すときはそこにstruct[1]を代入
struct[1]にstruct[2]を代入

for(i=0;i<入力済み構造体数li++){
構造体[i]=構造体[i+1];
}
をやればいいんじゃね?
958955:2005/12/20(火) 11:12:26
ちょっとスレ違いっぽかったですね。
学校の課題なので、宿題スレで質問することにします。
959デフォルトの名無しさん:2005/12/20(火) 14:57:53
質問です。
gmtime(3)のような関数は内部でtm構造体を作って、
その構造体へのポインタを渡していると考えてもいいんでしょうか?
960デフォルトの名無しさん:2005/12/20(火) 15:23:58
>>959
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/gmtime.3.html
>返り値は静的に確保された構造体を指しており
961デフォルトの名無しさん:2005/12/20(火) 15:27:29
>>960
ありがとうございます。見逃していました。
962デフォルトの名無しさん:2005/12/20(火) 18:20:17
volatile int a,b;
void test0(void)
{
a = b = 0;
}

をコンパイルした時、

b = 0;
a = b;

になるコンパイラって正しいんでしょうか?

b = 0;
a = 0;

になることを期待してて、bは実際には書き込んだ値と違う値が読み出される
ハードウェアで、aに0でないヘンな値が入ってるらしいとハマりました。
実装依存ってやつでしょうか…?
963デフォルトの名無しさん:2005/12/20(火) 18:24:34
>>962
=は右結合なので
b = 0;
a = b;
が正しい
964デフォルトの名無しさん:2005/12/20(火) 18:26:00
>>962
> a = b = 0;

は「a = ( b = 0 );」と言うこと。
つまり、式「b=0」の結果が代入されるのであって、

> b = 0;
> a = 0;

とは等価ではない。
a、b共に0を代入したいのなら、

> b = 0;
> a = 0;

と書くのが正解。
965デフォルトの名無しさん:2005/12/20(火) 18:46:08
ダブルポインタってどういうときに使うのですか?
966デフォルトの名無しさん:2005/12/20(火) 18:49:20
>>962
何のハード?
キモ杉
967デフォルトの名無しさん:2005/12/20(火) 18:50:01
というと
普通に使ってるじゃん

int main(int argc; char **argv)
{
}

とか

int *a[];

とか
968デフォルトの名無しさん:2005/12/20(火) 18:51:18
たぶん実際のアルゴリズムの中で使われてるところを見たいんでしょう
969デフォルトの名無しさん:2005/12/20(火) 19:08:16
多次元配列扱うときとか
970デフォルトの名無しさん:2005/12/20(火) 19:08:41
ダブルポインタなんてものはない。
ポインタを理解できていない香具師のいいわけだ。
その証拠に、「トリプルポインタは自信ないですけどダブルポインタならばっちりです」などと言い出す。
971デフォルトの名無しさん:2005/12/20(火) 19:10:06
多次元配列なんてものはない。
あるのは配列の配列だけだ。
972デフォルトの名無しさん:2005/12/20(火) 19:11:22
ポインタのポインタ?
973デフォルトの名無しさん:2005/12/20(火) 19:11:55
ダブルポインタって変数aのアドレスを指すポインタのアドレスを指すポインタのことか?
974デフォルトの名無しさん:2005/12/20(火) 19:14:12
そうらしい
975962:2005/12/20(火) 19:24:09
>>966
ハードウェアは 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;

というコードが出ていました。

とにかく実装依存と思うことにし、今後気をつけます。
976デフォルトの名無しさん:2005/12/20(火) 19:27:41
>>980とった方、次スレ立ててください
977デフォルトの名無しさん: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 ←追加


こういう配列操作をしたいのですが、
追加時は別配列で作り直さないと駄目でしょうか?
978デフォルトの名無しさん:2005/12/20(火) 19:48:10
newで作成ってどういうこと?
979デフォルトの名無しさん:2005/12/20(火) 20:00:47
なんで、5よりも大きい配列が必要だって最初からわかっているのに、配列の大きさを5にするんだ?
配列のMAXが最初からわかっているなら、その大きさで配列を確保すればイイじゃん。
可変配列でないとダメならvectorだろ。
980デフォルトの名無しさん:2005/12/20(火) 20:02:27
>>977
もしかして:C++の話題?
981デフォルトの名無しさん:2005/12/20(火) 20:16:02
>>604 GJ!
982デフォルトの名無しさん:2005/12/20(火) 20:17:36
>>979
可変配列を作りたかったのです。
vectorって言葉は知らなかったのですが、
検索したところCStringArrayってのを使えば出来そうですね。
ありがとうございました。
983デフォルトの名無しさん:2005/12/20(火) 20:17:37
あ、>980踏んでたけどこれから帰るから誰か宜しく。
984デフォルトの名無しさん:2005/12/20(火) 20:18:56
>>979
>>982
おまえらスレタイ108回くらい読んでから出直せ。
985デフォルトの名無しさん:2005/12/20(火) 20:25:02
次です
C言語なら俺に聞け! Part 119
http://pc8.2ch.net/test/read.cgi/tech/1135077848/
986デフォルトの名無しさん:2005/12/20(火) 20:25:24
次スレ乙
C言語なら俺に聞け! Part 119
http://pc8.2ch.net/test/read.cgi/tech/1135077848/
987デフォルトの名無しさん:2005/12/20(火) 20:26:13
>>984
108回とは信心深いな。
988デフォルトの名無しさん:2005/12/20(火) 22:35:53
>>975

b = 0;
a = b;

なら aに0が入ってないとおかしい。

>「「b=0」の結果」とは、右辺の 0 とは限らず

この場合は仕様を満たしたコンパイラなら必ず0になる。
b+=0とかならともかく
989デフォルトの名無しさん:2005/12/20(火) 22:38:52
>>965
木構造への挿入・削除はポインタのポインタを使わないとやたら面倒
再帰で書いていいなら話は別だが
990デフォルトの名無しさん:2005/12/20(火) 22:54:19
>>977
realloc
991デフォルトの名無しさん:2005/12/20(火) 23:04:03
どうも馬鹿共の言うダブルポインタには (*a)[] は含まれないようですね
992デフォルトの名無しさん:2005/12/20(火) 23:05:51
>>988
『「b=0」の結果』は、bに0を代入した結果。
つまり、bの値を読み出してaに入れるのは当然だろう。

この時、bを読むと0になるかならないかは環境依存。
993デフォルトの名無しさん:2005/12/20(火) 23:08:07
>>991
っつーか、ポインタのこと理解出来てれば
「ダブルポインタ」の様な変な用語は使わんだろう。
994デフォルトの名無しさん:2005/12/20(火) 23:09:15
995デフォルトの名無しさん:2005/12/20(火) 23:10:18
次スレ乙
C言語なら俺に聞け! Part 119
http://pc8.2ch.net/test/read.cgi/tech/1135077848/
996デフォルトの名無しさん:2005/12/20(火) 23:31:31
不毛すぎる厨房どもw
997デフォルトの名無しさん:2005/12/20(火) 23:41:13
C言語のエキスパートの方はWindowsプログラミングにも強いと思って質問します。

UnicodeのウィンドウにIMEを使って文字を入力する時、
入力された文字をWM_IME_COMPOSITIONやWM_IME_CHARを使わずにWM_CHARで正確に
文字が取得できますでしょうか??
ちなみにOSはWindows2000です。XPだと取れるっぽいのですが、Windows2000だと
私の環境はだと、とれないっぽいのですが、みなさんいかがでしょうか??

スレ違いなら、他で質問します。
998デフォルトの名無しさん:2005/12/20(火) 23:42:31
すっかりスレ違いです
999デフォルトの名無しさん:2005/12/20(火) 23:43:03
1000デフォルトの名無しさん:2005/12/20(火) 23:43:35
1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。