952 :
923:2006/11/08(水) 22:31:39
>949 なるほど、このほうがいいですね・・
ありがとうございました。
>>950 printfとscanf合わせて入力用関数とか作ったりしない?
system("format c:");
955 :
デフォルトの名無しさん:2006/11/08(水) 22:40:02
int及び2次元配列a[0][0]みたいなものは
それぞれいくらのメモリ領域を確保するのでしょうか?
sizeof関数で見れたような気がするのですが
現在C言語が動く環境にないのでお願いしたいと思いますorz
956 :
デフォルトの名無しさん:2006/11/08(水) 22:41:13
>>952 このfuncって足すだけなら演算子でよいと思うけど
関数にしろっていうお題なの?
957 :
デフォルトの名無しさん:2006/11/08(水) 22:41:44
>>956 だと思われ
>>955 俺の環境ではintが4バイト
配列のアドレスは
a[0][0] a[0][1] a[0][2] … a[0][n] a[1][0] a[1][1] … a[1][n] a[2][0] …
という感じで、型の大きさ分ずつ番地が増えていく
959 :
955:2006/11/08(水) 22:49:39
>>957 ご回答ありがとうございます。
ちなみに問題は配列データの計算時のキャッシュ-メモリ間の
ページフォルト回数を求めるようなもので、ハードウェアに関するものです。
「ブロックサイズは4語。intの大きさを1語とする」という一文だけあったのですが、
それではつまり具体的なサイズはともかくintの何倍かということは言えるのでしょうか?
>>959 問題文に明記がないならそうとらえていいと思うぞ
961 :
960:2006/11/08(水) 23:05:03
>>959 >ブロックサイズは4語。intの大きさを1語とする
というか1ブロック4語
int 4つ分と明記されてるではないか
(intの4倍のサイズで1ブロック)
962 :
955:2006/11/08(水) 23:14:02
963 :
960:2006/11/08(水) 23:25:11
>>962 >ブロックは1度に扱う量であり
そういう意味だよ
つまり一度に扱う量が1ブロック(int 4つ分)ってこと
でメモリ領域は int a[n][n] なら n×n ×sizeof(int) の連続領域が割り当てられる
>>962 たぶん連続(4バイトならデータは連続だがアドレスは4刻み)
a[0][0]もa[n][m]も型が同じならサイズも同じ
つか、問題文イミフwwwwこんなんわかんねwwwww
965 :
960:2006/11/08(水) 23:32:24
>>962 たぶん
>>958が言いたいのは
a[0][0] a[0][1] a[0][2] … a[0][n] a[1][0] a[1][1] … a[1][n] a[2][0] …
連続した領域がこの順で割り当てられてるということ
先頭番地が a[0][0] (アドレス a + 4(intサイズ分)×0 ) ここで 次が a[0][1](アドレス a + 4×1 )、 a[0][2](アドレス a + 4×2 )、・・・・・ と続く
すいません。わからないので教えてください。
文字列に "(” と ")" は\のエスケープ文字は必要ないですよね。
以下の例は、正しいでしょうか。
例:
char strings[] ="123(456)789";
さすがに試せってw
968 :
960:2006/11/08(水) 23:41:20
>>966 正しいが試そうぜ
万が一って事もあるじゃんか
969 :
955:2006/11/08(水) 23:42:12
>>963-965 なんかよく分かりました。そういやa[][]も今回はintですよねorz
というか適当に、intと同じサイズにしたれやと思って既に進めていたのでこれで安心しました。
ありがとうございました。
>>967 >>968 試したら、問題なく動作しています。どこかに書き物があれば教えていただきたかったです。
質問させていただきます。
今番号と名前を作成して、3件分データを入力したあとにデータ表示をするプログラムを作成しています。
その際、すでに入力された番号が入力された場合エラーとして再入力をさせたいのですが上手くいきません。
どなたか教えてくださいm(_ _)m
972 :
923:2006/11/08(水) 23:56:33
>956
はい、funcという関数を作るという指定です。
聞く前に試せ。これ常識
オナる前に女児ぱんつ履く。これ異常
974 :
960:2006/11/08(水) 23:57:11
>>970 書き物って何のこと?
>>971 >作成しています
で、自分の作ったヤツは?
なぜアップしない?
>>971 ソース晒せ
とりあえず、番号が特殊な書式ではない、ただの整数なら配列(-1とかで初期化)にでもいれて全部比較でもしろ
>>971 具体的に分からないのはどこ?アルゴリズムから?
どれぐらい形になってるの?
>>974 ソースを晒したいのですがPCが壊れてしまって携帯からの書き込みなんですm(_ _)m
明日学校で作成するので、番号の重複エラーの処理のヒントを教えていただけないでしょうか。
979 :
960:2006/11/09(木) 00:10:12
>>976 申し訳ないがそんな初歩のところから説明してるサイトは知らない
本屋さんへゴー!
980 :
デフォルトの名無しさん:2006/11/09(木) 00:12:22
こんばんは
char *str;
int i=100;
sprintf(str,"%d",i);
で実行したところstrには100という文字列が格納されました。
しかし、上記のstrはstr[100]などと
明示的に領域を確保したほうがよいのでしょうか?
>>977 一応番号が重複するエラー以外は完成しています。
同じ番号を入力した場合エラーを出す処理のイメージがなかなかわかなくて…
984 :
デフォルトの名無しさん:2006/11/09(木) 00:17:45
>>980 確保しないとメモリのどっかに上書きされると思うけど・・・
それが大事なデータだったり実行中のプログラムだったりしないことを祈る。
985 :
980:2006/11/09(木) 00:17:59
>>982 ありがとうございます。
できれば理由も教えていただけませんでしょうか?
986 :
デフォルトの名無しさん:2006/11/09(木) 00:27:58
>>981 返答ありがとうございます。
PCを直してから出直してきますm(_ _)m
>>985 char *str;
int i=100;
sprintf(str,"%d",i);
printf("%d",i);
をやって味噌。
988 :
987:2006/11/09(木) 00:31:21
違うわ。間違えた。
991 :
980:2006/11/09(木) 00:42:39
>>984 >>990 なるほど〜
うまくいったのはたまたまだったんですね。あぶないあぶない
聞いてよかったです。ありがとうございました〜
よく構造体とか文字配列を宣言したときに
memsetとかでヌル初期化してるけどあれってやったほうがいいんですか?
993 :
955:2006/11/09(木) 00:51:13
>>983 こんなんでどうだろ?
超ド素人が15分かけて作ったので動作の安全は保証しないw
int i = 0;
int j = 1;
do{scanf("%d",x); //番号を入力
for(;i <10;i++){ //とりあえず10件の適合まで対応
if(nyuuryoku[i].number == x){ //番号は構造体に入ってると勝手に決めたw
printf("既に番号がある\n");
break;} //合致してしまったらやり直し
else if(i == 9)
j = 0; //最後まで合致しなかったらwhile文からの脱出キーj=0をプレゼント
}
}while(j);
memsetは使ってないけどオレはやるようにしてる
特に意味不明なほどメンバが多い構造体とかバッファとか
それでも人によると思う
ところで、
HOGE hoge = {0};
みたいな初期化ってCでも使えたっけ?
使えるならこっちの方がいいと思うが
995 :
960:2006/11/09(木) 00:55:49
>>992 好き好きで
「予期しない値」が困る場合に使えばいい
たとえばWinAPIのリターン用に構造体を渡すときなどは 0 で初期化する必要があったりする
>>992 用途による
初期化されてないのがポインタだと
別のところで使うときに
NULLとの比較ではじけないので
不正なデータにアクセスしそう
>>992 気持ちの問題。憂鬱なときは避ける。
デバッガで変数見るときに見栄えがいい。
冗談はさておいても、
メモリコピーでヌル文字を最後に付け加えておく記述をし忘れたときなんかのバグ抑止になる。
998 :
960:2006/11/09(木) 00:58:37
最後の最後まで&抜けとは
1000なら再びC言語ブーム
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。