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


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

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



1 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 16:45:25 ]
C言語の入門者向け解説スレです。
・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

前スレ
C言語なら俺に聞け(入門篇) Part 9
pc11.2ch.net/test/read.cgi/tech/1173284217/

過去スレ
Part 1 pc8.2ch.net/test/read.cgi/tech/1146700389/
Part 2 pc8.2ch.net/test/read.cgi/tech/1153818463/
Part 3 pc8.2ch.net/test/read.cgi/tech/1160682950/
Part 4 pc8.2ch.net/test/read.cgi/tech/1162999861/
Part 5 pc8.2ch.net/test/read.cgi/tech/1165022193/
Part 6 pc10.2ch.net/test/read.cgi/tech/1167325490/
Part 7 pc10.2ch.net/test/read.cgi/tech/1170064980/
Part 8 pc11.2ch.net/test/read.cgi/tech/1171946674/

関連スレ
C/C++の宿題を片付けます 84代目
pc11.2ch.net/test/read.cgi/tech/1172981618/
くだすれC言語(初心者用) Part.2
pc11.2ch.net/test/read.cgi/tech/1172099763/
【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 131
pc11.2ch.net/test/read.cgi/tech/1170338926/
【初心者歓迎】C/C++室 Ver.35【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1171888583/

【C 関数検索 man on WWW】 www.linux.or.jp/JM/index.html

381 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 18:25:49 ]
>>366
ちなみに文字列リテラルそのもの(の先頭要素)を指すポインタを返したければこうする
どちらも結果的には同じこと
char* moji() {
  return "a";
}

char* moji() {
  char* ch = "a"
  return ch;
}

382 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 18:27:26 ]
>>380
当然過ぎる結果が返ってきたということだw
上の方のレスはカオス過ぎて読んでいない。

383 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 18:27:45 ]
どうせなら
char *p = "a";

も付け足しとけ。

384 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 18:30:53 ]
「配列とポインタは同じ」
って罪な言葉だな…

385 名前:344 [2007/04/04(水) 18:31:09 ]
つまり

ch → "a"の先頭アドレスを参照
ch[0] → 'a'を参照
&ch[0] → 'a'のアドレスを指す

と言うことで、これらは全部

'a' '\0'

を参照しているからアドレスは同じってことですか?

386 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 18:32:37 ]
>>366のアホさに久々にワロタ

387 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 18:33:17 ]
>>385
違う。

388 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 18:34:01 ]
なんつーか、参照って言葉をむやみに使わないほうがいいと思うんだ。

389 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 18:35:43 ]
配列の初期化子に使う場合でも文字列リテラルって言うの?



390 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 18:39:39 ]
>>389
e-words.jp/w/E383AAE38386E383A9E383AB.html

391 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 18:40:44 ]
>>389
そう言う。
規格上、charの配列を文字列リテラルで初期化できるという規則になっているから。


392 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 18:42:09 ]
ch → 配列の先頭を指すポインタとして見なされる
ch[0] → char型の値
&ch[0] → ch[0]のアドレス

393 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 18:44:38 ]
>>390
いやリテラルであることに疑問の余地はないんだけど、文字列リテラルってなんか微妙に違和感あったもんで…
>>391
規格じゃあしょうがないね

394 名前:344 [2007/04/04(水) 18:56:51 ]
>>388
少し調べたんですが、
参照ってC++だと特別な意味があったんですね。。
これから気をつけます。

>>392
ありがとうございます。
自分が考えていたことと全然違いますね…

395 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 19:00:32 ]
kmaebashi.com/programmer/pointer.html
より引用

" で囲まれた文字列を、文字列リテラルと呼ぶ。

通常は、文字列リテラルは、「char の配列」を意味する。 よって、式の中では「charへのポインタ」に読み換えられる。

しかし、char の配列を初期化する場合は例外である。 (こちらを参照のこと) この場合の文字列リテラルは、中括弧内に文字を区切って書く初期化子の 省略形として、コンパイラに特別に解釈される。

char str[] = "abc"; /* この宣言は、下の宣言と同義 */
char str[] = {'a', 'b', 'c', '\0'}; /* 配列の最外周なので、要素数は省略できる */

…だそうだ

396 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 19:12:16 ]
コード上で"で囲まれてれば全部文字列リテラルなのねー
感覚としてはあたかも文字列リテラルのように書くことが許されてるって感じだった

397 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 19:15:40 ]
でも現実的には初めそう教えておくほうがいいと俺は思う。

398 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 19:31:04 ]
>>366
がアホなのは解った。

399 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 19:39:27 ]
オレはC言語はきちんと理解できていないが
ゲームなんかのクラックをして変な知識だけはある

しかもアセンブラの意味も分かっているわけではなく
シンボルを見て分かった気になっているだけの
スクリプトキディみたいなもんだ

言っとくがオレは >>366 でも代弁者でもないぞ



400 名前:デフォルトの名無しさん [2007/04/04(水) 19:44:49 ]
>>399
どういう流れでその書き込みなのか頭の悪い俺に教えてください。

401 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 19:47:48 ]
>>399
いったい、誰に対して何の主張をしてるんだ?

402 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 20:02:08 ]
それをこれから書くところなんじゃないか

403 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 20:02:45 ]
スレ違いはスルー汁

404 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 20:28:28 ]
とりあえず>>370
char ch[] = "a"; は文字リテラル"a"への参照だよ。
ってのはおかしいよね・・・?

405 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 20:37:08 ]
argv[1][2]って*(p+2)みたいに表現できないの? > エロイ人(愛を込めて)

406 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 20:43:08 ]
>>405
*(argv[1] + 2)

407 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 20:50:32 ]
>>405
もしくは
*(*(argv+1)+2)

408 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 20:52:20 ]
argv[ i ][ k ] = *(*(argv+i)+k)
と等価って意味ね

409 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 21:05:21 ]
2[1[argv]]



410 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 21:13:52 ]
argv[i][k] == *(*(argv+i)+k) == k[i[argv]]

411 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 21:22:45 ]
>>406-410
サンクス
なるほど *を2回使うのね

412 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 21:53:54 ]
a[b]におけるaとbの可換則だけは釈然としない
こんなの使って可読性が上がる場合なんてあんの?

413 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 21:57:04 ]
>>412
その仕様は初期のコンパイラの都合によるものと思われる
でも、できるからといって使う必要はないじゃないか


414 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 23:35:53 ]
char *argv[]に対して
*(argv+i)って言うのはargv[i]
*(*(argv+i))って言うのはargv[i][]
と同じと考えておk?

415 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 23:37:44 ]
下は *(*(argv+i)) == *(*(argv+i)+0) == argv[i][0] ?


416 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 23:45:43 ]
うん。
*p == p[0]

417 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 23:48:02 ]
構造体ってのは最初に宣言しないといけないの?
#include <stdio.h>
int main(void){
struct person{
char *sei;
int age;
}taro;
taro.age=13;
taro.sei="山田";
struct person hanako;
printf("太郎の姓は%s、年齢は%dです\n",taro.sei,taro.age);
return 0;
}

これコンパイルできないんだけど

418 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 23:50:09 ]
struct person hanako;
を削ってみ。

419 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 23:51:59 ]
>>417
Cの場合宣言(struct person hanako; )は関数スコープの最初に
taro.age=13; taro.sei="山田"; の後で宣言はダメ




420 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 23:52:17 ]
>>417
コンパイルできるよ。

421 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 23:57:13 ]
あれがコンパイルできるC99は残念ながら普及していないのさ

422 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 23:59:18 ]
gccが普及してないとでも?

423 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 00:10:03 ]
GCCは普及しているものの、社会がC99を使う風潮になっていない。
見たことあるか?C99で書かれたプログラム。

424 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 00:17:24 ]
FreeBSDのソースがC99でかかれてたなー。

425 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 00:23:08 ]
拡張子をcppにすればいい

426 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 00:44:47 ]
>>423
コメントが//のCのソースコードをよく見るんだが

427 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 03:02:41 ]
C99で書かれたものは、C89でも書ける。
極端な事言えば、C++でusing namespace std;
をグローバルで宣言して、あとはCの様に書けば
事足りる。
なんだよ、_BOOLって (w

428 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 03:09:55 ]
極端な事言えば、   で書かれたものは機械語でも書ける。

429 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 07:05:03 ]
ふつうにboolにしてくれた方が使いやすい



430 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 07:51:37 ]
>>423
毎日飽きるほど見てますが、何か。

431 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 08:04:55 ]
>>427>>429
<stdbool.h>


432 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 12:49:55 ]
int *a;
ってやったら
aにはたとえば0x123456ff
みたいなアドレスが入ってるんだよね?
だから、a=12みたいなことはできないってことはわかったんだけど

char *c
c="abcdef";
みたいなことができるのはなんで?

char *cって指定した時点で
cには0x12345678みたいなアドレスが入ってんじゃないの?

433 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 12:54:00 ]
"abcdef"は、文字列abcdefのアドレスの意味

434 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 12:54:04 ]
int *aもchar *cも宣言した時点では(有効な)アドレスは入ってない。

435 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 12:59:11 ]
あれ?
アドレス表示しても6桁なんだけど…
なんで?

436 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 12:59:55 ]
a=12だってできる。

437 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 13:00:32 ]
>>435
上が0なんだろ・・・

438 名前:435 mailto:sage [2007/04/05(木) 13:02:00 ]
#include <stdio.h>

int main()
{
int a = 1 ;

printf ( "%x" , &a ) ;

return 0 ;
}

で実行すると

12fed4

どういうこと?

439 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 13:02:42 ]
>>437
なるほど^^
お騒がせしました



440 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 13:04:32 ]
>>432
そういうC言語の仕様。
「char型の配列はダブルクォーテーションで囲む文字列(これを文字列リテラルと言う)で初期化できる」
っていうルールがあるの。ただおまいはその書き込みから色々誤解してそうなフシがあるから注記しとくと

・初期化が無い宣言の時点ではその変数の値は決まってない。
 その変数を格納するためのメモリ領域に元々入ってるデータがそのまま値になる。
・文字列リテラルで出来るのはあくまで初期化であり、代入は出来ない。
 つまり、char c[] = "unko";はできるけどchar c[20]; c = "unko";はダメ。
・ポインタに対しても同じ事が出来るけどそれはchar *cのに対して静的なリテラルのアドレスが代入されたのであって
 ↑のルールとは無関係。だから厳密に言えば↑のレスは的外れになる。



441 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 13:14:58 ]
>>438
0x12fed4
16進表記だよ

442 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 13:22:39 ]
%p ならなんとかしてくれるかもしんない。
あ。 ゼロサプレスしてたっけか?

443 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 13:45:42 ]
なるほどー。
char c[20];
ってやって、初期化しなかった場合に代入したいときは
scanfとかstrcpy使わないとだめなのかな?
c="asdf"はできなくてstrcpy(c,"asdf")はできるんだよね。。。

なんでc="asdf"はだめでstrcpyは良いのかよくわからないけども、まぁいっか

444 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 13:54:28 ]
>>443
char c[20];
char *p=c; cのアドレスをpにコピー
コピーしたのは「アドレス」であってデータそのもの("ABCDE")ではない
このときpには c のアドレスが入っている
次に p="ABCDE";
を実行すると p は"ABCDE"というリテラルの「アドレス」が代入され
cに"ABCDE"がコピーされるわけではない
c(=p)にコピーしたいのなら strcpy(p,"ABCDE"); としなければいけない


445 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 13:54:41 ]
>>443
> なんでc="asdf"はだめでstrcpyは良いのかよくわからないけども、まぁいっか

c="asdf"は、char型の20個の領域にアドレス(="asdf")を代入しているからだめ
strcpyは、char型の20個の領域に文字列asdfをコピーしているから良い

446 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 13:56:06 ]
>>443
Cでは配列間での代入はできない。また、"asdf"は'a'を指すポインタと解釈される。
従って、c = "asdf"は配列へのポインタの代入と言うことになり、当然できない。
どうしても代入したければ、要素を一つずつ代入すればよい。
#そしてそれを、ナル終端文字列専用にしたのがstrcpy()だ。

447 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 13:58:01 ]
c="asdf" ← というか、そもそも、c = で使えない。(cは配列の先頭を表してるってだけ)
strcpy(c,"asdf") ← c(配列の先頭のアドレス)とリテラルのアドレスを渡して、
                  'a','s'・・・を順次入れているだけ。

448 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 14:06:51 ]
>>443
"asdf" は文字列が格納されている先頭メモリ番地
c="asdf" はアドレス値をコピーしようとしている
strcpy(c,"asdf") はアドレスが指すデータをコピーしようとしている

449 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 15:45:32 ]
for (i = 0; i < THREAD_COUNT; i++) {
 /* スレッド生成 */
 if (pthread_create(&thread_id, NULL, threadFunc, (void *)thread_arg) == 0) {
   thread_count++;
 }
}
とやって、THREAD_COUNTの数をいろいろ変えているのですが
ある一定の数以上は、必ず失敗するようになります。
自分の環境では303個めまでのスレッドは作成できますが
それ以上は作成できません。
どこかでスレッドの上限というのは決められているのでしょうか?



450 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 16:32:12 ]
/*
1000以下の素数を求める(第1版)
*/

#include <stdio.h>

int main(void)
{
int i, no;
unsigned long counter = 0;

for (no = 2; no <= 1000; no++) {
for (i = 2; i < no; i++) {
counter++;
if (no % i == 0) /* 割り切れると素数ではない */
break; /* それ以上の繰返しは不要 */
}
if (no == i) /* 最後まで割り切れなかった */
printf("%d\n", no);
}

printf("乗除を行った回数:%lu\n", counter);

return (0);
}
これでnoが3の時二個目のfor分のところのiが<演算子なのに3になるんですか?
3にならなければ3素数なのにprintfで表示されないですよね

451 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 16:42:23 ]
no = 3, i = 2 → 割り切れない
no = 3, i = 3 → i < noを満たさないのでループ終了

no == i なので3は素数

452 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 16:44:38 ]
<これでも
3<3までいくんだ?
<=じゃなくても

453 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 16:45:38 ]
3になったからループを抜けるわけで

454 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 16:47:32 ]
ループの流れ
i = 2
i < no の判定
処理
i++
i < no の判定
処理
i++
i < no の判定
処理
i++




455 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 16:48:36 ]
>>450=452 ...か?
妥当なインデント付けて、最初のforループの中を一行ずつ追っていけば
何となく分かるかもね。

456 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 17:04:32 ]
>>452
そうじゃなくて
no=3 のとき iのループは3になったら抜けるわけでループ内では2までしか処理されない
ループを抜けているのはiが3だからループのあとiは3になっている


457 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 17:46:40 ]
printf()が負値を返すのはエラーが発生した場合とのことですが
具体的にエラーが発生するのってどんな状況のときなんですかね?

458 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 17:59:47 ]
>>457
厳密には、printf()は出力に失敗するとEOFを返す。
リダイレクト先の出力がなんらかの制限のあるデバイスにでも振り向けられていなければ、
一般的には出力は必ず成功する。

459 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 18:44:50 ]
てか画面以外は失敗する可能性あるよね。



460 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 18:58:02 ]
>>459
画面って何?
/dev/consoleのこと? 必ずしも画面とは限らないのだけど……

461 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 19:03:19 ]
要は、下位のwriteが失敗するかどうかが大体のキモだね。
printf(NULL)みたいなどうしようもないようなものをのぞけば。

462 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 19:32:07 ]
>>457
普通にファイルに書いてたって空き領域がなくなることはあるだろうし
リムーバブルなメディアなら途中で引っこ抜かれるかも試練。

463 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 19:40:07 ]
実は、バッファリングされているから必ずしもエラーにならない罠。

464 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 19:46:53 ]
必ずしもの使い方が間違っている希ガス

465 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 19:47:44 ]
463ではないが、必ずしもエラーになるとは限らない、かな?

466 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 19:50:25 ]
容量オーバーした瞬間にエラーにならない可能性はあるが、
失敗する可能性は十分あり得るということでFA?

467 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 21:26:44 ]
すみません。前回はありがとうございます。
また質問させていただきます。
ttp://www.uploda.org/uporg763897.zip.html
スパゲティですみません。
game3.hの構造体sceneDataなんですが変数dFFがメンバじゃないと出るんですが、
何ででしょうか?
要素が多すぎるんでしょうか?
pはsageです。

468 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 21:31:37 ]
>>467
grep で検索しても dFF はどこにも宣言されて無いようだ

469 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 21:38:51 ]
整数mからnまでの和を、公式n(n+1)/2を使わずに求めるプログラム作ったんですけど

#include <stdio.h>

int main(void){
int m,n,i,ans=0;
printf("数値入力>");scanf("%d",&m);
printf("数値入力>");scanf("%d",&n);

if(m<=n){
for(i=m;i<=n;i++){
ans=ans+i;
}
printf("%d",ans);
}

else {
for(i=n;i<=m;i++){
ans=ans+i;
}
printf("%d",ans);
}
return 0;
}

このプログラムって、答えをansという変数に代入してるんですが
ansを使わずに求めるにはどうしたらいいんですかね



470 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 21:42:29 ]
mかnに加算していけば?

471 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 22:01:58 ]
>>469
再帰処理で

#include <stdio.h>
int mysum(int a,int max)
{
if(max<=a) return a;
return mysum(a+1,max)+a;
}

int main(void){
int m;
printf("数値入力>");scanf("%d",&m);
printf("数値入力>");scanf("%d",&n);

if(m<=n){
printf("m=%d\n",mysum(m,n));
}

else {
printf("n=%d\n",mysum(n,m));
}
return 0;
}



472 名前:471 mailto:sage [2007/04/05(木) 22:03:22 ]
あっ
printf("m=%d\n",mysum(m,n));
printf("n=%d\n",mysum(n,m));

m= と n= 消しといて

473 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 22:17:13 ]
>>469
ansを思いっきり使ってるので無視してくれて構わないが簡略した
int MtoN_Add(int m, int n)
{
int i = (m>n)?n:m, ans = 0;
while( (m>n)?m:n >= i ) ans += i++;
return ans;
}


474 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 22:38:02 ]
#include <stdio.h>

int main(void){
int m,n,i;
printf("数値入力>");scanf("%d",&m);
printf("数値入力>");scanf("%d",&n);

if(m>n) m^=n,n^=m,m^=n;
for(i=m+1;i<=n;i++) m+=i;
printf("%d",m);

return 0;
}

475 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 23:07:24 ]
ハッカーの楽しみに載ってるやつかww

476 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 23:15:05 ]
m^=n,n^=m,m^=n
これでスワップが出来るとは知らなんだ。勉強になったぜ

477 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 23:20:22 ]
勉強するのはいいが、実用性はないに等しいから使わないようにね。

478 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 23:21:15 ]
www.dd.iij4u.or.jp/~okuyamak/Information/xor_fixed_swapping.html
ja.wikipedia.org/wiki/XOR%E4%BA%A4%E6%8F%9B%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0

479 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 23:42:01 ]
do while文ってつかわないほうがいいの?



480 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 23:49:01 ]
while文よりは利用機会は少ないと思うけど、
使わないほうがいいってことはない。

ただし、do while文の最後を
}
while (条件);
のようにwhileが先頭に来るように改行するのは好ましくない。
こう書いてしまうと、一軒、新たに while文が始まったように見
えてしまう。
} while (条件);
とするのがよい。



481 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 00:20:44 ]
サイズの指定たとえば#define BUF 256とかを
複数のファイルで共有するにはどうすればいいの?
ヘッダに書いちゃっていいものなの?
優しく教えてくれる東ちづる似のお姉さん回答お願いします。






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

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

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