1 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 06:39:50 ] C言語の入門者向け解説スレです。 ・C++言語はスレ違いです。 ・分からない事をなるべく詳しく書いて下さい。 ・ソースコードを晒すと答えやすくなるかもしれません。 ・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。 前スレ C言語なら俺に聞け(入門篇) Part 17 pc11.2ch.net/test/read.cgi/tech/1185286631/ 教えて欲しいのではなく丸投げしたいならこちらへ C/C++の宿題を片付けます 94代目 pc11.2ch.net/test/read.cgi/tech/1185452895/
477 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 15:22:49 ] 1000から9999までの4桁の数字で、各桁を足した数で自分を割りきれる数がいくつあるか調べるプログラムを作りました。 今回は1325という正しい答えを知っていたのでエラーに気づきましたが、答えがわからない場合はどんな風にデバッグしていますか?
478 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 15:26:44 ] 全部出力して、検算する。
479 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 15:30:12 ] 各桁の合計を求める部分、割り切れるかどうかを判定する部分、個数を数える部分を それぞれ個別にテストしてみる。
480 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 15:34:28 ] 別のアルゴリズムで解いてみる。
481 名前:デフォルトの名無しさん [2007/09/02(日) 15:36:56 ] >>477 そのようなプログラムをCで書かなきゃいけないか?w excelで十分だろ
482 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 15:40:25 ] 答えを知ってるってことは課題かなんかだろう それで>>477 みたいな疑問を持ったんだからやる価値があったってことだろう
483 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 16:52:58 ] cat.cより抜粋 /* Buffer for line numbers. An 11 digit counter may overflow within an hour on a P2/466, an 18 digit counter needs about 1000y */ #define LINE_COUNTER_BUF_LEN 20 static char line_buf[LINE_COUNTER_BUF_LEN] = { ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '0', '\t', '\0' }; /* Position in `line_buf' where printing starts. This will not change unless the number of lines is larger than 999999. */ static char *line_num_print = line_buf + LINE_COUNTER_BUF_LEN - 8; /* Position of the first digit in `line_buf'. */ static char *line_num_start = line_buf + LINE_COUNTER_BUF_LEN - 3; /* Position of the last digit in `line_buf'. */ static char *line_num_end = line_buf + LINE_COUNTER_BUF_LEN - 3;
484 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 16:55:36 ] >>483 の続き /* Compute the next line number. */ static void next_line_num (void) { char *endp = line_num_end; do { if ((*endp)++ < '9') return; *endp-- = '0'; } while (endp >= line_num_start); if (line_num_start > line_buf) *--line_num_start = '1'; else *line_buf = '>'; if (line_num_start < line_num_print) line_num_print--; } Cの基本的なことを勉強して、cat.cのソースを読んでいますが この行を計算する関数の処理が何が言いたいのかわかりません。 line_bufを参照しながらカウントしているように見えますが、いまひとつわかりません。 どなたかご教授お願いします。
485 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 17:16:14 ] www.google.co.jp/search?q=%E3%81%94%E6%95%99%E6%8E%88 >何が言いたいのかわかりません 何を聞きたいのかわかりません
486 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 17:37:21 ] 行番号を表す文字列をポインタ使って変更してるんじゃない? "399" → "400"みたいに。
487 名前:468 mailto:sage [2007/09/02(日) 18:25:16 ] >>475 OSを作成するためにCを勉強しているわけではないだろ そう意味で関係ない
488 名前:デフォルトの名無しさん [2007/09/02(日) 18:37:35 ] じゃぁ、なん為にやってるの? 文字列を逆順に表示したりするプログラムを書くためですか?hw
489 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 18:41:38 ] 普通はアプリケーションを作成するためにC言語を勉強するんじゃない?
490 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 18:42:26 ] この先必要となる基礎としての勉強じゃないんですか?>>488
491 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 18:43:35 ] 英語を習うときに、目的を持つかどうかの違い棚。
492 名前:デフォルトの名無しさん [2007/09/02(日) 19:06:28 ] 失礼します。 変数Aに一秒ごとに1を追加していくようにしたいのですが、どうしたらいいのでしょうか。
493 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 19:07:30 ] どうしてそんなことをする必要があるのかってところから考えたほうがいいよ。
494 名前:デフォルトの名無しさん [2007/09/02(日) 19:09:41 ] >>493 いや、タイマーに使いたいのですが。
495 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 19:14:44 ] >>492 main() { int A = 0; while (1) { sleep(1); A++; } }
496 名前:デフォルトの名無しさん [2007/09/02(日) 19:16:24 ] >>492 つ time.h 使った事無いけど…orz
497 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 19:21:45 ] CでMMOのBOT作れるんでしょうか?
498 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 19:22:16 ] いいえ
499 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 19:29:53 ] タイマーの値が必要なときに、現在時刻を取得すればいいんじゃない? 時刻の取得の仕方は環境依存
500 名前:デフォルトの名無しさん [2007/09/02(日) 19:35:31 ] >>495-496 ありがとうございます 試してきます
501 名前:487 mailto:sage [2007/09/02(日) 20:03:34 ] >>488 > 文字列を逆順に表示したりするプログラムを書くためですか?hw なかなかよいポイントをついているね プログラミングの本質はデータの加工と入出力 世の中のすべてのプログラムは「文字列を逆順に表示したりするプログラム」 データーベースのアプリだって通信モジュールだって高度な科学技術計算のプログラムだって みーんな本質的には「文字列を逆順に表示したりするプログラム」だ OSもね
502 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 05:33:18 ] もっと軽い言語がたくさんありますよ今は
503 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 20:21:34 ] 例えば何?
504 名前:デフォルトの名無しさん [2007/09/03(月) 23:10:59 ] おい、五輪実況(男)で看板とか名無しとかLRとか決めるからおちょくりに来いよ ヒント:なんかVIPの同盟国とかほざいてるから live24.2ch.net/test/read.cgi/ootoko/1188634806/
505 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 16:12:59 ] >>503 スクリプト系の言語のことをいってんじゃないの?
506 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 16:17:54 ] スクリプト系はゲロ重だろ
507 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 18:12:15 ] int main(void) { do { switch (getnum("番号を入力してください\n")) { case 1: question(1); break; } } while (0); return 0; } int getnum(const char *msg) { int n; for (printf(msg); scanf("%d", &n) != 1;) { while (getchar() != '\n'); } return n; } ここで使われているgetnumがいまいち理解できません。 何をしてるいるのか教えてください。
508 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 18:18:44 ] printf(msg) は msg を表示 scanf("%d", &n) は数字を入力 != 1 は scanf で数字が正しく入力されたか確認 while (getchar() != '\n'); は改行が来るまで入力を読み飛ばす return n; は入力された数字を返す これでおk?
509 名前:507 mailto:sage [2007/09/04(火) 18:40:35 ] >>508 さん よくわかりました。 ありがとうございます。
510 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 16:50:33 ] kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4898.txt 質問させてください。 +と-と|を使って升目を出力するプログラムです。 第一に40行目のところのコメントをはずすと最初のループはなぜ止まるのですか? 第二に40行目の部分のコメントをはずしたときに 47行目を切り取り、49行目の後に記述すると結果が変わるのはなぜですか? いろいろ試すうちに2つ目の問題もでてきて分からなくなりました。 よろしくおねがいします。
511 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 16:54:42 ] 意味がわからない変数名はやめろ
512 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 17:09:32 ] continueやめてbreakにすれば?
513 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 17:45:26 ] >>510 > 第二に40行目の部分のコメントをはずしたときに > 47行目を切り取り、49行目の後に記述すると結果が変わるのはなぜですか? コンパイラのバグだと思われる。
514 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 18:09:57 ] >>510 >>512 も言っているけどswitch内のcontinueやめてbreakにするとこうなる +---+ | | +---+ | | +---+
515 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 18:14:27 ] >>510 確認してないけどたぶんあれね continueにしちゃっているから44行目からwhile()の式評価にとんじゃっているんだと思う 実際には47〜49行目は実行されていない 本来は47行目に行かなきゃ行けないのでbreakにする
516 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 18:20:35 ] 32行目を下のように変更するだけで動作が変わるから、バグでしょ while (d < e){ ↓ while (d < e){printf("");
517 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 18:26:23 ] gcc は期待したとおりの動作になったが bcc だと >>516 の変更前後で出力内容が変化した 変更前 +---+ 変更後 +---+ | | +---+ | | +---+
518 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 18:28:46 ] あっwhile (d < e)があったの気づかんかった とりあえず>>515 は忘れて >>514 は目的の動作が分からんので保留かな
519 名前:510 mailto:sage [2007/09/05(水) 18:42:26 ] 皆さん見ていただきありがとうございました。 continueで戻ることばかり考えていてbreakを忘れていました、 while文の中にあるのでcontinueを使わずとも繰り返しになるのですね、 whileとbreakとcontinueの使い方を再確認します。 変数名も以後気をつけます。 コンパイラのバグということで 他のコンパイラを試してみようと思っていたのですが >>517 さん試していただきありがとうございました。
520 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 21:23:40 ] >>519 switch があるから、breakはそっちを抜けるだけで whileにまで影響しないんだよ switchとwhileが同じbreakなのは たまに不便だがな
521 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 22:16:45 ] まぁそういう時は多少見辛くてもif-else使うかな。俺は。 ループフラグとかgotoとかキラーイ
522 名前:デフォルトの名無しさん [2007/09/06(木) 02:48:24 ] struct node *hoge(struct node* a) { struct node *b; b = a; a = NULL; free( b ); return a; } free関数の形式を調べてみるとvoid free(void *ptr);と書いてありました ttp://www.bohyoh.com/CandCPP/C/Library/free.html つまり、上記の関数を実行すると、引き数で渡されたポインタaがNULLを代入される前に指していた領域を開できるということでしょうか? 自分で調べてみて「たぶんあっているな。」とは思ってもどうしても確信できなくて不安になってしまいます。みなさんはそんなことありませんでしたか?(このレス二つ目の疑問です)
523 名前:デフォルトの名無しさん [2007/09/06(木) 04:23:10 ] 適当な結果を標準出力に出力しつつ時々 y/n を聞いてくるコマンド ques が あったとします。y/n を検知して 代わりに y を入力してくれる プログラムを書きたいのですが、 何をキーワードに検索してよいのか すらわかりません。パイプで検索したのですが 何か違う感じでした。 よろしくお願いします。
524 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 07:33:36 ] >>522 ・できる。 ・根本的にポインタを理解できていればそんなことはないと思う。 >>523 他に標準入力する項目がなく、quesが確実に標準入力を利用しているというのなら、 yes | ques でOK。
525 名前:デフォルトの名無しさん [2007/09/06(木) 10:22:16 ] >>524 すいません。C言語でやりたいのです。 それと質問に応じて no と答える場面もあります。 よろしくお願いします。
526 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 11:01:35 ] >>525 それなら、パイプで間違ってないと思う。 コマンドの標準出力/標準エラー出力を監視しながら特定のパターンを認識したら、 コマンドの標準入力に対して、yまたはnを投げる。 >何か違う感じでした。 何を期待しているか知らないが、コンソールアプリでは WindowsのGUIアプリのように、入力待ちになったとかのイベントが 飛んできて、そこに処理を記述するわけではない。 実装はどうしても泥臭くなると思うが。
527 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 11:03:40 ] ファイル操作について質問なのですが、 もし現在の日付をfprintf("%d %d %d %d %d %d\n",local->tm_year・・・以下略 こういう風にファイルに保存したとしますよね。 このファイルを読み込むとき、 fscanf("%d%d%d%d%d%d",&year,・・・以下略という風に読み込んだとき、 何故yearという変数にはしっかりとyearで保存した数字が格納されるのですか? 説明下手ですみません。
528 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 11:07:05 ] fprintf("%d %d %d %d %d %d\n",local->tm_year・・・ で書き込むと当然、 2007 09 06 ・・・ となるから、fscanf("%d%d%d%d%d%d",&year,・・・で読み込むときは 空白か改行まで読まれるので 2007 09 06 ・・・ と順に読み込まれる
529 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 11:08:05 ] なぜって言われても、それが fscanf という関数の機能なんだし。 どういう結果になると思ってた?
530 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 11:10:00 ] なるほど・・・左上から順に変数に格納されるんですね。それなら呼び出す 順番に気をつけないとメチャクチャになりますね。分かって良かった。 ありがとうございました。
531 名前: mailto:sage [2007/09/06(木) 16:45:10 ] すいません。gccの拡張命令について知りたいのですが どこかに命令一覧が載ってるサイトってありますか?
532 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 16:52:09 ] 配列を引数として関数にいれて、関数でその配列の中身を表示しておいて mainでその関数を100回くらいまわしたら 値がかわってくるんだけど何が原因だと思われますか? 配列は20要素で 引数は4つ使ってます。
533 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 16:56:09 ] >>532 そりゃプログラムのバグでしょ 具体的にコード見せてくれないとそれ以上はわからん
534 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 17:09:10 ] void makemake(---){ (これをmainと思ってください) double ma[120][20]; double h1[20],h2[20],n[120]; int num; fileinput(h1,h2,num); for(i=0;i<120;i++){ n[i]=fmake(ma[i],h1,h2,num); } } そしてfmake関数に渡します double fmake(double a[20],double b1[20],double b2[20],int n){ int i; for(i=0;i<20;i++){ printf("b1:%lf b2:%lf",b1[i],b2[i]); } } まー一部なんでわかりにくいかもしれませんが。 fmake関数のprintfで20ループくらいまでは きちんと表示されるんですけど途中でnanとかおかしな数字が表示されるんです。
535 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 17:10:21 ] not a number
536 名前:532 mailto:sage [2007/09/06(木) 17:13:30 ] 534ですけどお願いします。
537 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 17:25:07 ] そのファイルがおかしいんじゃないの
538 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 17:26:57 ] >>536 思わず笑ってしまった。 >>535 の not a number は>>534 の nan を指してる。 NaN (Not a number)、日本語だと非数。 浮動小数点演算で、0除算など計算結果が正しく求められない計算を したときに、値が正常でないことを示す特別な値が格納される。その値のこと。 繰り返しはまったく同じものを表示しているわけではないみたいだけど、 fileinputで読んできた値がすでにおかしいんじゃないの?
539 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 17:45:24 ] >>534 fileinput をでっちあげて動かしてみたが、まったく問題ない。 省略した部分がおかしいと思われ。
540 名前:532 mailto:sage [2007/09/06(木) 17:46:27 ] ファイル入力が間違ってるんじゃないかって指摘するってことは プログラムはあってるってことですか ありがとうございます。 どうしようもなくなったら直接fmakeにb1,b2のファイルいれますわ。
541 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 17:49:45 ] >>540 プログラムもなにも、挙げられた断片だけでは何もしないコードに見え る。fmake()は何も返してないし。
542 名前:532 mailto:sage [2007/09/06(木) 17:53:22 ] 正規分布のプログラムなんすよ。 double a[20], データ120X20 double b1[20], 20次元の平均 double b2[20], 20次元の分散 int n 平均・分散の組。 式は書くの大変だから省いてるだけです。
543 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 18:02:25 ] 予想ではたぶんその式が悪い
544 名前:532 mailto:sage [2007/09/06(木) 18:04:15 ] double fmake(double a[20],double b1[20],double b2[20],int n){ int i; for(i=0;i<20;i++){ printf("b1:%lf b2:%lf",b1[i],b2[i]); } 以上
545 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 18:06:14 ] わからなければ計算したり配列弄るごとに中身出力してみ
546 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 18:30:27 ] どこが悪いかわかんないのに、なんでそこが悪いと思うのか理解できない。
547 名前:デフォルトの名無しさん [2007/09/06(木) 19:15:12 ] このソースがコンパイルできないんですけど どこに問題があるんですかね? コンパイラはgcc3.3.6です。 ttp://www8.uploader.jp/user/vipprog/images/vipprog_uljp00020.txt
548 名前:532 mailto:sage [2007/09/06(木) 19:33:26 ] >>532 て書いてるんですけど。 式はあってるんだよ確認ずみだから。 入力のプログラムがあやふやだからここで聞いただけ。
549 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 19:35:12 ] はいはい。コンパイラのバグかなんかじゃねえの。
550 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 19:39:09 ] そろそろ荒らし化しそうな予感
551 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 19:48:25 ] こんなアホ相手にするお前ら優しいな
552 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 19:48:45 ] よく言われる
553 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 19:51:32 ] >>547 配列の宣言の仕方とsizeの扱い直せばいけると思う
554 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 19:53:07 ] >>553 追加でコンパイルするだけならsizeはそのままでもいいかも 連投スマン
555 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 20:18:46 ] どんどん本性が出てきたな
556 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 21:39:02 ] >>510 が、もう見てないだろうから、書いてみる #include<stdio.h> int main(void){ int x, y, width=3, height=4; for(y=0;;y++){ for(x=0;x<width;x++) printf("+---"); printf("+\n"); if(y>=height) break; for(x=0;x<width;x++) printf("| "" "" "); // コピペ用 printf("|\n"); } return 0; }
557 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:38:24 ] 殆どのネットゲームのBOTは C言語で開発されてるんでしょうか? サイトありましたらおしえてください m)_ _m)
558 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:43:18 ] 無い
559 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 23:16:50 ] www.google.co.jp/
560 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 10:46:15 ] >>559 ありがとうございました
561 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 12:55:50 ] ネトゲのBots全てがCで作成されているかは知らんが Cで作成できないことはない。 まぁ開発にあたっては、Cの知識だけでなく、それ以上の多くの知識が求められます。
562 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 14:31:57 ] UWSCあたりならすぐに書けそうだな。
563 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 16:02:02 ] 関数は自分で積極的に作ったほうがいいですか? それとも既存のものの効率的な組み合わせにこだわったほうがいいですか?
564 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 16:59:44 ] 既存のものの効率的な組み合わせをする関数を自分で積極的に作ったほうがいい
565 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 19:00:20 ] >>564 ありがとうございます。なるほど!積極的に作ります
566 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 19:21:22 ] グローバル変数として宣言する場合と、staticを付けて関数内で宣言する場合は どういう違いがあるんでしょう?いくつかの説明文見たところ自分では同じように 思えるんですが、グローバル変数にstaticを付けるプログラムの例を見かけたので気になりました。
567 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 19:27:15 ] static を付けないグローバル変数 → 他のファイルからでも参照できる static を付けたグローバル変数 → 他のファイルからは参照できないが、同じソースファイル内ならどの関数からでも参照できる static を付けた関数内の変数 → 他の関数からは参照できない 間違って書き換えたりしないように、見える範囲をなるべく最小限にする方が良い。
568 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 19:40:10 ] >>567 ありがとうございます、アクセスできる範囲に違いがあるんですね。 つい値を保持できる期間ばかりに目が言ってたみたいです
569 名前:デフォルトの名無しさん [2007/09/07(金) 23:03:28 ] 入力された文字列が正しい文字列かを判断するプログラムなんですけど #include <stdio.h> #include <string.h> int getflg(char wd); main() { int n; char word; printf("文字入力:"); scanf("%s",&word); n=getflg(word); printf("flg=%d",n); } int getflg(char wd) { int flg=0; if ( strcmp(wd,"あいうえお")==0 ){ flg=1; } return flg; } これだとエラーがでるのですがどうすればよいのでしょうか;;
570 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 23:06:22 ] >char word; >printf("文字入力:"); >scanf("%s",&word); え?w
571 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 23:08:53 ] >>569 「文字」ではなく「文字列」だから #include <stdio.h> #include <string.h> int getflg(char *wd); main() { int n; char word[20]; printf("文字入力:"); scanf("%s",word); n=getflg(word); printf("flg=%d",n); } int getflg(char *wd) { int flg=0; if ( strcmp(wd,"あいうえお")==0 ){ flg=1; } return flg; } だね
572 名前:569 [2007/09/07(金) 23:13:04 ] >>570 すいません >>571 文字だと&が必要で 文字列だと&は必要ないということですかね? あと*wdにするのはなんでですかね?汗
573 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 23:18:20 ] >>572 >文字列だと&は必要ないということですかね? 必要ない >scanf("%s",word); >if ( strcmp(wd,"あいうえお")==0 ) 文字列同士の比較をしたいわけでしょ char wd だと1文字だけしか渡せない、文字列として渡したいならポインタとして渡すしかない char *wd は文字列のポインタを渡している
574 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 23:30:21 ] #include <stdio.h> #include <string.h> int getflg(char *wd); main() { int n; char word[20]; printf("文字入力:"); scanf("%s",word); n=getflg(word); printf("flg=%d",n); } int getflg(char *wd) { return !strcmp(wd,"あいうえお") ? 1 : 0; }
575 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 23:34:11 ] >>534 > double ma[120][20]; これでスタックフレームを何byte消費しているか理解しているか? static double ma[120][20]; static double h1[20] static double h2[20] static double n[120]; にしてみろ これで結果がお前の予想通りになったなら コンパイラはお前の予想通りには動かないということを知っておけ
576 名前:569 [2007/09/07(金) 23:35:04 ] >>573 char wdだと1文字だけなんですか?
577 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 23:41:55 ] >>575 > これでスタックフレームを何byte消費しているか理解しているか? たった、18,9Kじゃん。