もしよければC言語なら私に聞いてください 48

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
うふっ、なんだも聞いてね。
>>1
あれ?いつもの典プレは?






















素人がスレッド立ててんじゃねぇよぼけ。
3テンプレかけよ冬厨:02/12/29 11:10
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しろ。
むしろ質問する前にWEBで検索するのが常識だ。

GUIなどの標準Cではできない事の質問は使用している開発環境のスレへ行け。
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへ行け。

コンパイラを探しているなら >>2 を見よ。

上記を逸した場合の結果は激しく未定義とする。ウヒ

C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/

前スレ
http://pc3.2ch.net/test/read.cgi/tech/1040048202/l50
4デフォルトの名無しさん:02/12/29 11:10
6デフォルトの名無しさん:02/12/29 11:10
46 http://pc3.2ch.net/test/read.cgi/tech/1039328710/
45 http://pc3.2ch.net/test/read.cgi/tech/1038405432/ (待機中)
44 http://pc3.2ch.net/test/read.cgi/tech/1037796472/ (待機中)
43 http://pc3.2ch.net/test/read.cgi/tech/1037281411/ (待機中)
43 http://pc3.2ch.net/test/read.cgi/tech/1037134356/ (待機中)
42 http://pc3.2ch.net/test/read.cgi/tech/1037101156/ (待機中)
41 http://pc3.2ch.net/test/read.cgi/tech/1036876790/ (待機中)
40 http://pc3.2ch.net/test/read.cgi/tech/1036673739/ (待機中)
39 http://pc3.2ch.net/test/read.cgi/tech/1036409391/ (待機中)
38 http://pc3.2ch.net/test/read.cgi/tech/1035729526/ (待機中)
37 http://pc3.2ch.net/test/read.cgi/tech/1035623265/ (待機中)
36 http://pc3.2ch.net/test/read.cgi/tech/1035211039/ (待機中)
35 http://pc3.2ch.net/test/read.cgi/tech/1034337064/ (待機中)
34 http://pc3.2ch.net/test/read.cgi/tech/1033240509/ (待機中)
33 http://pc3.2ch.net/test/read.cgi/tech/1032606064/ (待機中)
32 http://pc3.2ch.net/test/read.cgi/tech/1031905402/ (待機中)
31 http://pc3.2ch.net/test/read.cgi/tech/1031340950/ (待機中)
30 http://pc3.2ch.net/test/read.cgi/tech/1030786546/ (待機中)
29 http://pc3.2ch.net/test/read.cgi/tech/1029605182/ (待機中)
28 http://pc3.2ch.net/test/read.cgi/tech/1028495798/ (待機中)
27 http://pc3.2ch.net/test/read.cgi/tech/1027160374/ (待機中)
26 http://pc.2ch.net/tech/kako/1026/10260/1026048820.html
25 http://pc.2ch.net/tech/kako/1024/10249/1024918442.html
24 http://pc.2ch.net/tech/kako/1024/10240/1024033400.html
8デフォルトの名無しさん:02/12/29 11:12
過去ログはこちら

第1刷 http://piza.2ch.net/tech/kako/975/975576060.html
第2刷 http://piza.2ch.net/tech/kako/990/990082077.html
第3刷 http://piza2.2ch.net/tech/kako/993/993933402.html
第4刷 http://pc.2ch.net/tech/kako/998/998403891.html
第5刷 http://pc.2ch.net/tech/kako/1001/10019/1001998049.html
第6刷 http://pc.2ch.net/tech/kako/1004/10041/1004183881.html
第7刷 http://pc.2ch.net/tech/kako/1006/10069/1006910650.html
第8刷 http://pc.2ch.net/tech/kako/1008/10089/1008908052.html
第9刷 http://pc.2ch.net/tech/kako/1010/10106/1010673275.html
第A刷 http://pc.2ch.net/tech/kako/1012/10125/1012536901.html
第11刷 http://pc.2ch.net/tech/kako/1014/10144/1014478527.html
第12刷 http://pc.2ch.net/tech/kako/1016/10166/1016631412.html
第13刷 http://pc.2ch.net/tech/kako/1018/10187/1018752281.html
第14刷 http://pc.2ch.net/tech/kako/1021/10210/1021034822.html
第15刷 http://pc.2ch.net/tech/kako/1023/10230/1023005362.html
第16刷 http://pc.2ch.net/tech/kako/1024/10247/1024791990.html
第17刷 http://pc3.2ch.net/test/read.cgi/tech/1026281505/
第18刷 http://pc3.2ch.net/test/read.cgi/tech/1028011741/
第19刷 http://pc3.2ch.net/test/read.cgi/tech/1029377510/
第20刷 http://pc3.2ch.net/test/read.cgi/tech/1030606700/
第21刷 http://pc3.2ch.net/test/read.cgi/tech/1031809334/
第22刷 http://pc3.2ch.net/test/read.cgi/tech/1033050979/
第23刷 http://pc3.2ch.net/test/read.cgi/tech/1034088067/
第24刷 http://pc3.2ch.net/test/read.cgi/tech/1035354069/
第25刷 http://pc3.2ch.net/test/read.cgi/tech/1036597434/
第26刷 http://pc3.2ch.net/test/read.cgi/tech/1037987061/
第27刷 http://pc3.2ch.net/test/read.cgi/tech/1039062864/
スレ回数が増すごとに、スレタイのレヴェルが下がってる・・・
10デフォルトの名無しさん:02/12/29 11:16
http://che-ez.hp.infoseek.co.jp/shougi.rar

にうpしたプログラムで、表示がうまくされません。誰か教えてください。よろしくお願いします。
>7-8
それは別スレじゃねーか。

それと、名無し@沢村は無視すること。
>10
Boardが初期化されていない。以上。
13デフォルトの名無しさん:02/12/29 11:21
>>12
ありがとうございます。
何をすればいいのかわかりませんが、とりあえず、検索したりして考えてみます。
1413:02/12/29 11:37
わかったっぽいです。どうも。
15デフォルトの名無しさん:02/12/29 13:35
積分のさせるプログラムを作りたいのですが、教えて下さい。
16デフォルトの名無しさん:02/12/29 13:36
ついでに微分も・・・
17かおりん祭 ◇VqKAORinK6:02/12/29 13:44
   ∋oノハヽo∈ / ̄ ̄ ̄ ̄ ̄ ̄ ̄
     从o゚ー゚从< 新スレおめでとうございま−す♪
   = ⊂   )   \_______
   = (__/"(__) トテテテ
18デフォルトの名無しさん:02/12/29 13:52
>>15
の???

セキブンってのはカンタンに言っちゃうと足し算
19デフォルトの名無しさん:02/12/29 14:04
>>18
で?どうすれば・・・?
20デフォルトの名無しさん:02/12/29 14:06
>>19
足せばいい。刻み幅は任意でどうぞ。
21デフォルトの名無しさん:02/12/29 14:18
>>20

プログラミング例を示して下さるとありがたい!
22デフォルトの名無しさん:02/12/29 14:23
>>21
計算精度を考慮に入れなければ…

double S = 0.0;
double x;

x1 x2 は領域の端点
f は積分する関数

for (x = x1; x < x2; x += (x2-x1)/100)
 S += f(x) * ((x2-x1)/100);

23デフォルトの名無しさん:02/12/29 14:24
ニュートン・コーツ積分、ルジャンドル・ガウス積分、ロンバーグ積分を
教えて下さい。
24デフォルトの名無しさん:02/12/29 14:33
>>22
質問者じゃないけどさ、
forが終わってから、dx最後にかけるのは駄目?
毎回毎回掛け算するんじゃ、計算速度的にどうなの?
最近のマシンじゃ変わらない
26デフォルトの名無しさん:02/12/29 15:01
>>22
ありがとうございます!!
ついでに微分も・・いいですか?
2722:02/12/29 15:06
いいですヨ!!
28デフォルトの名無しさん:02/12/29 15:07
じゃー微分のプログラム例を示してください
29デフォルトの名無しさん:02/12/29 15:14
>>25
そうなんだけどさ…

しかし、凄い教えて君だ。すげぇよ
このスレのタイトルいやだ・・・
31デフォルトの名無しさん:02/12/29 17:17
微分のプログラム例を示してください。だれか教えて!!!!!!!!!1
32デフォルトの名無しさん:02/12/29 17:18
うふっ、なんだも聞いてね。
33デフォルトの名無しさん:02/12/29 17:31
dx は刻み幅
f は積分する関数

(f(x+dx)-f(x))/dx
34デフォルトの名無しさん:02/12/29 17:32
>>32
微分のプログラム例を示してください
35デフォルトの名無しさん:02/12/29 17:37
>>30

こういうスレもある
ただし、 1-66 はあぼ〜んしろ

C言語を俺に聞け 第48回ぐらいか?
http://pc3.2ch.net/test/read.cgi/tech/1037279828/67-








こっちのスレタイトルも問題おおありだがな
36デフォルトの名無しさん:02/12/29 17:48
ホームページのフレームにMIDIを設置したのですが、
ウインドウズでは聴こえず、MACではループして聴こえます。
また、ウインドウズの場合そのフレームのみを表示するとループして聴こえます。
<embed src ="×××.mid" width="0" height="0" border="0" autostart="TRUE" repeat="TRUE" loop="TRUE" align="BOTTOM">
</embed>
↑で再生しています。
プラグインは、WINがウインドウズメディアプレイヤーでMACがQuickTimeです。
どうすれば両方でループ再生されるでしょうか。

というか、率直にいえばWINでもMACでもループできるソースを教えてくだされば幸いです。
よろしくお願いしますm(_ _ )m
37 ◆F52DmOxJlc :02/12/29 18:37
>>36
ごめん、C 言語の本を色々調べたけど載ってなかった。
tech:プログラム技術[スレッド削除]
http://qb.2ch.net/test/read.cgi/saku/1027372992/
39 ◆F52DmOxJlc :02/12/29 21:47
>>38
どちらかと言えばこっちが本スレでないかい?
ブックマークの並べ替えの都合で、このスレのスレタイは C で始めて欲しいんだが・・・
>>1 師ね
>>40
だったらコレ使え

C言語を俺に聞け 第48回ぐらいか?
http://pc3.2ch.net/test/read.cgi/tech/1037279828/67-
>>41
やだ (・∀・)
つーか、何で 1 は、

    沢 村 立 入 禁 止

と書いてくれなかったの?
>>43
むしろみんなで沢村を騙るのはどうか?
>>44
勝手にやってれば?


漏れはやる。
>>45
沢村って何をやらかしたんだ?
>>46
・ マルチポスト
・ スレ違いの質問
・ 質問者への不適当な回答や煽り
・ 明らかに本人馬鹿なのに自分は天才発言

以上を懲りずに繰り返している。
ちなみに、「やらかした」 ではなく 「やらかしている」 が正しい。
48デフォルトの名無しさん:02/12/30 01:18
・・・age
49デフォルトの名無しさん:02/12/30 12:12
うふっ、なんだも聞いてね。
50デフォルトの名無しさん:02/12/30 12:24
最近Cではない言語をやらされることになりました。
私は人権侵害だ、プログラミング言語を選ぶ権利は
基本的人権にあるのかなと思いK&Rを読みましたが
残念ながら書いてありませんでした。
486DX2をかかえて路頭に迷うしかないのでしょうか。
>>50
呆痴
>>50
与えられた問題解決に際して、C を使うことが最適解であると思うなら、論拠を呈示
できるだろうから、それに基づいて使わせようとする人に猛反論すればいい。
そうでないなら、単なるわがままだ。
>>52
いっそ上司に思いの丈をぶつけて干されるのも良い人生経験じゃないかと思う。
>>53
(*´Д`*)コクハク・・・?
上司は♀、50 が♂という設定で
>>50,51
ギャハハ

「課長!僕は課長とCがしたいんです!」

『・・・!?』

「課長だってCがイイ!事くらい知ってるでしょう!?」

『・・・ええ、私だって大人よ・・・それくらい・・・知ってるわ。』

「だったら良いじゃないですか!Cしましょう!」

『・・・でも。私とあなたは上司と部下なのよ。そんな・・・ダメよ。』

「僕だって首は覚悟の上です!みんなだって言ってますよ!課長はCに偏見を持ってるって!!」

『そんな!・・・確かに経験は少ないけど・・・。』

「経験なんて関係ないです!課長、僕が手取足取り教えますよ!一緒にCしましょう!!」

『・・・(*´д`*)』
58デフォルトの名無しさん:02/12/30 14:33
>>57
ポインタがずれてアボーン
59デフォルトの名無しさん:02/12/30 15:04
>>57
『一人でCをしてなさい』
>>59
ひとりでするのはGでは?
61デフォルトの名無しさん:02/12/30 16:15
>>57
いやっ! そこ違う。やっぱりあなたはだめね。
私はC#なの。
62デフォルトの名無しさん:02/12/30 17:15
http://che-ez.hp.infoseek.co.jp/

に、将棋の表示だけするプログラムうpしたんですが、なんかエラーが出るのです。なぜでしょう?教えてください。
>>62
で、何でデジカメのサイトに見せかけているのか。
64デフォルトの名無しさん:02/12/30 17:31
>>63
よくわかりましたね。(笑)
特に意味はなくて、このサイトを作った時にデジカメにはまってたからです。
つまり客寄せですか
将棋スレできくか、ここで聞くかどちらかにしろよ。
それと、そのプログラム・・・・・C++・・・・
67デフォルトの名無しさん:02/12/30 19:01
short i = -123;
unsigned j = (unsigned)i;
printf("%08x\n", j);
とすると、ffffff85 と表示されました。
unsignedでキャストしているから、0000ff85と表示されると思ったのですが、
なぜ符号が拡張されてしまうのでしょうか?
68 ◆F52DmOxJlc :02/12/30 19:13
>>67
unsigned j = (unsigned short)i;
としたらちゃんと 0000ff85 になったよ。
PowerPC G4 500MHz
Project Builder 2.0.1
69デフォルトの名無しさん:02/12/30 20:42
>>MachさんIEEEさんご苦労さん
その他の皆様ありがとうござい舞す。
70デフォルトの名無しさん:02/12/30 20:50
>>68
それはおかしいぞ

>>67
jの型がちゃんと指定していないからintとして扱われている。
unsigned shortで宣言しろ。
71 ◆F52DmOxJlc :02/12/30 21:02
おかしいのですか…。
ご指摘ありがとうございます。
7270:02/12/30 21:11
>>71
ごめんおかしくなかった。

詳細としては
jはunsigned int型で、
jに代入するとき
j = (unsigned)i;
ってするとiをいったんint型に変換してそれからunsigned intに変換する。
だからfffff85になる。
j = (unsigned short)i;
ってすると、iは(unsigned short)型に変換されて、unsigned int に変換される。
unsigned同士だから上位が勝手にfで埋まることがないので、ff85になる。
73 ◆F52DmOxJlc :02/12/30 21:15
>>72
なるほど。
74デフォルトの名無しさん:02/12/30 22:19
カンマをタブに変換するフィルターを作りたいんですが
データをフィルタに通すと何も帰って来ないんです。
ここをこうしろ!ってとこがあったら教えて頂けませんか?

#include <stdio.h>
#include <string.h>

main(int argc,char *argv[])
{
FILE *fpr;
char *p;
char moji[BUFSIZ];


fpr = fopen( argv[1] ,"r");

while( fgets( moji ,sizeof(moji), fpr ) != NULL );
{
while(1){

p = strstr( moji , "," );

if( p==NULL ){ break;}

*p = '\t' ;

}
}

fprintf(stdout,"%s",moji);
}
75デフォルトの名無しさん:02/12/30 22:26
>>74
かえってこないというのはどういう意味?
76 ◆F52DmOxJlc :02/12/30 22:30
>>74
>while( fgets( moji ,sizeof(moji), fpr ) != NULL );
末尾のセミコロンが邪魔じゃない?
77デフォルトの名無しさん:02/12/30 22:34
>>76
なるほど、ネタだったのか。
78 ◆F52DmOxJlc :02/12/30 22:37
こういうのって 1byte ずつ fgetc() したら遅くなる?
79デフォルトの名無しさん:02/12/30 22:40
>>74
ワラタw
8074:02/12/30 22:40
>>75さん
帰ってこないというのは、例えばdata.datというファイルに
1,2,3,4,5
という文字列を与えたとして、フィルターを通しても
標準出力に改行しか帰ってこないことを言っています。
説明不足ですみません。

>>76さん
指摘ありがとうございます。
セミコロン抜いてみたけど、コンパイルした結果は変わりませんでした。
まともなデバッガ使え。
82 ◆F52DmOxJlc :02/12/30 22:46
>>80
>セミコロン抜いてみたけど、コンパイルした結果は変わりませんでした。
うちではセミコロン抜いたらちゃんと動いたよ。
8374:02/12/30 23:01
>>◆F52DmOxJlcさん
確認してみましたが、やっぱりダメでした。

なんでダメなのかさっぱりわかりません。
84 ◆F52DmOxJlc :02/12/30 23:07
>>83
あ、ごめん、やっぱりダメだった。
ちょっと考えてみます。
85 ◆F52DmOxJlc :02/12/30 23:12
>>83
わかった。
1. while( fgets( moji ,sizeof(moji), fpr ) != NULL );
 末尾のセミコロンが邪魔。
2. fprintf(stdout,"%s",moji);
 最初の while ループの中に入れる。

ところで printf("%s", moji) にしないのは何か理由があるのかな?
8674:02/12/30 23:24
>> ◆F52DmOxJlc さん
ありがとうございます。うまく行きました!
ちなみにfprintfを使ってみた理由は、
参考にさせて頂いてるプログラムがfprintfでやってたからです。

お騒がせしました。
つぅかフィルタなら標準入出力使おうよと思う私はlinux厨ですか?
>>87 正常。
DOSだとtmpfile作るからどっちでも同じなんだYO
文化が違うんだ。
89デフォルトの名無しさん:02/12/31 20:33
ところで、Cの質問は?
何かありませんか?

あ り ま せ ん か 〜 ?
90デフォルトの名無しさん:02/12/31 20:35
来年って平成何年だっけ??
91デフォルトの名無しさん:02/12/31 20:38
fprintf(stderr , "hello");
ってかいたときのstderrって普通のstdoutとどう違うの?
コンソールにはどっちでも表示されるんだけど。
>>90
15th year.
>>91
大抵の環境だと stdout が 1番で stderr が 2番
94デフォルトの名無しさん:02/12/31 20:43
カステラが1番だと思います・・・・
電話は二番ですよね
9691:02/12/31 20:56
マジで理由教えてください。お願いします。
>>96
出力をリダイレクトしれみれ。
違いが出てくる。
9891:02/12/31 21:05
>>97
レダイレクトしてみましたが何もならないのですが。
>>98
>レダイレクトしてみましたが何もならないのですが。
stdout の場合と stderr の場合を比べて、
何も違いが無かったのか?
10091:02/12/31 21:18
ないっつってんでそ。
fprintf(stderr,"errっすね。"); // 標準エラー出力
fprintf(stdout,"暮れっすね。"); // 標準出力
printf("暮れっすよ。"); // 標準出力
>>100
じゃあ、違いはないと言う事で。。。
>>102
ワラタ
みなさんに感心されっぱなしです。
105デフォルトの名無しさん:02/12/31 21:39
しっぱなしって言うんだよ!
106デフォルトの名無しさん:02/12/31 21:45
fprintf(stdout,"くまさん越"); // 標準出力
fprintf(stderr,"冬ですね"); // 標準エラー出力
fprintf(stdout,"なんてね"); // 標準出力

なコードを

program.exe > NUL

した感じです。
107デフォルトの名無しさん:02/12/31 21:55
オナニーしっぱなし
>>106
楽しそうだな。
>>108
このスレ季節感があって良いなぁ、と。
>>87
フィルタを標準入出力にするとこんな感じ?

#include <stdio.h>
#include <string.h>

main( )
{
char *p;
char s[BUFSIZ];

while( gets(s)!=NULL)
{
while(1){
p=strstr( s,",");

if( p==NULL){break;}
*p='\t';
}
puts(s);

}

}
今だに gets() 使うやつなんていたのか......
112名無し@沢村:03/01/01 06:22
俺はMSX-BASICから入ったものだが、C言語もC++もMSX-BASICほど高度ではないような気がするのは気のせいだろうか?
それからMS_DOSとMSX_DOSの区別がつかず、MS_DOSはアスキーの発明と思っていたことがあったよ。
>>111
じゃあこんな感じ?

#include <stdio.h>
#include <string.h>
main( )
{
char *p;
char s[BUFSIZ];
int i;
while(fgets(s,sizeof(s),stdin)!=NULL)
{
while(1){
p=strstr( s,",");
if( p==NULL){break;}
*p='\t';
}
for (i=0;s[i]!='\0';i++)
{
if(s[i]=='\r' || s[i]=='\n')
{
s[i]='\0';
}
}
puts(s);
}
}

>>112
CもC++もBASIC並にしか理解していないんだ。
かわいそう・・・・・・
>>114
お前、MSX_BASIC知ってるの?かなりの歳だな。
>>115
それは>>112に言うべき内容だ。
>>116
彼は知ってると思うぞ。
>>113
一文字ならstrchrでいいと思うけど、だめなの?
119デフォルトの名無しさん:03/01/01 13:02
2次元配列に文字列を与えるにはどうしたらいいでしょうか?
a[0][0]='a';
a[0][1]='b';
a[0][2]='c';
のようにする以外の方法教えてくださいです。
a[2][4] = { "abc", "def", }; //こうだっけ???
121デフォルトの名無しさん:03/01/01 13:09
>>120
レスありがとうございます^^
その方法ではできません。。。
#include <stdio.h>
#include <string.h>

main(){
 char st[10][10];

 char *a="ahahahaha";
 char *b[2]={"123","eee"};
 strcpy(st[0],a);

 printf("%s",st[0]);
 printf("%s %s",b[0],b[1]);

 return 0;
}
//こんなとこ?
123デフォルトの名無しさん:03/01/01 13:14
>>122
やはり1行ではできないのでしょうか><
124デフォルトの名無しさん:03/01/01 13:19
>>123
char a[2][10] = {"hello" , "world"};
って宣言時にやればできる。
125デフォルトの名無しさん:03/01/01 13:22
>>124
わかっていますが。。。
途中でできないものなんでしょうか?
strcpy
>>125
とちゅうってどういうこと?
char str[2][4];
memcpy(str, "abc\0def\0", sizeof (str));

こんな感じかな?文字列リテラルの最後のヌル文字はなくてもいいかも。
129デフォルトの名無しさん:03/01/01 13:35
>>125
だから関数の途中で{}で囲んでその先頭で宣言すりゃいーじゃん。
130デフォルトの名無しさん:03/01/01 13:37
>>128
2次元配列ってつながってることが保証されてるの?
131デフォルトの名無しさん:03/01/01 13:46
>>126
ありがとうございます^^
できました♪

みなさんおさわがせしてすみませんでした><
配列もポインタもほとんど同じなんだよ
char a[3][20]={"itteyosi",">>1","chuubou"};
char *a[20]={"itteyosi",">>1","chuubou"};
char a[][20]={"itteyosi",">>1","chuubou"};
上の3つは全部同じ意味
133なんでだろ〜:03/01/01 13:51
配列もポインタもほとんど同じなんだよ
char a[3][20]={"itteyosi",">>132","chuubou"};
char *a[20]={"itteyosi",">>132","chuubou"};
char a[][20]={"itteyosi",">>132","chuubou"};
上の3つは全部同じ意味
134デフォルトの名無しさん:03/01/01 13:53
>>132
勉強しなおせ。
1番目と3番目は同じ意味だが、2番目は明らかに違う。
しかも宣言のしかたを勘違いしてるし。
1番上はchar型の要素20、要素3の配列
2番目はchar型の要素20へのポインタ
3番目は1番上のに空の配列を使って初期化したもの
136134:03/01/01 13:54
そうか、131はそれを聞きたかったのか。
char *s[2];

s[0] = "hello world";
s[1] = "do you know me?";
とかしたかったのか。
137134:03/01/01 13:56
>>135
だから違うって。
>>137
実際にソース書いて実行してみな
139デフォルトの名無しさん:03/01/01 13:58
>>134
入力文字列をソートするプログラム作りたかったのです(汗
ポインタを使わずに交換する方法を探していました。
140これが適当?:03/01/01 13:58
#include <stdio.h>
#include <string.h>

main(){
 char a[2][20];
strcpy( a[0], "asdfkja");
 strcpy( a[1], "fjaljawie");
printf("%s %s", a[0], a[1]);
 return 0;
}
141134:03/01/01 14:05
>>138
明らかに2番目を勘違いしてるのに気づかないの?
文法からやり直したほうがいいぞ。
142デフォルトの名無しさん:03/01/01 14:13
>>141
だって式の中では配列はポインタに読み替えられるんだぞ
143134:03/01/01 14:15
>>142
>char *a[20]={"itteyosi",">>132","chuubou"};
>2番目はchar型の要素20へのポインタ
これが正しいと?
しかも、これで宣言したものに対して、
strcpy(a[0] , "hellow");
ってやってみそ。素敵なことがおこるぞ。
>>142
そこ、式じゃなくて宣言なんですけど…
>>144
とにかくいいの!
実際にソース書いて実行してみろって
146145:03/01/01 14:36
ちなみに出力する時に
a[1]と書くのは*(a+1)のシンタックスシュガーだから全く同じ
ここからも配列とポインタが同じって事が分かるだろ?
147デフォルトの名無しさん:03/01/01 14:39
誰がどういう主張をしているかが分からなくなってきた。

>>145
おまえが正しいと思っていることを上げてみてくれ。134とおまえは同意見じゃなかったのか?

ID晒せよバカ
149デフォルトの名無しさん:03/01/01 14:45
プ 馬鹿が一人いるなw
150デフォルトの名無しさん:03/01/01 14:47
ポインタと配列を同じだと主張している奴が1人
char *s[20];をサイズが20の配列へのポインタと思っている奴が1人。
馬鹿は2人だと思うが。
151デフォルトの名無しさん:03/01/01 14:53
うふっ、なんだも聞いてね。
ぱらさいとなスレッドだ
fusianasanしろよ
IP漏れたらファックされるだろ・・・
>char *s[20];

× サイズが20の配列へのポインタ
○ charのポインタが20個の配列

要するにポインタのポインタ。
ていうか、なんか感覚的にcharの配列って、ぼーっと見るとただの文字列に
見えてしまって、charポインタの配列って、わかりづらい。これが

CFoo* pFoo[20];

とかだと、もちょっと違う感じなんだけど...って、俺だけ?
ポインタは人に聞いたりするより
本とかを読んで感覚で覚えるべし
157デフォルトの名無しさん:03/01/01 15:49
>>156
理屈で覚えろよ。
遠回りするだけだぞ。
158 ◆F52DmOxJlc :03/01/01 15:53
値か場所かの違いだけやんー。
159デフォルトの名無しさん:03/01/01 16:11
「やんー」
値か場所かの違いやおまへんかー。
>>157
体得した方が結局は速い。って言うか人それぞれ。
値か場所かの違いやもうかりまっかー。
値か場所かの違いだけぼちぼちでんなー。
IDとIPは別物だ
>>164
IPアドレスもな。
166初心者A:03/01/02 00:59
今、アセンブラをC言語で翻訳するっていうプログラムを
紙からパソコンに写しているのですが、
エラーで「暗黙宣言された」ってのがわからなくて、
困ってます。どういうエラーなのか教えてくれませんか?
exitやstrcpy、strcmpなどを使うと出るみたいです。
ソフトはultraCってのを使っています。
#include <string.h>
かな。
168〜(ー’ー)〜:03/01/02 01:47
風邪が直りません。
ビタミン「C」くらはい。
Cのポインタは表現方法が直感的でないので難しいね。

>>146

配列演算はポインタ演算に読み替えられる。
しかし、配列型とポインタ型とは別物。
>>169
直感的な新言語を作ってください
>>171
Delphiを使いなさい。
173デフォルトの名無しさん:03/01/02 03:34
今更だが>>112
"C言語もC++もMSX-BASICほど高度ではないような気がするのは気のせいだろうか?"
コレに疑問持った香具師は居ないのか?
C++はC言語だな。(ボソ
>>173
10年以上C/C++使ってるけど、ある意味MSX-BASICのほうが高度だな。
>>174
正解
177デフォルトの名無しさん:03/01/02 04:50
はい、先生質問があります。

unsigned char *ptr;
unsigned char buffa[4];

buffa[0]=0x00;
buffa[1]=0x01;
buffa[2]=0x02;
buffa[3]=0x03;

ptr=buffa;
としました。
んで次の処理で、
printf("buffa[0] = %x\n",*ptr++);
printf("buffa[1] = %x\n",*ptr);
とすると、狙い通り
buffa[0] = 0
buffa[1] = 1
となるんですが、
printf("concatinate = %x\n",(*ptr++)*0x100+(*ptr));
とやると、
concatinate = 0
としかなりません。
評価を考えると、
concatinate = 1
となりそうなのに....

>>177
(*ptr++)*0x100+(*ptr)
の結果は、恒例の未定義です。
>>173
いや、>>112 が何を言っても無視されるという喜ばしい状態だと思います。
180デフォルトの名無しさん:03/01/02 06:03
>未定義
ptr=buffa;
ではたらないんでしょうか。
どうかご教授ねがいます。
181178:03/01/02 06:16
>>180
いや、未定義じゃなくて不定のような気もしてきた。
上の式は、
1)*ptrを取出す。(buffa[0])
2)ptrを1進める。
3)*ptrを取出す。(buffa[1])
という動作を期待してるんだと思うけど、1),2),3)の順番に処理される保証は無い。
例えば、1) 3) 2) の順に処理されるとすると、右の*ptrも、左の*ptrも両方buffa[0]の値になる。
182177:03/01/02 06:31
ご回答ありがとうございます。
そうですか、評価順番の不定ですか....

確かに下記の順番を期待していたのです。
>1)*ptrを取出す。(buffa[0])
>2)ptrを1進める。
>3)*ptrを取出す。(buffa[1])

これはK&R, ANSIでも評価順番の不定となっているんですかねー。
いまから読み込んでみます。
(ちなみに処理系はLINUX付属 GNU C?)

どうもありがとうございました。
183デフォルトの名無しさん:03/01/02 06:40
それ以前の問題。

printf("buffa[0] = %x\n",*ptr++);
buffa[0] = 0
なら、

printf("concatinate = %x\n",(*ptr++));
concatinate = 0
になるのでは?
>>182
うちでは、((*ptr[1]) * 0x100 + (ptr[2])) == 258
になりまいたが、出力結果は102でした。

なので、%xなどは使わなければよいと思います。
185デフォルトの名無しさん:03/01/02 13:40
EXIT_FAILUREのfailureて難しい発音だな
ふぇぉぃゅ.
188デフォルトの名無しさん:03/01/02 14:11
オマエラモチツケフジでツイテルゾ
>>184

"%x"だろ? なら、 0x102=258 だろうが。
ていうか、インクリメンタル演算子は、「式評価後に1増やす」だろうが。
なら、>>177が"0"になるのは当然。
190大学生:03/01/02 14:21
今、大学3年で卒業研究で遺伝的アルゴリズムに関した
研究をしたいと考えているものです。
そこで、プログラム(C言語で)を作成するにあたり
参考になるようなサイトがありましたら教えて頂きたいのですが・・・
191H01:03/01/02 14:26
>>190
C言語の基礎をしりたいのか、遺伝的アルゴリズムのPGを知りたいのか?
192 ◆F52DmOxJlc :03/01/02 14:26
>>190
あなたのC言語の習熟度は?
ていうか遺伝的アルゴリズムって、何?
194 ◆F52DmOxJlc :03/01/02 14:33
>>190
東京駅の八重洲ブックセンターにでも行け!
196大学生:03/01/02 14:52
交通費くれる?
>>大学生
先ず最初に明治神宮に行ってください。そこで交通費を拾ってください。
198193:03/01/02 14:58
>>194
産休!へー、おもしろそうだな。

>>大学生

>プログラム(C言語で)を作成するにあたり
って、書いてる時点で、とりあえずコード書くぶんには問題無いんでしょ?
だとしたら、>>194のサイトの内容参考にして、アルゴリズム練ればいいんじゃない?
...つーかそのアルゴリズム練るのも研究の一部のような...。
>>大学生他
自分で作れないのであれば既存の本などから抽出して処理して、
まとめて形にするのが大学生の本分です。
>>193
禿同。遺伝的アルゴリズムって何だ?
染色体がどーのとかをまとめたいの?
>>200
いろんなアルゴリズムである問題に取り組み、優秀なモノだけを残していく。
で、いろいろなアルゴリズムを動的に生成できれば、実行して放っておくだけで
どんどん効率の良いアルゴリズムが生まれていくのではないか?と言うお話。
>>201
あっ!そういう意味の遺伝ってことね
大学生さんは大変だねぇ
俺はまだ中坊だから気楽でいいや
>>201
それは遺伝的アルゴリズムを「アルゴリズム」に適用した場合ね。
菊川怜の卒業研究は遺伝的アルゴリズムを
「生コンクリートの配合比率」に適用している。
奥が深いぞ!
遺伝するプログラムって、LISPが有名(なんか日本語の適用間違っている・・・)だよね?
>>大学生
参考文献に2chも書いておけよ。
>>205
文献の意味わかってる?
>>206
じゃあ謝辞に2chのみなさんだな(藁
referencesが書物ばかりだと思ってらっしゃる。ププク
>>208
プログラム板的には参照sと訳してしまうな。
210デフォルトの名無しさん:03/01/02 19:07

遺伝アルゴリズムって乱数がキーなんだよな。
>>210
突然変異の「できそこない」とかがまた・・・。
>>206
referencesはどう訳しても文献にはなりません。
間違いは素直に認めましょう。
213ジーニアス:03/01/02 19:22
reference
¨【名】(複‐・enc・es/‐iz/)
2 !〔…の〕参照,参考〔to〕;? 出典,参考書,典拠;参考事項

¨【動】|他|〈書物・論文など〉に参照事項[参考文献表]を付ける
>>209>>212
無知だね。痛過ぎ。w
215デフォルトの名無しさん:03/01/02 19:25
小学生をいじめるなよ
動的なものを参考文献に含めるのは出版元によっては修正されるよ。
というより、普通に査読のある雑誌は滅多にURL表記載せないだろう。
国際会議クラスだとわからんが。
必死だな(w
>>217
ガキだな
URLは変化することもあるからな。
プ
URLは変化しないこともあるからな。
みんな208はご立腹だ。ちゃんとあやまれよな
真性リアルDQN厨房はもうお腹いっぱいなわけだ、わかるか?藁
224デフォルトの名無しさん:03/01/02 21:39
Javaのantって一定のフォーマットに従ってコメント書けば
自動的にJavadoc生成してくれるけど
C言語にも似たようなツールってないの?
自分でライブラリ作ってAPI公開したいけど
シコシコ手書きするの面倒だとか そういうときに
>>222=223
プ
>>224
仕様書工房がやってくれる。
227デフォルトの名無しさん:03/01/02 22:22
>>226
GNUはそういうの作ってない?
Linux上で使いたいし つーか金ないし
228デフォルトの名無しさん:03/01/02 23:13
>>227
コメント切り出すぐらい自分で作んなさい。
229デフォルトの名無しさん:03/01/02 23:36
Cxrefってのを見つけた.
http://www.gedanken.demon.co.uk/cxref/
でもJavaDocほど美しくないけど

>>228
その程度のプログラムならとっくに作ってる
コメント切り出すだけのプログラムになんの価値もない
antが生成したJavaDocみてみ
230デフォルトの名無しさん:03/01/02 23:38
>>229
だからそのぐらい作れよ。
231デフォルトの名無しさん:03/01/02 23:47
#include <string.h>
#include <stdio.h>
って二つ書いたらダメですかね?
232デフォルトの名無しさん:03/01/03 00:02
うふっ、なんだも聞いてね。
233 ◆F52DmOxJlc :03/01/03 00:03
>>231
二つ以上書くこともありますよ。
234デフォルトの名無しさん:03/01/03 01:35
#include "def.h"
#include<stdio.h>
extern FILE *fpsym;
extern int key_count;

これで始まるプログラムを実行すると、extern FILE *fpsym; で、
「そのようなテンプレートはありません」とエラーが出てしまいます。
なにかまずいのでしょうか?
235 ◆F52DmOxJlc :03/01/03 01:43
>>234
fpsym はどのファイルのどの部分で宣言してるのかな?
236デフォルトの名無しさん:03/01/03 12:36
参考書にヘッダファイルには
#ifndef WORD_MANAGE_HINCLUDED
#define WORD_MANAGE_HINCLUDED
.
.
.
#endif
と記述すべしと書いてあったのですが
意味がいまいちわかりません
WORD_MANAGE_HINCLUDEDが定義されていなかったら
WORD_MANAGE_HINCLUDEDを定義して内容を書くという意味なんでしょうか?
237デフォルトの名無しさん:03/01/03 12:37
>>236
そおだよ。たいていはヘッダーの2重インクルード防止に使われている。
239236:03/01/03 13:03
>>238
このソースってのはどんな場合でも書くんですか?
もしそうだったら別に意味を覚えてなくてもプログラムの定石として
暗記しとけば大丈夫ですよね?
>>239
>もしそうだったら別に意味を覚えてなくてもプログラムの定石として暗記しとけば大丈夫ですよね?

アホ丸出しだけどな。
>>239
.hには常に書くもの。
でも意味を理解しておいたほうがいい。
242236:03/01/03 13:21
じゃあ一応意味を理解しといた方がいいのかなぁ?
参考書には複数回インクルードされた場合は内容すべてが消えてなくなる
とあるんですが
WORD_MANAGE_HINCLUDEDが定義されてなかったら定義して
結局はそれを最後にendifするのはどういう意味があるんですか?
できれば流れを説明して欲しいです
厨房でスマソ(ホントの意味でも中坊なんで(藁
>>242
if(!defined("hoge"))
{
define("hoge","huga");


}

と等価。
244236:03/01/03 13:29
>>243
hogeが定義されてなければ定義して
もしもう1度インクルードされると
1回目のインクルードでhogeが定義されているので
if(!defined("hoge"))の条件に合わずにその内容はスルーする
ってことですかね?
>>244
わかってんじゃん。何悩んでんのさ?
246236:03/01/03 13:41
あっ やっぱりそういうことでよかったのか
どうもありがとうございました〜〜
既に定義されていれば、再定義しない、
これ迄に定義されていなければ、定義しておく。
インクルードしておくのも一緒
Javaのantって一定の法則に隊列組めば
自動的に巣穴生成してくれるけど
8言語にも似たようなルールってないの?
自分で蜂の巣作ってITE公開したいけど
チクチク手刺しするの面倒だとか そういうときに
249デフォルトの名無しさん:03/01/03 14:26
>>224
JavaDoc とか ant とかさっぱりわからんけど、
レス内容からすると Doxygen とかそういうののことかな。

http://www.stack.nl/~dimitri/doxygen/

違ってたらスマソ。
ここC言語なんだけど。
251249:03/01/03 14:31
Doxygen は C 言語で使えるけど。

リンク先ぐらい見ろよ。
>>251
だからどうした?質問がjavaなんだが。
253249:03/01/03 14:35
>>252
意味わからん。
254デフォルトの名無しさん:03/01/03 14:44
>>250 = >>252

ドキュメントはちゃんと読む癖つけろよ。
あたま蟲涌いてるよ?
256249:03/01/03 14:46
なんだ、ただの馬鹿か。
くだらないことで上げんなよ馬鹿
250 = 252 = 255 = 257

自分の誤解から始まったことだろ。

いいかげんにしろ。
259252:03/01/03 15:24
>>258
はずれ。2人以上から指摘されてるんだ。自分の方が勘違いだと言うことを認めた方が良いぞ。
260249:03/01/03 15:29
なんだ、ただの馬鹿か。
C++になってしまうけど
例外とreturnでの関数の終了はどう使い分ければいいのですか
>>261
ちょっと前のjavaスレで同じ話があったなぁ。

>>259
何が勘違いか言わないと、馬鹿だと思われるよ。
気付かないから電波なのですよね:-p
265236:03/01/03 17:29
>>261
C言語だったら0か非0だと思うけど
C++はよくわからんが
俺はいつもexit(EXIT_SUCCESS)とexit(EXIT_FAILURE)しか
使わないから

ハンドルネームこのスレの236さんとは関係ないです
ゴメンナサイ
前スレから変更するの忘れてて
267デフォルトの名無しさん:03/01/03 18:25
うふっ、なんだも聞いてね。
>>261
C++ だけど、答えておく。

帰り値の値でエラーと正常の区別がつかない場合や、
必ずエラーチェックが必要な場合に例外を使う。
いや、C++では原則的に返値チェックではなく例外を使うべき。
例外を使用すると、正常系と異常系の処理を分離して記述できるので、
見通しが良いプログラムになる。
270デフォルトの名無しさん:03/01/03 21:01
>>2
何を偉そうに。
271デフォルトの名無しさん:03/01/03 21:16
>>270
何を今さら。
272デフォルトの名無しさん :03/01/03 21:22
code <<= 1
ってどういう意味でしょうか?
code = code << 1
と考えて良いですか?
273デフォルトの名無しさん:03/01/03 21:24
>>272
そう。
やってみればいいのに。
274デフォルトの名無しさん:03/01/03 21:24
>>272
そだよ。
-(+(-(+(-(+0)))));
逝ってよし>>=275
ってどういう意味でしょうか?
逝ってよし = 逝ってよし>>275
と考えて良いですか?
0に+付けても-付けても同じじゃないか?
278デフォルトの名無しさん:03/01/04 11:48
冬休み明けに提出しなきゃいけない課題があるのですが、あまりにも難しすぎて私の力では何にもなりません。
持っている参考書やC言語辞典を引っ張り出して見て考えたのですが、もうダメです。
どなたか教えてもらえないでしょうか?
ソースとかは後で(夕方くらいに)書き込みさせていただきますが、題材は算術言語処理です。
279デフォルトの名無しさん:03/01/04 11:54
配列で例えば最初の定義で
double m[200]
とかいれて、m[197]だけ使うというのはおかしいのでしょうか?
あと、以下の定義分はどこかおかしいところがあるのか教えてください。
申し訳ありません。よろしくお願いします。

double m[299] = {1 , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1 , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1 , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1 , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1 , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1 , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1 , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1 , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1 , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1 , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1 , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1 , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1 , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1 , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1 , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
280デフォルトの名無しさん:03/01/04 12:09
>>279
別におかしくない
>>280
でも、197個しか使う予定がないのに200個確保する意味もあまり無いな。
282279:03/01/04 12:17
>>280,281ありがとうございます。
すいませんもう少し質問させてください。
279のようにdouble m[299]
を定義した後に、
double s[13]
も定義して次のような演算をやらせます。
するとs[]の中身は全て1になるはずなのに
ゼロばかり出力されてしまいます。
どこがおかしいのでしょう。もうしわけありませんがよろしくお願いします。

     s[1]=1/2*m[206]+1/2*m[207];
s[2]=65/101*m[220]+36/101*m[221];
s[3]=8/15*m[228]+7/15*m[229];
s[4]=158/203*m[234]+45/203*m[235];
   s[5]=79/248*m[238]+169/248*m[239];
s[6]=203/302*m[242]+99/302*m[243];
   s[7]=207/351*m[245]+144/351*m[246];
s[8]=374/409*m[248]+35/409*m[249];
s[9]=255/452*m[250]+197/452*m[251];
s[10]=228/499*m[252]+271/499*m[253];
    s[11]=304/552*m[254]+248/552*m[255];
s[12]=493/610*m[256]+117/610*m[257];
>>282
0になるのが正常な動作。
1/2=0, 158/203=0, ...

小数まで計算したければ、
1.0/2.0 = 0.5
284279:03/01/04 12:30
ちなみに出力は次のようにしています。

for(n=1;n<13;n++){
b=s[n];
printf("%.4f,",b);
}
285279:03/01/04 12:33
>>283
ありがとうございます。  
ということは,279の宣言の1を全部1.0にすれば上手くいくんでしょうか?
286279:03/01/04 12:36
違いますね。他の分数も全て.0を書かなければならないということですね。
ありがとうございました。
for(int i=0; i<299; i++)
m[i]=1;
がいいな。
分子にだけ「.0」を付ければ良いよ。
置換できるなら、
置換前: /
置換後: .0/
で実行すればって遅いか・・・
>>279
定義と宣言を混同してる。

課題・宿題はそれ用のスレがあるから、そっちいった方がいいと思う。
289278です:03/01/04 16:46
わかりました。別のスレで質問してみます。
290デフォルトの名無しさん:03/01/04 22:26
291デフォルトの名無しさん:03/01/04 22:27
while( i-- > 0 ){
y[x++] = 0;
}

という文で、最初 i=3 x=0だったとしたら
x[0]=0,x[1]=0,x[2]=0と配列にデータが入るのでしょうか?


>>291
xがいつの間にか配列になってる。
293デフォルトの名無しさん:03/01/04 22:44
間違えました。
y[0]=0,y[1]=0,y[2]=0でした。
294デフォルトの名無しさん:03/01/04 23:26
>>293
そうなるよ
つぅか実行しろよと。
>>291
そこまで省略して書くならwhile(i--)にしろよ。
>>296
そういうツッコミ入れるなら変数も減らせよ。
while(i--)
{
  y[x++] = x;
}

という文で、最初 i=3 x=0だったとしたら
0 = x(0),1 = x(1),2 = x(2)とデータが入るのでしょうか?

>>298
解読しなければならないコードは捨てるのが正解。
>>298
{と}が余計。消せ。
while(i--)
/*{*/
  y[x++] = x;
/*}*/

>>301
>>300の言いたいことが「コンパイルの時に無かったことにしたい」のなら

while(i--)
#if 0
{
#endif
  y[x++] = x;
#if 0
}
#endif
だろ。
>0 = x(0),1 = x(1),2 = x(2)とデータが入るのでしょうか?
y[0]=0,y[1]=1,y[2]=2
304デフォルトの名無しさん:03/01/05 02:00
while(i--)
  y[x] = ++x;

最初i=3 x=0 だったらどうなるの?

えっ?ってか、未定義?
>>304
y[0]==0,y[1]==1,y[2]==2にしたけりゃ
while (x < 3) {
  y[x] = x;
  ++x;
}

y[0]==1,y[1]==2,y[2]==3にしたけりゃ
while (x < 3) {
  y[x] = x + 1;
  x++;
}
パッと見どっちかわからない書き方したって、
役に立たんよ。
>>306
俺ならforを使う。
memset(y,0,sizeof(y[0])*i);
>>308
sizeof yじゃだめなんだろうか・・・
310309:03/01/05 13:40
yの要素数がi個だとは誰も言っていないか。
y = calloc(i,sizeof(size_y));
312311:03/01/05 15:17
初期化とまちがえた。 < プッ
313mm:03/01/05 17:46
格子点の個数を求めるプログラムを作ってみたのですが、上手くいきません。
半径rの球の内部にあって、かつ、全ての成分が正であるような格子点を
求めるように計算させようとしたのですが、どこかがおかしいようなのです。
どこがおかしいのか教えて下さい!
314mm:03/01/05 17:46
#include <stdio.h>
//半径rの球の内部にある格子点のうち、正数の物の個数を求める

void main(){
int i,j,k;
int n=0;
int r,q;
printf("半径rの値(少数可)を入力して下さい!\n");
scanf("%d",&r);
q=r*r;

for(i=1;1<=r;i++){
for(j=1;j<=r;j++){
for(k=1;k<=r;k++){
r=i*i+j*j+k*k;
if(q<=r){break;};
printf("%d",r);
n=n+1;
};
};
};

printf("半径rの開球に含まれる格子点の数は%d個である\n\n",n);

}
315デフォルトの名無しさん:03/01/05 17:55
>>313
すまんがもうちょっと分かりやすく説明してくれ。
316mm:03/01/05 18:03
>315
解りにくくてすみません・・・
まず、3次元空間を考えます。
そして、原点を中心とする半径rの球を考えます。
この球をCと名付けておきます。
Cの内部にある格子点全体を考えます。
これらの格子点の位置はx,y,z座標によって表現できますが、
この格子点おなかでx座標、y座標、z座標の値が全て正になるものの全体をNとおき、
Nの個数を求めたいのです。
317mm:03/01/05 18:04
訂正
この格子点おなかで×
この格子点のなかで〇
for(i=1;1<=r;i++){
typo?
319mm:03/01/05 18:30
>318
ありがとうございます!

今直したけれど、やっぱり上手くいかないです・・・
rに1を代入した時にn=1になってしまうんです(本来はn=0)
rをfor文の中で変化させているでしょ、
で、三つのfor文の終了条件でそのrを使っているから、
そこで制御しきれていないと思うのだが?
321mm:03/01/05 18:52
>320
上手く出来ました、ありがとうございます!
15行目でrを再利用したのがよくなかったのですね。
もう一つ変数sを定義して使ったら上手くいきました。
322デフォルトの名無しさん:03/01/07 01:32
age
323デフォルトの名無しさん:03/01/07 12:10
#includeの'#'ってなんなの?
意味あんの?
324デフォルトの名無しさん:03/01/07 12:41
#から始まるのは、プリコンパイル時のものって意味と思われ。
#defineとかね。

で、Cの命令とは違うことを強調しているものと
>プリコンパイル時
変な用語を使う香具師だな
普通は 「プリプロセッサ命令」 だの 「ディレクティブ」 だの言うと思ったが
C言語初心者なのですが1!〜100!までを配列を使って正確に表示するプログラムを
参考程度に教えて下さい。
#include <stdio.h>
#include <stdlib.h>

int main( void )
{
int d[] = { 0 };
system ( "guile -c '(letrec ((f (lambda (n x) (if (= n 0) x (f (- n 1) (* n x)))))) (letrec ((g (lambda (n) (if (<= n 100) (begin (display (f n 1)) (newline) (g (+ n 1))))))) (g 1)))'" );
return d[0];
}
329デフォルトの名無しさん:03/01/07 17:50
宿題手伝ってください・・・・
330デフォルトの名無しさん:03/01/07 17:52
>>329
いいよ。
お代は体で払ってね。
>>329
宿題スレに行き給え。
>>328
ありがとうございます。
333通りすがり:03/01/07 19:57
>>332
いいのか?(オイ
何でお礼いってるんだ?ネタか?
ってかマジに反応してる俺がバカか?
334デフォルトの名無しさん:03/01/07 22:26
BM法の完全版のプログラムを教えてください
>変な用語を使う香具師だな
すびばぜん まあそんな感じということで許してください。
334 マルチ逝ってよし。
337名無し@沢村:03/01/07 23:10
stdio.hってスタジオ.hと読むの?
プログラミングするための環境(スタジオ)を提供するインクルードファイル?
>>337
マルチ氏ね
>>337
その通りだ。Visual Studioも同じ意味だ。
340デフォルトの名無しさん:03/01/07 23:12
標準入出力(Standard I/Oの略)
名スレの予感


がしていたのに 340 のせいで台無し
342デフォルトの名無しさん:03/01/07 23:15
>>340
マジで?
スタジオエイチだと思っていた
>>337
本当はアダルトサイトから流出したんだけどシンガポールで検閲が入ってつまんない内容だけが残ったのさ
344>327 (1):03/01/07 23:20
cygwin / gcc で試すた
最適化の余地はかなり残っているけど、まあこれでがまんしてください。
実行の確かめには、Winの電卓を使いますた。
M_MAX * 4 桁まで計算します。それ以上になるとエラーが出ますので、増やしてください。

#include <stdio.h>

#define M_MAX (50)
#define S_MAX (100)

int main(){
int i,j;
int a[M_MAX];

for(i=0;i<M_MAX;i++)
a[i]=0;

a[0]=1;// 0! = 1
for(i=1;i<=S_MAX;i++){
int sflag=0; // 先頭の0を省くためのフラグ

for(j=0;j<M_MAX;j++)
a[j]=a[j]*i;

345>327 (2):03/01/07 23:20
for(j=0;j<M_MAX;j++){
if(a[j]>10000){
if(j==M_MAX-1){
fprintf(stderr,"残念ながら桁があふれますた");
return -1;
}

a[j+1]+=a[j]/10000;
a[j] =a[j]%10000;
}
}

printf("%4d:",i);
for(j=M_MAX-1;j>=0;j--){
if(sflag==0 && a[j]==0){
// 先頭のほうの0は無視する
}else{
sflag=1; // ここから表示をはじめる
printf("%04d",a[j]);
}
}
printf("\n");

}
return 0;
}
346名無し@沢村:03/01/07 23:23
>>340
標準入出力(Standard I/Oの略)?
じゃ、スタジオエイチじゃなくてスタドアイオーエイチと読めばいい?
347デフォルトの名無しさん:03/01/07 23:27
>>346
エイチではありません。ヘッダといいましょう。伸ばしてもいけませんよ
ポリフェノール
349名無し@沢村:03/01/07 23:34
>>347
やっぱCOM(compornent object model)をコムと読むのだから、
stdio.hはスタジオエイチと呼んでもいいような気がしてきた。
格言:略語はその略されたスペル通りに呼んでよし!!
350デフォルトの名無しさん:03/01/07 23:36
読み方はそのまんまでよし
ステューディオエイチ
名無し@沢村のことは、これからはポリフェノールと呼ぶこと。
つーか、そう名乗れ。
353名無し@沢村:03/01/07 23:40
>>351
気取るな、スチュワーデス野郎!!
漏れは「スタディオ・ヘッダ」と呼んでるよ!
stdlibは「スタディリブ」れす。
355名無し@沢村:03/01/07 23:44
>>354
ヌヒもスチュワーデス野郎か!?
スペアリブ
>>355
いや、なんのことやらです。っていうかよく考えると「ヘッダ」までいうときより省略するなぁー
「エッチ」とは言わないけど
   【沢村に反応してしまった人】        【糞スレを放置、徹底無視を貫き通した人】

    , ・´.......... . .   ...... "" '' - ..,_  .               \ │ /
  ./::::::::::::::::::::::::/ /:::::::::::::::ヘ::::::::::::::ヽ                  ./ ̄\    ∩  ∧∧
. と. ,,i::::::::::::::::::::::/ /::::::::r(::::..ン::::::::::/ .        ∩ ∧ ∧∩ ─( ゚ ∀ ゚ )─  \ ( ゚∀゚ )へ
<´ _;;;::::::::::::::::::::::し:::::::::::`(:::::ヘ::::::::::::\        ヽ( ゚∀゚ )/   .\_/     |    /(ソ
    ''ヽ::::::;;;;;::::::::::::::::::::::::::::..ン:::::::;;;::-'''         |   〈..   / │ \    |   |
    ⊂;;;;;;,.:::::::.--- ー  '''' '    .        / /\_)            / /\」

   沢村と一緒に、アクセス規制!           優良コテハンとして、表彰!
糞スレを直し損ねた
ローカル関数の定義が正しくありません。とでてコンパイルできません
どういうときにこのえらーがでるのでしょうか?
ローカル関数の定義が正しくないとき。
362デフォルトの名無しさん:03/01/07 23:57
PC初心者板からきました。
cppをexeにしたいのですが何を買えばいいのですか?
>>360
それだけじゃ何が起こっているのかさっぱりわからん。
コンパイラのリファレンスを見てくれ。
嫌ならせめて、エラーの再現する最低限のコードを示し、どこでそのエラーが
発生するのか伝えてくれ。
>>362
お金はいらない
>>362
cpp単体なら、cygwinをぐぐれ!
で、gcc test.cpp -o a.exe -O3
とかやってくれ。エラーが出たらあきらめてくれ!
>>385
×糞スレ → ○沢村
×優良コテハン → ○優良名無し
×AAズレまくり → ○直せ

ヘマばっかりしおって。ったく。
368385:03/01/08 00:09
なにか?
(・∀・)ダマレッ!!
370362:03/01/08 00:25
皆さんありがとうございました。
VC++.NETとかいうの買わなくていいんですね?
SDKのなかのチュートリアルをコンパイルしてみたかったんです。

で、よく読んでみるとexeではなく*.dllを作るみたいなんですが
これ以上読むと窓から飛びたくなってきますタ
dllもgccで作れるお
>>368
未来からの死者
373362:03/01/08 00:33
DTM版の房です。
最近流行のVSTプラグインを作ってみたいんですが。。。
>>371
gccですか、解りました。
頑張ってみます。
ぐは、自分で見直して「プリコンパイルってなーに?」とマジ考えてしまった……
そうだプリプロセッサだったよ…… 鬱だ……
375デフォルトの名無しさん:03/01/08 01:15
アホと思われるかもしれないがCのmain()の正しい書き方は
main()
main(void)
int main()
int main(void)
void main()
void main(void)
のどれなんですか?
×アホと思われるかもしれない → ○完全なるアホ
int main(void)
または
int main(int argc, char **argv)
377デフォルトの名無しさん:03/01/08 01:18
>>376
やっぱそれでいいんですね
いろんな書き方見かけるから自信なくしてますた
>>375
想定された条件下で想定通りに動作する書き方が正しい書き方。
379デフォルトの名無しさん:03/01/08 01:50
>>376
処理系不明のままそこまで断言できるあんたわ天災だよ!
main()
main(void)

も正しいよ
ホスト環境なら>>376でしょ?
C-FAQ くらい読んでから来ようね
>>379
アフォ。
正しいか否かとは、規格の話だから処理系は全く関係無い。
char *argv[]の方が好き。**argvと全く同じ意味だけど。
くくく。また釣られてやがるよ。
>>384
タイプ数の無駄。
int main(int ac, char**av)
これ最強。
タイプ数を減らしてもいい事は無い。
(゚Д゚)ハァ?悪影響がなければタイプ数は少ない方がいいに決まってんじゃん?
389デフォルトの名無しさん:03/01/08 02:02
>>388
なんで?ファイルサイズを抑えるため?
タイプ数増大は即ち労力の増大ナリよ
労力の増大は即ちミスの増加ナリよ
ミスの増加は即ち良くない事ナリよ
タイプ数増大は即ち労力の増大ナリよ ・・・ 間違い
労力の増大は即ちミスの増加ナリよ ・・・ 正解
ミスの増加は即ち良くない事ナリよ ・・・ 正解
タイプ数増大は良くない事ナリよ ・・・ 間違い
屁理屈を込ねるんじゃない!
393ああ:03/01/08 02:29
僭越ながら質問です。
数学で巨大整数の素因数分解とかやる必要があってC
をちょっと始めたんですが、整数の制度がCだと10進10桁
程しかないらしく実際には100桁、あるいは200桁以上の計算をしたいのに
心配です。VISUALC++を勉強した方がよろしいでしょうか?
> 僭越ながら質問です。

僭越という言葉を使える場面じゃないぞ。
恐縮とかにしとけ。
で、長大な整数は基本的に、ほとんどの言語でサポートされていない。
多倍長整数のライブラリをどこぞで拾ってくるべし。
>>396
あんたの言うほとんど、って一体......
>>396
>>328 はSchemeが多倍長整数をサポートしていることを利用したネタ。
399デフォルトの名無しさん:03/01/08 13:49
C言語で画像を表示させるには
どうしたらいいのでしょうか?
何かそういったコマンドとかありますか?
>>399
OSに依存ですな。
401399:03/01/08 13:52
>>400
OSはVineLinuxです。
402399:03/01/08 14:03
自己解決しました。
eeをつかったらできました。
403デフォルトの名無しさん:03/01/08 16:58
ポインタの宣言の正しい書き方は
char *ptr;

char* ptr;
どちらが正しいんでしょうか?
404匿名希望:03/01/08 17:00
char str[80];
strlen(str)-1;
上記のように -1 と引き算をするプログラムをよく見るのですが、
-1 とするとどのような効果が得られるのですか?
sizeof じゃなくて strlen ですか? さあ? 単にその手続き内での都合では?
>>403
char*ptr;
とか
char * ptr;
とかも書けますよ。
407404:03/01/08 17:11
sizeofではないです。僕はヌル文字を引くのかと考えたのですが・・
>>407
fgets() とかで取った文字列の後尾の改行を取り除いてるのではないかな。
409デフォルトの名無しさん:03/01/08 18:09
質問です。
Cってディレクトリを操作する関数は用意されてないんですか?
本屋に行ってCの本をパラパラ探しても書いてないんですよねー。
410デフォルトの名無しさん:03/01/08 18:11
>>409
標準にはないよ。
UNIXならopendir,readdir,closedirなどでできるよ。
411405:03/01/08 18:18
>>408さん、ありがとうございました。
412409:03/01/08 19:02
なるほど、わかりました。
UNIXプログラミングの本とかで勉強しないといけないんですね。
413IP記録実験:03/01/08 21:18
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/

1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。

27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?

38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27
鋭いです。

73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。
質問です! 例えば

int a;

{ 
  int a; 

  a++;  これを外側のaに対してするにはどうしたら良いですか?
    
}
415デフォルトの名無しさん:03/01/08 23:34
むりです
>>414
グローバル変数と同じ名前のローカル変数をつくるなよ。
というかそんなことできたんだな・・・・
面白い人ですね。あはは。
>>416
逆だな。ローカル変数と被るようなグローバル変数を作るなよ、と。
419414:03/01/08 23:53
仕様でしたか・・
じゃあ同名はやめとく。 どうもでした。
>>414
int a;

{
int *b = &a;
int a;

(*b)++;
}
C++ だったらスコープ解決演算子があるが、いずれにしても int a; はマズイな。
414はグローバル変数じゃないだろ。
>>422
スコープがかぶるという意味で同じだからいいでしょ
424414:03/01/08 23:58
>>420
できた〜〜あっ、でも
int *bがめんどいw
普通はスコープを隠したいから、わざわざブロックにするのではないか。
>>424
変数名をかえればいいだろ w
>>422
そう言われればそんな気がしないでもない。
>>427
自分のスタイルを貫け
なんと
C++なんで恐縮だけど、おもしろいこと発見した。(VC6)
int a = 0;
{
 int a = a; //未初期化で警告。
 int a(a); //これにするとちゃんと0が入る。
}
まあ、当たり前といえば当たり前だけど。
431デフォルトの名無しさん:03/01/09 00:27
char *p="ABC";

p[1]='S';

なぜだめなの?
ほぅ。
>>431
書き換えてはならないから
>>431
定数"ABC"へのポインタになるんじゃなかったっけ?
>>431
文字列リテラルは書き換え不可能なテキストセグメントに格納される処理系もあるからだよ。
>>429
お前が犯人か?
2chブラウザ以外からは見れないようにすれば軽くなるんじゃないの?
438デフォルトの名無しさん:03/01/09 00:49
y[i++]=i;

これやると、代入してからインクリメントなんだけど、
そんなもん?
>438
不定
ひろゆきって男前だよな
とりあえず全部の板を強制IDにしてほしいな
>>589
わーお。うち横須賀だしなー・・
とりあえず全部の板を強制エロにしてほしいな
>>440
なんかそのサイト、電波(トンデモ?)っぽいんですけど・・・
> 「b=b++」 は文法的にもまずいのでやはり「基礎」の部類でしょうね。

文法的はどこもおかしくない訳だが。
> n=n+1で、
> 右の計算が左に代入されるってことで、
> Cにはインクリメント演算子があるってことで、
> n=n++が基本その2だ。
> で、それを略すと
> n++
> で、もちろん、
> a=n++
> って書き方があるから、これが誤動作を起こす原因だとは思えない。

おいおいおいおいおい。
PTAが調子にのって通報しまくりそうだな
>>167
軽いいじめに発展する危険あり。
450デフォルトの名無しさん:03/01/09 10:14
C言語って何に使うんでつか?
プログラムを記述するのに使います。
一次元配列dataに適当な10個のデータを入力し、それをそのまま画面に出力するプログラムを作りなさい。
453デフォルトの名無しさん:03/01/09 15:17
>>452
やだ
454デフォルトの名無しさん:03/01/09 16:01
>>440
> C で扱われる「文字列」の概念が理解出来ていないからだと思い
> ます。「\0」は文字列の終端を表し、それ以外の文字はたとえ自分
> が代入した憶えがなくとも文字列の一部を成します。

これって'\0'以降も文字列の一部だと言いたいのかな。配列の一部であっても文字列の一部ではないと思うけど。
440 の knk たんは UNIX 板で有名な人
http://pc.2ch.net/test/read.cgi/unix/1041858303/l50
の 過去スレ一人目の 800- あたりから読んでくれ。
へぇ、有名な人なんだ。*dget++; *dget++;なんて無駄な間接参照をする人が。
それとも意味があるのかしら。
有名な人ではなく2ちゃんねるの中のUNIX板でのみ有名な人。
世間一般には無名。
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 138720人 発行日:2003/1/9

年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。

そんなわけで、年末に予告したIP記録ですが実験を開始しています。

「2ちゃんねる20030107」
こんな感じで各掲示板の最下部に日付が入ってるんですが、
20030107以降になってるところはログ記録実験中ですー。

んじゃ!

────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
>>454
\0より後ろについて好意的に解釈すると

char str[] = "asdf\0jkl";
こうすると"asdf"と"jkl"の二つの文字列として使ったりできます、とか。

もしくは
char str[10] = "asd";
str[4] = 'f';
みたいにしても、str[5] == '\0'とは限らないので
後ろにゴミがつきます、とか。
460デフォルトの名無しさん:03/01/09 20:23
Unixのシェルから実行した

int main(void)
{

return 0;
}

が正常終了したときに返って来る0
を利用したい場合、どのような勉強を
すればいいですか?
461名無しさん@Emacs:03/01/09 20:31
>>460
何か実行したあとに
echo $?
してみそ。

% ls none_file
% echo $?
1
% ls exists_file
% echo $?
0

462デフォルトの名無しさん:03/01/09 22:24
void swap_ptr(char **x,char **y);

char *s="abc";
char *ss="def";

swap_ptr(&s,&ss);

はうまくいきます。

void swap_ptr(char **x,char **y);

char s[15]="abc";
char ss[15]="def";

swap_ptr(&s,&ss);//エラー

の場合はどうすればうまくいきますか?
>>462
そのエラーが答を教えてたりしない?
void swap_ptr(char (*x)[15],char (*y)[15]){}
465ブルームオブユース:03/01/09 22:37
>>463-464
ありがとう
pc3にも入れてくれ
467デフォルトの名無しさん:03/01/09 23:03
>>465
てか、根本的に間違ってるんだけど、それはいいのか?
ポインタと配列の違いを勉強しましょう。
468tester:03/01/09 23:08
質問。
memcmpとbcmp、intelのCPUでで動かすならどちらが処理速度は速い?
また、memcmpはもう少しだけ速くできると思うけど、
どなたか最適化してくれませんか?


469デフォルトの名無しさん:03/01/09 23:43
>>468
bcmp()なんてのは標準じゃないよ。
memcmp()の高速化を聞くより、自分のやりたいことを聞け。大抵はアルゴリズムレベルで
劇的に改善できる。
470tester:03/01/09 23:48
>>469
どこかアルゴリズムに関する良いサイトはありますか?
できればCPU別にどういったコーディングが効果的というシビアな考察がされているサイトなど。
私的にmemcmp()を使用している部分をまず高速化したいと思いまして。。
>>470
ネタじゃないのか?
取り敢えず本気でターゲットのCPUを絞って高速化したいのなら
使用頻度の高い関数はアセンブラで組みなはれ
それと最適化の意味を間違えてると思われるので
もう少し勉強した方が良さげ
472tester:03/01/10 00:08
>>471
ええ、そこでまずmemcmp()をどなたか最適化して公開しれくれまいか?
とずうずうしいことを書いてしまっていたわけですが、
ユーザ関数の方をアセンブラ化した方が効果的なのかもしれませんね。
アセンブラは全然わかりませんが、
makeする時に*.cと同様に*.asmをmakeするだけで良いのでしょうか?
>>472
開発環境を(ry
アセンブリ言語を標準でアセンブルできるとは限らない罠。
474tester:03/01/10 00:16
>>473
すみません、最終的にはVCでコーディングしたいのですが、
当面はcygwinです。
OSはwinNT4.0
CPUはセレロン500くらいです。

475デフォルトの名無しさん:03/01/10 00:17
>>472
そこでまず、とか言うまえにprofilingしたのか?10%の部分を100万倍速くしたところで
1割も速くならないんだぞ。
速くしたいならコンピュータを買い換えろ。
477tester:03/01/10 00:25
>>475
自分で自作memcmp()を作りましたが、処理速度約30%ダウンしました。
もちろんCで組んだので、なんとも言えませんが。
計算に1年近くかかるものなんですよ。
ですから1割なら大きいです。

>>476
会社のものなので。。
最適化と言うのはコンパイラの仕事で
C言語の範囲で各CPUに対して最適化する事は出来ない
出来るのはアルゴリズムの見直しと実装方法のみである
だから他のスレで聞いてくれ
>>477
計算にかかる1年の内、memcmp()が動いている時間は
何日分ぐらいになるんだ?
480デフォルトの名無しさん:03/01/10 00:31
>>477
分からんやつだな。profilingしたのか?
10%の部分を30%速くできたとしても3%しか速くならんのだぞ?算数もできないようならヤメレ。
>>474>>477
memcmp相当ならgccからVC++に変えるだけで2割以上速くなる。
Intelのコンパイラ使えば、もっと速くなるんでは?

なので、人間のする仕事はアルゴリズムの改善。
こちらはちょっとしたことで数百倍速くなることもある。
482tester:03/01/10 00:32
>>478
その通りですね。
ということはコンパイラを良いものにした方が効果的ということでしょうか?
winでしたら、何が良いのでしょうか?
自作memcmp()のソースを貼って見る事をお勧めする
484デフォルトの名無しさん:03/01/10 00:35
485デフォルトの名無しさん:03/01/10 00:36
計算に1年だと?そりゃまたすごいな。ちゃんとフォールトトレラントなシステムで
やってるのか?
Celeron500ならPen4 3Gにすれば2ヶ月くらいで終わるんじゃないか?
総当たりでパスワードクラックとか?
487tester:03/01/10 00:41
>>479
1秒に平均30000回でしたので、
1年で約9460億ループすると思います。
処理速度が10%向上すれば331日で同結果が出せるので、
一ヶ月くらい変わってきますよね?

>>481
さっさとVCに移行した方が良さそうですね。
後はユーザ関数の見直しでしょうか。。


>>484
パッと見た目だけど境界線があってないと遅そう…
>>487
素直にアセンブラで書け。
こんなスタイルになるのかな?

誰かが他の掲示板で密告→第三者が2chでスレ建て→祭り
491デフォルトの名無しさん:03/01/10 00:45
>>487
1年の10%は1.2ヶ月だろ。ネタなのか?やっぱりバカだろ。
>>487
それってもっと対極的な部分で改善できない?
たとえば、バブルソートからクイックソートへ、みたいに。
対極的 > 大局的
494デフォルトの名無しさん:03/01/10 00:48
>>487
testerのレベルがわからないが、プログラムの詳しい人にソースを見てもらってアドバイスをもらうのが現実的じゃないか?
1年の計算が1日ぐらいで済むかもしれない。
素人が実行に1年もかかるプログラムを書くのは問題があると思うぞ。
処理速度が10%向上するのに
365に10/11を掛けた>>487は痛いけど
>>491はもっと痛い
496tester:03/01/10 00:51
>>484
これはとても参考になります。ありがとうございました。

>>483
ソースは会社ですので、即席で思い出して書いてみました。
int mem_cmp(char *buf1, char *buf2, int len)
{
int i;
int len4;

len4 = len/4;
len4 = len4*4;

for(i=0; i<len4; i+=4){
if(*(int *)buf[i] != *(int *)buf2[i])
return(-1);
}
if(len4 != len){
for(; i<len; i++){
if(buf[i] != buf[i])
return(-1);
}
}
return(0);
}
こんな感じです。
基本的には、long型で比較し、あまった部分は1バイトずつ比較する。
この方法では遅かったです。
if()で比較してる部分で速度低下してるみたいですし、
1バイトずつ比較してる部分で更に速度低下してました。
自分ではどうしたら良いものかと。。
>>496
memcmp()とやってる事違うし…
>>496
memcmpじゃない・・・
つかそんなに速度が重要なら最初からメモリのアラインメント調整しとけよ
500デフォルトの名無しさん:03/01/10 00:56
>>496
どれだけ、Cで工夫して書いても本来のmemcmpよりは速くならないと思うが。
理由は
http://www1.kcn.ne.jp/~robe/pf/pf009.html
根本的なプログラムの設計・アルゴリズムを改良した方が。
501tester:03/01/10 00:57
>>497
memcmpは大小の比較してますが、
今回私の使うプログラムでは必要ないので、それが無駄だなと思い立ったのが発端です。
比較して違ったら即-1を返す。
基本的には、比較して同じパターンが少ないので、
-1を返す方を優先としました。

502デフォルトの名無しさん:03/01/10 00:57
>>501
2分探索とかハッシュとかを使って比較回数を減らすことはできないの?
ちょっとした疑問なんですけど
このmem_cmpってbuf1、buf2が4バイト境界上に無いと極端に遅くならないですか?
505tester:03/01/10 01:15
>>503
データ長が奇数の場合もあるので、難しいと思います。

>>504
そうです。
極端に遅くなります。
むしろ奇数がほとんどなので、どうにか速くしたいのですが。。
>>500
memcmp()で比較を終了する位置までの平均が
極端に小さい場合や大きいと予想される場合や
その平均とオブジェクトのサイズの平均が掛け離れてる場合等は
自作の方が早くなると思う
と言っても、本当に早さが要求されるならアセンブラで書くべきだが…
507tester:03/01/10 01:19
>>506
とりあえず、上記書き込みからアセンブリ言語が効果的ということは理解できました。
どうもありがとうございました。
>>505
何か>>503に関して勘違いしているだろう。

そもそもそんなに比較しなければならないのはなぜ?
どんなアプリケーションを作ろうとしているのだ?
509503:03/01/10 01:23
>>505
比較回数というよりmemcmp()の呼び出し回数という意味で
言っていました。
曖昧な言い方ですまん。
>>507
>むしろ奇数がほとんどなので
何か勘違いしてると思われ
この方法で本当に遅くなるのは1バイトずつ比較する時ではなく
buf1とbuf2のアライメントが4の倍数ではないとき
また、比較するもののサイズがある程度大きいのなら
少しアンロールすれば、それなりに早くなると思われ
511デフォルトの名無しさん:03/01/10 01:32
>>508
>>そもそもそんなに比較しなければならないのはなぜ?
>>どんなアプリケーションを作ろうとしているのだ?
おれも聞きたい。
計算だけで1年かかるんでしょ。
512デフォルトの名無しさん:03/01/10 01:32
>>510
そうやったところでライブラリに勝てるわけもなく…。
どうしようか悩んでいる暇があったらさっさとコンパイルして実行しろ。
>>512
そのライブラリがCのみで書かれてたら早くなるでしょう
要するに、そのライブラリの実装次第
515デフォルトの名無しさん:03/01/10 01:37
>>495
オイオイ、10/11は合ってるだろ。
516デフォルトの名無しさん:03/01/10 01:38
>>514
まさかそんなこともないだろうけど、たとえCのみで書かれていたとしても503にはムリという話なんだが、。
>>515
それまでの話の流れで、この場合明らかに9/10
518デフォルトの名無しさん:03/01/10 01:47
>>517
イヤイヤ、それは495はさらにイタイとと言っているワケだが…。
>>518

>>491
>1年の10%は1.2ヶ月だろ
と言う発言は
>>487
>一ヶ月くらい
に対する発言に見えるので
>331日
を見れば328日と答えるのが正しいと思われ
520デフォルトの名無しさん:03/01/10 02:06
>>517
話の流れもなにも、速度というなら10/11だろ。

>>519
そんな細かい話カコワルイ。
まずは、がいしゅつのコンパイラを代える(intelのが良いかと)のと、より速いマシンに
代えるってのをやってみるべきだと思う。

次にやるべきことは、memcmp()の高速化なんかじゃなくて、何度も言われてるように
アルゴリズムの改善。それも「あなたが手をつけたいところ」ではなく、激しく言われているように
プロファイリングしてもっとも時間のかかっている部分を判定して、そこのアルゴリズムを改善しる。

データの大きさが奇数で困る、ってんならケツにダミーのデータでも付け加えて大きさを
そろえればいいんでないかい。当然アラインメントも揃えるべし。

memcmp()を改良して高速化するというのは恐らく無駄。それなりの処理系なら最初っから
アセンブリ言語でカリカリにチューニングしてるから。余地があるとすればデータの大きさや
アラインメントを利用した細工くらいか。

同関数もしくはその他の関数をアセンブリ言語で書くってのも、それなりの経験と技術を持って
いるのでなければやめた方がよい。最近のコンパイラは下手な人間が書くより速いコードを吐く。

bcmp()は(もし使える処理系なら)memcmp()と同じモノである可能性が高いので比べるだけ無駄。


…ところで、「10%向上すれば331日」というのが未だにどういう計算で出したのか
分からんのだが教えては貰えないか。マジで。
【速報】小学生狙う、悪質な書き込み【キター!】
http://live2.2ch.net/test/read.cgi/news/1042129229/

昨日のニュー速の書き込みがニュースに
【速報】小学生狙う、悪質な書き込み【キター!】
http://live2.2ch.net/test/read.cgi/news/1042129229/

昨日のニュー速の書き込みがニュースに
【速報】小学生狙う、悪質な書き込み【キター!】
http://live2.2ch.net/test/read.cgi/news/1042129229/

昨日のニュー速の書き込みがニュースに
内容証明が来たら、名誉毀損の書き込みがあったことを知りうるでしょ、
その時点で削除しなきゃだめよ、ってことだね
>>25
金があるやつは裁判も簡単にできていいなあ。
527質問:03/01/10 11:06
初心者です。答教えて欲しいです。

5つの数値を入力した時に、その平均、最大値、最小値を求める
プログラムを作れ.(実数も計算できるようにする)
なお,配列,繰り返し文(3種類のうちどれか)
を使用して作成せよ.

ソースは、
528デフォルトの名無しさん:03/01/10 11:07
宿題スレへどうぞ
こっちか。

他に、今、裁判中なのは何??

最高裁への上告は認められなくなったから、これで事実上判決確定だよ。
逆転も何もないって。
勢いで上告なんかしても一発で上告却下(門前払い)だよ。

二審も一審を支持。これに対して上告しようにも、
刑事訴訟と同様、自由に上告できるってもんでもないのです。
民事訴訟法312条 (上告の理由) 1項
「上告は、判決に憲法の解釈の誤りがあること
その他憲法の違反があることを理由とするときに、することができる。」
http://www.m-net.ne.jp/~doba/goto/hon.htm

ようするに上告しても今の制度では100%無駄。
これで完全終了ってことか。    
>>448
47とか言う奴に言えよ
532デフォルトの名無しさん:03/01/10 12:43
telnetからでも操作出来るように、
Cにより、CUIでGUI風のプログラム(システム)
を作成する場合、例えば・・・
+------------------------------+
|   [MENU1]     |
|   [MENU2]     |
|  (*)ITEM1     |
|  EDIT1[   ]   |
|               |
|   [CLOSE]     |
+------------------------------+
MENU1、2はボタンでEnterにより、新規画面が表示
ITEM1の()はスペースキーで*がセット/アンセット
EDIT1の[]内は入力
各アイテムはカーソルキーで移動
このような、プログラムを作成したいのですが、
指針となるような本、サイトをご存じの方は
ご教授下さい。
かなり大変でしょうか?
さて、、◆oqXRTXh2QYさんの毒見が終わったようなんで、
俺も去年の餅を食ってみるか。。。
大阪キタ━━━━━━(゚∀゚)━━━━━━ !!!!!
>>312
おぉー。。。
マンコとかきまくることは法律でも問題ないからIPなどとってくれ!!
ねえってば
>461
亀レスすいません。ありがとうございます。
lsコマンドを試してみたところ、その通りに
できました。
echo $?
の$?がよく分かりませんが調べてみます。
IPが出てますよ
>>536
スレ違いかつネタにマジレスだが、違法か合法かより、訴える奴がいるかいないかが問題だ。
マンコ書いて訴える団体はない。
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 139038人 発行日:2003/1/10

なにやら、連日メルマガだしてるひろゆきです。

そんなわけで、ログ記録実験ですが、いちいちサーバ指定するのが面倒なので、
全部のサーバに入れてみました。

重くなって落ちたりしてもご愛嬌ってことで。。。

んじゃ!

────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
時代は半角2次元!!
まほろたん(*´д`*)ハァハァ
ひろゆきは自宅に押しかけた暴走族に土下座した人だよ。
暴力団に脅されたら山奥に連れ出されるまでもなく玄関先で二つ返事で請け負うんじゃない?

権力には抵抗するけど、暴力には滅法弱い、それがわれらのひろゆき
10%速度向上の場合、もとの期間に 10/11 をかけたものが答え、でよいのだが。

たとえば10の仕事を1の速度で実行すると、10の時間がかかる。
10%向上して1.1の速度で実行すると、10->9ではなく9.090909...となる。
つまりもとの期間の 10:9.09 = 11:10 -> 10/11 になる。
はどこで叩かれた有名人さんだろう?
■ライブアライブの巻■

======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 139038人 発行日:2003/1/10

なにやら、連日メルマガだしてるひろゆきです。

そんなわけで、ログ記録実験ですが、いちいちサーバ指定するのが面倒なので、
全部のサーバに入れてみました。

重くなって落ちたりしてもご愛嬌ってことで。。。

さておき、1/11ですが、2002/10/30にリリースされた『黒イジワルケイ』に参加したアーティストと、
2ちゃんねるで募集したバンドというよくわからない対バンのイベントがありますです。

http://marmalade.skippy.co.jp/event/live.html
*******************
高田馬場AREA 午後6時入場受付開始
当日券のみ開場にて!3,000円 (別途ドリンクチャージ500円)
547デフォルトの名無しさん:03/01/11 18:15
からあげ
548デフォルトの名無しさん:03/01/11 18:55
conioのヘッダーのあるフリーのコンパイラを知ってる人いたら教えてください。
clrscrを使いたいんですけど、それに代わるプログラムの作り方が
わからないので、どうすることもできません。
ボーランドのフリーのC++コンパイラにはないの?
>>543
権力にもあっさりと屈服するじゃん w
警察や裁判所にはいっさい抵抗せずログを見せちゃうし。
551デフォルトの名無しさん:03/01/11 19:31
>>549
それでやっても定義されてないっていうエラーが出ます。
>>551
stdio.hとかはインクルードできるの?
>>551
確かdjgppで出来たと思った
554デフォルトの名無しさん:03/01/11 21:17
円周率をモンテカルロ法で求めようとして、下のプログラムを作ったのですが、家のパソコンでは上手く表示されるのに
学校のパソコンでは「セグメントエラー」と出てしまいます。(汗)
原因が分かる人は教えてください。m(_ _)m

#include <stdio.h> #include <stdlib.h> #include <math.h>
#define rnd() (1.0 / (32767.0 + 1.0)) * rand()/*0から1までの乱数*/
#define n 5000000 /*試行回数*/
#define BETTER 129 /*乱数を配列に登録する数*/
double pool[BETTER];
void first_better_rnd(void)/*まず乱数を配列に登録*/
{ int i;
for(i = 0; i < BETTER; i++){pool[i] = rnd();} }
double better_rnd(void)/*出来た乱数の配列のiを適当に変えて、そこにまた乱数を入れる*/
{ int i =(int) BETTER / 3 ; double r; i = (int)(BETTER / pool[i]);
i = i - 1 ; r = pool[i]; pool[i] = rnd(); return r; }
int main()/*モンテカルロ(当たり外れ)法*/
{ int i, h; double x, y, p; h = 0;
for(i = 0; i < n; i++){ x = better_rnd(); y = better_rnd();
if(y < sqrt(1 - x*x)) h++; }
p =(double) h / n; /*4分円に入る確率がπ/4である事を利用している。*/
printf("円周率 = %Lf \n", 4 * p); return(0); }
555554:03/01/11 21:18
改行の関係で読みにくいです。すいません。
556デフォルトの名無しさん:03/01/11 21:21
配列の要素数っていくつまでなら可能なんですか?
557デフォルトの名無しさん:03/01/11 21:22
>>556
普通のコンパイラなら2^32-1までじゃないかな。
558デフォルトの名無しさん:03/01/11 22:03
first_better_rnd()ってどこから呼ばれてるの?
>>557
さて、64bitCPUでも引き合いに出そうと思うがどうか。
>>554
gccでコンパイルして動かしてみたら、
Segmentation faultが発生した。
円周率を表示するところを Lf → f にしたら、
発生しなくなった。
でもこれ結果が0とか表示されるけどあってるの?
562560:03/01/11 23:00
>>561
そりゃ円周率が0ではない。
プログラム中に間違いがある。rnd()がおかしい。
宿題スレに誘導した方が良くないか?円周率知らない専門学校生だぞ?
えんしゅうりつは3だよ〜
ぼくがっこうでならったもん!
#include <stdio.h>
void main(void){printf("円周率 = およそ3\n");}
566554:03/01/11 23:28
今作り変えてみました。gcc持っている人は誰か動作確認してやって
ください・・・。
#include <stdio.h>
#include <stdlib.h>
double random2( void )
{ return (1.0 / (RAND_MAX + 1.0)) * rand();}
int main()
{ int i, j, c; srand( 1 );
for( j = 0; j < 5; j++ ){
for( c = 0, i = 0; i < 1000000; i++ ){
double x = random2();
double y = random2();
if( (x * x + y * y) < 1.0 ) c++;
}
printf("%g\n", ((double)c / i) * 4 );
}
return 0;}
自称女子中学生の方にセクハラ発言はセーフですか?
2chで告知するかどうかを知ることで?(^_^;)なんでそうなるんだ?

そりゃそうだ(^_^;)まあハッキングと強盗は区別するってことで

20レス分くらい読めよ(^_^;)

どこまでOKなのかわかってたら訴訟で負けたりしません(^_^;)

なるほど(^_^;)
>>566
ところで、そっちではうまく動いてるの?
570554:03/01/12 00:04
家のだと上手くいっています。(.NET Framework SDK)
ただ、学校のはgccなので上手くいくか分かりません。
>>566
>srand( 1 );

話聞いてなかったんだけど乱数固定したいの?
572デフォルトの名無しさん:03/01/12 00:13
>>566
RAND_MAX - 1 じゃないのか?まぁあまり変わらんが。
あと <1.0じゃなくて<=1.0だし。
>>566
素直にxとyはrand()の返り値にして
((double)RAND_MAX)の2乗と比較した方が良さげ
574七誌:03/01/12 01:57
unixでは#include<conio.h>でgetche();などはちゃんと機能しますか?
どなたか教えてください。



           ・・・2ちゃんねるの時代も終わりに近づいてる・・・

ご愛嬌・・・
被害の大きさに差がありそうだけども。
誹謗中傷一番垂れ流しってどこかねぇ?
577デフォルトの名無しさん:03/01/12 02:36
>>574
そんなのねーよ。
>>574
単純なプログラム以外はOSごとに違うライブラリを使用するのがC言語だ。
犯人のトリップで書き子したやつは警察にログが行ってます
580デフォルトの名無しさん:03/01/12 11:49
>>574
漏れの知る限りDOS系だけだ
UNIXでどうするかは↓が解りやすいと思う
三木英正/塩谷修著『実用UNIXシステムプログラミング第2版』日刊工業新聞社,237ページ
581デフォルトの名無しさん:03/01/12 13:28
コンパイラはBorland何だけど、インクルードファイルが使えません。

Error E2209 milk.c 6: Unable to open include file 'stdio.h'
Warning W8065: Call to function 'fprintf' with no prototype in function main

教えてくださいませ。(^。^/)ウフッ
環境変数
583デフォルトの名無しさん:03/01/12 13:39
>>582
コンパイルする時は「bcc32 ファイル名」だけで逝けます。
ってことは環境変数設定できてるってことじゃないの?
>>581
bcc32.cfgが無い、あるいは内容が間違っている。
585デフォルトの名無しさん:03/01/12 13:42
C:\Borland\BCC55\Bin
↑に設定していますが。
インクルードファイルがC:\Borland\BCC55に入ってるのはどういうこと?
C:\Borland\BCC55←にも設定しなくちゃならないの?
まさか。(^^ゞ
-I"C:\Borland\BCC55\include"
-L"C:\Borland\BCC55\lib"
587デフォルトの名無しさん:03/01/12 13:50
>>584=>>586
具体的におながいします。
>>587
>>586の内容をbcc32.cfgに入れて、C:\Borland\BCC55\binに置く。以上。
589デフォルトの名無しさん:03/01/12 14:01
>>588
あっそうか。それやんの忘れとった。スマンスマン(^.^)ノ
いやー、年取ると頭がはたらかんのですわ。いんぽでもなー。
がんがれよ、これからのにっぽんはきミらわかもんの時代やでー。
>>589
ついでにもう一つ。

-L"C:\Borland\BCC55\lib"

この一行をilink32.cfgに入れて、bcc32.cfgと同じディレクトリに置く。
これを忘れるとリンクできない。
591あほぉ:03/01/12 18:50
classと構造体ってどう違うの?
>>591
デフォルトがprivateかpublicかって・・・C関係ないじゃん
593あほぉ:03/01/12 19:03
( ´_ゝ`)フーン
594まつもと:03/01/12 20:29
>>585
readmeは読みましょう^^;;;;;
おれも
#cMlzzMPq
597名無し:03/01/12 20:42
unixでCを組むとき、gets();というのはありますか?
ニヤ(・∀・)ニヤ
599デフォルトの名無しさん:03/01/12 21:18

配列の添え字範囲を実行後に宣言するのはどうすたらいいの?
つまり、a[m][n]のm,nはデータを読んでからじゃないと決まらないとき。
>>597
g++レベルで警告を出してくれるかわいい関数だ。
601名無し@沢村:03/01/12 21:28
>>599
>a[m][n]のm,nはデータを読んでからじゃないと決まらないとき

ってどんなときよ?そんなときがあるのか?
そのデータがまともな形式のものならデータ長を格納してある場所があるはずだから、まずそれを読んでからm,nの長さを動的に確保しろ。
そのデータがファイルならファイルサイズからm,nを割り出せ。
頑張れ!!
602デフォルトの名無しさん:03/01/12 21:35
>>601
データを読んでからじゃないと決まらないなんていくらでもあると思うが。
603ななし:03/01/12 21:37
>>602
たとえばJavaなんて糞言語つかってて、Stream経由でしか読めないとき。
604デフォルトの名無しさん:03/01/12 21:40
>>603
?
普通にファイルからデータを読み込むとかDBからデータを取得するとか
いくらでもあると思うが。
605名無し@沢村:03/01/12 21:43
>>599
ヌヒよ、わかったぞ!!
データを読むのにa[m][n]と2次元配列が必要ということは、そのデータはいくつかにブロック化されているな?
ヌヒよ、そういうブロック化されてデータというのはまともなデータだから安心していいぞ!!
まずそのデータには最初のところにデータ全体に対するインフォメーションが記述されているから、そこを読め!!
たいがいはそこにブロックの数と全体のデータ長が書いてあるよ。ブロックの数は必ず書いてある。
全体のデータ長は書いてあるかもしれないし、書いてないかもしれない。
だが、もし書いてなかったとしても各ブロックの先頭には必ずブロックごとのブロックサイズが書いてあるから安心しろ。
ヌヒよ、それらを読めばm,nがわかるからそれらを元にデータを読め。
頑張れ!!
606デフォルトの名無しさん:03/01/12 22:00
>>605
599だが、いろいろサンクス。
しかし、漏れの言ってるのはもっと低レベルの質問。
多次元の配列の添え字範囲を動的にするにはどうしたらいいのだ?
という初歩的疑問。一次元ならわかるのだが。
>>606
と言うかお前が低レベル。
>>606
(ポインタとか知らないんだろうなぁ・・・)Oo(´ゝ`)
609名無し@沢村:03/01/12 22:10
>>606
ヌヒよ、ヌヒのいわんとしてることは単に多次元配列の動的確保のことか?
1次元と全く同じだが、わからんか?
ヌヒよ、1次元の場合は、
a=(unsigned char*)malloc(n+1);
と確保するだろ?
2次元の場合も、
a[n]=(unsigned char*)malloc(m[n]+1);
で良いが、こういう意味なのか?
arr[x + y * width]でしのげ。
611デフォルトの名無しさん:03/01/12 22:17
>>609
599だが、サンクス。そういうことです。
プログラミング初心者なのでアフォな質問許してくれ。
612デフォルトの名無しさん:03/01/12 22:17
>>609
ヌヒよ、なぜunsignedなのだ?
613デフォルトの名無しさん:03/01/12 22:19
>>610
それは考えたが、3次元、4次元になると収拾がつかないと思た。
by599
>>613
お前は視覚イメージがないとコードが書けないのか?
>>614
以前にポインタわかってないので・・・。
616デフォルトの名無しさん:03/01/12 22:32
初心者質問なんですが
配列の中に1が来るまでそれまでを0にするループを作りたいんですけど

while(hairetu[i] == 0 ){
hairetu[i] = 0;
i++;
}

で、実行エラーがでます。
どうすればいいか誰か教えてください。
617デフォルトの名無しさん:03/01/12 22:34
>>616
それじゃ1がくるまでじゃなくて0の間だぞ。
sentinelとして配列の上限に0以外を入れとけ。
618デフォルトの名無しさん:03/01/12 22:34
>>616
1が来るまでならwhile(hairetu[i]!=1)だと思うけど・・・
>>616
for使え
デバッガ使え
1が来ない可能性を考えろ
620616:03/01/12 22:36
まちがえました

while((TMP[i]) == 1 ){
TMP[i] = 0;
i++;
}

これで、エラーがでます。すいません。
621デフォルトの名無しさん:03/01/12 22:37
>>620
・・・・・・。
>>620
アドレス範囲大丈夫?
>>620
お前は今持ってる参考書を30回読み直せ。

はい、次。
624616:03/01/12 22:42
とりあえず、forでやったらできました。
以上です。
625デフォルトの名無しさん:03/01/12 23:33
#include <stdio.h>
#include <conio.h>
#include <ctype.h>

intmain(void)
{
int add = 0;
int num = 1;

printf("数字を入力してください:");
scanf("%d", &add);

puts("1から100までの等差数列");

for( ; num <= 100; num += add) {
printf("%d ", num);
}

printf("\n1から100までの等比数列を表示します。\n");

for( ; ; ) {
if(kbhit()) {
num = 1;

for( ; num <= 100; num *= add) {
printf("%d ", num);
}
break;
}
}
626625:03/01/12 23:34

printf("\n終了します。よろしいですか?\n");

for( ; ; ) {
if(kbhit()) {
printf("\n終了しました。\n");
break;
}
}
scanf("%d", &num);
return(0);
}

1:数字(公差)を入力して等差数列を表示
2:等比数列出力メッセージを表示。(キー入力待ち)
3:キー入力後、等比数列表示。
4:終了確認メッセージを表示。(キー入力待ち)
5:キー入力後、終了メッセージ表示。

としたいんですが、2番目のキー入力待ちでキーボードからキーを1回押すと、
一気に最後までいってしまいます。4番のキー入力待ちのところでとまってくれません。
どうしてでしょうか?(kbhit()の使い方が間違ってます?)
離すのが遅い!
>>626
kbhitはキーボードバッファからの一文字読み込み。
なのでキーボードバッファに残ってると止まらず逝ってしまう。
629デフォルトの名無しさん:03/01/12 23:39
Fatal: ファイル C0X32.OBJ が開けません

って何?
630デフォルトの名無しさん:03/01/12 23:40
>>626
てか、kbhit()なんて使わんよーに。
scanf()は標準だけど使わないよーに。
とりあえずgets(), sscanf(), getchar()で。
631デフォルトの名無しさん:03/01/12 23:42
あ、gets()もバッファオーバーフロー攻撃あるからfgets()で。
632デフォルトの名無しさん:03/01/12 23:46
ここはひどいインターネットですね
http://game3.2ch.net/mmo/index.html#1
633625:03/01/12 23:47
みなさん、レスありがとうございます!

kbhit()は使うなとのことですが、hbhit()の使い方のところなんで。。。
>>628さんが言ってるのが原因みたいですね。
scanf()避ける奴はチキン野郎
635625:03/01/12 23:51
たびたび質問ですいませんが、そのkbhit()でキーボードバッファを
解放(?初期化っていうのかな?)するのはどうしたらいいんでつか?
636デフォルトの名無しさん:03/01/12 23:52
asdfg と入力してアルファベット順に出力したいんですが
どうソートすればいいんですか?
637デフォルトの名無しさん:03/01/12 23:57
>>633
getchar()じゃだめなのか?
どーしてもkbhit()つかいたいんなら
while (!kbhit()); getch();

>>636
普通ソートと言えば辞書順だが、何が聞きたいんだ?
qsort()使え。
638デフォルトの名無しさん:03/01/13 00:00
おまいら質問する時は具体的に書け
俺たちはおまいらの脳内スレにアクセスする権限がないのだから
639デフォルトの名無しさん:03/01/13 00:02
>>638
権限は関係ないが、手段がないのが問題だ。
640デフォルトの名無しさん:03/01/13 00:06
人に分かるように質問する
これもまた勉強なり
641デフォルトの名無しさん:03/01/13 00:11
>>637
うーむ、kbhit()なんて20年近く前なんで仕様が分からんのだが、
while (!kbhit()); while (kbhit()) getch();
とかしないといけないのか?
642デフォルトの名無しさん:03/01/13 00:19
error C2297: '*' : 不正な右オペランドです。
というエラーは何が原因でしょうか?
>>642
すごい喧嘩の売り方だな。
644デフォルトの名無しさん:03/01/13 00:21
>>642
右オペランドが不正なのが原因だろが。
教えて欲しかったらソースも書け。
645デフォルトの名無しさん:03/01/13 00:25
>>644
pDC->TextOut(x * TextWidth * 3, y, cData);
よろしくお願いします
646デフォルトの名無しさん:03/01/13 00:32
>>645
宣言も書けよ。
647デフォルトの名無しさん:03/01/13 00:34
本に宣言がメンバ関数と書いてたのでそのまま定義したのですが、
メンバ変数にすると直りました。
x * TextWidth * 3
が負?
649625:03/01/13 00:45
とりあえず、getch()にしたら思い通りにできました。
レスくれたみなさんありがとうございました。

今はあまりつかわれないみたいなkbhit()ですか、バッファの件、勉強になりますた。
650デフォルトの名無しさん:03/01/13 00:48
動的な線形リスト作ってるんですけど
挿入ソートが出来ないです。

単方向だときついですかね?
651デフォルトの名無しさん:03/01/13 00:50
>>650
挿入する時にソートするだけなら単方向でなんの問題もないと思うが。
1年生の基礎だな。
652650:03/01/13 01:05
やっぱり、入れ替えが上手く出来てないだけかな・・・
もうちょい考えて本当にダメっぽかったらまた質問します。
653138:03/01/13 01:06
文字列の先頭アドレスを受け取り,文字列内の文字を昇順にするのはどうすりゃいいですか?
654デフォルトの名無しさん:03/01/13 01:11
>>653
漠然としてるな。ソートすればいい、じゃだめ?
だからマニュアルのqsort()の所をミロってば。
>>653
ソートするといいですよ。
>>138
まぁるぅちぃぃだいすき
p=str;
l=strlen();
for(i=0;i<l-1;i++)
for(j=i+1;j<l;j++)
・・・
657650:03/01/13 01:30
うーん、やっぱりきついかも・・・

入力終わってから全部一気にソートしようと思ってるんですけど、
出来ないなら、逐次挿入ソートの方が良いですかね・・・?
>657
例えば、注目しているセルを指すポインタをpとして、
pの一つ前の状態を保存しておくポインタqを使ってもできないの?
#include <stdio.h>
#include <ctype.h>

int main(void)
{
int num;

printf("何かキーを入力してください。");
scanf("%d", &num);

if(isalpha(num)) puts("アルファベットです。%sですね。", num);
if(isdigit(num)) puts("数字です。%dですね。", num);
if(!isalnum(num)) puts("記号ですか?");

return (0);
}

とっても基本的なことですがよくわかりません。
キーボードから数字を入力しても、「記号ですか?」になってしまいます。
このプログラムを完璧に動かすにはどうなおしたらいいですか?
660659:03/01/13 02:35
#include <stdio.h>
#include <ctype.h>

int main(void)
{
int num;

printf("何かキーを入力してください。");
scanf("%d", &num);

if(isalpha(num)) printf("アルファベットです。%sですね。", num);
if(isdigit(num)) printf("数字です。%dですね。", num);
if(!isalnum(num)) puts("記号ですか?");

return (0);
}

修正。はずかしい。。。
661デフォルトの名無しさん:03/01/13 02:38
ほいよ。

#include <stdio.h>
#include <ctype.h>

int main(void)
{
int num;

printf("何かキーを入力してください。");
scanf("%d", &num);

if(isalpha(num)) printf("アルファベットです。%cですね。\n", num);
if(isdigit(num)) printf("数字です。%cですね。\n", num);
if(!isalnum(num)) puts("記号ですか?");

return (0);
}

662659:03/01/13 02:44
>>661
それ、うまく動きません・・・
663デフォルトの名無しさん:03/01/13 02:47
二つのプログラムを同時に動かして、
プログラム間でデータをやりとりする方法を教えてください。
ただしファイルを使わない方法です。
664663:03/01/13 02:52
OSはUNIX系です。
サーバ・クライアント方式っていうんですかね、こういうのは。
665デフォルトの名無しさん:03/01/13 03:03
>>662
きちんとと動いているが。
まさかEBSDICなのか?

C:\tmp> a
何かキーを入力してください。97
アルファベットです。aですね。

C:\tmp> a
何かキーを入力してください。48
数字です。0ですね。

c:\tmp>
666デフォルトの名無しさん:03/01/13 03:05
>>664
同じマシンの上なら共有メモリ。
pipe、socketなんかでも検索してみろ。
クライアントサーバかどうかは関係ない。もう1つ上のレベルの話だ。
667名無し募集中。。。:03/01/13 03:40
検索の仕方が悪いのか見つからないんですが、
Cでプログラムをnミリ秒停止させる命令ってなんですか?
一番、単純なやつお願いします。
668デフォルトの名無しさん:03/01/13 03:40
キーボードから押されたキー(数字、アルファベット、記号)によって
動作を分けたいんですが、どうしたらいいんですか?

int i;
printf("キー入力:");
scanf("%d", &i);

数字はたとえば0を押したら、10進数で読み込んだiには0が格納?
アスキーコードをしらべたら、10進数の0にあたるのはNullだって書いてあるし。
アルファベットや記号はどうなっちゃうの?
669デフォルトの名無しさん:03/01/13 03:45
>>668
どうぞ。文字と文字コードの区別を勉強するように。

#include <stdio.h>
#include <ctype.h>

int main(void)
{
int num;

printf("何かキーを入力してください。");
num = getchar();

if(isalpha(num)) printf("アルファベットです。%cですね。\n", num);
if(isdigit(num)) printf("数字です。%cですね。\n", num);
if(!isalnum(num)) puts("記号ですか?");

return (0);
}
670668:03/01/13 03:51
>>669さん
おぉ。できました。どうもありがとう。
文字と文字コードの違いですか。全然自覚してませんでした。
これからちゃんと勉強して、違いをよく認識します。

どっかいいサイトありますかねぇ。自分でも調べてみます。
671デフォルトの名無しさん:03/01/13 04:51
VisualC++、MFCについての質問です。
親と、子(ダイアログ)で、WM_NOTIFY のメッセージを
転送しているのですが、上手くいきません。


// 子ダイアログ
static NMHDR nmh;
memset(&nmh, 0, sizeof(nmh));
nmh.hwndFrom= GetSafeHwnd();
nmh.idFrom= GetDlgCtrlID();
nmh.code= NM_CLICK;
GetParent()->PostMessage(WM_NOTIFY, (WPARAM)nmh.idFrom, (LPARAM) &nmh);

// 親ウインドウ
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
//}}AFX_MSG_MAP
ON_NOTIFY(NM_CLICK, IDD_LOGIN, OnNotifyTest)

void CMainFrame::OnNotifyTest(NMHDR* pNMHDR, LRESULT* pResult)
{
MessageBox("OK");
*pResult = 0;
}
ご教授お願いします。
672デフォルトの名無しさん:03/01/13 05:18
n×nのマトリックスの各行、各列の平均を求めるのにどっち使う?

その1
for(i=0;i<n;i++)for(j=0;j<n;j++)mean[i]+=x[i][j]/n;
for(j=0;j<n;j++)for(i=0;i<n;i++)mean[j]+=x[i][j]/n;

その2
for(i=0;i<n;i++)for(j=0;j<n;j++){
mean[i]+=x[i][j]/n;mean[j]+=x[j][i]/n;
}
どちらかといえば2の方だけど、計算精度的にも計算量的にも
ループ内の除算は減らしたいトコロ。
ていうか、行と列の平均に同じmeanを使うのヤメレ。
ポインタを使った関数への参照渡しについては散々Cの入門書に
出てくるんだけど、そこからさらに下の関数に渡すにはどうやれ
ばいいんでしょ?

関数1-(参照渡し)->関数2-(参照渡し)->関数3(内容変更)

で、関数1の変数の変更がかかっていればいいんですが。
下のような感じ。

void setset(ここの指定の仕方)
{aに代入する書き方; }

void set(int *a, char str[])
{setset(ここの指定の仕方); }

int main(void)
{int a;
a = 0;
set(&a);
return 0; }

ポインタがまだよく分かってないんだろな、
知ってる人にはなんでもないことなんだろうけど(´Д`;)
>>671
SendMessageしてみれば?
>>672
処理が実質的に同じなら、2の方がパイプラインに乗るんでないかな。
676デフォルトの名無しさん:03/01/13 08:12
ちょっと確認したいんですが、
struct passwd *getpwnam(const char * name)
のようなある特定のポインタを返す関数は、
上の関数の例で言えば、
passwd 構造体のサイズのメモリを関数内で確保してそのアドレスを
返していると理解していいのでしょうか?
>674
微妙にsetの宣言と使用がちぐはぐなのが気になるけど。
void setset( int *a)
{ *a = 33 ; }
void set(int*a)
{setset(a);}

>676
メモリを確保する場合もあるし、static/globalな変数へのポインタが
帰ってくる場合もある。ドキュメント/ソースを読むしかなかろう。
678山崎渉:03/01/13 08:29
218.145.25.77:80
218.145.25.14:80
50.51.32.202.ts.2iij.net:80
cache146.156ce.scvmaxonline.com.sg:8080
cache50.156ce.scvmaxonline.com.sg:8080
12.119.64.42:80
ce590-gdl01.terra.net.mx:80
seton03.terra.net.mx:80
218.65.110.14:80
ce590-gdl02.terra.net.mx:80
679676:03/01/13 08:29
>>677
なるほど、よくわかりました。どうもです。
>>676>>679
fopen/fcloseのように解放専用の関数が用意されている関数以外は動的確保はしていないと思うよ。
標準関数でいえばlocaltimeなんかはstatic変数を使っているね。
681名無しさん@3周年:03/01/13 10:23
>667
Javaならsleep(n);だけど、Cだとなんだっけ?
>>667
標準ライブラリには無いだろ。
大体1msのウェイトが出来るかどうか環境依存なんだから。
C汎用にしたければループで時間待ち汁。
UNIX系だと、
sleep(n); で秒単位、usleep(n);でマイクロ秒単位、だったかな。
でも何も細工していないLinuxだったりすると最低で10mS単位らしい・・・。
usleep(1); と書いても10mS休む。
684デフォルトの名無しさん:03/01/13 12:02
文字列と文字を入力させいくつ入力した文字が文字列に含まれてるか
カウントしたいんですが教えてください
685653:03/01/13 12:06
実はソートは比較しながらforや一時保管領域を使うのしかわからんのですが
これではできませんかね?
686デフォルトの名無しさん:03/01/13 12:16
>>685
全てのソートはそれで可能だが、何が問題なんだ?
687デフォルトの名無しさん:03/01/13 12:39
int *pi はint型データへのポインタです。それならば、
int* pi と書くのが正しいと思います。
piの型がint型へのポインタ型ですから、int*と表現できる。
では、なぜ、原書も含めて、
はじめのほうの書き方が主流なのですか?
とても、不思議です。
>>687
大人の都合なので無視してください。
でも、こんなことできなかったっけ?

int i.*p;
>>687
そう考えるのももっともだけど
int* a, b;と書くとCでは
int* a; int b;となるのでバグを防ぐためにも
int *a, *b;と書くのが主流。
だからといってpintなんてtypedefすると
煙たがられるので素直に郷に入っとけ。
>>684-685
マルチウザ
691デフォルトの名無しさん:03/01/13 13:06
C言語、名前に興味があるので学習しようとおもっていますが、
実際問題、C言語で具体的には何が出来ますか?
ウィンドウズでも可ですか?
692デフォルトの名無しさん:03/01/13 13:10
>>691
マジレスすると、子供が出来ます。
>>691
Windowsでまともに作れるのはコマンドラインの小物ツールと
DirectXを使ったゲームくらい。

GUIなアプリにははっきり言って向かないし
上記のアプリの開発効率もよくない(といか最悪)。
Windowsとはあまり相性の良くない言語ですな。
>>693
CでWindowsアプリをまともに作れなかった人
>>691
>実際問題、C言語で具体的には何が出来ますか?
文字ベースのHello Worldから,グラフィック編集,ワープロ,データベース,通信,
更にはデバイスドライバを作るときの基礎技術の1つにもなるyo

>ウィンドウズでも可ですか?
もちろん

だれか言ってた台詞だが
今のスキルがゼロなら何をやってもプラスになる
がんがれ!


本来こういう言い方は好まないが>>693は悪質なネタ

DirectXはC++ベースだし
GUIに向くかどうかは根拠を示さない限り単なる主観
開発【効率】が悪いのは当人の無能の証明
Windowsとの相性に至ってはWin32 APIがCベース
>>693
むしろWindowsAPIはC言語用に設計されていると言ってしまっても過言ではないのに・・・。
>>691
WindowsでCを使うなら,このスレがおすすめ

Win32API質問箱Build8
http://pc3.2ch.net/test/read.cgi/tech/1040964626/
>GUIに向くかどうかは根拠を示さない限り単なる主観
これはあまりに無茶な主張だよ。向かないのは明らかだろう。

Window一枚開いてボタンを配置してボタンが押されたら
"hello,world"と表示するソースコードを>>691に示して上げなよ。
たぶん一目散に逃げ出すから。
>>698
C++だってMFCなりOWLが無ければ同じ手順を踏むんですが・・・。
DelphiだってVCLが無ければ同様。

この際VBは異常と考えるべき。裏では同じ事をしているが。



何もわかってらっしゃらない?
>>699
Delphiの場合はメッセージディスパッチが言語仕様にあるから
他の言語より少しだけスッキリするよ。

もしかして、わかってらっしゃらない?
>>700
アレってTWinControl継承してるクラスのメソッド以外にも使えるの?

>>701 そうだよ。 TObject継承なら使える=クラスなら使える
>>699
お前はライブラリや開発環境や向き不向きや開発効率を一切無視して
単にDLL叩けば(理屈上)何でもできると言ってるだけだろ。
それが初学者の>>691に対する適切な回答かってことだよ。

>>691
純粋にC言語の勉強をしたければWindows上でもまったく問題ない。
その知識が実際に役に立つ可能性は十分ある。

が、Windowsでアプリケーションを作るのが目的でC言語を覚えるのだとしたら
それが開発効率の点で「最善」の選択でない可能性が高いので
目的にあった言語を慎重に検討したほうがいい。たとえ趣味でもね。
>>702
TObjectにHandleプロパティなんかあったっけか?
純粋なCってなんだろう・・・。

stdと名の付くヘッダすらない処理系も普通に存在するわけで・・・。

int main()
{
int a;

a = a + 3;

return 0;
}

これくらいしか書けんが。
>>704
無ければ継承して追加しろ
>>706
ほら、実質VCLであるTWinControl以上でしか使えないんじゃん。
>>707
ああ、もう、イライラする。コード書いてやるから どっかDelphiスレにこいや!
>>708
指定出来ると実際に機能する。は違うぞ。
こんな感じで使うんでしょ message ディスパッチは
http://pc3.2ch.net/test/read.cgi/tech/1009080085/27
711685:03/01/13 16:48
基本選択法を用いて文字型配列の先頭アドレスを受け取り、文字列内の文字を
昇順にソートする関数を作れ。表示処理はmain()でというんですが教えてください。
自作関数でソートするのがわかりません。
712山崎渉:03/01/13 18:24
(^^)
713695:03/01/13 19:12
>>698=>>693?
ネタじゃなく真面目な主張だったのか?
だったら内容はともかくネタと決めつけたのは無礼であった
すまなかった


で,本題
おまえさんはもしかしてGUI【入門】に向かないと言いたかったのか?
だったら異論はないぜ

>実際問題、C言語で具体的には何が出来ますか?
という問いに対して

>GUIなアプリにははっきり言って向かないし
と答えていたので
できることが少ないと答えているように見えたのだ


GUI入門に向くかどうかはともかくとして
メッセージループとswitchを自分で書いたりGCがない等の特徴は
Cが嫌いな人がよく持ち出す話だが
これはCの存在理由でもあり
そういうことを憶えることこそCを学ぶ意義でもある
と洩れは思う

>>691がC言語に関心を持つようになったのも
雑誌などの記事を見ていて何となく
中心的な役割を果たしているような気がしたのだろうと推察しているが
Cがそのような使われ方をする理由も同じところにある

そのような入門者には勧めてもよいのではなかろうか
714デフォルトの名無しさん:03/01/13 20:13
今日C言語始めました。カレンダー表示するプログラムで


#include <stdio.h>

void main()
{
int dd;
printf("Sun Mon Tue Wed Thr Fri Sat\n");
for (dd = 0; dd < 31; dd++)

{
printf("%3d",dd+1);
if ((dd % 7 ) == 6)
printf("\n");
}

printf("\n");
}


このソースをコンパイルすると

エラー E2380 calender01.c 15:文字列または文字定数が閉じていない(関数 main)
エラー E2121 calender01.c 16:関数呼び出しに)がない(関数 main)

とでます。ご教授お願いいたします。
>>714
普通に通るが?
エラーメッセージからしてBorland-C++だと思うが、”に全角文字を使ってたり
しない?
716黒鷲:03/01/13 20:17
VisualC++では教えてもらえませんか?
>716
ゲームのアルゴリズムだったら聞いても無駄だぞ
しかもC++とか関係ないだろ
ゲームスレへどうぞ
718714:03/01/13 20:56
>>715
レスありがとうございます。
確認しましたが、全角文字は使ってなかったです。
なぜ通らないんでしょ・・・

コンパイラーの設定とか関係ありますかね?
719714:03/01/13 21:08
>>715

大変申し訳ありません><
最後の「"」が1個抜けていました;;
ほんとにご迷惑おかけしました・・・
>>718
おまえさんが714にコピペしたのはメモ帳からか?
だとしたら[ファイル(F)]-[上書き保存(S)]せずにコンパイルしてたってオチかも知れんぞ
>>719
コンパイルエラーの98%は書きミスだ。自分で直せて当然。二度と来ないようにな。
実行時エラーならなんぼでも相手してやるから。
722714:03/01/13 21:28
>>718
コピペではなかったのでこちらの掲示板と
自分のエディタの違ってたんですね。
"\n" が "\n になっていました。

>>719
了解しました。
今日が初めてだったので、あたふたしてたのかもしれません。
723デフォルトの名無しさん:03/01/13 22:35
#include <stdio.h>

int main(void)
{
char ch[9];

printf("8文字以内でパスワードを入力してください:");
gets(ch);

printf("%sでよろしいですか?\n" ,ch);

return 0;
}

8文字以内でパスワードを入力してもらい、確認メッセージを表示するものです。
ここで8文字以上入力されないように、もし8文字入力されたら自動的に確認メッセージ
のところにすすませたいのですが、どのようにしたらいけますか?
教えてください。全然わかりません。
getchar() を使おう
>>723
標準ライブラリの範囲内ではできません。
726723:03/01/13 22:43
>>725
えぇ〜できないんですか。なんとか。。。
>>724
getchar()ですか。getchar()をどう使えばできますか?ソースお願いします。
自分でももう少し考えてみます。
727デフォルトの名無しさん:03/01/13 22:45
>>723
もっとchを大きく確保しておいて文字を勘定したらいいじゃん。
728723:03/01/13 22:53
>>727
ループを使ってgetchar()で一文字ずつchに読み込んで、同時に文字数を勘定して、
文字数が8になったらループを抜けて、printf()にいけばいいのかな。

あ!でもそうすると、例えば4文字しか入力しないでエンター押してprintf()に行けるかな?
頭のなか混乱でつ。(泣
あ、ごめん。getchar 使おうがキー入力をリアルタイムで取得はできないね。
OS や処理系によって違うからのマニュアル読んで探して。
730デフォルトの名無しさん:03/01/13 22:56
>>723
標準の範囲では普通行バッファリングされるからできないんだよ。
それに8文字入れたら勝手にすすむのもユーザーインターフェース的にどうかとも思うし。
これじゃだめ?#include <stdio.h>

int main()
{
char pw[8 + 1];

fgets(pw, sizeof(pw), stdin);
printf("%s\n", pw);
}
731723:03/01/13 23:01
>>730
レスどうもありがとう。
それも考えました。9文字以上入力されると、8文字目まで表示ですよね。
ちょっとやりたいことと違うんで。。。すいません。
やっぱ無理なのかなぁ。
>>730
8+1ってあんた。
>>723
> パスワードを入力してもらい

キーエコーが返ってしまう (打った文字がすぐ画面に出る) 時点で、標準入出力
ではダメだろ。
>>723
> もし8文字入力されたら自動的に確認メッセージ
> のところにすすませたいのですが、

これはやめた方がいいと思うんだけど。

とりあえず入力させて長すぎたらもう一度入力させた方がいいと思う。
>>731
いや、環境を限定してくれればできるんだけど、標準ではムリって話だ。

>>732
意味も分からんのに反応するなって。
>>735
それくらい9と書いても問題ないだろ
普通は#define BUFSIZE 9とでもするんだろうが。
737デフォルトの名無しさん:03/01/13 23:12
>>733
標準入力でもioctlすればエコーなしバッファリングなしとかできるんだがな。

>>736
しねーよ。
するだろ。BUFSIZEはいみふめだが。
739736:03/01/13 23:14
>>737
マジックナンバーマンせー?

>>738
> BUFSIZEはいみふめだが。
うむ。
740723:03/01/13 23:16
なんか荒れちゃってますね。
環境は、WindowsでVC++6.0です。

だれか作って〜(泣
741デフォルトの名無しさん:03/01/13 23:16
>>740
> もし8文字入力されたら自動的に確認メッセージ
> のところにすすませたいのですが、

使いにくいと思わない?
742741:03/01/13 23:17
「自動的に」ならgetchでも使わないとできないんじゃないの?
743デフォルトの名無しさん:03/01/13 23:18
>>738,738
3行のプログラムにそんなことしねーって。バランス感覚悪すぎ。

>>740
ウィンドウ開いてエディットコントロール使うのか?
それともコンソールプログラムでいいのか?

もう少し仕様を明確にしろ。エコーバックは無いほうがいいのか?
環境依存の話は他スレでどうぞ。
745デフォルトの名無しさん:03/01/13 23:19
>>743
>>723を見る限りコンソールだと思うけど
>>743
>char ch[9];
をわざわざ
>char ch[8+1];
に直した時点でかなりの主張が感じられるのは気のせい?
と粘着してみる。
747723:03/01/13 23:22
>>743
コンソールプログラムです。
エコーバックはあった方がいいです。

ってかできそうですか!?自分はもう無理ですが、すごい気になります。
ぜひお願いします。
748732:03/01/13 23:22
>>746
粘着なんてかくな
俺だと思われるじゃないか(T_T)
749741:03/01/13 23:23
無視されたぜ。
おーまいが!
750デフォルトの名無しさん:03/01/13 23:26
>>747
こんなんでどう?

#include <stdio.h>

int main()
{
#define N 8
int i, ch;
char pw[N + 1];

for (i = 0; i < N; i++) {
while (!kbhit());
ch = getche();
if (ch == '\r') {
break;
}
pw[i] = ch;
}
pw[i] = '\0';

printf("\npw= %s\n", pw);
}
751723:03/01/13 23:28
>>741=749
ごめんなさい。無視しちゃいました。
確かに使いにくいかもしれませんね。
ただ、こういうのができるのかがすごい気になりだしたので、
このプログラム組める方がいたら聞いて見てみたいのです。
752741:03/01/13 23:28
>>751
いや、俺がいっているのは>>742のこと
kbhit()…
754750:03/01/13 23:29
あ、kbhit()の行はいらないか…
755741:03/01/13 23:33
>>750
なるほど。getcheには\r\nを\nにしてくれる機能なんてないのか。
どうりでうまくゆかなかったわけだ(ひとりごと)


#include <stdio.h>
#include <conio.h>

int main()
{
char ch[9];
char i;

for(i=0;i<8;i++){
ch[i]=getche();
if(ch[i]=='\r')
break;
}
ch[i]='\0';

printf("\n%sでいいの?",ch);

return 0;
}
756723:03/01/13 23:38
>>741&750さん
すごいすごい!感激!
なーるほど!ですね。こうやればよかったのかぁ。
さすがですねぇ。勉強になりますm(_ _)m

(ただ、途中で間違えてバックスペースとか押しちゃうと。。。。
 まぁご愛敬ですかね。)
757755:03/01/13 23:38
・・・・getcheはgetchar同様int型で受け取るべきか・・・
758723:03/01/13 23:43
>>757
>>755の修正版とかできちゃいそうでつか?(w
759750:03/01/13 23:52
>>756
とりあえずBSに対応したけど、画面もちゃんとしたいならもっと書かないとね。
ただ、8文字目で勝手に次、って仕様とは合わないでしょ?
#include <stdio.h>
int main()
{
#define N 8
int i, ch;
char pw[N + 1];
i = 0;
while (i < N) {
switch (ch = getche()) {
case '\r':
break;
case '\b':
if (i) {
--i;
}
continue;
default:
pw[i++] = ch;
continue;
}
break;
}
pw[i] = '\0';
printf("\npw= >%s<\n", pw);
}
つか >>744 読め莫迦者共
761デフォルトの名無しさん:03/01/14 00:16
>>760
1を読んでから家。
762691:03/01/14 00:26
みなさんどうもありがとう。
とりあえず、Cに興味しんしんでふ。
入門書、買ってみようと思いまふ。
>>762
ページが抜けるまで読み尽くせ。
ガンガレ
764デフォルトの名無しさん:03/01/14 00:35
>>760-761
空域読め
空域!?
>>764
空域はともかく空気は読めてるな。

何か昔から空気読めの意味勘違いしてるバカが出没するなぁ・・・。
このスレで、環境依存と断らずに conio.h を使う香具師が居るとは思わなかった・・・。
________.  |  ・・・「からけ」?
|||          | \____ __
|||          |  )\       ∨
|||    空  気.   <⌒ヽ ヽ
|||         \ ( ´ー`)    ∧∧
|||_________V(   丿V^  ●Д゚,,)
|,,|          |,,| ヽ (      と  ,)
              ノ )     |  |〜
                     し`J,,.
この世でまともな環境と呼べるのはWindowsだけ!!
769 を誰か救ってあげてください
勘弁願います
772デフォルトの名無しさん:03/01/14 02:51
不可能です。
773755:03/01/14 03:14
>>767
俺か?
>>740でVC++と言っているから使ったまでだけど。
774もしもし:03/01/14 03:46
charでなにか配列を定義して、その配列に、文字列をよませたい
って時に、scanf("ここ")のここはなにをいれるんすかね?
%lsかなって思ったけどうまくいかない
775デフォルトの名無しさん:03/01/14 03:48
>>774
%sだけど、scanf()は危険だし、使いにくいよ。sscanf()か何かにしなさい。
776もしもし:03/01/14 03:51
どうもありがとうございます。やってみます

1 行読みたいなら fgets() だが
778もしもし:03/01/14 04:10
まだ作っている途中の確認みたいな段階なんですけど、
うまく動作しません。どこが間違っているのか教えてください。
きいてばっかですいません。

#include<stdio.h>
#include<stdlib.h>


main()
{
int i,k,l,n;
char *a;

printf("入力する文字数は何文字ですか?\n");
scanf("%d",&n);

a=(char *) malloc( n*sizeof(char));

for(i=0;i<n+1;i++)
{
printf("文字を入力してください。\n");
scanf("%s",&a[i]);
}
printf("%s\n",a[0]);
return 0;
}
779デフォルトの名無しさん:03/01/14 04:14
>>778
fgets使えって
それとsizeof(char)は何の意味もない。

しかもナル文字のことを考えていないし
あとmallocの戻り値をチェックしていないのもいけない。
C言語なんかでつまらんこと気にするな。
782もしもし:03/01/14 04:16
ぜんぜんってことですね。勉強しなおしてきます
783もしもし:03/01/14 04:21
なんか、学校で習った、動的確保はしたんんですけど、こんぱいるされないいんですよ
#include<stdio.h>
#include<stdlib.h>

typedef char *vec;

void error(text)
char *text;
{
printf("%s\n",text);
exit(1);
}

vec vector(n);
int n;
{
vec x;

x = (char *) malloc( n*sizeof(char));
if(!x) error("allocation failure in vector()");
return(x);
}
main()
{vec *a;
int k,l,n;
printf("入力する文字数は何文字ですか?\n");
scanf("%ld",&n);
*a=*vector(n);
printf("文字を入力してください。\n");
scanf("%s",&a);
printf("%s",a);
return 0;}
>>783
エラーメッセージくらい書いてよ
785784:03/01/14 04:24
・・・・・までもないか。
処理は関数の中に書かないと・・・
786785:03/01/14 04:25
あ、ごめん。古い書き方なのね。
鬱だし脳
787785:03/01/14 04:26
>>783
> vec vector(n);

このセミコロンのせいじゃない?
788もしもし:03/01/14 04:26
エラー E2258 report1.c 13: ここには宣言が必要だが見つからない(関数 vector )
警告 W8065 report1.c 19: プロトタイプ宣言のない関数 'error' の呼び出し(関数 vector )
警告 W8065 report1.c27: プロトタイプ宣言のない関数 'vector' の呼び出し(関数 main )
警告 W8069 report1.c 27: 移植性のないポインタ変換(関数 main )
*** 1 errors in Compile ***
です。すいません
789もしもし:03/01/14 04:29
>787
ほんとだ。なりました。
ありがとうございます
790785:03/01/14 04:30
>>788
C++としてコンパイルしたのか。
Cとしてコンパイルすればプロトタイプがなくてもエラーにはならないはず。

しかし今時こんな書き方で教えている学校ってどこだろ・・・・
791もしもし:03/01/14 04:33
ついでに、この機会にもう一個質問させてください。

えっと、配列でchar a[ ]みたく定義しといて、さっきの俺のみたいに
、scanでaによみとらせますよね。
このときって、どこに読み取られた文字って格納してあるんですけね?
なんか、てもとには、a=a[0]へのポインタってかいてあるけど、
printでa[0]にしてもエラーになるし
792785:03/01/14 04:36
>>791
配列じゃなくてポインタでしょ?
そのポインタが指す先(つまりはmallocで得た領域)

> printでa[0]にしてもエラーになるし
どういうこと?printf("%c",a[0]);で問題なくa[0]が表示されると思うけど
793もしもし:03/01/14 04:42
つまり
printf("文字を入力してください。\n");
scanf("%s",&a);
printf("%s",a[0]);
みたいにした場合です
794785:03/01/14 04:45
>>793
%sは文字列を表示するときでしょ(^_^;)
printf("%s",a[0]);なんてやったら(ポインタでなく整数を渡したら)十中八九アクセス違反が起きる。
795もしもし:03/01/14 04:48
ですね・・・・。やってみたらなったし。
ほんとにながながと教えていただいてありがとです。
うちの大学の適当さがみにしみました・・・・。
>>795
担当の教授が古いんだよ
>>795
むしろ大学で教えてもらおうという姿勢がよくない。独学が一番。
798デフォルトの名無しさん:03/01/14 16:55
数行に渡るテキストファイルがあって
そのファイルを引数で渡し
それを行毎に読みこむ。
読みこんだ行毎に定まったフォーマットで
変換し、新たなファイルに1行づつ
書きこみたい。

こんな感じのプログラムを作らなくては
いけないのですが、厨房なものでなにも
わかりません。
自分なりにわからない点をまとめてみますので
ご教授頂けると幸いです。

@1行づつ読みこみ、1行づつ書きこむ方法が
 わかりません。
A読みこみ側のファイルはヘキサ表示なんですが
 それをint型やchar型に変換したいが、
 やりかたがわからない。

以上、厨な質問ですが宜しくお願い致します。
fgetsで一行ずつ読み、fput,fprintfなどで一行ずつ書き込む。
ヘキサ表示??16進数字列ってことか?それなら読み込んだものをstrtolやsscanfで変換する。
>>798
> @1行づつ読みこみ、1行づつ書きこむ方法が
>  わかりません。
fgets, fputs or fprintfで検索

> A読みこみ側のファイルはヘキサ表示なんですが
>  それをint型やchar型に変換したいが、
>  やりかたがわからない。
sscanfで検索

http://tyrant.chem-eng.kyushu-u.ac.jp/2nd/Programming/Library/Main.asp
801デフォルトの名無しさん:03/01/14 17:00
いきなりすみません
2ちゃんねるを見ている人に連絡です
プログラマーを大募集します!
携帯のメールに関してのプログラムです
かなりアングラ系なので・・・高い技術を求めます
風俗関係のソフトではありません
ウィルスに精通している方を求めます
報酬は100万以上です
期間は2ヶ月です
これはっ!と思う方メールを下さい!
 [email protected] まで・・・・
802799:03/01/14 17:01
fputじゃなくてfputs
一人月50か?
やってらんねー
空域よめてないぞ
なにやってんの
________.  |  ・・・「そらしろ」?
|||          | \____ __
|||          |  )\       ∨
|||    空  域.   <⌒ヽ ヽ
|||         \ ( ´ー`)    ∧∧
|||_________V(   丿V^  ●Д゚,,)
|,,|          |,,| ヽ (      と  ,)
              ノ )     |  |〜
                     し`J,,.
構造体で
struct data{
char aaa[64];
char bbb[64];
char ccc[256];
}
みたいな構造体を1000個ほど確保する必要があるのですが
各データaaa,bbb,ccc共に、実際は16バイト程度しかなかったりします。
何か効率の良いデータ領域の確保の方法はありませんか?
808デフォルトの名無しさん:03/01/14 20:22
>>807
普通にmalloc()すれば。3つ分で1回のmalloc()にすればちょっとだけ効率いいかもね。
809名無し@沢村:03/01/14 20:28
ポインタでいきずまってるヌヒ等よ、ポインタはやさしいぞ。
ポインタというのはな単にその変数のメモリアドレスを指しているだけよ。
それ以上のものではないぞ。
ヌヒ等はC言語を勉強するなら、ポインタをまず覚えろ!!
便利だから覚えてみろ!!
どう便利かというとな、ポインタのポインタを使うときに便利さが出てくるのよ。
ポインタのポインタを使うとなそのプログラム以外の別のプログラムが使っている変数のメモリアドレスも参照できるのよ。
例えばインターネットでむすばれた別のコンピュータにあるメモリアドレスなどもな。
ヌヒ等よ、ポインタは、ポインタのポインタを使ってはじめて便利さがわかるものよ。
ポインタのポインタを使わないんだったら、別にポインタを使う意味はあまりないよ。
>>807
struct data {
char *aaa, *bbb, *ccc;
};

としておいて、aaa,bbb,ccc各メンバの実体も全部実行時に確保する。
質問です
struct list{
struct list *next;
};
って連結リスト構造体ってのはなんでポインタを使うんですか?
なんとなく感覚ではわかるんだけど
頭のなかでは理解できないです
>>811
次の要素のありかを覚えておく必要があるから。
813811:03/01/14 21:00
この場合
struct list next;
にしちゃった時とはどう違うんですか?
ポインタじゃなくても配列にしてインデックス番号を持たせればいいじゃないですか?
>>813
つーかお前は何も分かってないぞ。
何となくですら分かって無いじゃん。
>>813
next,nextの次のリストを指すことはできない。
ポインタを分からん奴はつまはじき。
初心者がポインタを難しいと言った時点で初心者は来るなと言われます。
>>813
メンバーに自らのインスタンスはもてないYO
できたら無限ループみたいになっちゃうYO
>>807
struct data{
char *aaa;
char *bbb;
char *ccc;
};

int setdata(struct data *d, char *a, char *b, char *c)
{
static char tbl[16384], *tp=tbl;

d->aaa=tp; while(*tp++=*a++);
d->bbb=tp; while(*tp++=*b++);
d->ccc=tp; while(*tp++=*c++);
}
820名無し@沢村:03/01/14 21:21
ポインタでいきずまってるヌヒ等よ、ポインタはやさしいぞ。
ポインタというのはな単にその変数のメモリアドレスを指しているだけよ。
それ以上のものではないぞ。
ヌヒ等はC言語を勉強するなら、ポインタをまず覚えろ!!
便利だから覚えてみろ!!
どう便利かというとな、ポインタのポインタを使うときに便利さが出てくるのよ。
ポインタのポインタを使うとなそのプログラム以外の別のプログラムが使っている変数のメモリアドレスも参照できるのよ。
例えばインターネットでむすばれた別のコンピュータにあるメモリアドレスなどもな。
ヌヒ等よ、ポインタは、ポインタのポインタを使ってはじめて便利さがわかるものよ。
ポインタのポインタを使わないんだったら、別にポインタを使う意味はあまりないよ。
>>819
それ動くの?
822819:03/01/14 22:17
>>821
びみょ〜
823名無し@沢村:03/01/14 22:25
ポインタでいきずまってるヌヒ等よ、ポインタはやさしいぞ。
ポインタというのはな単にその変数のメモリアドレスを指しているだけよ。
それ以上のものではないぞ。
ヌヒ等はC言語を勉強するなら、ポインタをまず覚えろ!!
便利だから覚えてみろ!!
どう便利かというとな、ポインタのポインタを使うときに便利さが出てくるのよ。
ポインタのポインタを使うとなそのプログラム以外の別のプログラムが使っている変数のメモリアドレスも参照できるのよ。
例えばインターネットでむすばれた別のコンピュータにあるメモリアドレスなどもな。
ヌヒ等よ、ポインタは、ポインタのポインタを使ってはじめて便利さがわかるものよ。
ポインタのポインタを使わないんだったら、別にポインタを使う意味はあまりないよ。
#include< iostream.h>
main()
{ int num;
do{
while(cin>> num)
{
}
}while(cin >> num);
return0;
}

繰り返しが行われません、理由を教えていただけませんか、入門者ですレベルが低くてすいません
今日、二つのスレッドでお聞きしたのですが、見てのとおり低レベルです、ちゃんと解決しはしませんでした
教えていただきたいです
>>824
多分C++(^_^;)
Cでもコンパイルできないことはないと思うけど。
あーすいません まだC言語とC++が区別できません どうにか看て頂けませんか
いくらなんでもネタだろ。
whileの囲い方がすげーな。
いやあの ネタじゃないです9月から講義が始まったばかりなので
もしかしてwhileの中にwhileを入れ子してはだめなんでしょうか

>>828
いけないわけじゃない。実際、ループの入れ子ってのはあるし。
でも>>824は何をしたいのかさっぱりわからないぞ。

何をしたいの?
課題でコンビニエンストアのレジのようなものをシュミレートするプログラムを作りなさい
ということなんですが、
簡単にするとどうもwhileの中にwhileを入れ子するのがうまくループが起こらないんです
本当はもっとながいんですが、いちいちのせるわけにもいかず
昼間、ここに http://pc3.2ch.net/test/read.cgi/tech/1041992392/ 178から182に書き込みましたが
(おもっきり苗字まるだしです…)
>>827
何か、俺には >>824 の文体には
普通のネタには存在しない、
ある種の「華」があるように感じられるが・・・

もしかして女?(w
「普通のネタ」とゆうかネタではないので あと男です よろしくお願いします
833831:03/01/14 23:15
>>832
大馬鹿者!!!

せっかく喰いつきを良くしてやろうと思ったのに・・・
ほんとにすいません、嘘をつこうかと迷ったのですが、今日は苗字で質問しても(?)
無視されっぱなしで、嘘をつく根性がないんです、余裕もないんです。
>>832
なんだ♂か。別にどーでもいいや。放置。
どなたかお願いします、放置…は…
>>836
なにをしたいのか、もっと詳しく書かないとわからないよ
#include< iostream.h>
main()
{ int num;
do{
while(cin>> num)
{
}
}while(cin >> num); ←←←
return0;
}

お返事ありがとうございます その←の所がループをしないんです
cinができないんです勝手に値が入ってしまうんです これはなぜでしょうか
よろしくです



>>838
スレ違いの上にマルチはいい加減止めような。
>>838
C++のストリームは一度eofbitが立ってしまうと、明示的にクリアしてやらないと
元に戻らない。下のプログラムのようにしたらどうか。

#include <iostream>
int main()
{
int num;
do {
while (std::cin >> num)
{
}
std::cin.clear();
} while (std::cin >> num);
}
>>838
C厨の俺には>>(右シフトじゃないよ)が何を返すのかわからん・・・・
C/2ってのがあったな
>>839 もうしません、ご迷惑おかけしました
>>840 int main(), std::, std::cin.clear();習って居りません
せっかく考えて頂いたの理解できなくて申し訳ありません

eofbitが立ってしまうと、明示的にクリアしてやらないと
元に戻らない。

ということはwhileの中にwhileは入れ子は上記の知識がないうちはできない
と理解していいのでしょうか?

>>843
EOFの検出か。
>>844
そうでなくて、同じstd::cinからの返り値を見ているのが問題。

二番目の>>が何の為に使われているのかはわからないが、
一番目の>>を例えばWindowsならCTRL+Zで抜けていると
思うが、その時eofbitが立ち、以降のブール式はすべてfalse
になる。
>>844
何処を、どう理解すれば、その答えになるのか分からんが
>>840が言ってる事は1度目の(cin>>num)で
EOF(ファイルの終わり)が検出されたら2度目(以降)の(cin>>xxx)は
あなたが期待してるようには動かないと言う事
do {
  while(cin>>num) { // ここでEOFになってるので
  }
} while(cin>>num) ; // このcinは、あなたが期待したように動かない
>>846 ご返答していただいているのに知識の無さで理解できずにすいません
eofbitをまだ習って居りませんがCTRL+Zでループを抜け出したことで二番目が
ループしなくなっているということでしょうか、CTRL+Zしか抜け出し方を習ってないので
やはりwhileの中のwhileはむりなんでしょうか 
>>847
わかりやすく説明ありがとうございますEOfも説明して貰わなければならない無知です
非常に馬鹿な質問でしょうが、恐れ入りますが、なぜEOFになるのでしょうか?
>>848
CTRL+Zをstd::cinに与えると(Windowsの場合)std::cinはこれをEOFと
みなし、もうこれ以上の入力がないと判断してfailbitが立つ。eofbitも
立つが、ここではfailbitのみを見る。

その結果 while (std::cin >> num) のブール式がfalseになって、一番目
のwhileを抜け出す。

このまま二番目の while (std::cin >> num) に入って来ることになるが、
failbitが立っているためすぐさまfalseを返す。これはC++のストリーム
の仕様であり、Cのscanf()などとは事情が異なる。
>>850
failbitも習って居りませんが、一番目を抜け出すときにfalseになって、それが
二番目のwhileのときにも影響してしまうということでしょうか。またもわかりやすくありがとうございます

CTRL+Zで抜け出す以上は、以後にwhileは置けないということですね(?)
852843:03/01/15 00:39
あのさー、漏れがせっかく C++ スレに誘導したのに、なんでまだここで
C++ の話が続いてるの?
>>852
>>824に在りますとおり午後から質問を他のスレッドでもしたのですが、
レベルが低すぎるのか(今もそれで説明に苦労をおかけしてます)
相手にしてもらえませんで…、ここに質問してよかったです
>>851
その理解はちょっと危うい。
例えばstd::cinがリダイレクトされていてファイルに結びつけられていた
場合、ファイルの終端を超えて読み込もうとした場合も同じくfailbitが
立つ。

CTRL+Zにしろ、ファイルの終端にしろ、failbitが立ってしまった場合は、
それをclear()で明示的にクリアしてやればストリームの状態を元に
戻すことができ、また正常な動作になる。そうすれば、再度whileを
置いても全く問題がない。

これからC++のストリームを多用していくのであれば、絶対に覚えて
おかなければならない。
>>854
ありがとうございます、問題の元が大体(危ういですか)わかった(?)のですが、
今、whileの中にwhileを入れ子する方法が無いのではどうやって課題を解こうかを思っていました
ではクリアにするのは、「std::cin.clear();」の一文を書けばいいのでしょうか?
条件文も「std::cin >> num」のようにしなければならないのでしょうか?
>>851
ちみ、面白すぎるよ
whileの入れ子は出来ないとか
CTRL+Zで抜けたら以後whileは使えないとか
つーわけで、漏れの迷言集に書き加えて置きますた
>>851
知識が無くて申し訳なく思います、入れ子等の使い方も間違ってますか?
>>855
動作をよく考えてみればわかるはず。
一度目のwhileでfailbitとeofbitが立つと、そのままにしておくと二度目の
whileに影響が出るので、その影響を取り除くためcin.clear()の一文を
入れておけばよい。

その事と、whileの入れ子の事とは全く関係がない。
>>853
あんたそれでは沢村よりもひどいぞ。
>>858
今 std::cin.clear(); を書きましたら、識別子がクラス名でも名前空間名でもありません
とのエラーがでたのですが、なぜでしょうか?
>>855
多分whileに意識が逝っちゃってるから混乱してるんだろう。
例えばこんなプログラムでも、最初のif文でCTRL+Zを入力すると、
二番目のcinはスキップされるだろう。これでわかるか?

#include <iostream>

int main()
{
int i;

if (std::cin >> i) std::cout << i << std::endl;
if (std::cin >> i) std::cout << i << std::endl;
}
>>860
それは、
#include <iostream.h>としているから、std名前空間にcinが入ってないためです。
std::を取って、単にcin.clear(); として下さい。
>>824-861
いい加減 C++ スレに移動してくれよ。
回答する方もする方だ、なんで誘導しない?
>>863
てか、マルチだ。
>>861
私、今の今までスキップがEOFなどの原因であることを知りませんでしたもので、
>>864
すると何か?
861-862 の方がむしろ DQN というい事か?
>>861
今ステップ実行したらよくわかりました例文ありがとうございました
>>862
stdをはずすと二番目のwhileで入力できました、12月25日にこれになやんで20日
経ちますが、理由をわかりとてもうれしいです。
お二方(?)ありがとうございました。
>>863
>>864
これより気をつけます、あまりこの2ちゃんねるのこと(掲示板?)がわかっていないため
日ごろ使っている方に迷惑をかけたかもと思います、すいませんでした
C言語の関数一覧表(それぞれの関数の詳しい説明も載ってる)みたいなのって、
みなさんどこのサイトの見てます?いいサイトあるのかな?
>>868
世の中の人が作った数だけ関数は存在するので
一覧表を持ってる人は神!?
>>868
自分の使ってるコンパイラについていると思うけど。それ以上は普通いらない。
> それ以上は普通いらない。

突っ込んでいいですか?
>>871
そういう趣味はないのでやめてくれ。
しかし、どこに突っ込むんだ?
>>872
だって 870 は、「コンパイラについている以上の関数は普通いらない」 としか
読めないんだけど。
874デフォルトの名無しさん:03/01/15 01:48
>>873
まぁ、ネタなんだろうが…
Cの標準ライブラリの関数のことだろ、868は。それくらい想像してやれよ。
(・∀・) ヤダ!
>>871=875
素直にマジボケだったと反省しる。
(゚Д゚)ハァ?
>>875-878
空域読め
>>805 で合ってますか?
880デフォルトの名無しさん:03/01/15 06:18
ほんとすいません。 sign関数はどこのヘッダーにあるのですか?
mathには無いみたいです。
>>880
おまえ面白いやつだな。
>>880
ヘッダーにはない
883880:03/01/15 07:19
ありがとう。 ifでやりました.
884デフォルトの名無しさん:03/01/15 08:11
アップローダーはじめました
http://www6.ocn.ne.jp/~endou/ten.html
885デフォルトの名無しさん:03/01/15 13:00
srand(SEED)
で生成できる乱数列は、例えばWindowsとLinuxでも同じになるんでしょうか?
>>885
いいえ、WindowsとLinuxどころか同じwinでもコンパイラが変われば
全然違う乱数列を返す可能性があります。
887デフォルトの名無しさん:03/01/15 14:51
16進数標記のテキストを読みこんで
バイナリーに変換して書きこむという
プログラムを作成しなくてはいけないのですが
バイナリでライトする方法がわかりません。。。
厨ですが、どなたかご教授お願い致します。
>>887
fwrite()
889885:03/01/15 15:37
>>886
ありがとうございます。
自前で実装することにします…
890デフォルトの名無しさん:03/01/15 15:49
初心者質問ですいません。
MS-DOSでコマンドライン引数としてファイルをプログラムに
渡したいんですけど、どういう風にDOSに書き込めばいいんでしょう?
>>890
ここがわからん
>DOSに書き込めばいいんでしょう?
誰が?(user/program) 何を?
習っていませんってのがむかつくなぁ。センセイに教わらなきゃ新しい知識が得られないのか?
こんなアフォ相手にみんな親切だね。

消防、厨房のときに習っていない方法を使って減点されたり、工房のときに「習っていないことに
なっているので入試でロピタルの定理を使ってはいけません」とか言われたのを思いだした。

>>890
それならMS-DOSとか関係なしに、argv[]で渡せばいいんじゃないですか。
argv コマンドライン引数 fopenあたりでgoogleかけてみてください。
893山崎渉:03/01/15 17:43
(^^)
894デフォルトの名無しさん:03/01/15 19:03
gcc について質問なんですが、
今、ncursesライブラリを使うプログラムを書いているのですが、
コンパイルする時になぜ -lncurses をわざわざ付けなければ
ncursesライブラリを見つけられないのですか?
そのオプションを付けなくても自動的に見つけることができないのはなぜでしょうか?
895デフォルトの名無しさん:03/01/15 19:09
>>894
習っていませんってのがむかつくなぁ。センセイに教わらなきゃ新しい知識が得られないのか?
こんなアフォ相手にみんな親切だね。

消防、厨房のときに習っていない方法を使って減点されたり、工房のときに「習っていないことに
なっているので入試でロピタルの定理を使ってはいけません」とか言われたのを思いだした。
>>894
必要と思われるライブラリを自動的に見つけるコンパイラを作ってくれ
んで公開してくれたら、誰かがちょっぴり幸せになるかも
897デフォルトの名無しさん:03/01/15 20:55
じゃあgccがデフォルトで探すライブラリのパスを教えてください。
要はこの標準パスにncursesが入っていないってことでしょ。
>>894
gcc-lib/(target)/(version)/specsを調べろ。
ldのオプションに-lncurses追加すれば、目的は達成できるはず。
899:03/01/15 21:09
プログラム上にイントとフロートの四則演算とサインなどの
計算がいくつかあって、プログラムを動かしている
パソコンのCPU、メモリ、OSなどの性能を考慮して
そのプログラムがどれくらいの実行速度なのかを
測る方法を知りたいのですが
どなたかご存知ありませんか?
>>899
どうでも良いけどお前一文ですべてを終わらせようとするのやめた方が良いと思う。
論文書くにも日本語がまともに書けないと話にならないわけで。
901デフォルトの名無しさん:03/01/15 21:43
main関数を再帰して作るプログラムというのは不作法な事でしょうか。
また、そうして作られた有名なプログラムというものはありますか。
>>901
引数と返値に制約が出るね。
それが汚いと思わないならそれはそれでありかも。
>>900
彼は全ての処理をメイン関数に書くタイプだろうね。
904ほっそー:03/01/15 21:53
VBはわかりますか?
わかるのであればぜひ教えてください!!!
>>904
死ね
>>904
スレタイはわかりますか?
わかるのであればぜひ別スレにいってください!!!
907ほっそー:03/01/15 21:56
m(_ _;)m ゴメン!!
908ほっそー:03/01/15 21:57

909ほっそー:03/01/15 21:58
スレタイってなんすか?
910906:03/01/15 22:05
>>909
スレッドのタイトルの略。
略すとわかんないと言われるかもれないなぁと思ったけど、
間延びするんで、スレタイにしました。
VBは別に質問用スレッドがあると思いますので、
そっちで聞いた方がよいです。
911デフォルトの名無しさん:03/01/15 22:09
次の構文の ^^ の部分がわかりません

void (*hoge (int arg1, (*arg2) ())) () { /* ... */ }
------------------------------------^^---------------

呼び出しは

hoge(value, function);

となっています。お願いします。
912:03/01/15 22:11
他で聞くことにします。気分を害してすいませんでした。
913デフォルトの名無しさん:03/01/15 22:12
911ですがすいません。{ の後ろの () がわかりません。
>>911
俺にはコメントを指してる様にしか見えない・・・
実際どこ指してるの?
{ の後ろの () ?
>>913
{の後ろは/*だけれど。
>>913
関数のポインタを返しているだけだろ。
918デフォルトの名無しさん:03/01/15 22:18
ちなみにCCレモンは好きだ
919デフォルトの名無しさん:03/01/15 22:58
C言語は
web上のHTMLソースを取得してきて何かをする、みたいなことは出来ますか?
>>919
環境も書かずにそんなことを聞く奴にはsocketを薦めてあげよう。
>>920
socketは環境依存だぞ。と。
922デフォルトの名無しさん:03/01/15 23:08
Linuxでcでプログラム作ったのですが、これを1分周期で動かしたい
のですが、何か方法はありますか?
WindowsでのATコマンドみたいなものはあります?
crond
>>922
>WindowsでのATコマンドみたいなものはあります?

なんかものすごく勘違いしている気がする。
925デフォルトの名無しさん:03/01/15 23:53
C言語にJavaも入りますよね?
分かりますか?
>925
(゚Д゚)ハァ?
927デフォルトの名無しさん:03/01/15 23:56
VC++ SDI
ダイヤログのピクチャーボックスに描かれた絵をウインドウを閉じたり、縮小しても消えないようにしたいです。BITMAPINFOHEADERやStretchDIBitsを使えばいいのかなとおもうのですけど、やり方がいまいちわかりません・・教えてください。
私が足したプログラムは次のだけです。
void CMy00000View::OnButton1()
{
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください

int x, y;

CWnd* h = GetDlgItem(IDC_FIGURE);
CRect r;
h->GetClientRect(r);
CDC* pDC=h->GetDC();
x = r.right/2;
y = r.bottom/2;
CPen p(PS_SOLID, 1, RGB(255, 255, 0));
CPen* oldp=pDC->SelectObject(&p);
pDC->MoveTo(0, y); pDC->LineTo(2*x, y);
pDC->MoveTo(x,0); pDC->LineTo(x, 2*y);
pDC->SelectObject(oldp);
h->ReleaseDC(pDC);
928デフォルトの名無しさん:03/01/15 23:58
Cで画像を表示させたいのでgtk+をいれて、今のとこ簡単な
サンプルプログラムをコンパイルできるような段階になったのですが、
画像を表示させる方法が分からないので、Cでgtk+をつかったプログラムを
解説してるようなサイトがあればおしえてください
930デフォルトの名無しさん:03/01/16 00:05
いや、それはみましたが、そもそもgtk+で画像を表示するのに
どんな関数を使うのかとかが分からないので、gtk+の解説を最初から
理解していないと、どこが良くてどこが分かりづらいとかが分からないから
お勧めないか聞いてるわけです
人工無能搭載のGoogle厨は相手にすんな。
932もしもし:03/01/16 00:08
簡単な日記のプログラムを作りたいんですけれど、コンパイルの時に、
12行目の宣言がおかしいとでてきます。どこかわからないんで、どうか教えてください。
下のがソースです。

#include<stdio.h>
#include<process.h>
#include<stdlib.h>
#define month 12
#define day 31

struct nikki{
char TENKI[10];
char Naiyou[1024];
}a[month][day]

main()
{
int i,j;
struct nikki a[month][day]
FILE *fp;

fp fopen("nikki.text","a");
if(fp==NULL)
{
printf("失敗です\n");
exit(-1);
}
933もしもし:03/01/16 00:08
else
{
printf("今日は何月何日ですか?\n")
scanf("%d,%d"&i,&j);
printf("今日の天気はどうでしたか?\n")
scanf("%s"&a[i][j].TENKI);
printf("今日の出来事を入力してください\n");
printf("Qを入力すると終了で、512文字までです。\n");
while(1)
{
scanf("%s",&a[i][j].Naiyou);
if(a[i][j].Naiyou[0]==Q)
{
break;
}
else
{
fprintf(fp,"%s",a[month][day].Naiyou);
fprintf(fp,"%c","\n");
printf("FILEへの書き込みしました\n");
}
}
}
fclose(fp);
return 0;
}
>>932
mainの前の構造体宣言の末尾に;が入ってない。
936もしもし:03/01/16 00:19
ですね。なんかもっとバグ見つかったんで、出直してきます。
すいません。ありがとうございました
本かえたら?>もしもし
>>930
ふむ。それならそうと最初から。

GDKPixbuf を使った方がよさげ。
http://developer.gnome.org/doc/API/gdk-pixbuf/index.html

gtk+ 2.0 以降なら GtkImage から使える。
http://developer.gnome.org/doc/API/2.0/gtk/GtkImage.html
http://developer.gnome.org/doc/API/2.0/gdk-pixbuf/index.html

lsit2 が簡単なサンプル
http://www-6.ibm.com/jp/developerworks/linux/020315/j_l-gnome1.html
939もしもし:03/01/16 00:33
>937
どうしてっすかね?

940930:03/01/16 00:46
>>938
ありがとうございました。
必死こいてやってきます。
941もしもし:03/01/16 00:51
てかやっぱりできません。いろいろ自分でできる限りいじってみたんですけど。
まじどうして・・・。って感じです。教えてください、おねがいします。
エラー E2087 report3.c 31: ポインタの不正な使用(関数 main )
エラー E2087 report3.c 33: ポインタの不正な使用(関数 main )
警告 W8069 report3.c 39: 移植性のないポインタ変換(関数 main )

#include<stdio.h>
#include<process.h>
#include<stdlib.h>
#define month 12
#define day 31

struct nikki{
char TENKI[10];
char Naiyou[1024];
}a[month][day];

int main(void)
{
int i,j;
struct nikki a[month][day];

FILE *fp;
fp = fopen("nikki.text","a");

fp = fopen("nikki.text","a");
if(fp==NULL)
{
printf("失敗です\n");
exit(-1);
}
942もしもし:03/01/16 00:52
else
{
printf("今日は何月何日ですか?\n");
scanf("%ld,%ld"&i-1,&j-1);  31行目
printf("今日の天気はどうでしたか?\n");
scanf("%s"&a[i-1][j-1].TENKI);
printf("今日の出来事を入力してください\n");
printf("Qを入力すると終了で、512文字までです。\n");
while(1)
{
scanf("%s",&a[i-1][j-1].Naiyou);
if(a[i][j].Naiyou[0] == "Q")  39行目
{
break;
}
else
{
fprintf(fp,"%s",a[month][day].Naiyou);
fprintf(fp,"%c","\n");
printf("FILEへの書き込みしました\n");
}
}
}
fclose(fp);
return 0;
}
scanf("%ld,%ld"&i-1,&j-1); → scanf("%d,%d", &i, &j);
if(a[i][j].Naiyou[0] == "Q") → if(a[i][j].Naiyou[0] == 'Q')
944デフォルトの名無しさん:03/01/16 00:57
945もしもし:03/01/16 01:00
レスありがとうございます。やってみたところ
39行目の方は直りました。
ただ、31,33行目の方はやっても効果なしなんですけど・・・。
エラー E2087 report3.c 31: ポインタの不正な使用(関数 main )
エラー E2087 report3.c33: ポインタの不正な使用(関数 main )
ってでるし。
まじ根本的に間違っているのでしょうか。
946デフォルトの名無しさん:03/01/16 01:02
>>945
どこが31行目と33行目なのか書けよ
947もしもし:03/01/16 01:04
すいません。
>942にかいていたもので・・・。
まったく同じ所です。
948デフォルトの名無しさん:03/01/16 01:06
>>947
書いてあったか。
コメントになっていなかったから見落とした
何処がおかしいか見て判らん、ってのはもう話にならんのだが…
"," は?
950デフォルトの名無しさん:03/01/16 01:07
>>947
&を取れ。
scanfには&をつけて渡すものだとか理解しているだろ?
951もしもし:03/01/16 01:15
すいません、なんかできました。” ”のあとの&の間の、が抜けてました・・・・。
んで、うまく動かないんで、考え直してきます。
あと、&ってかならずつけるものではないんですか?
>>951
やっぱり(藁
scanfにはポインタを渡すんだよ。
配列名はポインタを返すんだから&をつけちゃだめだろ。
というか配列名に&をつけたらエラーになるな多分。
953952:03/01/16 01:18
>>945
あー、エラーになっているか。
そういう理由でエラーになったんでしょ。
954もしもし:03/01/16 01:22
あ、確かに・・・。
なんか、でもソフトが動かないって致命的なみすになってるんで、出直します。

なんか、前ので言ったら、32行目がのprintfが働かない。
もう鬱過ぎる
あとなー、
  aという名前でグローバル宣言しているからmain()の中のstruct〜は不要。
もうひとつ。
  全角512文字入力されると領域足りないぞ。
956もしもし:03/01/16 01:28
ですね。charはめいっぱいで、全角128文字くらいでしたもんね。
あと、配列に日付け入れたりとかいろいろみすあったんで。
ほんとにどーしようもないそーすですね・・・。
ほんといろいろ教えてもらってありがとうございました。
>>もしもし
>>942を、やりたいと思われるように直しました
これを参考に違いを良く考えると良いかも
(他にも、突っ込みどころが多いんだけどね…)
else
{
printf("今日は何月何日ですか?\n");
scanf("%d,%d",&i,&j);
i--,j--;
printf("今日の天気はどうでしたか?\n");
scanf("%s",a[i][j].TENKI);
printf("今日の出来事を入力してください\n");
printf("Qを入力すると終了で、512文字までです。\n");
while(1)
{
scanf("%s",a[i][j].Naiyou);
if(a[i][j].Naiyou[0] == 'Q')
{
break;
}
else
{
fprintf(fp,"%s",a[i][j].Naiyou);
fprintf(fp,"%c",'\n');
printf("FILEへの書き込みしました\n");
}
}
}
fclose(fp);
return 0;
}
>ですね。charはめいっぱいで、全角128文字くらいでしたもんね。
ソースきぼん。
signed charの範囲に関する思い違いかと。
というか無知の知を…
960930:03/01/16 02:20
930ですが、C言語で画像を表示させようと、gtk+1.3を導入したのですが
http://www.kitanet.ne.jp/~asler/linux/gtk/ja/gtk_tut_ja.html
ここや、
http://www.gnome.gr.jp/docs/gnome-libs-tutorial/using-the-libgnomeui-library.html ここの画像を使うといった項目などをよんでは
見たのですが、いまいちよく分かりません。
例えば下のURLだとGnomepixmapというのを使っていますが、
これはヘッダーにはgnome.hを読み込むのですか?
そうだとすると、gnome.hは見つからないと出てくるんですが
このヘッダーファイルは別途でいれるのでしょうか?
それとも、僕の設定ミスでPATHが通ってないのでしょうか?
gnome.hという具体的なファイルを検索かなんかで探してみたら?
>>894
そういうときはMakefile作るのが正道だと思いますよ。
>>960
gtk+ は GUI ツールキットで、GNOME はアプリケーションフレームワーク。
GNOME がアプリを作るときのウィジェットととして gtk+ を採用している。
挙げている libgnomeui は gtk+ や imlib を使ってるわけ。
画像を表示したいだけなら libgnome 系はいらない。

gtk+1.x の画像読み込みのインタフェイスは↓のように貧弱というかレガシーを引きずってるので
http://www.kitanet.ne.jp/~asler/linux/gtk/ja/gtk_tut_ja-9.html#ss9.6
上であげた gdkpixbuf や imlib をインストールして使えばいい。
祝49回 C言語ならあっしに聞け
http://pc3.2ch.net/test/read.cgi/tech/1042640474/
965デフォルトの名無しさん:03/01/16 04:09
スモールモデル
>>898
サンクス
>964
「〜聞いておくんなせぇ」じゃないの?
968デフォルトの名無しさん:03/01/16 16:53
ビットでchar型が8ビットだったとします
んで 僕は勝手にビット処理用の変数を宣言する時には
必ずunsignedをつけなければいけないと思いこんでいるのですが
この時signedにしてシフトをすると
ビットパターンはどうなってしまうんでしょうか?
参考書に書いてある事を理解できない厨房ですみません
signed char x;
x=160;
x>>=4
を例にしてお願いします
969968:03/01/16 16:55
ごめんなさい
x>>=4
セミコロンつけ忘れてました
>969
その環境で走らせてみて、出てきた物が答えです。
971968:03/01/16 17:31
やっぱり実行結果ってのは当たり前ですけど
環境によって全然変わってくるんですね〜
確かにデルパソコンとエニアックを比べろ
って言われたらわかるような気もしますが(藁
972デフォルトの名無しさん:03/01/16 17:58
16進数標記のテキストを読み込み
バイナリに変換したいのですが
while(fgets(buf, 256, ifp) !=NULL){
bf = strtol(buf, &dt, 0);
fwrite(&bf, sizeof(bf), 1, ofp);
}
これだとうまくいきません。。。
84バイトあるテキストが16バイトになって
しまいます・・・

ほんと厨な質問で申し訳ないですが
ご教授お願い致します。
階乗プログラム作成中・・・。char *insert_abc(int abc,int n,int(*Set)(int n));
[A] [AB BA] [CAB CBA ACB BCA ABC BAC]のように、成長していくポインターを作りたい。 
 その際、できるだけループをすくなくする事を心がけ階乗値を使うこと。
  ポインターの成長例:
[CAB[0][1] CBA[0][1] ACB[1][0] BCA[1][1] ABC[2][0] BAC[2][1]]
次ループでは、
[CAB[0][0] CBA[0][1] ACB[0][2] BCA[0][3] ABC[0][4] BAC[0][5]]
 ×4=4!=24
という具合に3重ループで成長します。
これらの、バグを取ろうにも複雑すぎてわからない状態。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *str_insert(char *s1,const char *s2,int n)
{
char *result;

if((result=(char *)malloc(sizeof(char)*(strle(s1+strle(s2)+1)))==NULL){
printf("");
exit(1);
}
memmove(result,s1,n);
result[n]=0x00;
strcat(result,s2);
strcat(result,&s1[n]);
strcpy(s1,result);
return s1;
}
974>>973:03/01/16 18:33
char *insert_abc(int abc,int n,int(*Set)(int n))
{
char **s1;
char *s2;
int i,j,k,found=0;
char number[3];

if((s1=(char**)calloc(sizeof(char*),(*Set)(n+2)))==NULL){
printf("");
exit(1);
}

if((s2=(char*)calloc(sizeof(char),(*Set)(n)))==NULL){
printf("");
exit(1);
}
975>>973:03/01/16 18:35
for(i=0;i<n;i++){
number[0]=abc+i;
/*後々、困るので、今のうちにchar型←int型に変換する*/
number[1]='\0';
for(j=0;j<i+1;j++){
/*線形リストで、お馴染みのポンプ形式でループ内で
メモリー確保する*/
if((s1[j]=(char*)malloc(sizeof(char)                  *i+1))==NULL){
exit(1);
}
if(found==0){
strcpy(s1[j],"A");
found=1;
}
else{
strcpy(s1[j],s2);
/*strcpyとmemcpyのメモリー確保の状況が亜白できないためstrcpy()が乱立している。*/
strcpy(s1[j],"\0");
/*memcpyの関数設計は、strcpyとどこが違うのかよくわからない。*/
}
/*memcpyも、str_insertも領域を一個づつ後属に確保している。*/
for(k=0;k<(*Set)(i);k++){
/*ゆえに、新たにjループ内でメモリーを確保してstrcpyするのが
           望ましい。*/
str_insert(s1[k],number,j);
}
}
s2=*s1;
}
return s2;
}
976>>973:03/01/16 18:37
int kaijou(int n)
{
if(n>0)
return(n*kaijou(n-1));
else
return 1;
}
int main(void)
{
int alpha,num;
char *temp;
scanf("%ls",&alpha);
scanf("%d",&num);
temp=insert_abc(alpha,num,kaijou);
printf("%s",temp);

return 0;
}
/*ソースを見安くするため加工していますご両所くださいm(_ _)m*/
/* こっちの掲示板の方が、見やすいかもしれません*/
1981
http://www.tachiki.com/cgi-bin/chatc/ealis.cgi?#3
977デフォルトの名無しさん:03/01/16 18:45
もうちょっとアルゴリズムを工夫してからプログラム造った法が良いのでは?
978>:03/01/16 18:48
>>997
私のことですか!?
979>>973:03/01/16 18:54
  アルゴリズムを、工夫しようようにもアルゴリズムの実験のタメに

 指定した”文字”から、階乗分の配置換えを行う実験プルグラムを
 
 作ってるんです。(Hash)
 
もうネタにしかみえない!
981デフォルトの名無しさん:03/01/16 22:01
>>972 strtolは1個のlong値を返すだけですよね。1行に何個か数値がある
のならその個数分strtolで変換しなきゃならんのでは?
long bf[16];
1行分fgets();
dt = buf; /* dtはchar*ね */
do {
bf[j++]=strtol(dt,&dt,0);
} while( *dt!='\0' );/*1個変換後の区切りが文字列終端でなければloop*/
/*ここでは区切りはspace,tab等だと想定:それだと次のstrtolの頭で読み
  飛ばされるから。*/
j個分のbf[]をfwriteする; とか・・・
983 :03/01/17 23:50
教えてください

Cでsnprintfを自作することになりました。
参考になる資料とかありましたら教えてください。
フリーで使えるソースが何処かに落ちていると良いのですが。
>>983
マルチ?
985デフォルトの名無しさん:03/01/18 00:49
>>983
gccについてるし。
>>985
どうせ何かの課題でしょ。
>>983
中国のことわざにこういうのアル
「マルチイクナイ」
988デフォルトの名無しさん:03/01/18 02:12
教えて下さい。
Cを使って数値解析したんですけど、その出力される結果をリアルタイムに
2Dグラフにしたいんですが、そのようなグラフを作成する処理について、
何か参考になるHPありますか?
>>988
カンキョーイゾン
>>988
グラフ作成のコード書いたとして,
そのソースはどんな範囲で通用すればいいんだ?
犬xとWinの両方とかPC9801系とか
何か想定せにゃ答えようないで
csv吐いてgraphvizで表示。
993デフォルトの名無しさん :03/01/18 14:27
floatで小数点以下と整数部分に割り当てられているビット数はそれぞれ
いくらですか?
>>992
プ
>>993
float.hを読め。
>>993
floatなので浮動です。
998デフォルトの名無しさん:03/01/18 15:15
>>993
これに腐るほど詳しく載ってる。
http://appzone.intel.com/scripts-util/download.asp?url=/jp/developer/jpdoc/24547003_j.pdf&title=IA-32+インテル(R)+アーキテクチャ・ソフトウェア・デべロッパーズ・マニュアル、上巻:基本アーキテクチャ&fullpg=3&site=jp
次スレ 祝49回 C言語ならあっしに聞け
http://pc3.2ch.net/test/read.cgi/tech/1042640474/l50
10001000:03/01/18 15:17
1000!
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。