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


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

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



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

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

教えて欲しいのではなく丸投げしたいならこちらへ
C/C++の宿題を片付けます 99代目
pc11.2ch.net/test/read.cgi/tech/1194262698/

448 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 07:38:50 ]
以前にも同じような質問してきた奴が居たから俺はわかった

449 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 08:23:39 ]
unsigned A; の下位 B ビット以外が0であることを
判別する関数をつくりなさい。(10点)


450 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 08:30:08 ]
int f(unsigned A, int B) { return !(A >> B); }

451 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 08:38:36 ]
bool func(unsigned A, unsigned B) {return A >= (1 << B);}

452 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 08:44:45 ]
後出しなのに・・・

453 名前:デフォルトの名無しさん [2007/11/18(日) 09:15:50 ]
すみません、まだC初めて一週間足らずの初心者ですが質問させてください。

課題で
void printIPAddress( unsigned int address )
{
printf("%d.%d.%d.%d",
(address & 『 @ 』 ) >> 24,
(address & 『 A 』 ) >> 16,
(address & 『 B 』 ) >> 8,
(address & 『 C 』 ));
}
ア.0x000000ff イ.0x0000ff00 ウ.0x00ff0000 エ.0xff000000

とありまして、@〜Cにア〜エから適切なものを選択して関数を完成させるというものです。
ネットなどで色々検索して、答はたぶん@:エ A:ウ B:イ C:アじゃないかと思ってるのですが
どうしてそれが正解?なのかがわかりません。(そもそも正解かどうかすらわかりません)

考え方としては例えば@:エなら0xff000000は11111111 00000000 00000000 00000000で
>>24というのが右に24bit(3byte)移動するという意味なんだろうか?と思ってるんですが
3byte移動したら11111111が一番→にきて後ろについてたたくさんの0は前に行くんでしょうか?
それがどうして正解?なんでしょうか?他のもの(例えば0x000000ffとか)が入ってはいけないんでしょうか?
&を使ってるという事は論理積を理解できてないとこの問題は理解できないんだと思うのですが
本や解説を見てる時はふんふんなるほどと思っても実際こうやって問題にされると全くわからなくてお手上げです…

長文すみませんがどなたかご教授お願いします。
もしスレチならどこか該当スレに誘導お願いします。
(最初ふらっとCスレに書き込もうとしたら1000スレ達成しちゃってました…)

454 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 09:27:51 ]
>>453
論理演算とビットシフトでググればわかりそうなもんだが…

&はand演算だから、左右どちらも1なら真=1になる。そうでなければ0になる。
例えば、11001100 & 11000000の結果は11000000になる。
これを右に6ビットシフトすれば00000011が得られる。

455 名前:デフォルトの名無しさん [2007/11/18(日) 09:38:37 ]
アドレスは、
11100010  上位ビット
01100011  
00100100  
11011100  下位ビット

のように格納されている

0ビットシフトさせてff = 11111111とand取れば下位ビットが出てくる
8ビットシフトさせてff = 11111111とand取れば下から二つ目が出てくる

456 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 09:42:04 ]
>>452
インライン展開するときに、Bが定数なら>451の方が効率がよくなる。



457 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 09:49:08 ]
効率とか言うレベルじゃなくて、単純に間違ってるだけだろw

458 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 10:03:48 ]
11000000 10101000 00000001 00000001 (3232235777 = 192.168.101.1)
11111111 00000000 00000000 00000000 (4278190080 = 0xff000000)
----------------------------------
11000000 00000000 00000000 00000000 (3221225472 = and後)
00000000 00000000 00000000 11000000 (192 = 24ビット右シフト後)

ビットシフトした後には0が入る。つまり1ビットシフトはx2か/2と同等。
これで理解できなければ諦めてくれ。

459 名前:453 mailto:sage [2007/11/18(日) 11:44:35 ]
なるほどっ!
すごくわかりやすい解説ありがとうございます。
ビットシフト自体は皆さんのご説明ですぐに理解できたのですが

「だからどうして@:エ、A:ウ・・・・・になるの?」というところが
なかなか理解できずレスに時間かかりました><

ただ少しばかり>>458さんに確認も含めた質問があるのですが
もしご覧になってたらお時間あればレスいただけませんか?
一行目の(192.168,101.1)というIPアドレスが最初はどこから出てきたのかさっぱり???だったのですが
これはわかりやすく例をあげるために適当?に書いてくれたのかな?と解釈しました。それでよろしいでしょうか?
あと、同じくカッコの中の3232235777や4278190080、3221225472という数字がイマイチピンとこないのですが
これはそれぞれ110000001010100000000010000001という2進法の数値を10進法で現してるものでしょうか?
(ググレ!でしたらすみません・・・ビット換算表はぐぐって今見てるのですが数字が大きすぎて・・・orz)

結局、最初の質問であった「どうして@:エA:ウ・・・になるのか?」という質問についてはやっと理解できました。
みなさんご親切にどうもありがとうございました^^


460 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 12:08:51 ]
>>459
ああ、スマン間違ってる。458の2進数表記だと192.168.1.1になるね。

IPアドレス自体は例として適当に書いただけ。
数字の部分は1バイトずつにそれぞれ192、168、1、1と当てはめたものを
4バイトのunsigned int型変数addressの10進数として表現したもの。

ちなみにこの処理は欲しい部分を切り取るのによく使われる方法で「マスク」等と呼ばれたりする。
まあ頑張ってや〜。

461 名前:デフォルトの名無しさん [2007/11/18(日) 12:51:48 ]
C言語によるリスト構造について質問させてください。

連結リストに末尾からデータを蓄えて指定した数字を削除し
削除後のリストを画面に表示するプログラムを作りたいのですが、
手元にある参考書を見たり、ネットで調べても分らなかったので
どなたかご教授お願いします。

462 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 12:58:05 ]
www.google.co.jp/search?q=%E3%81%94%E6%95%99%E6%8E%88
ネットで調べてわからなかったらここで聞いてもわからないんじゃない?

まずは指定した数字が何番目にあるか判定するプログラムを作ってみて、
それができたら一つ前のデータと一つ後ろのデータを連結するように書いてみればいいんじゃない?
宿題スレにいって丸投げするのが一番早いと思うけど。

463 名前:デフォルトの名無しさん [2007/11/18(日) 13:04:03 ]
>>462
ありがとうございます。宿題スレいってみます。

464 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 15:18:47 ]
www.uploda.org/uporg1118116.txt.html
こういうプログラムを作ったのですが
これに「平均点順に並び替えて表示する」という操作を加えたいのですがよくわかりません。
お願いします。

465 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 17:31:47 ]
>>464
そのプログラムを自分で作れるなら出来ると思うけな

466 名前:459 mailto:sage [2007/11/18(日) 17:32:31 ]
>>460さん、レスありがとうございました^^
マスクという処理方法については
名前だけ知ってたものの具体的にどういうものかまだ知りませんでした。
数字についてはまだピンときてないので引き続き2進数10進数16進数についても色々勉強してみます。


また何かわからない事ありましたら皆さんよろしくお願いします!



467 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 18:05:59 ]
>>465
よくわからないでございます

468 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 18:10:51 ]
>>467
普通のソートと同じ

469 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 18:12:50 ]
そうなの?
ちょっとやってみる。thx

470 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 18:40:46 ]
n番目のcellのポインタを呼び出す関数(*cell getcell(n)とか)でも作って、
バブルソートで比較しては入れ替えを繰り返せばいいんじゃないか。
for(i=0;i<MAX-1;i++)for(j=0;j<i;j++){
x=getcell(j);
y=getcell(j+1);
if(x->heikin > y->heikin){xとyの入れ替え}
}
cellごと入れ替えるにはもう一個前にもアクセスせんといかんから、
cell内の値だけ入れ替えるのが楽なのかなぁ。

471 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 18:46:08 ]
その変数がnanかそうでないかを判断するにはどうすればいいですか?

472 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 19:24:18 ]
有名なイディオムx != x(IEEE 754なら確実;あほなコンパイラでない限り)
C99のisnan
一部の独自関数_isnan

473 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 21:18:54 ]
NGワード:ご教授

474 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 16:36:19 ]
ANSI-Cについて質問です。

#include <stdio.h>
int main(int argc, char *argv[])
{
int x = 10;
printf("x=%d¥n", x);
char *s = "foo"; /** should be error? **/
printf("s=%s¥n", s);
return 0;
}

というコードを gcc -Wall -ansi hoge.c としてコンパイルすると何のエラーもなくコンパイルできてしまったんですけど、
Cでは文のあとに変数宣言できましたっけ?できなかったと思うのですが。
今までダミーのブロックを使ってたけど、いらないということでしょうか。
なおGCCは4.0.1です。


475 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 16:46:34 ]
>>474
従来のCではダメ
C99ならOK

476 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 17:21:09 ]
>>475
なるほど!さんくす
ちなみによく知られているコンパイラのうち、C99に対応していないものはありますか。
変数宣言が先頭じゃなくていいのは大変便利なのでぜひ使いたいんですけど、世の中の対応状況次第ではやめとこうと思います。
調べてみたらGCCはver3から対応しているみたいでした。今のGCCはver4が主流だと思うので、GCCは大丈夫ですね。



477 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 19:20:14 ]
途中宣言はキモイから使いたくないな。

478 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 19:24:47 ]
途中宣言ってわけわからなくなったりしないのかな?

479 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 19:32:23 ]
>>476
Visual C++は対応していない。
世間一般ではGCCのようなC99に対応しているCコンパイラのほうが珍しい。

ブロック途中での変数宣言はC++だと当然の機能なんだけどね。

480 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 19:41:20 ]
自己参照構造体がイミフ
最初に用意したポインタの示す値をNULL(ストッパーの役割)にして
んで次に用意したポインタの示す構造体の内部の自己参照ポインタには、その直前にあった構造体のアドレスを代入して。
繰り返すごとにどんどん構造体が繋がるってのはわかるんだけど、
例えば先頭から10個目の構造体内部を書き換えたい!って場合はどうすりゃいいの?
予め10個目ってわかるように変数で振っとけばいいの?

481 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 19:45:40 ]
>>480
構造体を先頭から辿るときに、いま何個目かわかるように、その辿った回数を数えとけばいい

482 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 19:48:20 ]
結局ソレが一番無難ですかー。
習ってたものでは一つ一つに入力の際でも、内部処理としての変数でもカウントアップさせるようなものを用意して、
その番号に直。
か、または、たどる時に何個かこっちが指定するって感じですか・・・。
難しそうだ('A`

483 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 20:10:58 ]
つまり、何番目にアクセスしたいという要求が頻繁にあるときには、
そういう線形リストは向いていない。配列が向いている。

484 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 20:11:35 ]
>>480
自己参照構造体というか、線形リストのことでしょ。

485 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 20:49:54 ]
なるほど・・・勉強になります。

486 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 23:50:37 ]
>>479
狭い世間なんだね。



487 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 23:55:07 ]
なんか妄想してる奴がいるな

488 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 23:56:02 ]
構造体のメンバのアドレスって構造体の先頭のアドレスから
求められるものなの?

489 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 23:56:54 ]
>>478
途中宣言のほうが格段に読みやすい。

490 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 00:00:33 ]
関数の長さによるだろ。

491 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 00:03:41 ]
関数の長さによらず、途中宣言のほうが読みやすい。

492 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 00:10:17 ]
こんばんは
大学の課題のことで質問です。
文字列をクイックソートで並ぶかえるプログラムなのですが、エラーが出来ます。
void your_sort(char *s[NS][WC]) {

int pivot;
int l_hold,r_hold;
int x=0;
int left = 0;
int right = WC-1;
l_hold = left;
r_hold = right;
pivot = (left+right)/2;
while(x<WC){

while(left < right)
{
while(strcmp(&s[x][right],&s[x][pivot])>0)
right--;
if(left =right)
{
s[x][left] = s[x][right];
left++;
}


493 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 00:12:09 ]
>>492
コンパイラの警告は無視しないできちんと対処しましょう。
もしそのコードで警告が出ないようなら、コンパイラのオプションを見直しましょう。
もし警告レベルを換えても警告が出ないようなら、そんなコンパイラは投げ捨てましょう。

494 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 00:12:23 ]
while((strcmp( &s[x][pivot],&s[x][left])<0) &&(left <right))
right--;
if(left != right)
{
s[x][left] = s[x][right];
left++;
}
while((strcmp( &s[x][pivot], &s[x][left])>0)&&(left < right))
left++;
if(left != right)
{
s[x][right] = s[x][left];
right--;

}
left = l_hold;
right = r_hold;
if(left < pivot)
your_sort(s[x][pivot-1]);
if(right > pivot)
your_sort(s[x]pivot+1,right);
}
x++;
}
エラー:cpp(39) : error C2664: 'strcmp' : 1 番目の引数を 'char **__w64 ' から 'const char *' に変換できません。(新しい機能 ; ヘルプを参照)
指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
どこがおかしいのか教えて下さい

495 名前:宿題スレへ逝け mailto:sage [2007/11/20(火) 00:16:14 ]
>どこがおかしいのか教えて下さい
あんたの頭。

496 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 00:26:48 ]
>>474
今更っぽいけど、ちょい補足。
-ansiはc89相当だけど、gcc拡張機能として途中の宣言が出来るので何も言われない。
厳密にc89を適応したければ-pedanticか-pedantic-errorsを-ansiと一緒に指定する。

でもコレやると//でのコメントとかですら怒られるけどな。



497 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 00:32:57 ]
>>495
いつもならこういう煽りは見ていて腹立たしくなるが今回は同意してしまった。

498 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 08:15:27 ]
>>494
>どこがおかしいのか教えて下さい

strcmp の 1 番目の引数がおかしいって書いてあるじゃん

499 名前:デフォルトの名無しさん [2007/11/20(火) 15:25:31 ]
bool 型同士の比較演算の結果はどうなるのでしょうか?
true / false それぞれが何らかの整数に変換されてから
比較されるのでしょうか?

500 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 16:09:59 ]
>>499
trueは非0、falseは0としてコンパイラが評価する。

501 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 16:14:20 ]
>>499
C言語にbool型なんて無い。

502 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 16:40:31 ]
>>501
c99はcではないとでも?

503 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 16:50:14 ]
それ_Boolのtypedef。
1と0を保持する整数型で、比較演算では結局int型に格上げされるはず。

504 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 17:25:48 ]
文字列0.051/0.056/0.095/0.010 msから
2番目の要素、上の文字列だと0.056を文字列検索かけてうまくとる方法教えてください

505 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 17:28:52 ]
>>504
これでいいのかな?
#include <stdio.h>

int main(void){
char str[]="文字列0.051/0.056/0.095/0.010 msから";
char second_value[100];

sscanf(str, "%*[^/]/%[^/]", second_value);
puts(second_value);

return 0;
}

506 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 17:41:44 ]
>>505
ありがとう、うまくいきました。
私が書いた正規表現が間違ってたみたいです。




507 名前:476 mailto:sage [2007/11/20(火) 21:55:54 ]
>>479
遅れましたが、情報サンクスです。
VisualC++が対応していないというのは驚きですね。C++とみなしてコンパイルすればいいんだろうけど。
>>496
細かい情報ありがとう。-ansiで厳密なANSI準拠にならないというのはなんか間違ってる気がする。UIとして。


508 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 01:12:45 ]
>厳密なANSI準拠
ここに矛盾を感じない人には丁度いいのでは?

509 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 10:18:11 ]
もうテンプレに、このスレはC89用って書いとけよ

510 名前:デフォルトの名無しさん [2007/11/21(水) 10:26:43 ]
C90 じゃなくて?

511 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 10:30:37 ]
うん

512 名前:デフォルトの名無しさん [2007/11/21(水) 10:38:37 ]
1年は365日ですけど、それを1月は31日、2月は28日、3月は31日・・・・12月は31日っいう感じに書き換えるプログラムを作りたいんですがどうすればいいでしょうか?

513 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 10:42:06 ]
お前にはまだ早い

514 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 10:44:07 ]
>>512
書き換えるの意味がわからん。
122日 -> 5月2日
という感じ?

515 名前:デフォルトの名無しさん [2007/11/21(水) 10:45:02 ]
>>514
そうです。

516 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 10:47:46 ]
年はどうするの?
うるう年を考慮するのか、とか



517 名前:デフォルトの名無しさん [2007/11/21(水) 10:50:25 ]
今年の月日です。

518 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 10:59:47 ]
>>517
自分で月数の配列作って計算してもいいけど、
標準関数使うなら、mktime で 2007年1月122日を設定(122はtm_mdayに入れる))すれば
tm_mon に0から始まる月、tm_mdayに1から始まる日が入るはず。

519 名前:デフォルトの名無しさん [2007/11/21(水) 11:20:43 ]
>>518
ありがとうございます!
…が、初心者の俺には難しいようでした。まったくわかりません。
お手数おかけしてすみませんでした。

520 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 11:27:40 ]
void calendar(int day){
if(day > 0 && day <= 365){
int data[] = {31,28,31,30,31,30,31,31,30,31,30,31};
for(int i=0;i<12;i++){
if((day-=data[i])<= 0){
printf("%d月%d日\n",i+1,day+data[i]);
return;
}
}
}
else
printf("1〜365の間で入力してください。\n");
}

521 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 11:32:06 ]
>>519
struct tm tm = {0};
tm.tm_year = 2007 - 1900;
tm.tm_mday = 122;
time_t t = mktime(&tm);

printf("%d月%d日", tm_mon + 1, tm.tm_mday);

522 名前:デフォルトの名無しさん [2007/11/21(水) 12:38:46 ]
#include <stdio.h>
int main(void)
{ char str[256];
char s[] = "This is a pen. That is an apple.";
int i,j,k,checker;
printf("This is a pen. That is an apple.\n\n");
gets(str);
for(j=0;j<256;j++)
{for(i=j,k=0;str[k]!='\0';k++,i++)
{if(str[k]==s[i])
{checker=1;
break;}
else
{checker=0;}}}
if(checker==1)
{printf("OK!その文字列は含まれています。。\n");}
else
{
printf("NG!その文字列は含まれていません。\n");}}

初期化した文字列(This is~)と, キーボードから入力した文字列 str に対し, 文字列中に str が出現するかどうかを判定して表示するプログラムを作成したいのですが、
なかなかうまくいきません。最初のifelse文においてのreturnが変だと思うのですが。
例えば This→OK That→OK is→OK apple→OK pple→OK…


523 名前:デフォルトの名無しさん [2007/11/21(水) 12:43:41 ]
>>522
#include <string.h>
char *strstr(const char *s1, const char *s2);

www9.plala.or.jp/sgwr-t/lib/strstr.html
これじゃ駄目なの?



524 名前:デフォルトの名無しさん [2007/11/21(水) 12:45:39 ]
>>523
申し訳ないです。
stiring.hを使わず、for文でループして検索するっていう条件付です;


525 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 12:51:49 ]
>>522
この前同じようなの見かけた
pc11.2ch.net/test/read.cgi/tech/1194016813/389-

526 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 12:54:12 ]
>>522
×s[] について検索開始位置 (j=0 ; j<256; j++)とあるが、s[j] != '\0'でで辞めるべき
×1文字でも一致していると、処理を抜けてしまう
→1文字でも不一致で処理を抜けるべき



527 名前:526 mailto:sage [2007/11/21(水) 13:01:08 ]
あと、2段目のforループで一致判定出たら、1段目のforループ抜けるのも
忘れずに

528 名前:デフォルトの名無しさん [2007/11/21(水) 13:04:16 ]
>>526
ってことは根本的には間違ってるんですかね?
数文でもいいので例をあげてもらえればうれしいです。

529 名前:デフォルトの名無しさん [2007/11/21(水) 13:07:14 ]
>>527
あっ、なるほど!
サンクスです。

530 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 13:08:29 ]
>>522
なるべく原型を留めたつもり。

char *sp,*strp,*bsp;
for(sp = s; *sp!='\0';sp++){
for(strp = str, bsp=sp; *strp!='\0' && bsp != '\0';strp++,bsp++){
if(*strp == *bsp)
checker = 1;
else{
checker = 0;
break;
}
}
if(checker)
break;
}


531 名前:デフォルトの名無しさん [2007/11/21(水) 13:12:26 ]
やばいw
少しわかったつもりですが、forで混乱してるかも…
>>527のヒントがすごいわかり易いんですけど、こっからつまってます。

532 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 13:21:12 ]
つーかchekerは0で初期化しといて、elseで代入はやめなよ

533 名前:デフォルトの名無しさん [2007/11/21(水) 13:25:37 ]
>>532なるほど

教えてくんでごめんなさい


534 名前:デフォルトの名無しさん [2007/11/21(水) 15:07:20 ]
整数型の数字を一文字ごとに分割したいので
sprintf(b,"%x",a);
としたのですが
printf("%s",b[0]);
としてみたところセグメントエラーが出てしまいます
どうしてでしょうか?
aはint型変数です

535 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 15:11:50 ]
bの型は?
あと%xは16進数、%sは文字列だがいいのか?
b[0]がchar型なら、%cだろ?

536 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 15:12:17 ]
bがchar*として考えると,printf("%s",b[0]);はprintf("%c",b[0]);



537 名前:デフォルトの名無しさん [2007/11/21(水) 15:29:47 ]
>>535>>536
sとcは違うんですねw
ありがとうございました

538 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 16:36:35 ]
同じだと思ってたのか

539 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 16:56:03 ]
>>536
ウソツケ

printf("%s",b[0])
はb[0]の値をアドレスとする番地から始まるゼロ終端文字列を表示し
printf("%c",b[0])
はb[0]の値を文字コードとする文字を表示する

540 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 17:07:12 ]
質問から読んで書いてるのだろうか。

541 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 17:08:37 ]
>>539
後者に直せって意味で書いた

542 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 17:13:21 ]
何コイツ

543 名前:539 mailto:sage [2007/11/21(水) 17:40:45 ]
>>541
スマン
イコールの意味だと勘違いしてた

544 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 17:53:09 ]
m9(^Д

545 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 18:49:06 ]
borlandからVisualStudio2005に変えたんですが、
VSだとexeファイルってできないんですかね


546 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 18:51:05 ]
なぜそう思った?



547 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 19:24:48 ]
debug フォルダの中にできてるよ。

548 名前:デフォルトの名無しさん [2007/11/21(水) 21:23:29 ]
初心者です。
return 0
がどういう意味なのかがどうしても分かりません。
return 0
があると、コンピュータは何をするのでしょうか?






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

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

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