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


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

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



1 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 20:41:54 ]
C言語の*入門者*向け解説スレッドです。
初心者、初級者の方は他の質問スレのほうが良いかもしれません。

教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 130代目
pc12.2ch.net/test/read.cgi/tech/1250204272/

・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
  # サイズが大きい場合は宿題スレのアップローダ等を利用してください
・開発環境や動作環境も晒すと答えが早いかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

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

過去スレ
makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000

445 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 13:14:09 ]
classのprivateにしたら、そのクラス以外アクセスできないと聞いていたが
ポインタでメンバーにアクセスできんぞ、いいのかこれ

446 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 13:18:32 ]
設計上良いか悪いかはあるけど、仕様の上では問題ない

447 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 13:18:41 ]
>>445
なんか無理やりなことをしないとアクセスできないだろ?
それにここ、Cのスレだし。

448 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 13:27:48 ]
ぐぐってみたらコンパイル前にしかprivate,publicは影響しないんだな

449 名前:447 mailto:sage [2009/10/17(土) 13:32:07 ]
よく考えたら、無理やりじゃなくても、メンバ変数のポインタを外にだすメンバ関数があればそうなるのか。

メンバ変数のナマのハンドルやら外にだすなってのは、オブジェクト指向のお作法本によく書いてあるな。

450 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 14:00:00 ]
>>439
int main(void)
{
short x;
short y;
for(x=-32768;x<=32767;x++)
{
y=(x+0x4000)>>15;
printf("x=%d y=%d\n",x,y);
}
return 0;
}

451 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 14:03:37 ]
double型の変数にビットシフトはできないですか?

値を2倍、4倍,8倍としたいんですが

452 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 14:26:32 ]
円周率を出力するプログラムpi.exeがあったとして、これを一度pi.datに出力して

double pi =
#include "pi.dat"
;

とすればpiには円周率が入りますが、一度ファイルに出力をせずにそのままほかのプログラムの出力結果をincludeするといったことはできないでしょうか?

453 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 14:27:56 ]
指数部があるからね



454 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 14:34:55 ]
>>452
doubleに入れるくらいの桁数なら、ソースに直書きでいいんじゃね?

455 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 14:36:22 ]
円周率ってmath.hで定義されてなかったけ

456 名前:452 mailto:sage [2009/10/17(土) 14:38:24 ]
>>454
すいません円周率は例で、ファイル経由せずにプログラムの出力をincludeする方法が知りたいんです

457 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 14:38:44 ]
# define M_PI           3.14159265358979323846  /* pi */

458 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 14:41:34 ]
>>456
sedとか使って、置換すれば

459 名前:お願い! mailto:sage [2009/10/17(土) 14:44:02 ]
ha.ckers.org/slowloris/slowloris.pl

このスクリプトをC言語で書き直してください

460 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 15:01:06 ]
こんにちは。どなたかC♯でBMI計算プログラムをvisual studio 2008 もしくは2005 で作成してアップしてくださいませんか・・・?
そのプロジェクトフォルダ全部をアップお願いします。

461 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 15:08:27 ]
いつからここは丸投げスレになったんだ?

462 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 15:10:14 ]
マルチしてるバカがいるんだよ

463 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 15:19:59 ]
>>456
昔のIOCCCのエントリにこんなのがあった
www0.us.ioccc.org/years.html#1988_spinellis

同様に、ネームドパイプをうまく使えばできるんじゃないかね



464 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 16:20:10 ]
#include "/dev/tty○○"
とかしたら

465 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 16:28:09 ]
何となく書いたら1レス前に既出だった……

466 名前:デフォルトの名無しさん [2009/10/17(土) 17:29:57 ]
const float *const hoge;


これはどういったポインタなんでしょうか?;

467 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 17:31:54 ]
>>451
*2, *4, *8でおk。

468 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 18:23:44 ]
>>466

const float *hoge;
*hoge = 1.0; //エラー
hoge = NULL; //OK

float const *hoge;
同上

float * const hoge;
*hoge = 1.0; //OK
hoge = NULL; //エラー

469 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 18:32:38 ]
>>468

ポインタがさす実体は変えれない。
さすところは変えれます

const float *hoge;
*hoge = 1.0; //エラー
hoge = NULL; //OK



float const *hoge;
同上


float * const hoge;
*hoge = 1.0; //OK
hoge = NULL; //エラー

よくわかりません。 *がどこに関連するのかが見えません

470 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 18:39:53 ]
基数ソートの勉強をしています。

16ビット長の値(unsigned short)を4ビットずつ分割して、その分布を調べて
ソートする、というアルゴリズムらしいのですが、ちょっとわからない点があります。

2^4 = 16 ですから、分布を数えるために使う配列は int count[16] と宣言しました。
16ビット長の値を4ビットずつ分割して(分割された値を A とします)、その分布を調べるわけですが、
教科書にあるコードは

count[A & 0x0f]++;

となっています。
ここで、A & 0x0f するのはどうしてでしょうか?
A は4ビット長なわけですから、大きさ16の配列 count に収まるはずです。

なぜ、わざわざ 0x0f との論理積を求めるのか謎です。
よろしくお願いします。


471 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 18:41:34 ]
じゃあ
float other = -1.0;
const float *hoge1 = &other;
float const *hoge2 = &other;
float * const hoge3 = &other;
const float * const hoge4 = &other;
のように直してそれぞれコンパイルしてみろ。

472 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 18:41:36 ]
>>466
float型のconst変数を指すポインタ型のconst変数

float a; // float型の変数
const float b; // float型のconst変数
const float *c; // float型のconst変数を指すポインタ型の変数
const float *const d; // float型のconst変数を指すポインタ型のconst変数

473 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 18:43:49 ]
>>470
unsignedで4bitに収まる保証があるなら論理積とらなくてもいいよ



474 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 18:49:37 ]
>>470
それだけじゃ分からん。Aの時点ではまだ4bitに分割しきれてないとか。

475 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 18:50:39 ]
>>473
あ、すみません。。
ソース読み直してみたら、僕が勘違いしていますた。

忘れてください。

476 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 21:37:57 ]
低水準ファイル入出力を使うメリットを教えてください

477 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 21:39:11 ]
>>476
それを聞くような人にとってはメリットはありません

478 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 03:40:33 ]
C言語始めたばかりでまだifとforぐらいしか使えません
2で割れる数、5で割れる数、2と5で割れる数を1000個目まで出力したいのですがうまくカウントできません

for ( k = 1 ,count =1 ; count <= 1000 ; k++, count=count+1) {
if( k%5==0 && k%2==0){
printf("%dは5,2で割り切れます。%d回目 \n" , k,count) ;
}else if(k%2==0){
printf("%dは2で割り切れます。 %d回目 \n" , k ,count) ;
}else if(k%5==0){
printf("%dは5で割り切れます。 %d回目 \n" , k,count ) ;
} }

こんな感じで書いたのですがどこが悪いんでしょうか?

479 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 03:45:05 ]
別に悪くないよ?

480 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 04:14:04 ]
for ( k = 1 ,count =1 ; count <= 1000 ; k++) {
if( k%5==0 && k%2==0){
printf("%dは5,2で割り切れます。%d回目 \n" , k,count++) ;
}else if(k%2==0){
printf("%dは2で割り切れます。 %d回目 \n" , k ,count++) ;
}else if(k%5==0){
printf("%dは5で割り切れます。 %d回目 \n" , k,count++) ;
} }

よくわからんが、こういうこと?

481 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 12:18:09 ]
if( k%5==0 && k%2==0){

これはこうも書けるな
if( k%10==0 ){

482 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 12:26:23 ]

数学厨おつ

483 名前:482 mailto:sage [2009/10/18(日) 12:27:37 ]
あ、なんでもないっす^^
さーせん w



484 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 12:32:03 ]
なんでもないことないだろう
そこんとこ詳しく教えてくれないかな

485 名前:デフォルトの名無しさん [2009/10/18(日) 12:33:56 ]

a='d'
b='h'

fprintf(file,"abc%c efg%c",a,b);
とすると出力が

abcd
efgh

といった具合に自動で開業されてしまいます。
させな方法はありますか?

abcd efgh
と出力させたい

486 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 12:34:43 ]
>>480
ありがとうございます
望んでいたような結果が出力されました

ちなみに丁度1000個目だけを出力することってできますか?
if(count==1000)のときだと違う結果が出力されてしまいます。

487 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 12:44:20 ]
>>485
改行されてるのはどうやって確認したの?
実際に入ってる改行コードは何

488 名前:デフォルトの名無しさん [2009/10/18(日) 12:48:45 ]
>>487
windows、VC++でコンパイルしてできた.exeを実行しました。
改行コード \n,\rとかですか?


489 名前:デフォルトの名無しさん [2009/10/18(日) 12:58:28 ]
fscanfで読もうとしている、に1000ペリカ

490 名前:デフォルトの名無しさん [2009/10/18(日) 13:02:29 ]
fscanfはつかってないのに?ww

491 名前:toya mailto:age [2009/10/18(日) 13:12:59 ]
wikibooksでC言語の教科書を執筆しています。協力者求む。
ja.wikibooks.org/wiki/C%E8%A8%80%E8%AA%9E

492 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 13:13:29 ]
全角スペース。


493 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 13:14:56 ]
C体験記じゃんw



494 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 13:29:25 ]
>>488
いやいや、実行してできたファイルをダンプしたりしてみてよ
デバッガは使えないのかな?

495 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 13:32:34 ]
その実際のコード貼れよ。
その例みたいに全角スペースなのか?


496 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 13:41:22 ]
>>486
for(k=1,cnt=1; ; k++) if(k%2==0 || k%5==0) if(cnt++ == 1000) break;

printf("%d", k);

497 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 13:47:32 ]
>>485
別のプロセスで出力ファイルが開かれてたりして、実際には書き込まれてないんじゃないかな。

498 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 13:56:09 ]
>>496
そのプログラムちょっとミスって
fork(k=1,cnt=1; ; k++) if(k%2==0 || k%5==0) if(cnt++ == 1000) break;
printf("%d", k);
ってやったら大変なことになっちゃったんだけど。
絶対落ちないって有名なLinuxが二度と起動しなくなった。

499 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 13:58:58 ]
コンパイル通るのか?

500 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 13:59:53 ]
アホか。
ゾンビプロセスが増えただけで、カーネルは落ちてないだろ。
死ねよマルエツマカ。

501 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 14:01:28 ]
コンパイルできない

502 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 14:01:28 ]
>>498
はいはい、面白い面白い。
これで満足?

503 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 14:14:13 ]
>491
間違っている部分は、直してあげた方がいいのか。

>498
俺様fork()ならたぶんコンパイルできると思うけど、一般的なfork()ではコンパイルできないと思われる。



504 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 14:26:38 ]
またマルエツマカが荒らしてる

505 名前:485 [2009/10/18(日) 14:38:59 ]
全角はたまたまみすた
oshiete1.goo.ne.jp/qa1538277.html
ぐぐったけどたぶんこういうことだとオモワレ。

それにしても自動改行ってなんだ?・・・

506 名前:485 [2009/10/18(日) 14:42:58 ]
全角はたまたまミスた
oshiete1.goo.ne.jp/qa1538277.html
ググったけどたぶんこういうことだと思われ。

それにしても自動改行ってよくわからん

507 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 14:54:14 ]
コード貼れっつーの。
勝手に改行なんてしねえよ。
何かミスってるだけだろ。

508 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 15:13:54 ]
>>506
どうやって改行してることを確認したかってのはまさにそのことが知りたかったのだけど。
使ってるエディタやコントロールが、自動で折り返したんじゃないかと。
だからファイルに出力したらダンプやバイナリエディタで改行コードが入ってるのか調べてみなさいよ、と。

509 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 17:59:04 ]
Q1:
QUESTION1;        ←ヘッダーにあるdefineで問題呼び出し
fgets (buf, sizeof (buf), stdin);
sscanf (buf, "%d", &ans);

if (1 <= ans && ans <= 3 ){
if (ans == 2){
printf("正解\n");
point++;
}else{
printf("はずれ\n");
}
}else{
printf("1〜3の数字おして。もっかい。\n");
goto Q1;
}

Q2:
ans = 0;
QUESTION2;
以下ループ

3択クイズ形式学習プログラムを作ったのですが、fgets→sscanfのところで数字を入力してEnterを押すと、
次の問題のif文のelseが1度実行される(1〜3を押せエラー→Gotoで問題が2回表示される)のですが、
なぜそうなるのかわからず対処できません。
単純にエンターを1回押してるのに入力を2回(複数回)受け付けてるだけなんでしょうか・・?
もし、そうならどのように対処すればいいのでしょうか。


510 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 18:14:28 ]
これの前後の部分に問題ありってことだね。
「問題」ってのは question じゃなくて problem な。

511 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 18:17:07 ]
>>510

?

3択クイズの問題 = question

512 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 18:28:28 ]
すげえ読解力だな。

513 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 20:10:08 ]
const char * name[] = {"aaa" , "bbb" , "ccc" , "ddd" , "eee" , "fff"};
このとき、
name
の要素数を取得するにはどうすれば良いでしょうか?




514 名前:513 mailto:sage [2009/10/18(日) 20:12:38 ]
すみません。
ちょっと撤回します。

失礼しました。



515 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 20:23:19 ]
>>119
for (cnt = 0; cnt < no; ++cnt) {}の方が見慣れてるって本当?
入門書ってだいたい
for(cnt = 0; cnt < no; cnt++){}ってかいてあるけど

516 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 20:32:56 ]
>>515
「見慣れてる」ってのは0からカウントするってところだろ。

517 名前:デフォルトの名無しさん [2009/10/18(日) 20:47:42 ]
> cnt++

その世代に言わせると整数は i だろ

518 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 20:54:28 ]
cntならiのほうがいいな。

519 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 21:06:16 ]
>>515
C++の流儀だな。
cnt++より++cntの方が、オブジェクトを生成しない分高速。

520 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 21:36:59 ]
>>496
できました
ありがとうございました

521 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 21:37:46 ]
usage: command.exe 〜みたいなコマンドのヘルプを表示させるとき、決まった構文ルールはあるの?
省略可能なオプションは[]とか、必須オプションは<>とか。

522 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 21:48:53 ]
正規表現の簡易型みたいな感じだろ。

523 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 23:24:16 ]
char型の変数の中身を参照するときに文字コードとして扱いたいときは
if(moji[0] == 115)
のような形でいいんでしょうか?



524 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 23:28:04 ]
はい
ただし char は符号付きの場合があるので 128 以上の値の扱いに気をつけて

525 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 02:08:01 ]
stdinの中身を確認する方法ないですか?
空かどうかわかるだけでもいいです。

526 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 02:19:08 ]
>>525
環境依存しない方法は無い

527 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 02:19:32 ]
空とはどういう状態か?

528 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 02:25:11 ]
feof() 辺りかな?
つーか、これを使う機会って無いよな。

529 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 02:27:10 ]
ああ、もしかして stdin の接続先のことなのかな?
質問が曖昧で難しいな。


530 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 02:29:10 ]
エスパーに期待してるんだよ

531 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 02:37:59 ]
「中身」ってなんだよ?
普通に getchar() で読めば良いだろ。


532 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 03:21:48 ]
エスパーすると、kbhit

533 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 03:33:50 ]
入力した数字が素数かどうか判別するプログラム作ったんだけど2と3が判別できない
どこが違ってる?

for(b = 2 ; b<=a/2 ; b=b+1){
if(a%b == 0){
printf("%dは素数ではありません。" ,a);
break;
} else {
printf("%dは素数です。" ,a);
break;
}
}



534 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 03:45:08 ]
判別の基準が間違ってる。

535 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 03:50:45 ]
4とか5なら判別できるのか?それ


536 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 03:53:19 ]
9とか15とか

537 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 04:16:55 ]
b = 2 ; b<=a/2

ってaが2や3の時はね

538 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 04:43:11 ]
ループの意味がないw

539 名前:デフォルトの名無しさん [2009/10/19(月) 06:47:26 ]
||って一つ目左が真なら右の判定を行うってこと?
偽なら右判定はしないのか?

540 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 06:56:31 ]
||は左が真の時点で右の判定を行わない。
&&は左が偽なら右の判定を行わない。

541 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 07:24:30 ]
ありがとう

542 名前:525 mailto:sage [2009/10/19(月) 07:49:18 ]
void sgets(char *buf,int n)
{
int i;
char c;
for(i=0;i<n;i++){
c=getchar();
if(c=='\n'){
break;
}
buf[i]=c;
}
/*入力バッファを空読みする*/
if(i==n){
while(getchar()!='\n');
}
/*文字数が一文字以外は最後に'\n'を加える*/
if(i!=1){
buf[i]=NULL;
}
}
525です。
上の関数を呼び出した後、入力バッファが空読みされたかどうかをmainで確認
する方法を教えてください。

543 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 08:31:14 ]
>542
ひどいコードだ



544 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 09:04:39 ]
>>542
空読みする方法は無いと思え。
初心者なら尚更

545 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 17:00:38 ]
再帰を使わないで処理する方法はありますか?






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

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

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