[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 01/19 06:51 / Filesize : 249 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C言語なら俺に聞け(入門篇)



1 名前:デフォルトの名無しさん [2006/05/04(木) 08:53:09 ]
入門者向けの俺に聞けスレです。
なんでもきいてよね

369 名前:デフォルトの名無しさん mailto:sage [2006/06/12(月) 17:58:40 ]
>>366
まず何をしたらいいのか・・・・

370 名前:デフォルトの名無しさん mailto:sage [2006/06/12(月) 18:07:22 ]
まず「論理式」でぐぐれ
そしてC言語に関連あるところまで理解が進んでからもう一回来い。

371 名前:デフォルトの名無しさん mailto:sage [2006/06/12(月) 18:11:16 ]
>>369
> まず何をしたらいいのか・・・・

まずは、日本語の勉強からどうぞ。
算数の勉強も合わせてどうぞ。

372 名前:デフォルトの名無しさん mailto:sage [2006/06/12(月) 18:17:18 ]
ひねくれ者うぜーしばいばい

373 名前:デフォルトの名無しさん [2006/06/12(月) 18:42:14 ]
ttp://www.geocities.co.jp/Technopolis-Mars/5427/math/fe_set1.html
ドモホルンリンクルの法則・・・なんでもないw

374 名前:デフォルトの名無しさん [2006/06/12(月) 18:45:03 ]
>>368
x nor x = not x だよ。

nor か nandがあればOK。

375 名前:デフォルトの名無しさん mailto:sage [2006/06/12(月) 18:46:01 ]
ねぇねぇ、知ってた?論理回路のすべてはnotがあれば全部作れるんだよ?

376 名前:デフォルトの名無しさん mailto:sage [2006/06/12(月) 19:10:34 ]
単項演算だけでか?

377 名前:デフォルトの名無しさん mailto:sage [2006/06/12(月) 19:11:56 BE:81522667-#]
>>374
>A→Bを|のみを用いて

と書いてあるんでNOTの入った物(NOR,NANDも含む)が必要かなと。



378 名前:365 mailto:sage [2006/06/12(月) 19:16:17 ]
A⇔B = ((not A)or B) and (A or (not B))ですかね?
これを巧く直せないんです

379 名前:デフォルトの名無しさん mailto:sage [2006/06/12(月) 19:19:24 ]
>>378
だからスレ違いだっての

380 名前:デフォルトの名無しさん mailto:sage [2006/06/12(月) 20:01:16 ]
300あたりから「くだすれC言語」化してきたな、と思ってたら
ついにC言語ですらなくなったか。このスレも終わりかな。

381 名前:デフォルトの名無しさん mailto:sage [2006/06/12(月) 21:07:50 ]
入門編だからいいんだよ
質問の仕方入門や
BOOL代数の入門も含まれる

という事にしてマタリしとこう

382 名前:デフォルトの名無しさん mailto:sage [2006/06/12(月) 21:15:16 ]
>>381
質問の仕方は勘弁してくれ。
正しい質問の仕方を心得ている事は、最低限必要。


プログラミング言語初心者はいいが、日本語初心者はお断りにすべき。
母国語もマトモに使えないようでは、プログラム以前の問題。


383 名前:デフォルトの名無しさん mailto:sage [2006/06/12(月) 21:15:56 ]
2B or (not 2B)

384 名前:デフォルトの名無しさん mailto:sage [2006/06/12(月) 22:24:30 ]
>>368
「論理回路 完全系」でググれ。

385 名前:URLエンコード [2006/06/14(水) 14:57:40 ]
upld3.x0.com/src/upld7639.txt

このソースは書籍からのCGIのサンプルなんですが
CによってURLエンコードをする際に%xx%nn%yyという2バイトコードをを16進数に変更して1バイトにまとめていく処理があるのですが
229行目での配列への代入が何を代入しているのかがどうしても分かりません。
この代入は次のループで書き換えられているような気がするのですが、これは必ず必要な処理なのでしょうか。
変な文章の質問になりますが、ここだけがどうしても胸につかえていて気持ち悪いんです。どなたかスッキリさせていただけないでしょうか。

386 名前:デフォルトの名無しさん [2006/06/14(水) 15:13:41 BE:149769656-#]
>>385
%xxという形式じゃなかったら、そのままコピーしてるだけなんじゃない?
インデックスの変数をインクリメントしてるから、次のループでも
上書きはしてないと思う。


387 名前:URLエンコード [2006/06/14(水) 15:23:18 ]
>>386
失礼しました。
改行でのみの行番号だと223行目の部分でした。
エディタ入れなおしたばっかりで設定し忘れていました。




388 名前:デフォルトの名無しさん [2006/06/14(水) 15:40:38 BE:199692858-#]
>>387
ああ、本当だ、それバグっぽいね。

他にも、渡されたデータのサイズに関係なく適当にmalloc()してるとか、
%が現れたら、無条件にインデックスを+2してるとか、危なそうなコー
ディングしてるね。


389 名前:URLエンコード [2006/06/14(水) 15:43:59 ]
>>386
>>388
おお。ではこれは必要のない一行ということでよかったのでしょうか。
御教授いただきありがとうございました。
これで胸の支えが取れた感じです、、が危なそうなコーディングですかー。
中々C言語によるCGIの書籍というのがなかったもので、徐々に理解していきたいとおもいます


390 名前:デフォルトの名無しさん mailto:sage [2006/06/14(水) 17:47:23 ]
>>385のソース見ると
なんていうか、すごいね。


391 名前:デフォルトの名無しさん [2006/06/14(水) 18:17:22 ]
学校ではC++できるのですが、
家ではやり方が良くわかりません。
どうすれば、C++でコンパイルや実行などができるのでしょうか??

392 名前:デフォルトの名無しさん mailto:sage [2006/06/14(水) 18:24:56 ]
>>391
学校ではどうやっている?

393 名前:デフォルトの名無しさん mailto:sage [2006/06/14(水) 23:31:48 ]
電気屋に逝って店員に相談する。
XPならVC++とかじゃね? VC++スレ逝け。詳しい香具師が多い。

394 名前:デフォルトの名無しさん mailto:sage [2006/06/14(水) 23:38:34 ]
いつも思うんだが、なぜ学生なのに先生や同級生に聞かないんだろう

395 名前:デフォルトの名無しさん mailto:sage [2006/06/14(水) 23:45:34 ]
キョドってキモがられて虐められて以下無限ループ

396 名前:デフォルトの名無しさん mailto:sage [2006/06/14(水) 23:59:58 ]
www.vipper.org/vip275713.jpg
こんな顔の奴だな。

397 名前:デフォルトの名無しさん mailto:sage [2006/06/15(木) 00:04:08 ]
ああ… そういう奴らがここに溜まって来る訳か。



398 名前:デフォルトの名無しさん [2006/06/15(木) 00:07:11 ]
下がり眉
常に上目遣い
常に口が開いてる
口をすぼめ気味
自触癖っぽい唇の傷

全てが精神遅滞を思わせる特徴だなwww

399 名前:デフォルトの名無しさん mailto:sage [2006/06/15(木) 00:13:10 ]
友達はいないかも知れんが先生に聞くことはできるだろ
それすらできないならちょっとアレだ

400 名前:デフォルトの名無しさん mailto:sage [2006/06/15(木) 00:26:38 ]
>>399
この手の人は、他人が書いた答えを写す事しか頭にないだけ。

401 名前:デフォルトの名無しさん mailto:sage [2006/06/15(木) 00:36:50 ]
>>399
そうだよね。積極的に教授と交流作っとけば成績もプラスに評価されるよね。
あ、もちろん対教授コミュ法は『教えて君』じゃだめだよ。

402 名前:デフォルトの名無しさん mailto:sage [2006/06/15(木) 02:34:08 ]
#include <time.h> #include <stdio.h>
int main(){
time_t times;
struct tm *jt;
time_t tt;
times = time(NULL);
// jt = localtime(×);
jt->tm_year = 100;
jt->tm_mon =1;
jt->tm_mday = 1;
jt->tm_hour = 5;
jt->tm_min = 11;
jt->tm_sec = 33;
printf("%4d年%2d月%2d日 %2d時%2d分%2d秒\n",
1900+jt->tm_year,jt->tm_mon,jt->tm_mday,
jt->tm_hour,jt->tm_min,jt->tm_sec);
tt = mktime(jt);
printf("%d\n",tt);
return 0; }

上記プログラムで、現在時刻を、また通算秒数に戻したいのですが、
localtime()で受け取った値をそのまま使えば、戻せるのですが、
自分で、年月日、時間分秒を指定すると、-1になってしまいます。
年月日、時分秒だけ入力して、
通算秒数に戻す方法はないのでしょうか?改行で怒られて見づらくてすいません。

403 名前:デフォルトの名無しさん mailto:sage [2006/06/15(木) 06:04:48 ]
>>402
時刻表示にprintf()で愚直に詰めるのはやめようよ。
ちゃんとstrftime()って関数があるんだから。
処で、jtはどこを指しているのかな?

404 名前:402 mailto:sage [2006/06/15(木) 07:39:19 ]
そういう関数があるんですか、いろんなHPでprintfで表示してる
のでそれで良いのかと思ってました。

すみません、どこを指してるとはどういう意味でしょうか。
localtime()の返り値を受け取って初めて、
時間指定ができるようになるとか、そういう意味でしょうか。


405 名前:デフォルトの名無しさん mailto:sage [2006/06/15(木) 07:56:52 ]
localtime()を使わない場合、struct tm * jt;でポインタを宣言した後初期化もしないで代入してはダメ。
また、localtime()で戻されるポインタが指す領域もlocaltime()が抱える静的領域なのでそれを加工してはダメ。

書くならこんなもんかな。
#if 0 /* localtime()の例 */
time_t tt = time(NULL);
struct tm * pjt = localtime(& tt);
#else /* 自分で代入する例 */
struct tm jt = {33, 11, 5, 1, 1, 100, };
struct tm * pjt = & jt;
#endif
char buf[30];
strftime(buf, sizeof(buf), "%F %r", pjt);

strftime()の使用例などについてはこちら参照。
ttp://www.linux.or.jp/JM/html/LDP_man-pages/man3/localtime.3.html
printf()で愚直に詰めるのはアナクロだと言うことを知らないアナクロな表現者は多いと言うことだね。

406 名前:デフォルトの名無しさん mailto:sage [2006/06/15(木) 08:56:23 ]
>>405
> strftime(buf, sizeof(buf), "%F %r", pjt);

それ「#else」の方だと

 strftime(buf, sizeof(buf), "%F %r", &pjt);

としないとダメじゃね?

407 名前:デフォルトの名無しさん mailto:sage [2006/06/15(木) 09:24:44 ]
>>406
よく見ろ。それを回避するためにstruct tm * pjt = & jt; している。



408 名前:406 mailto:sage [2006/06/15(木) 10:47:00 ]
>>407
そうか、見落としてたよ。

409 名前:デフォルトの名無しさん mailto:sage [2006/06/15(木) 16:16:49 ]
printf 使わないで、
strftime だけで
"2006 年 6 月 15 日 木曜"
て書く方法教えて!

410 名前:デフォルトの名無しさん mailto:sage [2006/06/15(木) 16:58:54 ]
>>409
char buf[100];
struct tm date = {0};
date.tm_year=2006-1900;
date.tm_mon=6-1;
date.tm_mday=15;
mktime(&date);
setlocale(LC_TIME, "Japanese");
strftime(buf, sizeof(buf), "%Y 年 %#m 月 %#d 日 %a 曜", &date);
puts(buf);

411 名前:デフォルトの名無しさん mailto:sage [2006/06/15(木) 18:47:34 ]
外部関数としてファイルを分割し、
メイン関数で外部関数を呼ぶとき、構造体を引数として外部関数に渡すにはどうしたらいいですか?

412 名前:デフォルトの名無しさん mailto:sage [2006/06/15(木) 20:31:57 ]
>>411
普通に呼べばいい。

413 名前:デフォルトの名無しさん mailto:sage [2006/06/15(木) 20:48:48 ]
>>411
その構造体をさらに別のファイルfoo.hで宣言して、それぞれのソースファイルでインクルードする。

414 名前:デフォルトの名無しさん mailto:sage [2006/06/15(木) 21:47:24 ]

0000000000
1111111111 1セット
2222222222
0000000000
1111111111 2セット
2222222222
0000000000
1111111111 3セット
2222222222
...        xセット

(10+1, 3, x)
10文字ずつ並んでいる(改行コードで文字数が+1と考える)
それが3行で1セットのものがある。
それがxセットあるとする。あと、これがchar str[1024];とかに入ってると考える。

それを次のように横向きにつなげるのにはどうすればいいだろうか?

000000000000000000000000000000
111111111111111111111111111111
222222222222222222222222222222
(10*x+1, 3)

※ここで10と3って書いたけど実際に使うプログラムでは3じゃなくて20です。
長くなりすぎないように3に変えただけです。

頭が悪くてやり方がわからん。教えてくれまいか?

415 名前:デフォルトの名無しさん mailto:sage [2006/06/15(木) 23:34:21 ]
// こんなもんかな
const int rowLen = 10;
const int setLen = 3;
const int rowSize = rowLen + 1;
const int setSize = rowSize * setLen;
char newStr[1024];
newStr[0] = '\0';
for (int rc = 0; rc < setLen; ++rc) {
for (int ic = 0; ic < x; ++ic) {
sprintf(strchr(newStr, '\0'), "%.*s", rowLen, & str[ic * setSize + ir * rowSize]);
}
}

416 名前:デフォルトの名無しさん mailto:sage [2006/06/15(木) 23:43:26 ]
変数名の付け方が最悪だなウププププ

417 名前:402 mailto:sage [2006/06/16(金) 00:05:27 ]
>>405
うわ、経過秒表示できました。
自分で代入する場合のサンプルまでどもです。



418 名前:デフォルトの名無しさん mailto:sage [2006/06/16(金) 00:47:20 ]
NULLポインタを返す関数を作るのはだめですか?
一々アドレスの有効性を示すブール値が必要とは思ってなかったけど
会社の先輩に言われました。ここは組み込み系だからなとかなんとか・・・

419 名前:デフォルトの名無しさん mailto:sage [2006/06/16(金) 00:49:34 ]
>>418
そんなことありません。
ポインタを返す関数の場合、エラーが起こったときにはNULLを返すのが普通です。

420 名前:デフォルトの名無しさん mailto:sage [2006/06/16(金) 00:50:49 ]
>>418
その先輩を説得するために、mallocやfopenの例を示しましょう。
ただし、あまり関係が悪くならないように立ち回る必要がありますね。

421 名前:418 mailto:sage [2006/06/16(金) 00:54:00 ]
>>419
そうですよねー。
なんかアセ屋さん上がりの人たちが得意げに説法してくれるので
自信失いました。

NULLを知らずにアクセスしたらどうすんだって言うんですよ。
ちゃんと返り値のほうでNULLかどうか見てるのですが、
忘れたらどうすんじゃとかなんとか・・・
それ知らない人が次にソース触ったらどうとこかこうとか。

会社辞めようかな orz

422 名前:419 mailto:sage [2006/06/16(金) 01:22:19 ]
>>421
周りが全部そうだったら、ひとまず先輩を立てておいて転職を画策するって手もありますね。

いずれにせよ・・・がんばってください。

423 名前:デフォルトの名無しさん mailto:sage [2006/06/16(金) 07:56:32 ]
>>421
そんな変なスタイルに凝り固まった人たちと仕事していても(技術的に)得る物はありませんよ。
適当に相槌打ちつつ次を模索するのが妥当かと。

424 名前:デフォルトの名無しさん mailto:sage [2006/06/16(金) 13:58:33 ]
NULLを知らずにアクセスするのが怖いならCやC++は使うべきじゃないなあ。


425 名前:デフォルトの名無しさん mailto:sage [2006/06/16(金) 19:06:53 ]
>>415
ありがと。解決しました。

426 名前:デフォルトの名無しさん mailto:sage [2006/06/16(金) 22:42:09 ]
組み込み系だから何か事情があるんじゃないの?
つうか一番大事な理由をちゃんと聞いてないってどういう事よ

427 名前:デフォルトの名無しさん mailto:sage [2006/06/16(金) 22:45:22 ]
理由書いてるじゃん、「NULLを知らずにアクセスしたらどうすんだ」って。
推して知るべし。



428 名前:デフォルトの名無しさん mailto:sage [2006/06/16(金) 23:14:47 ]
boolean な戻り値が何を意味してるかを知らずに
戻り値を無視したらどう(ry

429 名前:デフォルトの名無しさん mailto:sage [2006/06/17(土) 01:04:16 BE:38820454-#]
ポインタを戻すこと自体の是非は文脈に依存するが、ポインタが戻されたらNULLかどうかを
チェックするのは当然。

430 名前:デフォルトの名無しさん mailto:sage [2006/06/17(土) 01:45:23 ]
仕様で NULL にならないと書いてあっても、
とりあえず assert くらいはするかもしれんな。

431 名前:418 mailto:sage [2006/06/17(土) 09:15:32 ]
>>426
いろいろ調べてみて分かってきたのですが
今私が使っているCPUではNULLがゼロ番地を示すようにコードが落ちます。
ここまでは普通の話かもしれません。
(違うところを差す環境もあるらしいですが)

このCPUの場合には0番地はCPUが使う特殊な領域として定義されていて
ユーザがアクセスすると暴走するようです。
明確にCPUリセットや決められた割り込みが発生すればいいのですが、
他に使っている割り込み処理を壊してしまったりするようです。

正直、NULLをチェックするのを忘れた場合でも、CPUリセットする
だろうという思い込みはありましたが、
やっぱり、チェックし忘れたらどうするんだっていう言い方だけでは
分かりませんよね。。。

>>428
結局そういうことですよね。
しかも、booleanがTRUEのときに、返り値のアドレスがNULLかチェックする
なんて馬鹿げてるし。
結局NULLかどうかは必ず検査していないといけないですよねw

>>430
NULLが返ることもあることを仕様書に明記すればいいみたいな話で
もういいやみたいな言われてしまいました。

でもやっぱり結局はNULLかどうかを検査するコードを常に書かないと
いけないわけですよねw

難しいですね もっと勉強します。

432 名前: ◆hznrtioKU2 mailto:sage [2006/06/17(土) 13:25:54 ]
教えてください。
char *str[][] =
{
{"abc", "def"},
{"ghi","jkl"}
};

これを引数として関数側に飛ばす場合、受け側はどういう記述でいけばいいのでしょうか?
*[][]でも***でも**[]でもむりですた('A`)

433 名前: ◆hznrtioKU2 mailto:sage [2006/06/17(土) 13:28:05 ]
BOOL GetIniFilePos(POINT *coordinate, short PosVal, char **chKeyPos, char *ActDir)
{
short i;
for(i = 0; i < PosVal; i++)
{
/* セクション"POS"からxの値を取得 */
(coordinate + i)->x = GetPrivateProfileInt("POS", &chKeyPos[0][i], -1, ActDir);
if((coordinate + i)->x == -1)
{
goto FUNC_END;
}
/* セクション"POS"からyの値を取得 */
(coordinate + i)->y = GetPrivateProfileInt("POS", &chKeyPos[1][i], -1, ActDir);
if((coordinate + i)->y == -1)
{
goto FUNC_END;
}
}
return TRUE;
FUNC_END:
return FALSE;
}
static char *chItemPos[POS_XY][POS_VALUE] = {
{"One_x", "Two_x", "Three_x", "Four_x", "Five_x", "Six_x"},
{"One_y", "Two_y", "Three_y", "Four_y", "Five_y", "Six_y"}
};
/* SKILLPOSキー項目テーブル */
static char *chSklPos[POS_XY][SKLPOS_VALUE] = {
{"SklOne_x", "SklTwo_x", "SklThree_x", "SklFour_x", "SklFive_x", "SklSix_x"},
{"SklOne_y", "SklTwo_y", "SklThree_y", "SklFour_y", "SklFive_y", "SklSix_y"}
};


434 名前: ◆hznrtioKU2 mailto:sage [2006/06/17(土) 13:29:57 ]
GetIniFilePos()の3番目の引数に下記の配列を渡して参照させたいんだが・・・
chKeyPos部分の受けの型はいったいどうすればいいのかさっぱりなんで('A`)


435 名前:デフォルトの名無しさん mailto:sage [2006/06/17(土) 13:35:33 ]
>>431
君にはこれがきっと役に立つと思うから読んでごらん。
https://sec.ipa.go.jp/download/files//report/200504/coding_guide.pdf

ただ、これで先輩を納得させたり教育したりしようと思わないこと。
一人でこっそりスキルアップに励むが吉。

436 名前:デフォルトの名無しさん mailto:sage [2006/06/17(土) 13:42:07 ]
>>434
無理。
char*を二つメンバーにもつ構造体を宣言し、その配列を使うようにしろ。

437 名前: ◆hznrtioKU2 mailto:sage [2006/06/17(土) 13:44:05 ]
>>436
あー、やっぱそうなのか
それとなぜ無理なのかを教えてほしいんですけどいまいち納得がいかないというか
ポインタについてまだ理解できてないというか・・



438 名前:デフォルトの名無しさん mailto:sage [2006/06/17(土) 14:19:36 ]
>>437
結論だけ言うと、多次元配列を関数に渡す場合、仮引数の型は最初の次元を除いてその大きさを
全て明記しなければならない。

詳しくはC FAQ参照。
www.kouno.jp/home/c_faq/c6.html

この説明で理解できない場合は、『ポインタ完全制覇』のような(そのような書籍が実在するのか
知らないし、読んだこともないが、確かにポインタに特化した書籍は存在する)書籍を読むと良い。

あるいは、”多次元配列 仮引数”などで検索してヒットしたページを読んでみると良いかもしれない。

439 名前:デフォルトの名無しさん mailto:sage [2006/06/17(土) 14:22:37 ]
書き忘れたが、POS_VALUEとSKLPOS_VALUEという異なる値(>>433の場合はどちらも6だが)を
使う限り、配列を渡すのは無理だということ。
どちらもいつも同じというのであれば、仮引数にその大きさを明記してやれば渡せる。

440 名前: ◆hznrtioKU2 mailto:sage [2006/06/17(土) 15:12:12 ]
>>438-439
参考になった。ありがとう

441 名前:デフォルトの名無しさん [2006/06/18(日) 19:27:25 ]
☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
嫌いなコテハン投票vote2.ziyu.net/html/corosuke.html
☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆

えいいちに清き1票を!


442 名前:デフォルトの名無しさん mailto:sage [2006/06/19(月) 12:54:09 ]
>>435 もっといいやつ教えてあげればいいのに。


443 名前:デフォルトの名無しさん mailto:sage [2006/06/19(月) 14:01:52 ]
>>442
じゃ、君が教えてあげれば?

444 名前:デフォルトの名無しさん mailto:sage [2006/06/19(月) 21:24:46 BE:49923252-#]
>>443
それは断る。

445 名前:デフォルトの名無しさん [2006/06/19(月) 22:31:52 ]
例えば、その関数に至ったら1秒間止まる、といった具合に、
一定時間処理を止める関数ってありますか?

446 名前:デフォルトの名無しさん mailto:sage [2006/06/19(月) 22:59:13 ]
ある

447 名前:デフォルトの名無しさん mailto:sage [2006/06/19(月) 23:00:53 ]
sleep系の関数は「最低N(mm)秒」止まるだけ



448 名前:デフォルトの名無しさん mailto:sage [2006/06/19(月) 23:16:38 ]
>>447
thx

449 名前:デフォルトの名無しさん mailto:sage [2006/06/20(火) 00:10:41 ]
120.10 200.55 344.78 ・・・
150.66 300.78 664.13 ・・・
400.44 135.66 333.44 ・・・

上のようにファイルに実数型で記入されているものを
整数型に型変換したいのですがどうすればいいのでしょうか
小数点以下の数値は切り上げでも切捨てでも構いません
一つずつならできるのですが、複数だとうまくできません
どなたかご助力ください


450 名前:デフォルトの名無しさん mailto:sage [2006/06/20(火) 00:13:26 ]
その、一つずつなら出来るというコードを見せてもらおうじゃないか。

451 名前:デフォルトの名無しさん mailto:sage [2006/06/20(火) 00:16:36 ]
>>449
一つずつってつまりは複数なんじゃないの?

452 名前:デフォルトの名無しさん mailto:sage [2006/06/20(火) 00:25:49 ]
言い方が間違っていました
一つずつではなく、一つのみなら整数型に変換できる
ということです
コードは他のサイトから拾ってきたもので
double d = 2.5;
int i = (int) d;
のようなやり方をして型変換していました


453 名前:デフォルトの名無しさん mailto:sage [2006/06/20(火) 00:29:05 ]
んーそれをファイル内のすべてに対してすればいいんでないの?

454 名前:デフォルトの名無しさん mailto:sage [2006/06/20(火) 00:29:15 ]
>>452
一行読み取って、スペースで区切りながら、atofを使うか、
一行読み取ってsscanf("%lf %lf ....")とかする(個数固定の場合)

455 名前:デフォルトの名無しさん mailto:sage [2006/06/20(火) 00:31:56 ]
>>453
>>454
ありがとうございました
やってみます

456 名前:デフォルトの名無しさん mailto:sage [2006/06/20(火) 00:51:08 ]
>>454
strtod()という選択肢はないのかね。

457 名前:誰か教えてください・・・。 [2006/06/20(火) 11:03:59 ]
(OS)XPでソフトはVC++なんですが、こんな問題が解けないのでお願いしたいのですがいいでしょうか?
得点に負の値が入力されるまで得点を入力し、その最大値と最小値を求め、その差が30点以上であれば
「差が大きい」と表示するプログラムを作成せよ。
です。もしよかったらおしえてください。



458 名前:デフォルトの名無しさん mailto:sage [2006/06/20(火) 11:05:04 ]
スレ違い

459 名前:デフォルトの名無しさん mailto:sage [2006/06/20(火) 12:28:55 ]
>>457
#include <stdio.h>

int main(int argc, char* argv[])
{
  printf("得点に負の値が入力されるまで得点を入力し、"
      "その最大値と最小値を求め、"
      "その差が30点以上であれば「差が大きい」\n");
}

460 名前:デフォルトの名無しさん mailto:sage [2006/06/20(火) 13:15:15 ]
>>457
人にものを聞くのに「せよ」なんて命令形使うのは人間として間違い。


461 名前:デフォルトの名無しさん mailto:sage [2006/06/20(火) 13:40:54 ]
>>460
ちょwwwwwwおまっwwwwww人にものを聞くじゃなくて
その部分は「問題文」だからwwwwwwww
>>457
>もしよかったらおしえてください。
って言ってるじゃんwwwwwwwwwww

まさか、あんたが受けたことある試験や問題集に書かれていた問題って
次の○○を解いて下さい。 みたいな、丁寧口調なものばかりだったの?w

462 名前:デフォルトの名無しさん mailto:sage [2006/06/20(火) 14:11:09 ]
【問題】
  得点に負の値が入力されるまで得点を入力し、その最大値と最小値を求め、
  その差が30点以上であれば「差が大きい」と表示するプログラムを作成して
  戴けましたなら幸い至極に存じあげ奉り候。

463 名前:デフォルトの名無しさん mailto:sage [2006/06/20(火) 14:12:12 ]
何が候(そうろう)だよー!早漏なんて卑劣すぎ!

464 名前:デフォルトの名無しさん mailto:sage [2006/06/20(火) 14:14:33 ]
精神年齢低すぎ

465 名前:デフォルトの名無しさん mailto:sage [2006/06/20(火) 15:09:48 ]
>>457
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2111.cpp

466 名前:デフォルトの名無しさん mailto:sage [2006/06/20(火) 15:12:39 ]
>>457
>>465はミスった
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2112.cpp


467 名前:デフォルトの名無しさん mailto:sage [2006/06/20(火) 17:23:01 ]
>>461
昔から問題文の命令形はおかしいと思ってました。
自分が先生をやっていた時も自分で問題文書きながら
絶対おかしいと思ってました。w




468 名前:デフォルトの名無しさん mailto:sage [2006/06/20(火) 17:29:46 ]
それじゃ「解いてみよう」でいきますか?

469 名前:デフォルトの名無しさん mailto:sage [2006/06/20(火) 17:30:42 ]
なんなら「点数が欲しいなら解いた方が良いよ」とか?
「解かないと単位取得が危ういよ」とかそことなくやらせる気を起こさせる?

470 名前:デフォルトの名無しさん mailto:sage [2006/06/20(火) 18:12:29 ]
ゆとり世代もここまできたか

471 名前:デフォルトの名無しさん mailto:sage [2006/06/20(火) 20:29:38 ]


472 名前:デフォルトの名無しさん mailto:sage [2006/06/20(火) 20:34:42 ]
* 斬新な試み
1. 問題文を若者言葉にしてみる。
2. 問題文を絵文字満載にしてみる。
3. やたら顔文字を使う。
4. (爆)が文末に意味なく挿入されている。
5. wが文末に意味なく挿入されている。
6. 藁が文末に意味なく挿入されている。
7. 最後に「欝」の文字が入っている。


473 名前:虫歯18本 [2006/06/20(火) 21:24:54 ]
超伝導量子干渉素子のプログラムを作ってください。
ちなみに水銀が超伝導状態になるのは、4.2K(ケルビン)の時です。

474 名前:デフォルトの名無しさん [2006/06/20(火) 21:32:34 ]
ΣΣ{(内積)の二乗}
を計算するプログラムはどのようにつくったらよいでしょうか?
forつかっただけでできますか?


475 名前:デフォルトの名無しさん mailto:sage [2006/06/20(火) 21:51:10 ]
彼女ができません。
forつかっただけでできますか?

476 名前:デフォルトの名無しさん mailto:sage [2006/06/21(水) 00:25:24 ]
for(int=0;i<N;i++)if(kokuhaku(girlfriend[i]))break;

477 名前:デフォルトの名無しさん mailto:sage [2006/06/21(水) 01:44:00 ]
残念。 N = 0 だ。



478 名前:デフォルトの名無しさん mailto:sage [2006/06/21(水) 09:22:11 ]
   ∧ ∧
ΣΣ(´Д`)


479 名前:C++風に mailto:sage [2006/06/21(水) 12:42:16 ]
>>475
for( i=0; i<My->GirlFriendCount; i++ ) {
  try {
    /* 告白 */
    Declared( My->GirlFriend[i] );
  } catch( DeclaredSuccessException exp ) {
    /* カップル成立 */
    DeclaredSuccess( exp );
    break;
  }
}


480 名前:デフォルトの名無しさん mailto:sage [2006/06/21(水) 13:50:46 ]
なるほど。彼女が出来る方が例外的なことであると。


481 名前:デフォルトの名無しさん mailto:sage [2006/06/21(水) 14:04:24 ]
どうせなら一生彼女ができない無限ループじゃね?
無限と言っても人生が終わった時点でプログラム終了だが

482 名前:デフォルトの名無しさん mailto:sage [2006/06/21(水) 14:26:58 ]
両親からforkした段階で変数kanojyoが宣言されてないと思う。
ext(1)で氏ぬのを待つだけ。

483 名前:デフォルトの名無しさん mailto:sage [2006/06/21(水) 16:05:32 ]
int life(const char *job)
{
 int age, lifetime;

 if (strcmp(job, "プログラマ") == 0)
  lifetime = 50;
 else
  lifetime = 70;

 for (age = 0; age < lifetime; ++age) {
#ifdef IKEMEN
  if (age >= 10)
   printf("%d 人目の彼女が出来ました。\n", age - 9);
  else if (age == 25)
   puts("結婚しました。");
  else if (age >= 30)
   printf("%d 人目の愛人が出来ました。\n", age - 29);
#endif
  sleep(31536000);
 }
}


484 名前:デフォルトの名無しさん mailto:sage [2006/06/21(水) 17:02:40 ]
>>483
生まれた時には職業は決まってないだろう。

485 名前:デフォルトの名無しさん mailto:sage [2006/06/21(水) 17:15:48 ]
age35ってドラマがあったよね?

486 名前:デフォルトの名無しさん mailto:sage [2006/06/22(木) 19:28:42 ]
生まれながらのプログラマー。


487 名前:デフォルトの名無しさん mailto:sage [2006/06/22(木) 19:29:44 ]
>>484
神は何でも分かっているのです。




488 名前:デフォルトの名無しさん [2006/06/23(金) 01:26:54 ]
ファイルから構造体の配列への読込と、書き込みがいまいち
分からないので、教えてください。

489 名前:デフォルトの名無しさん mailto:sage [2006/06/23(金) 01:30:06 ]
>>488
マルチ乙

490 名前:デフォルトの名無しさん mailto:sage [2006/06/23(金) 01:32:42 ]
まるちはだめよ。

491 名前:488 [2006/06/23(金) 01:35:37 ]
>>489>>490
マルチになってスイマセン。
どーしても知りたくて。緊急なんです。
良ければ教えてください。

492 名前:デフォルトの名無しさん mailto:sage [2006/06/23(金) 01:48:02 ]
>>491
情報が曖昧過ぎて何をしたいのかわからない。
宿題スレに、構造体の配列を使った課題があったと思うから探してみたら?

493 名前:デフォルトの名無しさん mailto:sage [2006/06/23(金) 07:45:58 ]
>>488
struct foo { ... };

void write_foo()
{
FILE* fp;
struct foo f[10];
fp = fopen("foo.dat", "wb");
fwrite(f, sizeof(struct foo), 10, fp);
// fwrite(f, sizeof(struct foo), sizeof f / sizeof f[0], fp);
// fwrite(f, sizeof f, 1, fp);
fclose(fp);
}

void read_foo()
{
FILE* fp;
struct foo f[10];
fp = fopen("foo.dat", "rb");
fread(f, sizeof(struct foo), 10, fp);
fclose(fp);
}

494 名前:デフォルトの名無しさん mailto:sage [2006/06/23(金) 09:31:22 ]
実行するとgetsやfgetsのコードがスルーされるのですが、原因が全くわかりません。
しかし、例えば
gets(str);
gets(str);
と二回続けて書くと1つだけが実行されます。
原因が解る方いらっしゃいますか?

495 名前:デフォルトの名無しさん mailto:sage [2006/06/23(金) 12:27:41 ]
>>494
前にscanf()が呼ばれていて、
バッファに改行が残っているとみた。

496 名前:デフォルトの名無しさん mailto:sage [2006/06/23(金) 13:07:49 ]
>>494
素朴な疑問だが、2行目の「しかし」は何に掛かっているんだ?

497 名前:デフォルトの名無しさん mailto:sage [2006/06/23(金) 13:23:53 ]
コードがスルーされるのですがに掛かるので意味は通じる



498 名前:デフォルトの名無しさん mailto:sage [2006/06/23(金) 14:15:45 ]
>>496
but (日本語だと「しかし」、「でも」など) を使うとその手前のことがキャンセル
されて後に言ったことが強調される。また口語だといきなり「しかし」を先頭に持っ
て来るという考えてみればおかしな文でも通じてしまうのでいきなり何かを強調
したい時に使える。

というようなことがこの前買ったコールドリーディングの本に書いてありました。


499 名前:デフォルトの名無しさん mailto:sage [2006/06/23(金) 15:21:46 ]
PGは日本語が不自由だからな。
意味不明の仕様書しか作れないから、手を入れるより毎回新しいプログラムかいておき替えたほうが早い。

500 名前:デフォルトの名無しさん mailto:sage [2006/06/23(金) 16:41:20 ]
>>499
それはPGで括ることじゃないと思うが
PMだってSEだって(ry

501 名前:デフォルトの名無しさん mailto:sage [2006/06/23(金) 17:45:21 ]
>>499
>PGは日本語が不自由だからな。
>意味不明の仕様書しか作れないから
PGの書く仕様書を読まされるあなたは、もしや伝説のコーダー様??

502 名前:デフォルトの名無しさん mailto:sage [2006/06/23(金) 19:30:32 ]
元PGってのが仕様書作って来るけど糞って話では?
仕様書通りに作って納品したら、案の定作り直しでデスマであぼーん。

503 名前:デフォルトの名無しさん mailto:sage [2006/06/24(土) 14:26:55 ]
無償のVS2005でC言語を始めようと思うのですが、C++かC#どっちがいいと思いますか?
人気のある方がいいです
プログラム経験はあります(perl,ASなど)

504 名前:デフォルトの名無しさん mailto:sage [2006/06/24(土) 14:33:36 ]
C++もC#もC言語ではありません。

505 名前:デフォルトの名無しさん mailto:sage [2006/06/24(土) 17:12:34 ]
だがしかし、Visual C++のコンパイラはCのソースをコンパイルすることもできる。

506 名前:デフォルトの名無しさん mailto:sage [2006/06/24(土) 17:13:04 ]
>>503
とても、プログラム経験がある人の発言とは思えない。

507 名前:デフォルトの名無しさん mailto:sage [2006/06/24(土) 17:13:18 ]
>>503
初心者?言語の仕様を習いたいの?それとも教育機関でやる
ありきたりな数学的な知識を使った手法(アルゴリズム)をきちっと理解したいの?
まぁ、どの道どの言語でも、アルゴリズムの部分は共通しているんで
どっちでも良いんだけど、C++にしとけば?



508 名前:デフォルトの名無しさん mailto:sage [2006/06/24(土) 20:19:17 ]
>>506
人気のあるほうって何だよそれ人気があればいいのか?じゃあVB

509 名前:508 mailto:sage [2006/06/24(土) 20:20:04 ]
安価ミス
>>506 ×
>>503

510 名前:デフォルトの名無しさん mailto:sage [2006/06/24(土) 21:25:01 ]
人気っつーか、自分が使いやすい方がイイ!

511 名前:デフォルトの名無しさん mailto:sage [2006/06/24(土) 22:10:32 ]
おまえら本当にこの手のどうでもいい質問に律儀に答えますね

512 名前:デフォルトの名無しさん mailto:sage [2006/06/24(土) 22:31:39 ]
君も仲良しクラブに入らないか

513 名前:デフォルトの名無しさん mailto:sage [2006/06/24(土) 23:12:55 ]
俺も入れてくれないか?

514 名前:デフォルトの名無しさん [2006/06/25(日) 00:23:31 ]
バブルソートを少しヒントをもらって、なんとか自力でやりとげたんですが
これってどのぐらいの難易度なんですか?
自分はかなり努力したつもりですがみなさんからみたら初歩なんですかね?

515 名前:デフォルトの名無しさん mailto:sage [2006/06/25(日) 00:26:12 BE:59908234-#]
>>514
バブルソートは、アルゴリズムの本にソースが載ってたんで、
自分で考えるなんてことはしたことがない。

516 名前:デフォルトの名無しさん mailto:sage [2006/06/25(日) 00:35:35 ]
>>514
初歩的だが、もっと効率の良いソートを理解する前の前座程度。
しかも、今後作るプログラムにはバブルソートなんて使わず
もっと高速なソートが使われるし、自分で定義しなくてもできたものがあるしね。

517 名前:デフォルトの名無しさん mailto:sage [2006/06/25(日) 01:01:51 ]
>>483
どうあっても結婚まで発展しなさそうな気がするんだが




518 名前:デフォルトの名無しさん [2006/06/25(日) 01:13:38 ]
C言語を勉強するとAVのモザイクが外せると聞いたのですが
どのようにするといいのか教えてください。

519 名前:デフォルトの名無しさん mailto:sage [2006/06/25(日) 01:14:14 ]
勉強しろ

520 名前:デフォルトの名無しさん mailto:sage [2006/06/25(日) 01:15:19 ]
別にCじゃなくても出来ると思うが

521 名前:デフォルトの名無しさん mailto:sage [2006/06/25(日) 01:15:41 ]
ソートのアルゴリズムはいくらでもそれ専用の本でてるじゃん
それを言語に置き換えるだけで、アルゴリズム理解しようとは思ったこともなかったわ。
シェルソートとクイックソート覚えるだけで良し


522 名前:デフォルトの名無しさん mailto:sage [2006/06/25(日) 02:05:39 ]
今日からC言語をやってみたいと思うのですが
C言語を使えばどんなものが作れるのかを教えてください。

その中から簡単そうなプログラムから一つずつ作って行って
C言語を学んでいこうと思います。

523 名前:522 [2006/06/25(日) 02:41:58 ]
C言語についてググッてC言語のソースを見てみて
感じたのですが。
C言語のソースって、なんだかPerlによく似ているような気がする。
補足するようですが私はPerlを使ってのCGIなら組んだことはあります。

C言語の\nってもしかして、改行を意味する命令?
ifってPerlで使っているifと一緒?

だったら、画面に文字を表示する命令は

print "文字\n";

でしょうか?

524 名前:デフォルトの名無しさん mailto:sage [2006/06/25(日) 02:46:56 ]
>>523
本読め寝言を書き込むな。薬でもやってるのか?

525 名前:デフォルトの名無しさん mailto:sage [2006/06/25(日) 02:52:17 ]
>>523
命令制御コード制御文の基礎から勉強しとけ


526 名前:デフォルトの名無しさん mailto:sage [2006/06/25(日) 03:26:04 ]
ググレば腐るほど入門出てくるというのに…


527 名前:デフォルトの名無しさん mailto:sage [2006/06/25(日) 04:24:32 ]
どの入門書がいいですか
都会の本屋に行ったら種類が山ほどあって
近所の本屋に行ったら一冊もなくて
迷います



528 名前:デフォルトの名無しさん mailto:sage [2006/06/25(日) 04:37:50 ]
>>527

ネットで検索してネットで注文しなさいよ

プログラミング言語C ANSI規格準拠
B.W. カーニハン

これを、理解できるまで何百回も読み直せ


529 名前:デフォルトの名無しさん mailto:sage [2006/06/25(日) 04:41:57 ]
やっぱりその本が一番いいんですかね・・・
お小遣い貯めて買います

530 名前:デフォルトの名無しさん mailto:sage [2006/06/25(日) 13:09:44 ]
小学生が2chやってんじゃねーよ

531 名前:デフォルトの名無しさん mailto:sage [2006/06/25(日) 20:21:20 ]
小学生ではありません
立派なニートです

532 名前:デフォルトの名無しさん mailto:sage [2006/06/25(日) 23:59:37 ]
実家引きこもりで小遣い貰ってるって香具師か。
いきなり本買う前に近所の図書館で借りて読んでみたほうがいいよ。

533 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 00:51:17 ]
>>528
ちうかそれ、出版された日付が古いぞな・・・
ANSI基準もそれから変わった部分もあるんでは?

534 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 01:08:41 ]
バブルソートの件を書きこんだものです。
みなさん返信くださってありがとうございます
なんかへこみましたが‥これからも頑張ります

535 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 01:15:55 ]
>>534
そりゃ経験があなたとは何万時間も違うような人から見たら、
バブルソートなんてアホみたいなものに見えちゃうさ。

別にへこむこと無いよ。そのまま突っ走れ。

536 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 01:41:43 ]
図書館は敷居が高くて・・・
バブルソートです

537 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 01:46:27 ]
基本情報やソフトウェア開発の本にもソートについては出てくるが
最初はバブルソートだな。けど、この仕組みを理解するのに苦労するのは
先行き不安だね・・・。単純に、各々の要素を配列の先頭から比較して並び替える程度だし。
まぁ、頭の中だけでなく、実際に数字を並べて自分で並び替えて仕組みを理解してみ。
んな難しくないことだし。



538 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 02:15:23 ]
>>536
どこかの大学の講義資料とか漁ってみ。
学外から見れるところもまだ結構残ってる。

539 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 02:32:58 ]
ttp://www.elc.ees.saitama-u.ac.jp/ProgrammingI/
ここにあるけど、ここのは配列の後ろの要素から比べているね・・・
自分が見たものの多くは前からだったが、まぁ概要は同じなんで

540 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 04:00:40 ]
前からも後ろからも計算量は同じだし。
降順に並べるか昇順に並べるかの差。

Cには関係ない。アルゴリズムの本読めばソートの解説載ってる。
数学屋の理論的な蘊蓄付きで。

541 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 04:17:20 ]
>>539はモロにC言語なんだがw

542 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 12:45:00 ]
>>541
君は日本語の勉強を先にした方がいいよ。

543 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 14:24:46 ]
>>533
いや、この本を理解できればどんなCのマニュアルも理解できる
っつうことでさ。

おれが生まれて初めて読んだ時は10回読んでも理解できんかったw


544 名前:デフォルトの名無しさん [2006/06/26(月) 14:58:38 ]
>Cに=関係ない
>>540>>542>>539のPDFが見られず
人間の言葉以前に状況も理解できないサル以下の知能しかないようだ
>>539はバブルソートをC言語で表したものだが?
頭が悪い以前に自分勝手な主観や意見だけでゴリ押しする
周りを無視するタイプだな
所詮、低学歴、低俗、低レベルな奴

545 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 15:03:51 ]
>>540>>542はこのスレの流れも理解していないようだ。
>>538には
>大学の講義資料とか
あるため、大学でそれに関する文献を公表している場所を示して
話が続いただけなんだが、無理やりバブルソートを話を終わらせようと必死こいた結果
ここはお前が中心になって話を進めるスレじゃないんで、他へ行った方が良いよ?
そういう考えはまともなソースをかけないクズの考え。
一つ一つおろそかにせず、順を追うことは重要。
なぜなら、効率が悪いアルゴリズムを改善していくという部分の勉強も含まれているから。

現代人は最初っから便利なものを使っている。が、その便利なもの
手法が作られる経緯をろくに知らず、さらに、現代の問題を無視して
現在使っているものが引き起こす問題をそのままにしておく傾向もある。
そういう改善をする考えをもてなければ、プログラマとしてでなく
知能を持った人間として成長しない人間になるよ。

546 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 15:05:48 ]
>>540
>前からも後ろからも計算量は同じだし。
誰もそんなことは聞いてないw
>降順に並べるか昇順に並べるかの差。
え?後ろから比較するか前から比較するかの差は分かるけど?

>Cには関係ない。
モロにC言語で記述されたソースが提示されてんですけどぉ?
C言語でないって言うならスレタイを見て「お前」には聞いてねーって思えよ?w

>数学屋の理論的な蘊蓄付きで。
数学の話なんてしてねーよ

547 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 15:07:53 ]
>>542が必死こいて自分の勘違いを認めないレスをする↓



548 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 15:18:49 ]

 ま た お 前 か


549 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 15:27:08 ]
前からか後ろからかで実際の速度が変わる環境は多いと思うがね。

550 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 15:34:02 ]
>>549
それは一概に言えないけど、とりあえず上の流れは
明らかに大学のプログラムの講義でC言語を使っているものを例に出しているけどね
そういうと、今度は無理なこじつけとか言い出すだろうけど、C言語において
ソートは出てくるんで、あまり細かいことを言っていたら
それじゃC言語でなんのプログラムを作るの?って話にまで発展しちゃうんで
一例を出しての話はおkだな

551 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 16:33:18 ]
面減る

552 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 17:08:59 ]
メンヘル型かまってちゃん症候群

553 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 17:19:28 ]
お勧めC本(ステップアップ順)
やさしいC
しばたぼうようのC入門のやつ
独習C++
ダイテル親子の本
K&R

554 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 17:57:35 ]
すいません
質問したものですが私のために揉め事になってしまっているようで
どうもすいませんでした
家の物置を整理したところ
兄の使っていたC言語の本と思しき書物がありましたので
ひとまずそれを繙いてみます

555 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 19:25:20 ]
>>554
古そうな本はやめておけ。
Cだって生まれたときから今まで全く同じ姿だったわけではない。
せいぜい10年以内できれば5年以内のもので、お前が合っていると感じればよいと思う。

556 名前:名無し [2006/06/26(月) 19:26:15 ]
>>517
イケメンなら結婚できる。
void life(const char *job)
{
 int age,lifetime;

 if(strcmp(job,"プログラマ") == 0)
 {
  lifetime = 50;
 }
 else
 {
  lifetime = 70;
 }
 
 age=-1;

557 名前:続き [2006/06/26(月) 19:27:46 ]
 while(++age<lifetime)
 {
#ifdef IKEMEN
  if(9<age && age<25)
  {
   printf("%d 人目の彼女が出来ました。\n",age-9);
  }
  else
  {
   if(age==25)
   {
     puts("結婚しました。");
   }
   else
   {
    if (age>29)
    {
     printf("%d 人目の愛人が出来ました。\n",age-29);
    }
   }
  }
#endif
  sleep(31536000);
 }
}



558 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 19:49:22 ]
#ifdef IKEMEN
  if(9<age && age<25)
   printf("%d 人目の彼女が出来ました。\n",age-9);
  else if(age==25)
    puts("結婚しました。");
  else if (age>29)
   printf("%d 人目の愛人が出来ました。\n",age-29);
  }
#endif

でいいじゃないか。
何でそんなにネスト掘り下げてんの?

559 名前:デフォルトの名無しさん [2006/06/26(月) 21:03:39 ]
>>558
else と if がどこに懸かっているのかが分かりにくいから。

560 名前:デフォルトの名無しさん [2006/06/26(月) 21:29:37 ]
初心者へ上司からの指令です。

C言語を使って「愛していますか?」って表示させるプログラムを組んでみよ。
さらに、YESとNOの選択を用意して
YESを選択すれば「もちろん!」
NOを選択すれば「なわけねーだろ!」
って表示させるプログラムを組んでみよ。

561 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 22:05:23 ]
>>559
いつか、ひと目で解るようになれるといいですね。

562 名前:デフォルトの名無しさん [2006/06/26(月) 23:00:16 ]
>>560
文字列の受け取り方が分かりません('A`)

int main(void) {
       char yn;

       do {
              printf("愛していますか?");
              printf("(y/n) > ");
              scanf("%c", &yn);
              while (getchar() != '\n') { }

              if (yn == 'y') {
                     printf("もちろん!\n");
                     break;
              } else if (yn == 'n') {
                     printf("なわけねーだろ!\n");
                     break;
              } else { printf("yかnを入力してください。\n"); }
       } while (!(yn == 'y' || yn == 'n'));

       return 0;
}

563 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 23:09:09 ]
534です。
みなさん色々指示してもらって。助かります。
>>535さんの発言どうり途中であきらめず、この世界で
やっていこうと本気で思いました。本気で突っ走りたくなったんで
更に更に勉強します。

564 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 23:24:54 ]
思いとどまれよ。
人生負け組みになりたくなければ。

565 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 23:31:06 ]
>>564
ひとそれぞれだよ。
俺は今年で35歳になるが、この業界に入って後悔したことはただの一度も無い。
負け犬だと思ったこともないし。客観的に見れば社会的ステータスは低いんだろうけどね。

566 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 23:32:18 ]
質問なんですが
scanfとgetsこの二つは
なにが違うのですか??
初心者ですいません

567 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 23:36:27 ]
ゲッツは文字列を受け取る
スキャンエフも文字列とか受け取れるがゲッツの方が使い勝手がよいと自分なりに勝手に拝借して候



568 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 23:52:53 ]
scanfはスペースがあるとそこで区切られるよね。
ところでgetsって
ゲッツ?ゲットエス?

569 名前:デフォルトの名無しさん mailto:sage [2006/06/27(火) 00:16:44 ]
getStringの略だからゲットエスだろ。
getsは文字列(string)を受け取るだけ。
scanfは書式指定(Format)できるから、文字列じゃなくて数値とか
いろいろ入力できる。

ま、本当はバッファオーバーランを防ぐためにもfgetsを使う
べきだと思うが。

570 名前:デフォルトの名無しさん mailto:sage [2006/06/27(火) 00:33:45 ]
>>568
区切られずに読ませる方法もある。

571 名前:デフォルトの名無しさん mailto:sage [2006/06/27(火) 00:45:55 ]
>>566
むしろ同じ所などない。
全てにおいて異なる。

572 名前:デフォルトの名無しさん mailto:sage [2006/06/27(火) 00:51:58 ]
>>566です
教えてくれた人ありがとうございます。
勉強になりました


573 名前:デフォルトの名無しさん mailto:sage [2006/06/27(火) 16:32:42 ]
opendirはNo errorなのに
readdirでBad addressって言われるのってどういう場合が考えられる?
環境はWindowsのMingwです。

574 名前:デフォルトの名無しさん mailto:sage [2006/06/27(火) 18:58:59 ]
単に終端に達したのを勘違いしたとか

575 名前:デフォルトの名無しさん mailto:sage [2006/06/28(水) 10:50:19 ]
ん〜?ファイルはあるんだけどなぁ。でもそれくらいしかあり得ないか・・・。解答どうもでした。


576 名前:デフォルトの名無しさん [2006/06/28(水) 23:27:59 ]
文字列のなかで特殊文字(%や”など)が入っているかをチェック
するときどのようにすればよろしいでしょうか。
目的はSQLでエラーになるような特殊文字を検索時の値として渡さないようにしたい

577 名前:デフォルトの名無しさん mailto:sage [2006/06/28(水) 23:44:41 ]
>>576
一文字づつチェックすればいいだろ。



それより、そういう文字は普通、エスケープして渡すべきだと思うよ。



578 名前:デフォルトの名無しさん [2006/06/28(水) 23:50:36 ]
エスケープして渡すべきとは具体的にどうすればいいいのですか。

579 名前:デフォルトの名無しさん mailto:sage [2006/06/28(水) 23:52:51 ]
>>576
つ[strcspn]

580 名前:デフォルトの名無しさん mailto:sage [2006/06/28(水) 23:54:35 ]
SQL エスケープでぐぐれ

メタ文字の意味を消失させる事
例えばCの文字列定数なら"\\"みたいな

581 名前:デフォルトの名無しさん mailto:sage [2006/06/28(水) 23:55:29 ]
>>578
そのSQLの仕様見れ

582 名前:デフォルトの名無しさん mailto:sage [2006/06/29(木) 10:03:59 ]
Visual C++ 6.0上で実行すると、「Press any key to continue」が最後に出るのに、
直接実行すると、「Press any key to continue」が出ずに
すぐに終わってしまいます。どうすれば、
直接実行したときに、「Press any key to continue」が出るようにできるのでしょうか?

583 名前:デフォルトの名無しさん mailto:sage [2006/06/29(木) 10:42:11 BE:15528724-#]
main関数の最後に
puts("Press any key to continue.");getch();
と書いておく。

584 名前:デフォルトの名無しさん mailto:sage [2006/06/29(木) 16:56:59 ]
>>582
末尾に
system("PAUSE");

585 名前:デフォルトの名無しさん mailto:sage [2006/06/29(木) 16:59:05 ]
>>582
コマンドプロンプトを立ち上げて
実行プログラムがある場所に移動してから実行するとか

586 名前:デフォルトの名無しさん [2006/06/29(木) 20:19:49 ]
コマンドプロンプト上でカーソル位置を自由に設定する方法を教えてください。
メニュー画面を作って、メニュー番号を入力させるプログラムを作りたいの
ですが、メニュー画面を表示させることはできるのですが、
画面上の真ん中あたりに、メニュー番号を入力させるところを作りたいのですが、
そこに、カーソルをもってくるにはどうしたらいいですか?
お願いします。

587 名前:デフォルトの名無しさん mailto:sage [2006/06/29(木) 20:48:22 ]
コンソールAPI でぐぐる。



588 名前:586 mailto:sage [2006/06/29(木) 21:01:06 ]
>>587
ありがとう!!

589 名前:586 [2006/06/29(木) 22:12:54 ]
ごめんなさい、やっぱわかんなかった。
VCじゃなくって、まったくのc言語だけでカーソル移動とかさせたいのだけど、
windows.hとか使わないでやる方法教えてください。

590 名前:デフォルトの名無しさん mailto:sage [2006/06/29(木) 22:17:07 ]
>>589
ない。
そもそも、標準Cにコンソールとか言う概念自体がない。

591 名前:586 mailto:sage [2006/06/29(木) 22:21:42 ]
>>590
そうなのか、、ありがと

592 名前:デフォルトの名無しさん mailto:sage [2006/06/30(金) 01:03:38 ]
すげぇなぁ。
>メニュー画面を作って、
>メニュー番号を入力させるプログラムを作りたいのですが、
>メニュー画面を表示させることはできるのですが、
>画面上の真ん中あたりに、
>メニュー番号を入力させるところを作りたいのですが、
>そこに、
>カーソルをもってくるにはどうしたらいいですか?
なげぇ文だぜ。
きっとプログラムもmain()で冗長に書いているのだろう。

593 名前:デフォルトの名無しさん mailto:sage [2006/06/30(金) 16:42:41 ]
文字列の部分コピーをやりたいです。
先頭から n 文字目までのコピーなら strncpy(*char, *const char, int); で実現できますが、
n 文字目から最後までのコピーは、char配列の1成分ずつfor文等でコピーしないといけないのでしょうか?

594 名前:デフォルトの名無しさん mailto:sage [2006/06/30(金) 17:43:09 ]
>>593
strcpy(dst, src+n);

595 名前:593 mailto:sage [2006/06/30(金) 18:38:32 ]
>>594
できました。ありがとうございます。
このような使い方が出来るとは・・・覚えておきます。

596 名前:デフォルトの名無しさん mailto:sage [2006/06/30(金) 19:05:37 ]
>>595
ポインタとヌル終端文字列の基本テクです

597 名前:デフォルトの名無しさん [2006/06/30(金) 22:56:30 ]
do-while文で、整数を入力して、0になったらおわりという文はどうしたらいいのですか?最近プログラムの勉強始めたばかりで申し訳ありません



598 名前:デフォルトの名無しさん mailto:sage [2006/06/30(金) 23:19:56 ]
>>597 適当に答えてみる
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int num;
char tmp[256];
do{
num=atoi(gets(tmp));
}while(num!=0);
return 0;
}

599 名前:582 mailto:sage [2006/07/01(土) 00:25:26 ]
>>583,584,585
ありがとうございます。system("PAUSE");を利用することにしました。

>>597
#include <stdio.h>
int main(){
int n;

do{
scanf("%d",&n)
if(n<1) printf("1以上の整数を代入してください!");
}while(n<1);

do{
n--;
}while(n!=0);

return(0);
}

実行してないからバグあるかもしらん。


600 名前:デフォルトの名無しさん mailto:sage [2006/07/01(土) 01:04:31 ]
598、599さん、素早い返答ありがとうございます。実は猫でもわかるシリーズの本にあった例で、do〜while(n)で終わってて理解できなかったんです。初学者ゆえこれからも質問しますが、よろしくお願いいたしますm(__)m。

601 名前:デフォルトの名無しさん [2006/07/02(日) 13:57:54 ]
double a=123456.6789
b=-12345.6789

printf("a=%10.4f b=%10.4f\n",a,b);
printf("a=%7.4f b=%7.4f\n"),a,b);

の結果が両方とも

a=123456.6789 b=-12345.6789になるのはどうしてでしょうか?

602 名前:・∀・)っ-○◎● ◆toBASh.... [2006/07/02(日) 14:07:24 ]
>>601
%10.4fは、浮動小数の「小数点以上」ではなく「全体の幅」を10文字で表すと言う意味。
もちろん小数点以上の桁数が足りない場合は自動的に補われる。
小数点以下の「4」の部分は、小数点以下に使う桁数の指定。

どっちも7文字でも10文字でも表しきれないので11文字に拡張されて同じ表示になる。

603 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 14:15:07 ]
>>601
pc8.2ch.net/test/read.cgi/tech/1148993760/671

604 名前:デフォルトの名無しさん [2006/07/02(日) 14:15:33 ]
>>602
よくわかりました。ありがとうございます。

605 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 14:30:09 ]
目がおかしくなったかなぁ。
>601の後者はコンパイルさえ通らないし、二番目の%10.4fの結果は12桁になるようにしか見えない。

606 名前:デフォルトの名無しさん [2006/07/02(日) 16:02:02 ]
Boland C++ Compiler 5.5でアプリケーションプログラムをコンパイルする方法を
教えてください。

パラメータ 'hWnd'は一度も使用されない
パラメータ 'hPrevInstance'は一度も使用されない
パラメータ 'lpCmdLine'は一度も使用されない

といった警告はどうしたら消えるのでしょうか?

607 名前:・∀・)っ-○◎● ◆toBASh.... [2006/07/02(日) 16:09:20 ]

int WINAPI WinMain(
HINSTANCE /* hInstance */
, HINSTANCE /* hPrevInstance */
, LPSTR /* lpCmdLine */
, int /* iCmdShow */
)
{
 // ほげほげ
}



608 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 16:36:34 ]
その気持ちの悪いカンマの位置はどんなメリットがあるんだ?
たまに見かけるんだが。

609 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 17:50:20 ]
Borland Developer Studio 2006 No.06
pc8.2ch.net/test/read.cgi/tech/1151562315/l50


int WINAPI WinMain(
 HINSTANCE,
 HINSTANCE,
 LPSTR,
 int,
)
{
 // ほげほげ
};
ってやっちまって、コンパイルエラー出て悩むのを防ぐ馬鹿除けでは?

610 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 18:10:34 ]
俺ならint WINAPI WinMain(HINSTANCE, HINSTANCE, PSTR, int)って1行に書く。

611 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 18:11:34 ]
一応言っておくと>>607-610のように仮引数名を省略できるのはC++だけで、Cではできない。

612 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 18:40:04 ]
あれ? C99でできなかったっけ?

613 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 18:47:37 ]
nに入力した数字の数だけ$を表示するプログラムを作ったんですが
数字を入力するとなんか沢山$が出てきちゃいます。
改善方法はありませんか。よろしくお願いします。
#include <stdio.h>
int main(void){
int a;
char c;
while(1){
printf("C=");
scanf("%c",&c);
if(c==0)
break;
if((c <= 'A' && c <= 'Z') || (c <= 'a' && c <= 'z')){
printf("英数字ですぅ\n");
continue;
}
else{
for(a=1;a<=c;a++)
printf("$");
}
  }
}

614 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 19:58:25 ]
>>613
・scanf()の戻り値をチェックしないとcの値が有効かどうか判らない。
・cには文字が入っている。それは数値ではないので0と比較する意味が殆どない。
・同じ理由で、$の数は文字コードの値に依存してしまう。

やりたいことがよく判らんが、入力と処理を分けて考えた方がいいんじゃないか?

615 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 20:54:59 ]
 cを入力
  ↓
英字か?no→→→数字か?no→→→→→それ以外
 yes↓     yes↓         ↓
上に戻る  cの数だけ$を表示    終了

616 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 21:01:46 ]
上のようなプログラムを作りたかったんですが
10進数型で入力にして
if((c <= 'A' && c <= 'Z') || (c <= 'a' && c <= 'z')){
printf("英数字ですぅ\n");

else if((c <= 0){
for(a=1;a<=c;a++)
printf("$");
}

else
break;

このようにしても英字を入力したらダメですし・・・。
上のようなプログラムを作るのは無理ですか。

617 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 21:05:30 ]
>>616
つ isalpha(), isdigit()



618 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 21:05:51 ]
>>616
>>616読め

619 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 21:13:22 ]
cが0以下ってのはどういう事よ

620 名前:デフォルトの名無しさん [2006/07/02(日) 21:44:18 ]
signed char であれば、ASCII範囲外を除外しているといえなくも無い。

621 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 21:48:38 ]
ASCII範囲内を除外しているように見えるが...

622 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 22:17:10 ]
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
// ここから入力
char buf[200];
if (fgets(buf, sizeof(buf), stdin) == NULL) {
// 入力終端or異常
}
char * ptr;
long foo = strtol(buf, & ptr, 10);
if (ptr[0] != '\0') {
// 数字以外の入力
}
// ここから文字処理
for (unsigned ic = 0; ic < foo; ++ic) {
putchar('$');
}
return 0;
}



623 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 22:40:48 ]
見たことのない文字がいっぱい・・・。
c言語って難しいですね。
あと、616は間違いだらけでした・・・。
皆さんありがございました。皆さんが言ってることが理解できるようにもっと勉強します。

624 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 22:45:12 ]
>見たことのない文字がいっぱい・・・。
確かにそれでは文字コードの処理は難しいだろう
…とかいうツッコミは置いといて、
ガンガレ。

625 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 22:55:52 ]
>>622
改行を除去するか、'\0' || '\n'で判定しないと、
常に数字以外と判定されるよ。

626 名前:622 mailto:sage [2006/07/02(日) 23:36:30 ]
あ、いけね、忘れてた。
>>625
THX!
こんなもんかな。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char buf[200];
if (fgets(buf, sizeof(buf), stdin) == NULL) {
printf("No input.\n");
return 0;
}
char * ptr = strchr(buf, '\n');
if (ptr) {
* ptr = '\0';
}
if (strlen(buf) == 0) {
printf("Empty input.\n");
return 0;
}
long foo = strtol(buf, & ptr, 10);
if (ptr[0] != '\0') {
printf("Not a number.\n");
return 0;
}
for (unsigned ic = 0; ic < foo; ++ic) {
putchar('$');
}
return 0;
}

627 名前:デフォルトの名無しさん [2006/07/02(日) 23:36:32 ]
初歩的な質問ですみません。
main関数とは別のファイルに作ったユーザー定義関数を
呼び出すのはどうしたらいいですか?
#includeで取り込めばいいのでしょうか?
そのときは、やっぱり関数のプロトタイプ宣言は必要ですか?



628 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 23:37:57 ]
extern付けて宣言する必要がある

629 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 23:38:16 BE:314515679-#]
>>627
環境は?

630 名前:デフォルトの名無しさん [2006/07/02(日) 23:39:01 ]
>>629
WindowsXPです

631 名前:デフォルトの名無しさん [2006/07/02(日) 23:42:36 BE:239631168-#]
>>630
VCとかなら、プロジェクトに別ファイルを追加すればいいよ。
コマンドラインなら、引数で、mainのファイルと、別のファイルを渡せば勝手にリンクされる。

632 名前:デフォルトの名無しさん [2006/07/02(日) 23:44:39 ]
すごく初歩的なんですが
c言語を学校で習ってるんですが
家のPCでソース組むにはどうしたらいいでしょうか?

633 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 23:46:01 ]
答え:先生に聞く

はい次の方どうぞー

634 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 23:47:57 BE:359446098-#]
>>632
メモ帳

635 名前:デフォルトの名無しさん [2006/07/02(日) 23:48:54 ]
コンパイラがどれがいいのかわからなんです・・・・

636 名前:・∀・)っ-○◎● ◆toBASh.... [2006/07/02(日) 23:49:08 ]
コンパイルまでやるなら
Visual C++ Express

637 名前:デフォルトの名無しさん [2006/07/02(日) 23:52:17 ]
学校じゃコマンドプロンプトでlcc ソース名でコンパイルできるんですが



638 名前:・∀・)っ-○◎● ◆toBASh.... [2006/07/02(日) 23:55:23 ]
Visual C++ Expressならコマンドプロンプトから cl ソース名 でおk

639 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 23:59:08 ]
>>632
コマンドプロンプトでnotepad[Enter]だ。

640 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 23:59:45 ]
ttp://www.borland.com/jp/products/cbuilder/freecompiler.html
ttp://www.vector.co.jp/soft/win95/prog/se141451.html
VC++ Expはダウソに時間が掛かるから、今すぐちゃちゃっとやるならこっつで

641 名前:・∀・)っ-○◎● ◆toBASh.... [2006/07/03(月) 00:05:42 ]
lcc-win32も自分で環境変数通せばコマンドラインで使えそうだけどな

642 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 01:23:42 ]
>>637
lccと言えば、LSI C-86のような気がする。
準備(インストール)はなれないと面倒かもしれないが、学校と同じというのは利点かもしれない。

643 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 02:02:18 ]
4つ程度なら、int WINAPI WinMain(HINSTANCE, HINSTANCE, PSTR, int)って1行でもいいけど、世の中にはもっといっぱい受け渡す関数もあるよ。

今更、lccって気もするなあ。
実務経験的に、gccかVCのインスコと環境構築方法も学習すべき。

644 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 07:34:30 ]
lccと言ってもLSI-Cではないと思うけどね。
授業でLSI-C使っているならそれはそれで、よっぽど阿呆で楽しいが。

645 名前:仕様書無しさん [2006/07/03(月) 13:16:25 ]
配列でhoge[i*j]と*(hoge+i*j)はどちらがいいのでしょうか?
メリットなどがあれば教えてください

見やすいのはhoge[i*j]なのでこっちで書くほうが多いのですが



646 名前:デフォルトの名無しさん [2006/07/03(月) 13:34:54 ]
>>645
a[i] は *(a + i) の略記法なんだからコンパイラにとってはどっちでも同じ。
見やすい方で書けばいい。

647 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 15:55:19 ]
pow()や、malloc()は重い関数と聞いたのですが、
ではclock()は重い関数なのでしょうか。
というか、重い関数というのはどこでどうやって知るのでしょうか?




648 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 15:58:51 ]
>>647
OSのソースを読むとか実際に測定してみるとか。


649 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 16:06:47 ]
>>648
ということは重いかどうかというのは環境依存なんですね。
分かりました。どうもありがとうございます。

650 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 18:46:45 ]
>>647
>というか、重い関数というのはどこでどうやって知るのでしょうか?
というか、重い関数というのは何を基準に決めるのでしょうか?

651 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 19:14:34 ]
主観

652 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 21:21:28 ]
相対的なもんじゃね。

653 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 22:04:21 ]
他に手段があるならそれと較べて重い(≒遅い)か判断すればいいんじゃない?

pow()はpow(5, 2)と5*5を較べれば一目瞭然だし、malloc()の代わりにC99の可変長配列を使うとか、
malloc(100)を1万回の代わりにmalloc(100 * 10000)すればずっと早くなるわけだし。

654 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 23:06:35 ]
各辺が全て500以下であるようなピタゴラスの三整数を全て求めよ。
ただし、三重にネストしたforループを使う事。

#include<studio.h>

main()

  int x,y,z;

 for( z = 1, z <= 500 , z++ ){
  for( x = 1, x <= 500 , x++ ){
   for( y = 1, y <= 500 , y++){
    if( pow(z,2) == pow(x,2) + pow(y,2 ))
     printf("%dの二乗は%dと%dの二乗の和に等しい\n",z,x,y);}}}

 return0;



上記で合ってますか?


655 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 23:15:42 ]
宿題スレで会おう!

656 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 23:21:42 ]
>>655
スマソ
サンクス

657 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 01:57:58 ]
ちょっと質問です。

a , b ? c , d : e , f;

a , (b ? (c , d) : e) , f;
と同じでしょうか?

あと、

a = b ? c = d : e = f;

a = (b ? (c = d) : (e = f));

ですか?

どうも3項演算子の優先順位が今ひとつ…。
括弧つけろってのは別の話ということで、
よろしくお願いします。





658 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 02:11:37 ]
www.google.co.jp/search?q=%E6%BC%94%E7%AE%97%E5%AD%90+%E5%84%AA%E5%85%88%E9%A0%86%E4%BD%8D

で、その式はコンパイル通るのか?

659 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 09:13:57 ]
>>658
VC6で試したけどコンパイルは通りました。

たとえば条件演算子と、代入演算子やカンマ演算子は、条件演算子の方が優先順位の方が高いじゃないですか。
なら、そのまま解釈すると

a = b ? c = d : e = f;

a = (b ? c) = (d : e) = f;

a , b ? c , d : e , f;

a , (b ? c) , (d : e) , f;

こうなっちゃいそうだけどそれじゃあ本当にコンパイルが通らないし、それで聞いてみたんです。

a , b ? c , d : e , f;
これは、
(a , b) ? (c , d) : (e , f);
こう括弧でくくってもコンパイル上は問題になりませんが、優先順位としては明らかにカンマの方が高くなっているから
ありえない。実際動作もそうなってはいないようです。

で、演算子を解釈していくときのプロセスで、3項演算子だけは二項演算子とは違った特異な処理をしているんしょうか?

ちょっと入門の質問じゃないかも知れないですが、どうも自分の考え方が理解の域に達していないので、初心者とし
て質問させていただきました。

グーグル先生以外の人間の達人の方、出来ましたら演算子の解釈順序なんかをご教示くださいませんでしょうか。

よろしくお願い致します。



660 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 09:28:04 ]
>>659
a = b ? c = d : e = f;

a = (b ? (c = d) : e) = f;

a , b ? c , d : e , f;

a , (b ? (c , d) : e) , f;

だ。
? と : の間は分離なんかできるわけがないから、
ここは常に ? ... : は ? (...) : と同じになる。

661 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 10:12:54 ]
>>660
どうもありがとうございます。ただ、まだちょっと納得いってません。aを除いて、
b ? c = d : e = f;
これはご教示に従えば

(b ? c = d : e) = f;

こうなりますよね? ここで、bが偽なら 最初の括弧の中は (e) となって、
e = f が実行されますが、 b が真のとき、(c) = f が実行されないのでしょうか?

(b ? c = d : e) = f;

(c = d) = f;

(c) = f;


bが真のとき、実際に挙動を見てみると、

b ? (c = d) : (e = f);

こうなっているように思えるのです。なので、

a = b ? c = d : e = f;

このケースでも、bが真か偽かによって、 a の値が d か f のどちらかになります。


662 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 10:13:39 ]

改行が多いみたいで、上の続きです。

a = (b ? (c = d) : e) = f;
a = b ? c = d : e = f;

これはトレースすると、挙動が違うんです。もし手軽に試せる状況なら、
追試していただけないでしょうか?

お手数ですが、よろしくお願い致します。






663 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 10:33:12 ]
(b ? c = d : e) = f; ってコンパイル通るか?
三項演算子は左辺に置けないと思うんだけど。

664 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 11:11:47 ]
ちと勘違いしてました。VC6でWinMainで試してました。
C++だと変数の参照を返すからコンパイル通るんだ…。

ここはC言語スレでしたかorz

たしかにCだと
b ? c = d : e = f;

これは書けませんね。

ただ、演算子の優先順位というに点だけ着目すると、Cでは
(b ? (c = d) : e) = f;
こうなって左辺値に不適合でエラー

C++だと
b ? (c = d) : (e = f)

このように実動作しているようです。直感的にはC++流の解釈の方が
素直な気がしますが、三項演算子の コロン以降だけを特別処理している
気がしてならない…。

スレ汚し失礼しました。C++スレに行って来ます。

665 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 11:13:34 ]
言語の優先順位に頼った可読性の悪いソース書くなよ。
括弧使え括弧。


666 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 11:24:20 ]
>>665
ですので、最初に書いたとおりに、括弧をつけるのは別の話です。
コンパイラの式処理がどうなっているのか勉強しているので。

667 名前:初心者 [2006/07/06(木) 10:08:35 ]
初心者レスですよね?!心優しい皆さんよろしく!!
数列の長さを設定しました。
キーボードで文字を入力します。
入力した文字が設定した長さを超えるとごみが出て
次の入力を影響します。
設定した長さ以後のごみをメモリからとる方法は??




668 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 12:47:59 ]
むり

669 名前:デフォルトの名無しさん [2006/07/06(木) 13:05:30 ]
FreeBSDやMac OS Xならば、
  fpurge(stdin)
で入力バッファに入っている文字を落とせる。

これが無いとちょっと面倒だけど、とりあえず改行文字まで
落としたかったら
  while(getchar() != '¥n');
でいいんじゃない?

670 名前:初心者 [2006/07/06(木) 13:06:42 ]
何が無理?


671 名前:初心者 [2006/07/06(木) 13:13:37 ]
>>669御免初心者なんで、FreeBSD<<わからない。
例として:
#include <stdio.h>
int main(void)
{
char gg[22],*gu;
char hh[33],*jj;

printf("数列入れて>\n");
fgets(gg,22,gu);
printf("数列いれ>\n");
fgets(hh,33,jj);

getc(stdin);
}
数列を多い目に入れると、次の入力ができない。


672 名前:もはもは [2006/07/06(木) 13:14:46 ]
HELPです!!!!!

1次元配列に 34 57 45 21 89 63 39 48 78 68 76 84 92 53 62 のデータをセットして、
これらの平均値を求めよ。
さらに int eval[3]という1次元配列を用意して
eval[0] には0〜60の数の個数
eval[1]には61〜80の数の個数
eval[2]には81〜100の数の個数
を格納するようにし、それらを出力するプログラムを作成せよ。

よろしくお願いします。

673 名前:デフォルトの名無しさん [2006/07/06(木) 13:29:23 ]
>>671
どうゆう入力を想定してるの?

674 名前:デフォルトの名無しさん [2006/07/06(木) 13:32:11 ]
>>671
fgets(標準ライブラリのものと仮定)の使い方が間違ってる。
標準入力から入力して欲しいのなら、

fgets(gg, 22, stdin);
fgets(hh, 33, stdin);

のように書かなくては。

675 名前:初心者 [2006/07/06(木) 13:54:51 ]
>>673
プログラムの一部なの。(全体は汚いプログラムなので見せない><)
まぁ、かんたんに言えば、
キーボードから入れた文字を好きな所まで取り
オーバーしたものは消す方法。
神様、私の願いを!!!

676 名前:デフォルトの名無しさん [2006/07/06(木) 14:09:56 ]
何が言いたいのかよくわからん。
Cより前に日本語をちゃんと勉強しろよ。

677 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 14:17:55 ]
留学生か?>初心者



678 名前:初心者 [2006/07/06(木) 14:22:39 ]
勉強中です><(怒らないで);
(本当に外国人です!!!日本語下手で御免なさい><);
会社からcを無理やり勉強させました。
お願いします。

679 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 14:27:35 ]
english ok

680 名前:デフォルトの名無しさん [2006/07/06(木) 14:29:31 ]
・・・変数宣言って何・・・?

681 名前:初心者 [2006/07/06(木) 14:29:39 ]
むり!韓国語なら>>

682 名前:初心者 [2006/07/06(木) 14:36:10 ]
#include <stdio.h>
int main(void)
{
char gg[22],stdin;
char hh[33],stdin;

printf("数列入れて>\n");//ここに20文字以上入れるとおかしくなる
fgets(gg,22,stdin);
printf("数列いれ>\n");
fgets(hh,33,stdin);

getc(stdin);
}


683 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 14:51:10 ]
>>682
おかしくなるのは仕様です。面倒ですが、次のように大きなバッファを用意して、
そこに一旦とりこむ必要があります。配列の大きさよりひとつ少なくしか使えないのは、
最後にヌル文字を入れる必要があるからです。

#include <stdio.h>
#include <string.h>
int main(void)
{
char buf[1024];
char gg[22];
char hh[33];

printf("数列入れて>\n");
fgets(buf, sizeof buf, stdin);
buf[strlen(buf) - 1] = '\0';
memset(gg, '\0', sizeof gg);
strncpy(gg, buf, sizeof gg - 1);

printf("数列いれ>\n");
fgets(buf, sizeof buf, stdin);
buf[strlen(buf) - 1] = '\0';
memset(hh, '\0', sizeof hh);
strncpy(hh, buf, sizeof hh - 1);
}

684 名前:初心者 [2006/07/06(木) 15:09:57 ]
>>683
先に入れる所用意する事までは分かりました。
でもこれも限界がある(入力がbufの1024字超えれば)と思います。
(他にも使い所あるので><)
butに無限入力できる方法ないかしら??
(どんな入力も対応できる方法)
よろしくおねがいします。

685 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 15:13:22 ]
ハードウェアのリソースが有限な以上
どんな入力にも対応するなんてのは無理。
そのために仕様が存在する。

686 名前:初心者 [2006/07/06(木) 15:20:06 ]
>>685
そうなんですか!!!!
本当にありがとうございました。
はんぱな日本語で迷惑かけました>>礼>>

687 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 20:02:38 ]
CとJavaで、初心者が学びやすいのはどちらでしょうか?
最初に学ぶのはどちらがいいのでしょう…?
またCとJavaは数学的な要素(計算など)がどちらも必要になってくるのでしょうか。
返信お願い致します。



688 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 20:11:10 ]
>>687
将来プログラミングで生計を立てたいのなら、まずCから。もちろんその後Javaもやる。
趣味でやるならどちらでも。Javaオンリーでもかまわない。

689 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 20:26:42 ]
>>688
そうですか。
計算などが出てきてしまうと辛いのですが、両者とも計算式を
使ったりするのですか?

690 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 20:35:08 ]
>>689
プログラミングでどのようなものをやるのかによる。

が、言語そのものの学習中にはほとんど出てこない。
数学的センスがあったほうが有利な場面があるかもしれないが。

691 名前:デフォルトの名無しさん [2006/07/06(木) 20:52:14 ]
>>690
わかりました。ありがとうございます。

692 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 21:03:06 ]
でも1 + 1やx + yもいわゆる計算式ではないだろうか。

693 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 21:05:18 ]
>>692
ええ、計算式です。間違いなく計算をする数式です。

694 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 21:09:13 ]
>>692>>693
それはCとJavaの両方とも使うのですか?
Cは関数を計算し求めると聞いたのですが、Javaもなのでしょうか。

695 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 21:12:42 ]
>>694
その書き込み、本気なのか?
だったら、プログラミングなど勉強するだけ無駄だからやめとけ。

696 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 21:18:31 ]
数学がさっぱりでもいいが、算数は必須。

697 名前:デフォルトの名無しさん [2006/07/06(木) 21:27:52 ]
>>695
私情でやらざるを得ない状況になりましたので、今回[入門]とあったこちらで
質問致しました。

レス参考にさせて頂きます。ありがとうございました。



698 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 21:31:17 ]
まずやってみたら?プログラミングがどんなことするか分かってない気がする

699 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 21:49:20 ]
ここにもチョンが湧いてるのか。
ミサイル発射の謝罪と補償を要求する!

700 名前:デフォルトの名無しさん [2006/07/06(木) 22:06:02 ]
ここの回答者の人たちは参考書は何を読んで覚えたんですか?
0から始めた参考書と、それなりにわかってから読んだ参考書を教えてください

701 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 22:17:54 ]
言語としてのCに限るなら林のビギナー編だけしか読まなかったな。
もう後輩に売っちまった。

702 名前:デフォルトの名無しさん mailto:sage [2006/07/07(金) 00:42:13 ]
>>699
お前ひとりに直撃すりゃあ良かったのにな。

703 名前:デフォルトの名無しさん mailto:sage [2006/07/07(金) 11:30:11 ]
在日は速く半島に帰れ!
また有事の際に日本で儲けていたと半島のチョンに蔑まれ続けるぞ。

704 名前:デフォルトの名無しさん mailto:sage [2006/07/07(金) 11:33:22 ]
>>700
0からK&Rの第一版。
20年ぐらい前に覚えたのだが、それ以上にまともに書いてある本はなかった。
その後第二版も読んだ。

705 名前:デフォルトの名無しさん mailto:sage [2006/07/07(金) 11:41:42 ]
>>703
憂さ晴らしは妥当な板でどーぞ

706 名前:初心者 [2006/07/07(金) 12:01:46 ]
>>699話す事あるなら他のレスでどうぞ、
(ちゃんと見るから!!)
このレスを汚くするな!!

707 名前:デフォルトの名無しさん mailto:sage [2006/07/07(金) 16:37:53 ]
PGの雇用が奪われてるのは、不法滞在し異常に安い賃金で働くチョンのせい。



708 名前:デフォルトの名無しさん mailto:sage [2006/07/07(金) 18:55:02 ]
>>706
いちいち反応するな。流せ

オレモナー

709 名前:デフォルトの名無しさん mailto:sage [2006/07/07(金) 23:24:53 ]
>>706の「レス」に反応

710 名前:デフォルトの名無しさん mailto:sage [2006/07/07(金) 23:39:50 ]
ごめんね、スレとレスの違いも分からなくて
ごめんね

711 名前:デフォルトの名無しさん mailto:sage [2006/07/07(金) 23:44:17 ]
ごめんね、ごめんね、ごめんねごめんね、
ごめんねごめんね、ごめんね、ごめんね、
ごめんね、ごめんね、ごめんねごめんね、
ごめんねごめんしねごめんね、ごめんね、
ごめんね、ごめんね、ごめんね、ごめんね
ごめんねごめんね、ごめんね、ごめんね、

712 名前:デフォルトの名無しさん mailto:sage [2006/07/08(土) 10:29:13 ]
チョン氏ね!

713 名前:デフォルトの名無しさん [2006/07/09(日) 00:22:08 ]
エンターキーが押されたかどうかの判定の仕方と、
スペースキーが押されたときの判定の仕方を教えてください

714 名前:デフォルトの名無しさん mailto:sage [2006/07/09(日) 00:29:35 ]
環境に依存するからもうちょっと情報だして

715 名前:713 [2006/07/09(日) 00:37:55 ]
標準c言語で、コマンドプロプト上で動かすコンソールアプリです。
OSはWindowsXPです。よろしくお願いします

716 名前:デフォルトの名無しさん [2006/07/09(日) 03:15:58 ]
VC++4.0でXP用のソフトを組んでます。
操作ミスなどで警告音を鳴らしたいのですが、
MessageBeep()関数だと単純な音しか鳴らせず、おもしろくありません。
かといって、警告音のためにWAV作ったりするのも大変なので、
少しだけシャレた警告音を簡単に慣らす方法がありませんか?

717 名前:デフォルトの名無しさん mailto:sage [2006/07/09(日) 03:24:07 ]
Beep()を沢山つかって音楽でも奏でてはいかが?
10ミリ秒ごとにアルペジオさせれば和音っぽく聞こえて
周りをちょっと驚かすぐらいはできるよ。



718 名前:デフォルトの名無しさん mailto:sage [2006/07/09(日) 03:36:44 ]
適当に答えてみる。
>>713
標準c言語だと、getchar()かな?
でも、エンターが押されないと、stdinに入ってこない。
MS-Cだと、getch()が1文字ずつとれる。(エコーなし)
エコーしたいなら、getche()。
<conio.h>に入っている。

719 名前:デフォルトの名無しさん mailto:sage [2006/07/09(日) 04:20:51 ]
CでGUIアプリ作る方法教えてください

720 名前:デフォルトの名無しさん [2006/07/09(日) 05:49:53 ]
Cでかいたプログラムから命令(メッセージ?)送ると
グラフィックだけ出力してくれるサーバっぽいアプリケーション
ってないですか?


721 名前:デフォルトの名無しさん mailto:sage [2006/07/09(日) 05:57:51 ]
X?

722 名前:デフォルトの名無しさん mailto:sage [2006/07/09(日) 05:58:37 ]
あ、「Windows」の方が適切かな

723 名前:デフォルトの名無しさん mailto:sage [2006/07/09(日) 06:12:09 ]
適当に答えてみる。
>>720
system("start C:\\temp\\test.gif");
なんてやれば、windowsならgif拡張子に関連付けしてるアプリを
よんでくれるはず。(.bmpとか.jpgでもOK)

724 名前:デフォルトの名無しさん mailto:sage [2006/07/09(日) 11:38:34 ]
OpenGLとかActiveXの記述だけで描画してくれるアプリが欲しいってこと?
普通は鯖といちいち通信するのが面倒だから自前でライブラリ抱えます。

少しだけシャレた警告音はwavでも鳴らさないと無理な悪寒。
どんなのが少しだけシャレた警告音なのか録音してウpしてみてくれ。

常に入力を監視する。
スペースかリターンが押されたのを判定すればいい。
普通はキー入力があったらイベント飛んで来るから、入力に対応した処理を記述しておけばOSが実行してくれる。

725 名前:713 mailto:sage [2006/07/09(日) 11:39:33 ]
適当な回答ありがとうございます。参考になりました

726 名前:デフォルトの名無しさん [2006/07/09(日) 11:56:05 ]
MS Visual C++ NET
BorLand C++ Builder6
てどちらが使いやすい?



727 名前:デフォルトの名無しさん mailto:sage [2006/07/09(日) 22:16:51 ]
両方使ってみてそれぞれにスレがあるから感想でもカキコしてみたら?
ムカつくほうは使わないほうがいいと思う。ストレス感じるだけ。



728 名前:デフォルトの名無しさん mailto:sage [2006/07/09(日) 23:29:29 ]
>>726
単なる数値計算やら簡単なプログラム(アルゴリズムの勉強)程度なら
Borland C++ 5.5が手軽で良いYO!

729 名前:716 [2006/07/10(月) 01:26:04 ]
>>717
10mS毎に?
うーん、他にいい方法がなかったら試してみます(汗

730 名前:デフォルトの名無しさん [2006/07/10(月) 01:36:13 ]
質問です。
「'」という文字を配列に格納したいのですが、エラーが出てうまくいきません。
エラーは以下の3つです。
文字列定数は1文字か2文字でなければならない。
,が必要。
文字列または文字定数が閉じていない。

宜しくお願いします。

731 名前:デフォルトの名無しさん mailto:sage [2006/07/10(月) 01:41:01 ]
¥’

732 名前:デフォルトの名無しさん [2006/07/10(月) 03:17:38 ]
>>731
ありがとうございます!

733 名前:デフォルトの名無しさん mailto:sage [2006/07/10(月) 12:36:59 ]
>>730-731
せめて半角で書いて欲しいとオモタ

734 名前:デフォルトの名無しさん [2006/07/10(月) 20:38:16 ]
CHAR PTCHAR TCHAR WCHAR型の違いを教えてください

735 名前:デフォルトの名無しさん mailto:sage [2006/07/10(月) 21:49:40 ]
typedef char CHAR;
typedef wchar_t WCHAR;
#ifdef UNICODE_
typedef WCHAR TCHAR;
#else
typedef CHAR TCHAR;
#endif
typedef TCHAR *PTCHAR;

736 名前:726 [2006/07/10(月) 21:50:19 ]
>> 728
サンクス

737 名前:デフォルトの名無しさん [2006/07/10(月) 21:58:42 ]
putchar だけで文字コード 112、117等 を出力するプログラムを教えてください。



738 名前:734 [2006/07/10(月) 22:08:03 ]
>>735
アリガ10

739 名前:デフォルトの名無しさん mailto:sage [2006/07/10(月) 22:28:49 ]
>>737
putchar(112)

740 名前:デフォルトの名無しさん mailto:sage [2006/07/10(月) 22:58:26 ]
そのまんまですな。

741 名前:デフォルトの名無しさん mailto:sage [2006/07/11(火) 02:29:38 ]
ワロタ

742 名前:デフォルトの名無しさん mailto:sage [2006/07/11(火) 02:33:22 ]
CでGUI?
WindowsならWin32
LinuxならGTK+
どっちもCライブラリ

743 名前:デフォルトの名無しさん mailto:sage [2006/07/11(火) 09:08:17 ]
>>728
BorlandC++と一緒にTurboDebugger落として使ってみたら、
このデバッガって、キャラクタ画面ベースのUIなのな。
あまりに懐かしいスタイルにめまいがしたyo!

744 名前:デフォルトの名無しさん mailto:sage [2006/07/11(火) 16:09:48 ]
GUIのデバッカってメモリ喰うしデバッカに落ちた時点で表示できないと思う。

745 名前:デフォルトの名無しさん mailto:sage [2006/07/11(火) 22:50:17 ]
DLL内でmallocした物をexeからfreeしてはいけないと聞いた事があるのですが
malloc以外のHeapCreateやHeapAlloc(GetProcessHeapとかなら問題ないのでしょうか?

746 名前:デフォルトの名無しさん mailto:sage [2006/07/11(火) 23:12:42 ]
>>745
確保するときと解放するときとで、同じヒープハンドルを用いれば問題ない。

けれどDLLでメモリを確保して、そこへのポインタをEXEに返すのだったら、
DLLはそのメモリを解放する関数も公開するのが一般的だと思う。

747 名前:デフォルトの名無しさん mailto:sage [2006/07/11(火) 23:19:17 ]
>>745
ちなみに前者がいけない理由が、ことなるメモリマネジメントルーチンを使っている
可能性があるから。VCのDebug/Releaseモードとか。



748 名前:デフォルトの名無しさん mailto:sage [2006/07/11(火) 23:45:52 ]
>>746-747
そのルーチン覗いてみるのも勉強になるかもしれませんね。
とりあえず一般的な方法でしてみたいと思います。
ありがとうございました。

749 名前:デフォルトの名無しさん [2006/07/12(水) 01:01:46 ]
VC++なんですが、以下のように配列を定義しています。
signed short foge[]={
0x0001,
0x7fff,
0x8000,
0xffff
};


コンパイルするとマイナス値(0x8000と0xffff)で
warning C4305: 'initializing' : 'const int ' から 'short ' へ切り詰めます。
というワーニングがでます。
C言語ではsigned 16bitを表す接尾子が無いようなんで、
キャストで回避するしか無いんでしょうか?


750 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 01:04:40 ]
素朴な疑問。
何故const signed shortにしないのだろう。
それはさておき、-0x8000, -0x0001ではダメ?

751 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 01:11:56 ]
>>749
よくわからないけど、キャスト以外の方法で、警告消したいだけなら
0x8000 → -32768
0xFFFF → -1
とか、#pragma とかがあるよ。

752 名前:デフォルトの名無しさん mailto:age [2006/07/12(水) 01:26:04 ]
すみません
ファイルからの読み込みなのですが
改行がCR(0D)のみで書かれているテキストファイルから
テキストモードでデータを読み込みたいのです

fscanf(fp,"%d",&data1);
のように書くと、だいたいはCRのみの改行も改行として読んでくれるのですが
たまに改行をすっ飛ばして変な値を読んでしまいます

改行がCRのみのテキストファイルをうまく読み込む方法はありませんでしょうか

753 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 01:27:43 ]
fgets()

754 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 10:47:28 ]
>>752 だいたいうまくいくけど、たまに変になるって、違うところでバグってるんじゃないの?


755 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 11:17:19 ]
3.4E-38って
0.00000000000000000000000000000000000000034?


756 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 11:49:45 ]
>>755
0.000000000000000000000000000000000000034


757 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 14:13:29 ]
>>756
あ、ごめん、3のところが38番目になればいいのね。
じゃあfloat型って3.4E-38〜3.4E+38って書いてあるから
34000000000000000000000000000000000000〜0.000000000000000000000000000000000000034?
でも有効桁7桁ってどういうこと?



758 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 14:42:48 ]
>>757
>でも有効桁7桁ってどういうこと?
数学の時間寝てたのか
それともまだ習ってないのか
まあとにかくググれ。

759 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 15:01:17 ]
ぐぐってもわからん
float fe;
fe=5e2;
って書くと
500.000000
って出力されるけど、どこが7桁?

760 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 15:21:00 ]
>>759
俺のところで実行したらこうなるよ。

#include <stdio.h>

main()
{
float f = 1.0 / 3;
double d = 1.0 / 3;

printf("%.30f\n", f);
printf("%.30f\n", d);

return 0;
}

結果
0.333333343267440795898437500000
0.333333333333333314829616256247



761 名前:デフォルトの名無しさん [2006/07/12(水) 15:22:11 ]
グローバル変数を多用してしまうのですが、
変数を各関数で共有する方法ってグローバル変数以外に何かありますか?

762 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 15:31:49 ]
>>757
3.4E-38 は 3.4 * 10の-38乗 だ。
有効桁数は扱える桁数。7桁なら 1.234567 とか 1.234567E+100 とか、
とにかく 7 桁は扱えるが 1.2345678 と書いても最後の 8 が扱えない。

>>759
どう出力されるかということと内部的に何桁保持されているかという
ことは別の話。


763 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 15:35:45 ]
>>760
いやそうなるのはわかるけど、
float型が3.4E-38〜3.4E+38で有効桁7桁ってどういう意味?
float f = 1.0/3
printf("%f")
だと
0.333333
で7桁まで出力されるって意味?
3.4E-38〜3.4E+38ってどういうこと?
出そうと思えば50桁以上出せるけど…

764 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 15:39:15 ]
>>761
必要な変数は構造体のメンバにして
その構造体へのポインタを受け渡しする。

765 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 15:39:28 ]
>>762どうも
じゃあfloat型が3.4E-38〜3.4E+38っていうのは?

766 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 15:50:21 ]
普通に3.4*10^-38〜3.4*10^38でしょ?
3.400000*10^38のほうが正しいかな?

767 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 15:53:15 ]
>>764
ありがとうございます、さっそくチャレンジしてみます



768 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 15:53:27 ]
>>766
はあ・・・
でも10の50乗でも100乗でも入力できるし出力も出来るよ?

769 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 15:56:39 ]
なんかよくわかんないけど、まあこれでも読んでよ。

「浮動小数点型と誤差」
ttp://www.kyoto-su.ac.jp/~yamada/programming/float.html

770 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 16:04:31 ]
>>769
ああ…それよんだんだけど
1.175494 10-38 < float の絶対値 < 3.402823 10+38
って書いてあるよね。
私の本は
3.4E-38〜3.4E+38
って書いてあるよ。
それで、例えば、
float f=1000000000000000000000000000000000000000000000000.00000000000000000000000000000000000000001;
printf("%40.40f",f);
って書いても
1000000000000000000000000000000000000000000000000.00000000000000000000000000000000000000001;
って表示されるよ。38超えてるよ?

771 名前:770 mailto:sage [2006/07/12(水) 16:07:09 ]
あ、ちょっとコピペミスしたけど、気にしないで

772 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 16:11:00 ]
>>770
コンパイラ何使ってるの?

773 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 16:11:58 ]
floatよりdoubleの方が速いってよ

774 名前:770 mailto:sage [2006/07/12(水) 16:12:42 ]
>>772
cygwinのgccだけど・・・

775 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 16:16:17 ]
>>774
>>770のソースを「全部」コピペしてみて。動かしてみるから。

776 名前:770 mailto:sage [2006/07/12(水) 16:20:30 ]
>>775え・・・でも770そのまんまだよ?

#include <stdio.h>

main(){
float f=1000000000000000000000000000000000000000.0000000000000000000000000000000000000001;
printf("%40.40f\n",f);
}

終わり。




777 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 16:22:13 ]
>>776
うちでは"Inf"って表示されるけど・・・
gccのバージョンはいくつ?



778 名前:770 mailto:sage [2006/07/12(水) 16:24:22 ]
gcc version 3.4.4 (cygming special)
です。

779 名前:770 mailto:sage [2006/07/12(水) 16:26:21 ]
コンパイラの問題なの?

780 名前:777 mailto:sage [2006/07/12(水) 16:30:09 ]
>>778
おかしいな・・・。うちとまったく一緒のコンパイラなのに。
ちなみに
printf("%d\n", sizeof(1000000000000000000000000000000000000000.0000000000000000000000000000000000000001));
ってやってみて。
8って表示されるはずだから。これはその数値がdouble型のリテラルだって
コンパイラが判断してることを示してる。それをfloat型に代入するときに
暗黙の型変換が行われるはずなんだけど・・・。

ってことで、俺はお手上げ。


781 名前:777 mailto:sage [2006/07/12(水) 16:30:42 ]
あ、ちなみに"Inf"ってのはInfinityね。正の無限大。

782 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 16:34:30 ]
>>770
そのソースでそのgccだと、警告が表示されると思うのだがそれをコピペして見給え。

783 名前:770 mailto:sage [2006/07/12(水) 16:38:20 ]
>>777
printf("%d\n", sizeof(1000000000000000000000000000000000000000.0000000000000000000000000000000000000001));
ってしたら
core dump
しました。
うちの環境がおかしい?WinXP Cygwin最新のものだけど…
入れなおすか…?

どうもありがとうございました。うちがおかしいってことが分かったのでうれしいです。


784 名前:777 mailto:sage [2006/07/12(水) 16:39:20 ]
>>782
-Wallでも出ない。

785 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 16:39:53 ]
釣りか? 壮大な釣りだったのか?

786 名前:770 mailto:sage [2006/07/12(水) 16:41:12 ]
>>783
あ、いや、間違ってた
printf("%d\n", sizeof(1000000000000000000000000000000000000000.0000000000000000000000000000000000000001));
でちゃんと8って表示されました。

>>782
警告も何にも出ませんよ。普通にa.exeすると結果表示されます。

787 名前:777 mailto:sage [2006/07/12(水) 16:42:35 ]
>>786
んじゃ、最後にuname -aした結果をコピペしてくれ。



788 名前:782 mailto:sage [2006/07/12(水) 16:46:07 ]
>>770
>>777
警告出ないか? main()の戻り値の型がないと。漏れの端末だとこうなるのだが。
--
$ gcc --version ; gcc foo.c
gcc (GCC) 3.4.4 (cygming special) (gdc 0.12, using dmd 0.125)
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

foo.c:3: warning: return type defaults to `int'
foo.c: In function `main':
foo.c:6: warning: control reaches end of non-void function

789 名前:770 mailto:sage [2006/07/12(水) 16:47:14 ]
う〜Cygwinコピペできないからつらい
uname -a は
CYGWIN_NT-5.1 ****** 1.5.19(0.150/4/2) 2006-01-20 13:28 i686 Cygwin
です。名前は伏せ。珍しくもないけど

790 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 16:48:04 ]
>警告も何にも出ませんよ。普通にa.exeすると結果表示されます。
make使ってて更新されたと認識されていないとか、違うところのa.exeが起動されているとか。
make使わず直接gccを動かしてみるとか、明示的にパスを指定してみるとかしてみたら?

791 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 16:49:54 ]
普通にcygwinをインストールすると所謂dos窓で動くから、
マウスで範囲選択して右クリックでコピペされると思うけどなぁ。

792 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 16:50:08 ]
sizeof(float) が 8 だったりしたら…


793 名前:777 mailto:sage [2006/07/12(水) 16:51:56 ]
>>788
あ、すまん、そこは警告出る。警告でないといったのは、4,5行目に関して。
手間かけさせてスマンかった。

794 名前:777 mailto:sage [2006/07/12(水) 16:53:26 ]
>>789
うちより一つ新しいバージョンだな。ちなみにうちは、
CYGWIN_NT-5.1 MARS 1.5.18(0.132/4/2) 2005-07-02 20:30 i686 unknown unknown Cygwin

最新の1.5.20も怪しいところがあるみたいだから、しばらく更新はしないでおこうw

795 名前:770 mailto:sage [2006/07/12(水) 16:53:38 ]
>>782
あ、範囲指定できたんだCygwinて・・・
gcc (GCC) 3.4.4 (cygming special) (gdc 0.12, using dmd 0.125)
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

しかでません。makeつかってません。フォルダの中にa.exeもソースも一個しかありません。


796 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 16:56:04 ]
実行するときに

./a

または

./a.exe

でやってる?


797 名前:770 mailto:sage [2006/07/12(水) 16:56:57 ]
>>796
やってますよ〜
そこまでバカではない・・・w



798 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 16:58:25 ]
じゃあ sizeof(float) はいくつ?
printf("%d\n", sizeof(float));
で出してみて。


799 名前:770 mailto:sage [2006/07/12(水) 17:01:15 ]
8ですた。

800 名前:782 mailto:sage [2006/07/12(水) 17:03:02 ]
漏れの方は同じだな。Win2Kだけど。
CYGWIN_NT-5.0 whee 1.5.19(0.150/4/2) 2006-01-20 13:28 i686 Cygwin

コンパイラよりも疑うべきはライブラリか?

801 名前:782 mailto:sage [2006/07/12(水) 17:04:57 ]
>>799
それが原因か……
#じゃぁなんでfloatが8バイト? 64ビットLinuxでも4バイトなのに……

802 名前:770 mailto:sage [2006/07/12(水) 17:09:16 ]
>>801
やっぱおかしいんすね。環境作り直します。
Cygwin入れなおします。ちゃんと正規のルートで(学校の先輩からもらわずに)。
どうも失礼しました。

803 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 17:13:31 ]
いやまぁ先輩から貰っても全然OKなんだが、オチを知りたいんだよなぁオチを・・・

804 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 17:14:13 ]
はっ、その先輩がスーパーハカーだったというオチ!?

805 名前:デフォルトの名無しさん mailto:sage [2006/07/13(木) 13:27:50 ]
自分でコンパイルしたのかな?
>>804
gcc を自分でコンパイルできるとスーパーハカーなの?
じゃあ俺も10年ぐらい前からスーパーハカーだったんだね。


806 名前:デフォルトの名無しさん mailto:sage [2006/07/13(木) 13:38:59 ]
猫でもわかるC言語プログラミングって本を読んで勉強はじめたんだけ
この本の説明めちゃくちゃ解り辛い・・・
まぁ単に俺が知識0ってこともあるんだろうけど、どの入門書籍もこんなもん?

807 名前:デフォルトの名無しさん mailto:sage [2006/07/13(木) 14:12:46 BE:224654459-#]
猫でもわかるの書籍版は読んだことないけど、プログラムそのものが
まったく初めてなら、入門書一冊読んだだけじゃなかなか難しいと思う。




808 名前:デフォルトの名無しさん mailto:sage [2006/07/13(木) 14:15:29 ]
どの本でも同じだけど、HelloWorldが動いているのを見て喜べるピュアな心の持ち主なら
どんな本読んでも上達出来ます。

809 名前:デフォルトの名無しさん mailto:sage [2006/07/13(木) 14:15:50 ]
猫以下なんじゃね?

810 名前:デフォルトの名無しさん mailto:sage [2006/07/13(木) 14:31:58 ]
プログラムそのものが難しいって言うより、説明が言葉不足だったり
説明なしでいきなり「ここはこうなりますね、ここはこうなるので」
みたいなところが多くて・・・

Cからはじめるのがそもそも間違いなんだろうか

811 名前:デフォルトの名無しさん mailto:sage [2006/07/13(木) 17:53:08 ]
>>810
まずはAから段階を踏まないと

812 名前:デフォルトの名無しさん mailto:sage [2006/07/13(木) 18:32:39 ]
>説明なしでいきなり「ここはこうなりますね、ここはこうなるので」
そういうのに一々疑問を持ってストレスを貯めるやつはプログラム書けないよ
すべてそういうもんなんだと素直に覚えないと。
そもそもプログラミングの入門書って根幹に触れないからみんな説明不足といわれれば説明不足になる罠


813 名前:デフォルトの名無しさん mailto:sage [2006/07/13(木) 18:44:26 ]
英語だって、なんでアルファベットなんだろうとか思い始めたらダメだよ。
挨拶はハローとか決まりきった定型パターンがあるからそう言うのは理屈無しに覚えるしか無い。

日本語でも、10年以上話して使っていて未だに表現方法とかの新発見がある様に、覚えたてでその言語の全てを理解するのは無理。

とりあえず義務教育の英語の教科書の様に、入門書を最後まで一通りやってみて、分からない所は他の書籍や先輩に訊くとかセミナーや研修にでも出るとかで補完していかないと。
自分でそう言う学習法が出来ない香具師は、金出してスクールに通ったほうがいいよ。

814 名前:デフォルトの名無しさん mailto:sage [2006/07/13(木) 18:49:56 ]
心配しなくてもあとで「そういうことだったのか!」って気づくことになるから安心してその本をまずは読破すれ。

815 名前:デフォルトの名無しさん mailto:sage [2006/07/13(木) 19:04:24 ]
理系が文章力カスなのはわかりきったことだろ

816 名前:デフォルトの名無しさん mailto:sage [2006/07/13(木) 22:45:20 ]
とりあえずは鵜呑み丸暗記にしておいて
必要が出てきたり気になったら自分で調べたりこういう場所とかで聞けばいいよ

入門書の中には一部間違ったことが書いてあるものもあるから
完全に鵜呑みってのもちょっとまずいことはまずいんだけどね
まあ気にするな

817 名前:デフォルトの名無しさん [2006/07/14(金) 01:46:26 ]
C++で7桁×7桁の計算プログラム組んでるんですが
float使ったら小数点以降が表示されてあまり美しくない。
小数点以降を表示しない方法、教えてください。



818 名前:デフォルトの名無しさん [2006/07/14(金) 01:52:24 ]
main()
{
Card deck[40];
int *face[] = {1,2,3,4,5,6,7,8,9,10};
char *suit[] = {"hart","daiya","kurab","superd"};


srand(time(NULL));
fillDeck(deck, face, suit);
shuffle(deck);

printf("baeojunnbisimasu");
return 0;
}
プログラミングの一部なんですが 
コンパイルが通りません
int faceのところがだめらしいのですが何処が悪いんでしょうか?
どなたか解る方おしえてください

819 名前:デフォルトの名無しさん mailto:sage [2006/07/14(金) 01:54:23 ]
>>817
整数型にcastして表示しろ

820 名前:デフォルトの名無しさん mailto:sage [2006/07/14(金) 01:55:12 ]
>>818
int *faceではなく、int face

821 名前:デフォルトの名無しさん [2006/07/14(金) 02:02:38 ]
ごめん、castって何?

#include <stdio.h>

int main(void)
{
float alfa, beta, ganm;

printf("7桁の整数を入力して下さい(1回目):");
scanf("%f",&alfa);
printf("7桁の整数を入力して下さい(2回目):");
scanf("%f",&beta);

printf("\n%f * %f = %f\n", alfa, beta, alfa * beta);
}

822 名前:デフォルトの名無しさん [2006/07/14(金) 02:11:56 ]
>>820さん
マジでありがとう^^
通りました

823 名前:デフォルトの名無しさん mailto:sage [2006/07/14(金) 03:31:14 ]
%fではなく%gを使う習慣をつけよう。
#って話か?

824 名前:デフォルトの名無しさん [2006/07/14(金) 08:34:11 ]
#include<stdio.h>

int main(void)
{
int n,temp,m=0;
FILE*fp1=fopen("2バイト文字.txt","r");
FILE*fp2=fopen("改行テスト.txt","w");

while((n=fgetc(fp1))!=EOF){
if(n=='\n'){
m=0;
}
else if(m==40){
fputc('\n',fp2);/*ここが上手くいかない模様*/
m=0;
}
fputc(n,fp2);
m++;
}
fclose(fp1);
fclose(fp2);
printf("end\n");
return 0;
}

825 名前:824 [2006/07/14(金) 08:37:11 ]
2バイト文字、日本語のテキストを行の文字数20で改行するようなプログラムを作りたいです。
例えば、行の文字数40のやつを、原稿用紙の形式に変換したい。

しかし、>>824のやつだと、改行後の一文字目が変になってしまいます。
文字コードの問題なのかどうかすら分かりません。
ここが変だ、という場所の指摘をお願いします。

826 名前:824 [2006/07/14(金) 08:44:11 ]
失礼。
tempとprintf("end\n")は気にしないで……。

827 名前:デフォルトの名無しさん mailto:sage [2006/07/14(金) 10:15:49 ]
超基本問題です。
main(){

int i;
float f;
double d;
long l;
char st[80];

printf("文字1文字,%%c,int,%&i=");
scanf("%c",&i);
printf("%%c,int,i=%c\n",i);

printf("文字列,%%s,char,st=");
scanf("%s",st);
printf("%%s,char,st=%s\n",st);
printf("文字列入力の時には&は不要\n");

printf("8進数%%o,int,%&i=");
scanf("%o",&i);
printf("%%o,int,i=%o\n",i);
printf("%%d,int,i=%d\n",i);

printf("10進数%%d,int,%&i=");
scanf("%d",&i);
printf("%%d,int,i=%d\n",i);




828 名前:デフォルトの名無しさん mailto:sage [2006/07/14(金) 10:17:35 ]

printf("16進数%%x,int,%&i=");
scanf("%x",&i);
printf("%%x,int,i=%x\n",i);
printf("%%d,int,i=%d\n",i);

printf("long型%%ld,long,%&l=");
scanf("%ld",&l);
printf("%%ld,long,l=%ld\n",l);
printf("%%d,int,l=%d\n",l);

printf("実数float型%%f,float,%&f=");
scanf("%f",&f);
printf("%%f,float,f=%f\n",f);
printf("%%d,int,f=%d\n",f);

printf("実数double型%%lf,double,%&d=");
scanf("%lf",&d);
printf("%%lf,double,d=%lf\n",d);
printf("%%d,int,d=%d\n",d);

}
これやると、例えば
8進数%o,int,&i=70
とか入れると、iに7しか入ってくれなくて、0が次の10進数の処理に自動的に入っちゃうんだけど、なぜ?


829 名前:デフォルトの名無しさん mailto:sage [2006/07/14(金) 11:01:09 ]
親から習う日本語が方言訛りで一部怪しかったりしても、使ってるうちに標準語の表現に気づいて修正できるものだよ。
もちろん最初から標準語で覚えられるような環境を探すのも手。

gcc方言とか、IA方言とか、VC方言とかウィンドウズ方言とかいくらでも環境依存の癖はある。

830 名前:デフォルトの名無しさん mailto:sage [2006/07/14(金) 11:39:34 ]
>>829
その直前の文字列の入力をコメントにしたらどうなる?

831 名前:デフォルトの名無しさん mailto:sage [2006/07/14(金) 13:17:59 ]
すいませんこのプログラムのどこがわるいかおしえてもらえないでしょうか
うるう年の判定プログラムで
#include<stdio.h>

int main(void){
int n;
n=1;
printf("年数を入力してください");
scanf("%d",&n);

if(n%400=0)printf("うるう年である");
else if(n%4=0&&n%100!=0)printf("うるう年である");
else printf("うるう年ではない");

return(0);}

左辺の値がないとかエラーがでるんですけど

832 名前:デフォルトの名無しさん [2006/07/14(金) 13:30:41 ]
初心者乙

833 名前:デフォルトの名無しさん mailto:sage [2006/07/14(金) 13:44:21 ]
>>831 ==だよ。

>>830
今度は、
8進数%o,int,&i=179
と3桁にすると、iに17が入って、9が次の10進数の処理に自動的に入ります。
なぜ?

834 名前:824 mailto:824をたのむ…… [2006/07/14(金) 17:19:31 ]
>>833
scanf("%c",&i);の時、1000とか入力すると、%cの分の1をscanf("%c",&i);で取り込み、残りの000は次のscanf("%s",st); に勝手に入力されてしまう。

8進数だから、7、8、9なんかは入力できない。
すると179は17まで8進数と見なされ、残りの9は型が違うものと認識される。
17dとか入力しても同様。

型が違うものと認識されたものは、次のscanfに勝手に入力されてしまう。
標準入力ストリームがバッファリングの構造を取るから。
型が違うもの、と認識されたものは、一度バッファに戻ってから、次のscanfに入力されてしまう。

環境によっては、scanf("%d",i);のところで、a、とか入力すると、
型が違うものだからバッファに戻す→バッファからaがscanfに入力される
というルーチンを延々と繰り返してしまう。
この繰り返しが起こらない環境ならば、型が違うものでも強制的な変換が行われ、scanfに取り込まれるということ。

835 名前:デフォルトの名無しさん mailto:sage [2006/07/14(金) 18:40:08 ]
>>834
どうもありがとう
なるほどね・・・

836 名前:デフォルトの名無しさん mailto:sage [2006/07/14(金) 21:29:18 ]
>>824
while((n=fgetc(fp1))!=EOF){
fputc(n,fp2);
m++;
if(n=='\n'){
m=0;
}
else if(m==40){
fputc('\n',fp2);
m=0;
}
}

入力ファイルがすべて 1文字==2バイトと決まっているならこれで良いけど
wchar_tを使うか、文字コードの判定をするかしたほうが良いかも。

837 名前:824 mailto:sage [2006/07/14(金) 21:55:49 ]
>>836
なるほど。



838 名前:デフォルトの名無しさん [2006/07/15(土) 08:47:40 ]
パチンコのシミュレーターを作ろうと思ってるんですが、

確変をひいた場合にループをさせる時どのようにすればいいのでしょうか?

for(;;){
switch(GetRandom(1,2)){
case 1:b++;
case 2:break;

}
}

乱数で1だったらループ2だったらfor文を抜けたいとおもうのですが、
これだと止まってしまいます。何故でしょうか。

839 名前:デフォルトの名無しさん mailto:sage [2006/07/15(土) 09:19:20 ]
>>838
直接の原因は、break は一つ外側の構文に対してしか作用しないこと。
switch 内で break しても、その switch の外側に抜けるだけ。
それで結局、for を抜け出せなくて無限ループになっている。
ネストされた構文から任意の場所に制御を渡したい場合は goto を使うか、
関数を書いてそれを呼ぶしかない。

あと、その case の書き方はやめておけ。
switch はフォールスルーと言って、break を書いておかないとその後の
case にある処理に突入してしまう。

for(;;){
switch(GetRandom(1,2)){
case 1:
b++;
break;
case 2:
goto end_for;
}
}
end_for: ;

840 名前:デフォルトの名無しさん mailto:sage [2006/07/15(土) 09:27:03 ]
>>838 なんか初めの方の文章がよくわからねいけど
そのbreakでは、switch文しか抜けられない。
for文を抜けたければ、goto文とかflagをつかえばいい。
◆goto文の場合
for(;;){
switch(GetRandom(1,2)){
case 1:b++;
case 2:goto FOR_EXIT;
}
}
FOR_EXIT:;
◆flag
int flag = 1 ;
for(;flag;){
switch(GetRandom(1,2)){
case 1:b++;
case 2:flag=0;
break;
}
}

841 名前:840 mailto:sage [2006/07/15(土) 09:28:39 ]
かぶった。しかも劣化している。。。839のいうとおりだ。

842 名前:デフォルトの名無しさん [2006/07/15(土) 09:33:50 ]
>>839,840
ありがとうございます。
gotoが便利そうなんでそっちを使いたいとおもいます。
これでやっと先に進めそうです。

ありがとうございました。

843 名前:デフォルトの名無しさん [2006/07/15(土) 09:39:09 ]
1と2しか判定しないなら素直に
for(;;){
if(GetRandom(1,2)==2) break
b++;
}
も頭の隅っこに置いとくといいかも

844 名前:デフォルトの名無しさん mailto:sage [2006/07/15(土) 10:24:29 ]
質問です〜
char st[10]="text";
char *p;
p=st;
すると、st[10]の先頭アドレスがpに入るって書いてあるんですけど、
printf("%p,%p",p,&p);
pの値と&pの値が違うのはどうしてですか?


845 名前:デフォルトの名無しさん mailto:sage [2006/07/15(土) 10:32:48 ]
いくらpにstを代入しても、あくまでpはpという1つの変数だから。

846 名前:デフォルトの名無しさん mailto:sage [2006/07/15(土) 10:44:26 ]
あーなるほど。どうも〜

847 名前:デフォルトの名無しさん mailto:sage [2006/07/15(土) 17:31:59 ]
pと&pの違いは重要
と言ってみる



848 名前:デフォルトの名無しさん [2006/07/15(土) 22:31:54 ]
念のため聞いておきたいんですが、参考書を見るとコマンドプロンプトで表示させるだけっぽいですけど
ちゃんと画像のついたソフトやゲームなんかも作れるんですよね?

849 名前:デフォルトの名無しさん mailto:sage [2006/07/15(土) 23:51:47 ]
>>848
できるけど、標準Cと言われるものの範囲では、画像を表示するなどと言ったことができず、
また、コマンドプロンプトで文字を入出力するのとは、桁違いに面倒だから、入門レベルでは扱わないというだけ。

850 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 03:37:48 ]
質問させてください。
自分はVB8アカデミック(=SE)を使っているのですが。
#include <stdio.h>
int main(void){ printf("HELLO"); return 0; }
のようなDOS窓で動作するようなコードは正常にコンパイルできるのですが、
#include <windows.h>
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
) {
MessageBox(NULL, "Kitty on your lap","メッセージです。", MB_OK);
return 0;
}のようなウィンドウズアプリケーションをコンパイルしようとすると必ずエラーがでてしまいます。
↑のコードは今思い出しながら書いたものなのでもしかすると間違っている箇所もあるかも
しれませんが書籍を参考に10個ほどサンプルを丸写ししてコンパイルしても同じ結果だったので
コードに問題はないと思います。
VB8を再インストールしてみたりもしたのですがまったく効果がなく、もしかして
インストール後になにか他にもインストールしたり環境設定したりと別の作業が必要なのかとも思ったのですが・・・・
どなたか原因がわかる方がいらっしゃいましたら助言いただけないでしょうか。
BBSもプログラミングも初心者なもので失礼もあるかとは思いますがよろしくお願いします。長文ですみません^^;

851 名前:デフォルトの名無しさん [2006/07/16(日) 03:41:08 ]
if(){}って()内が1なら{}が実行されるんですか?
それとも0以外なら実行されるんですか?

852 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 03:50:05 ]
真なら実行され偽なら実行されない

853 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 03:50:16 ]
>>850
書店に行って、自分に合う入門書を買ってくること。

854 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 03:51:47 ]
>>851
()内に=や<>なんかがない場合は
()の中に入る数字(変数でもいい)が0以外なら真と見なしループを続ける(=実行)
0以外なら偽と見なしループを抜け出します。


855 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 03:56:20 ]
>>854
ありがとうございました

>>853
入門書読んでるんですけど、そこがかいてなかったのです

856 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 03:59:06 ]
ここは回答者の入門スレなのか?
堂々と間違った回答をされても困るんだが。

857 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 04:09:32 ]
>>851さんごめんなさい。。。
while文とごっちゃになってましたOrz
真ならループではなくただ実行されるだけでした
偽ならスルーします。
>>856さんこれであってますでしょうか?



858 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 07:15:37 ]
1と2しか判定しないなら素直に
for(; GetRandom(1, 2) != 2; b++)
;

859 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 07:49:25 ]
そして結局
while(GetRandom(1, 2)!=2)b++;

860 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 07:58:25 ]
>854
>0以外なら偽と見なし(略)


861 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 09:00:28 ]
>>850
エラーメッセージを書け。
あと、CのコンパイルにVBは関係ないだろ。

862 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 13:04:57 ]
あの〜
2進数表記する型ってないんですかね。
ライブラリさがしてるんですけど・・・

863 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 13:30:54 ]
>>862
#include <stdio.h>

/* 静的アサーション */
void SASSERT_(int(*p)[1]) { }
#define SASSERT(b) SASSERT_((int(*)[(b) ? 1 : -1])0)

/* 2進1バイトリテラル */
#define BYTE2(x) \
 (SASSERT(1 < sizeof (#x) && sizeof (#x) <= 9), /* 1〜8 文字に制限 */ \
  SASSERT((0x##x & ~0x11111111) == 0), /* 余計なビットがあるとエラー */ \
  (0x##x >> 0) & 0x01 | \
  (0x##x >> 3) & 0x02 | \
  (0x##x >> 6) & 0x04 | \
  (0x##x >> 9) & 0x08 | \
  (0x##x >> 12) & 0x10 | \
  (0x##x >> 15) & 0x20 | \
  (0x##x >> 18) & 0x40 | \
  (0x##x >> 21) & 0x80)

/* 2進2バイトリテラル */
#define WORD2(x1, x0) ((BYTE2(x1) << 8) | BYTE2(x0))

/* 2進4バイトリテラル */
#define DWORD2(x3, x2, x1, x0) ((WORD2(x3, x2) << 16) | WORD2(x1, x0))

int main() {
 printf("%X\n", BYTE2(01011011));
 printf("%X\n", WORD2(11001011, 10000011));
 printf("%X\n", DWORD2(01011011, 11001011, 10000011, 00000000));
}

864 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 13:31:52 ]
型…?

もしかしてBASICの&Bみたいに2進でリテラル書きたいってこと??

865 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 13:56:36 ]
>>863 ちゃいまんねん
>>864 そうそう。型指定文字のこと。

866 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 14:42:03 ]
ない

867 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 14:43:17 ]
ないからこその代案が>863なわけだな。



868 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 14:44:15 ]
2進でリテラル書きたいだけなら、
>>863 で何か不都合でもあるんだろうか。
文法的な事を知りたかっただけなの?

869 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 14:46:04 ]
>>863の(0x##x >> 0) & 0x01ってどういういみですか?
すいませんが説明していただけるとたすかります

870 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 14:48:24 ]
やっぱいちいち計算しなきゃ駄目なのか・・・

871 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 14:50:36 ]
256通りのテーブル作って、テーブル引きしたほうが早くないか?

872 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 14:52:09 ]
0x##x は、0x と x(マクロの引数)をくっつけるもの。
例えば、BYTE2(01011011) なら 0x##x は 0x01011011 になる。
この時、結局 (0x##x >> 0) & 0x01 は
(0x01011011 >> 0) & 0x01 になる。
つまり、0 ビット目を抜き出す操作に相当する。
(0x##x >> 3) & 0x02 は 4 ビット目を 1 ビット目に持ってきて、
それ以外のビットを消す。
(0x##x >> 6) & 0x04 は 8 ビット目を 2 ビット目に持ってきて(ry
こうやって、0x01011011 を2進数 01011011 にしている。

これらの計算は静的に行われるので、
コンパイル時に全部計算が行われて、
単なる定数に置き換わる。
速度は気にする必要ない。

873 名前:862 mailto:sage [2006/07/16(日) 14:52:11 ]
あ!そういうことか!
どうもトンクス>>863-868

874 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 14:57:22 ]
>>872
へー、それ知らんかった。勉強になった。

875 名前:850 mailto:sage [2006/07/16(日) 19:52:59 ]
>>861
訂正。
×自分はVB8アカデミック(=SE)を使っているのですが。
○自分はVS8アカデミック(=SE)を使っているのですが。
エラーメッセージは850で書いたコードをコンパイルした場合、
(9) : error C2664: 'MessageBox' : 2 番目の引数を 'const char [18]' から 'LPCTSTR' に変換できません。(新しい機能 ; ヘルプを参照)
指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
というメッセージがでます。

876 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 20:05:10 ]
>>875
_T("Kitty on your lap")
_T("メッセージです。")
とするか
プロジェクトのプロパティ→構成プロパティ→全般→文字セット→マルチバイト文字セットを使用する
に設定。

LPCTSTRはUnicodeを使うかマルチバイト文字を使うかでLPCWSTRかLPCSTRになる。
MessageBoxもMessageBoxWとMessageBoxAで切り替わる。
単にダブルクォーテーションで囲んだだけだとcharの配列 → LPCSTRに変換→引数の型不一致。
文字列リテラルを_T()で囲むとUnicodeの時には頭にLを付けてくれるからLPCWSTRにできる。

877 名前:デフォルトの名無しさん [2006/07/16(日) 20:37:58 ]
質問です。
これの間違いを教えて頂きたいッス!
文字列を入力させる。その中に”ABC”という部分文字列(連続)が含まれていれば「OK」、そうでなければ「NO!」と出力される。
#include<stdio.h>
main()
{
char moji[256];
int n=0,flag=0;
scanf("%s", &moji[n]);
while(moji[n]!='\0'){
if(moji[n]=='O' && moji[n+1]=='U' && moji[n+2]=='P')flag=1;n++;}
if(flag=1){printf("OK\n");}
else printf("NO!\n");
}



878 名前:875 mailto:sage [2006/07/16(日) 20:48:57 ]
>>876
詳しい説明ありがとうございますっ
しかし知識がなさすぎて理解できませんでしたOrzすみませんホント
林○比古の本でも買って勉強してきます。
ありがとうございました。

879 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 20:50:04 ]
scanf("%255s", moji);
printf("%s\n", strstr(moji, "ABC") ? "OK" : "NO!");

880 名前:デフォルトの名無しさん [2006/07/16(日) 20:56:51 ]
DirectXで全画面で動いてるゲームとかの画面上に自分のアプリのウィンドウ出したいんだけど
できるの?
できるなら何かヒントちょうだい

881 名前:デフォルトの名無しさん [2006/07/16(日) 20:56:56 ]
>>879
いただきましたーーーー!!
ありがとうございました☆

882 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 21:04:59 ]
>>880
全画面ゲームの場合排他モードで動作してるかもしれないので無理かも

883 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 21:11:11 ]
なんかネトゲのボットを作りたいらしき質問をあちこちでみるな

884 名前:デフォルトの名無しさん [2006/07/16(日) 23:49:46 ]
>>882
そうなんだ。排他モードなんてものがあるのか。どうも。

885 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 04:07:28 ]
>>880
そういう場合はd3dx9のラッパーを書いて
Presentメソッドに細工して自分が描画したいものを割り込ませる

886 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 04:40:50 ]
必死にチートしようとしてるとか?
鯖側でプログラムやってる香具師はちゃんとチェック機能付けて排除する対策してると思うよ。

887 名前:デフォルトの名無しさん [2006/07/17(月) 05:50:48 ]
>>885
へー、なんか凄いヒントもらっちゃった。ありがと
>>886
ボットも面白いかもね。でも後ろで動かしとけばいいんじゃないの?分かんないけど

いいヒント貰ったのであとはDXスレ見てくる



888 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 10:07:25 ]
ポインタがわからない・・・

main(){
char *c;
*str='c';
int *i;
*i=1;
printf("*c=%c\n",*c);
printf("*i=%d\n",*i);
}
これの何がわるいんだか教えてちょんだい・・・

889 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 10:09:25 ]
あ、間違えた
*str='c';->*c='c';

890 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 10:10:51 ]
ポインタは虚構

891 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 10:12:54 ]
>>888
cもiも、まだどこも実体を指していないうちに*で間接参照しているから。

892 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 10:19:11 ]
>>888
>これの何がわるいんだか教えてちょんだい・・・
あんたの頭。

・エラーがでた。
→エラーメッセージを張れ。
・想定したとおりの動作をしない。
→想定した動作と実際の動作を書け。
・間違いを指摘された。
→指摘した人間に聞くか、どう指摘されたか書け。

893 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 10:26:12 ]
>>890-891これならいい?
main(){
char *c;
char ch;
ch='c';
c=&ch;
int *i;
int in;
in=1;
i=∈
printf("*c=%c\n",*c);
printf("*i=%d\n",*i);
}
でもこんな書き方してるソースなんて見たことないぜ。

894 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 10:32:40 ]
>>893
そんな書き方する意味がないからな

895 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 10:33:36 ]
>>893
お前入門者以下だからよそ池

896 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 10:44:42 ]
(´・ω・`)ショボン

897 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 10:46:06 ]
>>893
まず、なにをしたいのか日本語で説明してもらえまいか?



898 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 11:01:11 ]
fish...

899 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 11:09:10 ]
(´・ω・`)エサだったのか

900 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 11:10:07 ]
>>897
俺が持ってる林晴比古著新C言語入門シニア編のポインタの初期化てところに
ex1
int d;
int *p=&d;
ex2
char s[80];
char *p=s;
ex3
char s[80];
char *p=&s[3];
ex4
char *p = "ABCDE";
ex5
char *p=(char *)malloc(100);
って書いてあったけど、あれ*pって配列ABCDEなら文字A(p[0])が入るよな〜と思って、
char *c;
*c='c';
ってやってみたら*cの値に'c'が入るのかなと思ってやってみたらできなかったので
なぜだか聞いてみた。
でも
int *i;
*i=1;
はちゃんと1って出てきたよ?char型とint型って違う動きするの?


901 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 11:14:56 ]
>>900
> int *i;
> *i=1;
> はちゃんと1って出てきたよ?char型とint型って違う動きするの?

たまたま動いてるだけ。実際はメモリを破壊してる。

あと
char *c = (char *)malloc(100);

char *c;
c = (char *)malloc(100);
と同義で、*c = とは別

902 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 11:28:03 ]
他の参考書を見てみたら?

903 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 11:41:06 ]
親父の本はこれとこれのビギナー編しかない
発行見てみたら1992年だった
古すぎ?

904 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 12:11:37 ]
>>903
古いか新しいかじゃなくて、肝心な事がちゃんと書いてあるかどうか。
>>900の疑問に答えてくれる本、っていう基準で探すのもテだぞ。


905 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 12:30:42 ]
本屋いってくるか・・・雨だけど・・・

906 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 15:49:17 ]
void make_fare_table(int num, double *dist_list,
COSTUNIT *cost_list, int **fare_table) {

ていう関数を書いたとき、
引数のint **fare_tableはmainでどーやって指定すればいいんですか?
ちなみにfare_tableは2次元配列です。fare_table[30][30]って感じ。

907 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 16:06:42 ]
void foo(int t[30][30]){
}
main(){
 int f[30][30] ;
 foo(f) ;
}
でいいんじゃない?



908 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 16:37:58 ]
>>907
引数の型が指定されてるんですわ
これ基本情報技術者試験の過去問なんだけど

909 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 16:52:32 ]
>>908
int **fare_tableが二次元配列なんてありえない。
移し間違えじゃないのか。

910 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 17:00:03 ]
全部写すよ
#include

typedef struct { int max_dist; /* 上限距離(km) */
int unit_dist; /* 単位距離(km) */
int unit_cost; /* 単位距離ごとの運賃(円) */
} COSTUNIT;

void make_fare_table(int, double *, COSTUNIT *, int **);
int calc_fare(double, COSTUNIT *);

void make_fare_table(int num, double *dist_list,
COSTUNIT *cost_list, int **fare_table) {
int idx0, idx1;
double dist;

for (idx0 = 0; idx0 < num; idx0++) {
fare_table[idx0][idx0] = 0;
dist = 0.0;
for (idx1 = idx0 + 1; idx1 < num; idx1++) {
dist += dist_list[idx1-1];
fare_table[idx0][idx1]=fare_table[idx1][idx0]
=calc_fare(dist, cost_list);
}
}
}


911 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 17:01:17 ]
int calc_fare(double dist, COSTUNIT *cost_list) {
int fare = 0, idx = 0;
int lower_limit; /* 区間の下限(直前の区間の上限距離) */
int upper_limit; /* 区間の上限(現在の区間の上限距離) */
lower_limit = 0;
upper_limit = cost_list[0].max_dist;
while (upper_limit!=0 && dist > (double)upper_limit) {
fare += ceil((double)(upper_limit-lower_limit)
/ (double)cost_list[idx].unit_dist)
* cost_list[idx].unit_cost;
lower_limit = upper_limit;
upper_limit = cost_list[++idx].max_dist;
}
fare += ceil((dist - (double)lower_limit)
/ (double)cost_list[idx].unit_dist)
* cost_list[idx].unit_cost;
return fare;
}


912 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 17:09:20 ]
試しに入れたメインはこれ

main(){
COSTUNIT cost_list[4];
cost_list[0].max_dist=20;
cost_list[0].unit_dist=5;
cost_list[0].unit_cost=100;
cost_list[1].max_dist=100;
cost_list[1].unit_dist=10;
cost_list[1].unit_cost=180;
cost_list[2].max_dist=500;
cost_list[2].unit_dist=50;
cost_list[2].unit_cost=850;
cost_list[3].max_dist=0;
cost_list[3].unit_dist=100;
cost_list[3].unit_cost=1650;
double dist_list[10]={3.0,5.5,10.0,3.8,8.2,7.6};
int **fare_table[30][30];
make_fare_table(4,dist_list,cost_list,fare_table);
}


913 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 17:14:32 ]
>>910
写し間違いじゃないのなら、問題が間違ってる。

914 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 17:17:41 ]
つか、俺試験受けたこと無いけど、まさか「誤りを探せ」という問題じゃ
ないだろうな。

915 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 17:21:02 ]
うそーん。マジ?

916 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 17:23:22 ]
>>914
ちがうよ。ここみてよ
ttp://www.rs.kagu.sut.ac.jp/~infoserv/j-siken/H17a2/pm10.html

917 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 17:33:29 ]
>>916
問題が間違ってる。特にfare_table[m][n]のm != nだとありえない度うp。



918 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 17:33:34 ]
for(i=0;i<30;i++)fare_table[i]=(int*)malloc(30*sizeof(int));
なヨカン

919 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 17:37:40 ]
どうも・・・
でも普通間違ってる問題出すか!?仮にも国家試験だろう!
他の問題からベンキョします

920 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 17:49:23 ]
>>918
fare_table[m][n]で、m != nダヨ。

921 名前:920 mailto:sage [2006/07/17(月) 17:51:32 ]
いや、問題を読み違えてた。スマソ。
>>918で正解な予感。
int *fare_table[30]で、実引数はfare_table。
動かしてないけど。

922 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 18:10:02 ]
>>918,921
それで出てきました。アリガトン

923 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 18:32:06 ]
乗数演算子って無いの?

924 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 18:44:38 ]
>>923
ない。
www.kouno.jp/home/c_faq/c14.html#7

925 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 18:45:01 ]
fscanfで文字を読み込んだ場合、ファイル位置表示子は移動しますか?

926 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 19:50:26 ]
>>925
「位置表示子」とはなんぞ?
読み出しオフセットが気になるならftell()でもして味噌。

927 名前:デフォルトの名無しさん [2006/07/17(月) 22:05:12 ]
問題1.キーボードから63以下の2つの整数を変数a,bに入力して、a+bの結果がアスキーコードの対応する文字・記号となって出力されるプログラムを作れ。

問題2キーボードから英字1つを入力し、その英字より2つ前の英字(または数字、記号)を出力するプログラムを作れ

すみませんまったくの初心者です
宿題でまったくわかりません



928 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 22:05:56 ]
>>927
C/C++の宿題を片付けます 66代目
pc8.2ch.net/test/read.cgi/tech/1151477344/l50

929 名前:デフォルトの名無しさん [2006/07/17(月) 23:17:58 ]
すれ違いでしたか
ありがとうございます。


930 名前:デフォルトの名無しさん mailto:sage [2006/07/18(火) 11:26:53 ]
typedef struct letter {
char c;
struct letter *follow;
struct letter *other;
char *trans;
} LETTER;

LETTER *p_root;

void main(){
LETTER *p = p_root;

って書いたら、
p
には何が入ってるんですか?

931 名前:デフォルトの名無しさん mailto:sage [2006/07/18(火) 11:30:31 ]
>>930
*p_rootに入っていた内容。初期化してないから何が入ってるかわからない。

932 名前:デフォルトの名無しさん mailto:sage [2006/07/18(火) 11:44:43 ]
p_root->c='m';
p_root->follow->c='a';
p_root->other->c='n';
p_root->trans=NULL;
だったら?

933 名前:デフォルトの名無しさん mailto:sage [2006/07/18(火) 12:56:13 ]
プログラムから別のプログラムを立ち上げる方法を教えてください。
ブラウザで例えるとmp3などのURLをクリックすると再生プレイヤーが立ち上がるような感じで、
そのmp3のURLを渡して起動させたいのですが
よろしくお願いします。

934 名前:デフォルトの名無しさん [2006/07/18(火) 13:36:38 ]
野球チームがnチームあり,1日にm試合ずつ消化して,総当たり戦を行うものとする.
各チーム名はA, B, C,...Zのようにアルファベットの頭文字で表されるものとする.
nは26以下,mは4以下とするとき,以下のような試合の日程表をつくりなさい.
全試合が終了するのに必要な日数と全試合数も表示すること.

Number of Teams -> 4
Number of Games per Day -> 4

-------- Schedule ----------
Day 1
Game 1 : A vs B
Game 2 : A vs C
Game 3 : A vs D
Game 4 : B vs C

Day 2
Game 1 : B vs D
Game 2 : C vs D
---------------------------
Total Number of Days : 2 days
Total Number of Games : 6 games
---------------------------
誰か作ってくれ・・・
わからん・・・

935 名前:デフォルトの名無しさん mailto:sage [2006/07/18(火) 14:43:07 ]
>>934
留年しろ。

936 名前:デフォルトの名無しさん mailto:sage [2006/07/18(火) 15:01:43 ]
>>932
pはポインタ。p_rootもポインタ。
その値は代入によって同じになっているはず。
つまり、p->c == p_root->c && p->follow->c == p_root->follow->c && p->other->c == p_root->other->c && p->trans == p_root->transということ。

>>933
環境依存でよければ、例えばWindowsならShellExecute()辺りが向いているかもしれない。
しかし、その程度のことも調べられないようなら手を出さない方が無難だとも思う。

>>934
宿題スレにでも逝ってみたら?

937 名前:デフォルトの名無しさん mailto:sage [2006/07/18(火) 15:20:11 ]
>>933
ありがとうございます。
これを足がかりにもう少し調べて見ます。



938 名前:デフォルトの名無しさん mailto:sage [2006/07/18(火) 15:20:42 ]
>>937>>936あてです。すみません。

939 名前:デフォルトの名無しさん mailto:sage [2006/07/18(火) 15:58:56 ]
>>936
次にね
while( p!=NULL ){
p=p->other;
}
って書いてあるんですよ。
このpって何を示してるの?
pのメンバ全部のこと示してる?

ちなみにこれも基本情報の過去問だけど…
www.rs.kagu.sut.ac.jp/~infoserv/j-siken/H18a2/pm10.html
↑ここ

940 名前:デフォルトの名無しさん mailto:sage [2006/07/18(火) 17:17:26 ]
>>939
LETTER型のオブジェクト

941 名前:デフォルトの名無しさん mailto:sage [2006/07/18(火) 17:17:33 ]
pは構造体先頭を指している。

942 名前:デフォルトの名無しさん mailto:sage [2006/07/18(火) 18:03:43 ]
p->cのことでええんかな?
どうも〜

943 名前:デフォルトの名無しさん [2006/07/18(火) 18:17:53 ]
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2392.txt
Cでシェルを実装し、パイプラインをpipeシステムコールを使ってできる
ようにしたいのですが、3つ以上のコマンドを繋ぐことができません。
どのようにすればよろしいでしょうか?

944 名前:936 mailto:sage [2006/07/18(火) 19:00:14 ]
>>939
だからpはポインタなんだってばさ。ポイントしている先があるかないかのチェックをしているわけだね。
だから>942は間違い。>941もおかしいな、先頭のみを指しているわけではないのだから。
つーか、ポインタの勉強してきなさいよ。

>>943
コメントもろくにないソースをいきなり読まされる身になってくれ。
つーか、どこが入門レベルなんだか。

945 名前:943 mailto:sage [2006/07/18(火) 19:30:15 ]
>>944
すいません、実行後に標準入力からコマンドを入力し、そのコマンドをgetcl関数で
スペース毎にでargmv[0],argmv[1]...に格納し、exec_one_command関数で実行。
その中にパイプがあればパイプの処理をするという仕様です。
自分でやったところはexec_one_command内でgetclでできたコマンドからパイプを
見つけてそれをNULLに置き換え、パイプの数に応じてexecvpで実行していくという
ところです。

なんとかして完成させたいのですが、ここじゃ不味いですか('A`)
どこいけばいいでしょうか・・・


946 名前:デフォルトの名無しさん mailto:sage [2006/07/18(火) 20:07:28 ]
>>944
すいません
どこでベンキョしてくればいいでしょう
お勧めの本とかページとかあります?

947 名前:デフォルトの名無しさん mailto:sage [2006/07/18(火) 20:08:56 ]
void funcB()
{
return;
}

void funcA()
{
funcB();
printf();
}

こういう場合ってprintf()って作動しますか?



948 名前:デフォルトの名無しさん mailto:sage [2006/07/18(火) 20:11:12 ]
するよ

949 名前:デフォルトの名無しさん mailto:sage [2006/07/18(火) 23:20:14 ]
>>947
funcA()を呼べばね。

>>946
書籍スレにでもどうぞ。

>>945
ここでもいいけど、みての通りここだとレスつかないねぇ。
pipeなんて非標準だし、環境依存OKスレかUnixプログラミングスレ辺りかね。

950 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 00:36:41 ]
>>944
先頭指してなかったら、キャストもせずに、->演算子使えるわけないじゃん。

951 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 00:51:03 ]
>>950
アホ?

952 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 01:02:50 ]
p->otherはstruct letter* だから>>941を間違いってのはアレだよな

953 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 07:50:03 ]
for(;;)とwhile(1)はどっちがはやいんですかね?

954 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 08:03:07 ]
>>953
大丈夫、お前よりもよっぽど賢いコンパイラにとって、それらはどちらも同じと解釈されるから気にするな。
#まぁ、前者を推奨するがな。

955 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 09:10:13 ]
大昔の頭の悪いコンパイラだと for(;;) の方が早いとか聞いた気もするが、
今のコンパイラならどっちでもいいな。

956 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 09:12:34 ]
(;;)

957 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 09:52:47 ]
(;o;)



958 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 10:03:37 ]
(;A;)

959 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 10:14:25 ]
('A')

960 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 10:46:03 ]
("ω")

961 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 11:29:39 ]
( ; _ ; )

962 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 16:27:56 ]
(T-T)

963 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 17:36:00 ]
(:-D)

964 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 17:42:05 ]
:-D~~

965 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 22:24:10 ]
>>863
void SASSERT_(int(*p)[1]) { }
#define SASSERT(b) SASSERT_((int(*)[(b) ? 1 : -1])0)

は、単に

#define SASSERT(b) ((void)(int(*)[(b) ? 1 : -1])0)

でいいことに今頃気づいた。

966 名前:デフォルトの名無しさん mailto:sage [2006/07/21(金) 00:37:15 ]
K&R本の1.5.2 文字のカウント
のプログラムをちゃんと打って、シグウィンでコンパイルしても
実行したら全くカウントしてくれないのですが、
どうしてでしょうか?誰か教えて下さい。

967 名前:デフォルトの名無しさん mailto:sage [2006/07/21(金) 02:24:54 ]
>>966
そのプログラムを貼れ。



968 名前:デフォルトの名無しさん mailto:sage [2006/07/21(金) 07:27:35 ]
#include <stdio.h>

/* 入力される文字をカウント;第1版 */
main()
{
long nc;

nc = 0;
while (getchar() != EOF)
++nc;
printf("%ld\n", nc);
}

969 名前:デフォルトの名無しさん mailto:sage [2006/07/21(金) 08:29:16 ]
入力を終了しないからいつまで経っても表示されないだけに一票。

970 名前:デフォルトの名無しさん mailto:sage [2006/07/21(金) 09:21:38 ]
でもこっちはちゃんとできるんですよ。

#include <stdio.h>

/* 入力された文字を複写;第2版 */
main()
{
int c;

while((c = getchar()) != EOF)
putchar(c);
}

971 名前:デフォルトの名無しさん mailto:sage [2006/07/21(金) 10:54:10 ]
いやだから・・・。

972 名前:デフォルトの名無しさん [2006/07/21(金) 11:50:37 ]
ST.c: 関数 `function2' 内:
FLIST.c:75: 警告: 引数 2 個の `strcat' を渡しますにより、キャストなしで整数からポインタを作りました
:wq!

上記の警告がでました。問題の75行目 strcatは以下です。
strcat(strLine,ctime( &buf.st_mtime ));/*警告箇所*/
st_mtimeはファイル情報を取得する処理【stat関数】のメンバでbufの変数定義は
struct stat buf;、strLine変数はchar strLine[255];としております。
警告を回避するキャストの方法を教えてください。環境はLinux redhatです。

973 名前:デフォルトの名無しさん mailto:sage [2006/07/21(金) 12:24:15 ]
>>972
#include <time.h>
してないってことはない?

974 名前:デフォルトの名無しさん [2006/07/21(金) 12:40:43 ]
レスありがとうございました。インクルード記述はあります。
プラットホームをUnixからlinuxに移した際に
リコンパイルで警告がでました。

975 名前:デフォルトの名無しさん mailto:sage [2006/07/21(金) 13:04:56 ]
>>974
その周辺ロジックだけのプログラム作っても再現する?
こちらでは問題ないのだが。
以下、テストコード。
--
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>

int main(int argc, char ** argv)
{
char strLine[255];
sprintf(strLine, "%s:", argv[1]);
struct stat buf;
stat(argv[1], & buf);
strcat(strLine,ctime(&buf.st_mtime));
puts(strLine);
return 0;
}


976 名前:デフォルトの名無しさん mailto:sage [2006/07/21(金) 13:32:38 ]
>>968
それは何か入力後に EOF を渡す必要がある。
これは Cygwin だとどうなっているのか分からないが、
UNIX 系 OS だとデフォルトでは Ctrl+D でできるのが
普通だ。Windows のコマンドプロンプトや MS-DOS
プロンプトでは Ctrl+Z だ。どちらかを入力してみれば
できるんじゃないだろうか。


977 名前:968 mailto:sage [2006/07/21(金) 15:13:46 ]
>>976
ありがとうございます。Ctrl+Zで出来ました。



978 名前:デフォルトの名無しさん mailto:sage [2006/07/21(金) 15:18:18 ]
結局>969じゃん。

979 名前:968 mailto:sage [2006/07/21(金) 16:38:45 ]
間違えました。Ctrl+Dでした。

>>978
入力を終了しなくても出来そうだな、とか
馬鹿な考えを起こしていたもので...m(_ _)m

980 名前:デフォルトの名無しさん mailto:sage [2006/07/22(土) 14:43:42 ]
> 賢いコンパイラにとって、それらはどちらも同じと解釈されるから
while(1) だと警告がでる
for(;;) だとでない

981 名前:デフォルトの名無しさん [2006/07/23(日) 12:03:52 ]
プロトタイプ宣言のない関数’printf'の呼び出し(関数main)
という警告文が出るけどなに?

982 名前:デフォルトの名無しさん [2006/07/23(日) 12:07:13 ]
>>981
#include <stdio.h>がないとか
printfがpirntfになってたりとかじゃないかな?

983 名前:981 [2006/07/23(日) 12:10:28 ]
>>982
その辺は確認しているのだけど
 そのへんが問題なのかな?

984 名前:デフォルトの名無しさん mailto:sage [2006/07/23(日) 12:33:16 ]
こういう場合、ソースを貼り付けたら一発で分かったりすることも多い。

985 名前:981 [2006/07/23(日) 12:46:51 ]
#include <sudio.h>

int main( )
{
int n=500+ 150;
printf("%d", n);
return 0;
}
こんな感じなんだけど諸兄の
意見はいかがですかね?

986 名前:デフォルトの名無しさん [2006/07/23(日) 12:48:02 ]
int a;
char s[3] = "FF"

a == 255
みたいなイメージで、文字データとして16進の形でcharの配列に入ってるものをint形の変数に代入する方法ってない?


987 名前:デフォルトの名無しさん [2006/07/23(日) 12:48:41 ]
1はツンデレ



988 名前:デフォルトの名無しさん mailto:sage [2006/07/23(日) 12:52:46 ]
>>985
1行目で既に破綻が

989 名前:デフォルトの名無しさん mailto:sage [2006/07/23(日) 12:59:38 ]
>>986
strtol

990 名前:981 [2006/07/23(日) 13:00:32 ]
>>988
ありがと。いまきずいた(汗

991 名前:986 mailto:sage [2006/07/23(日) 13:04:15 ]
>>989
さんくす、助かった

992 名前:デフォルトの名無しさん mailto:sage [2006/07/23(日) 18:01:34 ]
よくコンパイルまで行ったな。

993 名前:デフォルトの名無しさん mailto:sage [2006/07/24(月) 10:40:46 ]
おまいら日本語よりC言語のほうが意思疎通出来るんだな(w

994 名前:デフォルトの名無しさん mailto:sage [2006/07/24(月) 10:55:00 ]
次スレは>>995が立てるそうです。

995 名前:デフォルトの名無しさん mailto:sage [2006/07/24(月) 18:38:56 ]
次スレはいらない。

996 名前:デフォルトの名無しさん mailto:sage [2006/07/25(火) 09:49:42 ]
入らなかったら拡張しろ

997 名前:デフォルトの名無しさん [2006/07/25(火) 16:42:16 ]
1000



998 名前:デフォルトの名無しさん mailto:sage [2006/07/25(火) 18:11:33 ]
スマン…まさか携帯から立つとは思わなかったんだ…
次スレ
C言語なら俺に聞け(入門篇) ぱぁと2〜
pc8.2ch.net/test/read.cgi/tech/1153818463/

スレタイについては反省していない

999 名前:デフォルトの名無しさん mailto:sage [2006/07/25(火) 18:21:20 ]
>>998


1000 名前:デフォルトの名無しさん mailto:sage [2006/07/25(火) 18:29:03 ]
>>998
おまえというやつは・・・乙

1001 名前:1001 [Over 1000 Thread]
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<249KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef