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


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

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



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/

412 名前:407 mailto:sage [2007/08/29(水) 21:50:13 ]
>>411
すいません!書き忘れてましたけど、headはstatic変数で今回ダミーとして扱います
ちなみにheadはhead->next = NULLで初期化してあります。

for文の初期化でtmp = head;とあるので、head->nextでダミーではない値をもつリストに入るときにはcntは1になっています
なのでcnt == indexはひとつ前になるんじゃないかな〜と考えてます。間違えてたらすいません




413 名前:408 mailto:sage [2007/08/29(水) 21:54:23 ]
>>412
つまり head->next が最初の要素ってことですね
なら納得です

だとすると、やはりこのソースからだと分かりませんね
私はここまでです

414 名前:407 mailto:sage [2007/08/29(水) 22:11:13 ]
>>413
そうですか、ありがとうございました。
原因はこれだけのソースではわからないと思うので、ななし.orgに全部のソースをアップしました
見てくれるなら見てほしいです。んでVisualStudioで実行してほしいです

まだ途中なんでできたらツッコミとかよろしくおねがいします



415 名前:408 mailto:sage [2007/08/29(水) 22:33:26 ]
>>414
そういうときはURLも貼ってくれないと
ななし.orgってどこですか?

416 名前:407 mailto:sage [2007/08/29(水) 22:43:24 ]
すいません。。ここです
77c.org/upload.php?fn=off&page=1

417 名前:408 mailto:sage [2007/08/29(水) 23:02:01 ]
>>416
まずここかな

void init_list(void){
ELEMENT top;
head = ⊤

element_cnt = 0;
head->next = NULL;printf("\(^o^)/");
}

ELEMENT top; は関数のローカル変数
head = ⊤
top の実体は関数抜けたら無効になる
にも関わらず 関数外でhead(top) にアクセスしてる

418 名前:407 mailto:sage [2007/08/29(水) 23:12:46 ]
>>417
ああ〜!そうですねw普通におかしいですね

419 名前:408 mailto:sage [2007/08/29(水) 23:16:02 ]
>>418
一応こちらの環境(BCC5.5)では>>417を改善することで動作はします
(もう少し動作チェックしてみますが)

それから余談ですが、ポインタ配列使うなら ELEMENT next いらないんじゃないですか?
せっかくポインタ繋ぎしてるんですから add_data() 内で new_data=(ELEMENT *)malloc(sizeof(ELEMENT)) してみては?
いまは動作チェックが目的でこうしているというならゴメンナサイね

それから最後にfree()も忘れずに

420 名前:407 mailto:sage [2007/08/29(水) 23:24:18 ]
改善しました!>>408さん、ありがとうございました!

関数内でmallocはしなくて良い、と言う問題だったので、main側で確保したんです。
自分も関数内で確保した方がいいと思うのですが・・・



421 名前:408 mailto:sage [2007/08/29(水) 23:52:07 ]
>>420
そういうことですか
分かりました
それらが題意であるならしょうがないですね

余計なことかもしれませんが、
remove_element() は要素を削除するんですよね?
この方法(配列上で行う連結リスト)だと要素を削除した後、その後追加する際に、
空いている要素と空いていない(使われている)要素の区別がつかないので
その点も考慮していく方がよろしいかと思います

422 名前:421 [2007/08/29(水) 23:53:29 ]
#include <stdio.h>
main()
{
static int a[5]={15,8,48,50,27}
int sum,heikin,i;
sum=0;
for(i=0;i<5;i++){
sum=sum+a[i];
}
heikin=sum/5;
printf("goukei=%d\n",sum);
printf("heikin=%d\n",heikin);


}

これにあと配列中の奇数と偶数の数を出力するのを追加したいんですが
どうすればいいんでしょうか?

423 名前:407 mailto:sage [2007/08/30(木) 00:02:53 ]
>>421
確かにそうですね。mainの考慮をしてみます!

424 名前:408 mailto:sage [2007/08/30(木) 00:05:50 ]
>>422
こんなんでどうですか?
配列中の値を2で割ってあまりが出るかでないかで奇数、偶数を判断

#include <stdio.h>
main()
{
static int a[5]={15,8,48,50,27}
int sum,heikin,i;
int kisu=0,gusu=0;
sum=0;
for(i=0;i<5;i++){
sum=sum+a[i];
if(a[i]%2) kisu++;
else gusu+++
}
heikin=sum/5;
printf("goukei=%d\n",sum);
printf("heikin=%d\n",heikin);
printf("奇数 %d個 / 偶数 %d個",kisu,gusu);

}

425 名前:408 mailto:sage [2007/08/30(木) 00:08:32 ]
>>422
ところでなんで 421 なんですかね?

>printf("奇数 %d個 / 偶数 %d個",kisu,gusu);
改行忘れたので入れといてください

printf("奇数 %d個 / 偶数 %d個\n",kisu,gusu);

426 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:09:46 ]
おまえも、関係ないなら名前の所の番号外せ

427 名前:422 [2007/08/30(木) 00:15:18 ]
>>425
ありがとうございます。

名前はミスして書いてしまったようです。すいません^^;

428 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:26:43 ]
怒られちった

429 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 21:19:36 ]
質問です。
例えば、データの処理(検索など)を行いながら、
同時に秒単位で経過時間を標準出力するといったようなことってできますか?
できるのであれば教えていただきたいのですが。

430 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 21:44:54 ]
>>429
検索のループ中に時間表示機能入れるなり、スレッド作るなり、signal使うなり
まぁ状況次第でなんなりとどーぞ。



431 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 23:14:55 ]
奇数偶数なら

if(a[i] & 1)
//奇数
else
//偶数

では?

432 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 23:18:54 ]
>>431
% 2 でなにか不都合なことがあるの?

433 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 23:22:31 ]
>>431
負数が2の補数表現で無い環境の場合はうまくいかないんじゃない?
(そんな環境があるかどうかは知らないが…)

434 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 23:38:35 ]
問題の中に負数がないからどっちでもいいよ

435 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 23:58:46 ]
>>432
もちろん論理的な不都合はないです。
ただ除算は一般に非効率なので、高速化を狙った提案。ですが、、
>>433
たしかに、そうですね。
使用可能かどうかの確認は必要だと思います。

436 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 01:46:43 ]
>>435
大丈夫、まともなコンパイラなら%2を割り算では実装しないから。

437 名前:435 mailto:sage [2007/08/31(金) 02:43:21 ]
>>436
gcc -S で試したら、確かに論理命令が生成されてました。
しかもunsigned だと n % 1 と n & 1 は完全に同じコードに。
勉強になりました。流れ止めて失礼しました。

438 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 09:54:01 ]
> n % 1 と n & 1 は完全に同じコードに
バグじゃね?

439 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 09:57:08 ]
バグだな

440 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 10:08:56 ]
n%2の間違いだろ、突っ込んでやるなよw



441 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 15:31:29 ]
実数で計算した結果の小数点以下を切り捨ててて
整数のところだけを別の計算に使いたいのです。

どのようにすればできるのかでしょうか。

442 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 15:37:22 ]
>>441
一度 int にキャストする (正数のときのみ)、あるいは floor()。
入門以前のレベル。本くらい買え。

443 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 15:40:06 ]
472 名前:デフォルトの名無しさん[sage] 投稿日:2007/08/31(金) 14:55:28
浮動小数点の小数点以下を簡単に取る方法ってないですか?

473 名前:デフォルトの名無しさん[sage] 投稿日:2007/08/31(金) 15:13:39
f - floor(f)

444 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 18:40:31 ]
文字列とfor文についての質問です。
--出力結果--
sample01.txt
sample02.txt
sample03.txt
sample04.txt
sample05.txt
------------
上のように出力し、かつそれぞれを格納したいのですが、
数字の部分に繰り返し文を使ってうまくやる方法がわかりません。

おしえてくらはい><

445 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 18:52:51 ]
sprintf(fname, "sample%02d.txt", i);

446 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 19:08:26 ]
あまりの入門レベルにワロタwww

447 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 19:17:16 ]
入門篇だからいいんじゃね?

448 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 22:00:31 ]
でも入門書くらい読めよ、てのが少なくない。

449 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 22:41:01 ]
>>445
うまくいきそうです!ありがとうございました!!

450 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 00:38:58 ]
>>429
できなくはないが、C言語入門の範疇じゃないな。
OS関連のプログラミングを勉強しないと無理。



451 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 01:05:03 ]
>>444
char filename[5][100];

for (i = 0; i < 5; i++) {
  sprintf(filename[i], "sample%02d.txt", i + 1);
  printf("%s\n", filename[i]);
}

452 名前:デフォルトの名無しさん [2007/09/01(土) 23:22:05 ]
uintptr_t とかsize_t型ってなんなんですか
これもwindowsプログラミング特有の、#defineした型なんでしょうか?

453 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 23:23:29 ]
#defineはしてないと思うよ^^

454 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 23:35:05 ]
>>452
size_tは標準の型。
unsigned intとかunsigned longあたりのtypedef。
strlen()のリターン値とかで使われてる。

uintptr_tは知らんけど、
docs.sun.com/source/806-4836/conv_v9.html
これを見ると、導入が予定されてるのかな?

455 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 00:12:21 ]
size_tは標準Cに入っている記憶域の大きさを表す型、
sizeof演算子の結果の型と定められている。

uintptr_tはC99から導入された<stdint.h>で宣言されている型の1つで、
ポインタをキャストしても表現を失わないと規定されている符号無し整数型。
VC++でも最近はuintptr_t/intptr_tだけ<stdlib.h>で宣言されている。
<stdint.h>ごと入れればいいものを。

Windowsプログラムなら、uintptr_tよりUINT_PTRのほうが良く見かけるな。
こっちはWindows APIの型とされているし、
VC++にuintptr_tが入るよりも前から存在していたから。

456 名前:デフォルトの名無しさん [2007/09/02(日) 00:43:43 ]
一週間ほど前にプログラミングをCから始めまして現在、
ttp://homepage3.nifty.com/mmgames/c_guide/05-02.html
まで勉強しました。そこで、もっといいサイトがあるよ〜
っていうのがあれば教えてくださいm(_ _)m
できれば書籍等も・・・・

教えて君で失礼しますた(´・ω・`)

457 名前:452 [2007/09/02(日) 00:48:08 ]
>>453-455
ありがとうございます。
なるほど、typedefでしたか・・・・。



458 名前:デフォルトの名無しさん [2007/09/02(日) 00:49:16 ]
>>456
とりあえずこのサイト全部終わらせればいいんでない

459 名前:デフォルトの名無しさん [2007/09/02(日) 01:12:37 ]
Cで正規表現を自前で実装しようと思っていますが速度面で微妙

アセンブラのほうがいいですかね?



460 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 01:14:35 ]
Cで速度でないなら、アセンブラでやっても大差ないと思う



461 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 01:14:41 ]
>>459
アルゴリズムの問題だと思われ。

462 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 01:15:54 ]
>>459
grepか何かのソース読んでみるのはどーか

463 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 01:23:43 ]
なにの正規表現と比べて遅いと思ったのか分からないけど、
その比較した正規表現の処理系も、おそらくCで書かれてると思われ。

464 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 01:28:48 ]
Cってメモリと文字列処理がだるいよな

465 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 01:35:56 ]
何をいまさら

って初心者ですか
そうですね

466 名前:デフォルトの名無しさん [2007/09/02(日) 05:17:20 ]
>>456
俺としては、今はもう読むこと無いけど
「C言語入門本物志向が身に付く本」;入門
「ポインタ完全制覇」:ポインタ関連
「文字列操作+ファイル入出力完全制覇」:文字通りの内容
全部「科学技術評論社」
あとは、一応K&R。入門本じゃないけど。
まぁサイトでいえばwisdomsoftかな。
他にも色々あるけど。まぁ、がんばってね

それにつけても、俺が今のレベルまでどうやって勉強してきたのか
さっぱりわからん。学びはじめの頃は
[putchar()//一文字出力する関数]なんてコメントを書きながら
ソース書いてたな。

467 名前:デフォルトの名無しさん [2007/09/02(日) 06:45:53 ]
今更Cなんてやっても・・・

CでOSや組み込み系のドライバをサクサク書けるようになるには10年はかかる

やっと使えるなって感じた頃は全く需要がない恐れがある

468 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 07:10:17 ]
>>467
10年もかからないよ
それに、C言語とOS、ドライバーは関係がない

469 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 07:12:09 ]
ドライバをCで書くなんてえらい時代になったもんだな
ってアセンブラ厨の老人が沸いてくるよ

470 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 08:05:57 ]
tuhsなんか読んでるとUnixはversion 6の時代(1974)にすでにデヴァイス
ドライヴァはCで書かれている。
むしろmkdirだのpasswdとかのユーザープログラムがアセンブラで書かれて
たりして笑える。



471 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 08:06:54 ]
version 6じゃなくてversion 5だった

472 名前:456 [2007/09/02(日) 08:46:32 ]
>>458,466
レス((ヾ(。・ω・)ノ☆゚+.ァリガトゥ
とりあえず今のサイト最後までがんばってみて、
終わったら466さんの紹介してくださった書籍
よんでみます^^

473 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 11:27:38 ]
>>464
個人的には文字列操作はダルいけど、メモリ操作は楽。

474 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 13:44:29 ]
>>469
C て高級アセンブラだよね
こんな言語で業務アプリ書くアホいないよな
って感じてた老人ならここにいますが...


475 名前:デフォルトの名無しさん [2007/09/02(日) 14:22:06 ]
>>468
あんたアフォですか?
OSを作成するためにCが作成されたのに・・・

476 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 14:26:53 ]
もはや関係がないってことだろう

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にすれば?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<232KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef