C言語なら、オレに聞け! <2>
レス数が1000を超えています。これ以上書き込みはできません。
0001ジョブス2世
NGNGC言語しか知らないがC言語なら誰にも負けない...
C++は勉強中だ!文句あるかゴルァ!
前スレ「C言語なら、オレに聞け! 」
http://piza.2ch.net/test/read.cgi?bbs=tech&key=967985026
また、処理系依存の質問は以下に逝け!
C++Builder相談室
http://piza.2ch.net/test/read.cgi?bbs=tech&key=969458279
VisualC++相談室
http://piza.2ch.net/test/read.cgi?bbs=tech&key=970607517
0002デフォルトの名無しさん
NGNG0003デフォルトの名無しさん
NGNGextern int table1[32][64];
extern int table2[30][60];
a = table1[b][c];
a = table2[b][c];
パフォーマンスの差があるか考察せよ。
0005デフォルトの名無しさん
NGNGもちろん、「一般的には有意な差では無い」が。
理由1
配列要素ののアドレス計算が、
2のシフト演算で行える場合と行えない場合の差。
コンパイラがアドレス計算をシフト演算に最適化し、
乗算とシフト演算に要する時間に差がある場合、差がつく。
理由2
キャッシュのアラインや配列のサイズにより、
差が出る場合がある。
これは、キャッシュのアルゴリズムやアクセスの仕方により異なるので、
どちらが速いかは場合による。
00065
NGNG「構造体の配列」や「配列の配列」にアクセスするコードの
アセンブラ出力を見れば一目瞭然な気が。
00073
NGNGぴんこーん!
でも理由1に関してはx86系のCPUで乗算とシフトのレイテンシーの差、
実行ポートの差、コード依存性によって一概にシフトが速いとは言えないらしいです。
理由2に関してはまぁ、このぐらいの小さいテーブルなら大丈夫でしょう。
アラインは合わせればいいだけだしね。
下手にcharとかにしてテーブルを圧縮してもパーシャルレジスタストールが起こるし。
まっ、どっちにしろアセンブラレベルの話ですね。
0008ジョブス2世
NGNG完敗です、C言語なら誰にも負けないというのは言い過ぎでした...
C言語しか知らんので、アセンブラは知らないっていう言い訳は
見苦しいので言わない事にします
ところで、
extern int table3[32][60];
a = table3[b][c];
の場合、
> 配列要素ののアドレス計算が、2のシフト演算で行える
のでtable1と同等のパフォーマンスが出るっていうことでいいのでしょうか?
00093
NGNGint *table = (int *)table3;
a = table[60*b+c]; // a = table3[b][c]と同値
ですね。アセンブラはともかく、2次元配列のメモリー上での
連続性は分かってないと、ど初心者ですよ。。
0010デフォルトの名無しさん
NGNGそんなにムキになって挑まなくてもいいと思うのだが。
0011ジョブス2世
NGNG# なにを血迷っていたんだろう
訂正します
extern int table4[30][64];
int *table = &table4[0][0];
a = table[(b<<6)+c]; // a = table[64*b+c]と同値
のでtable1と同等のパフォーマンスが出るっていうことでいいのでしょうか?
0013ジョブス2世
NGNG一応Cについては自信があったので挑んでみましたが
結果は惨敗でした。精進したいと思います。
>>12
ええ、盲点でした。勉強になりました。
やはりCしか知らないでC言語で負けないことは難しそうですね。
0014デフォルトの名無しさん
NGNG#define MAX 10000
main(int argc,char *argv[])
{
int i, j, numCol, noMax =0;
char tmp[MAX + 1], strForm[16];
/* Input Check */
if(argc>1){
noMax = atoi(argv[1]);
}
while(noMax < 2 || MAX < noMax){
printf("いくつ以下(但し 2 以上 %d 以下)の素数を求めるのですか?> ",
MAX);
fgets(tmp, MAX, stdin);
tmp[MAX] = 0;
noMax = atoi(tmp);
}
/* MAX って何桁? そんなら、横は何列に? */
sprintf(strForm, "%d", noMax);
i = strlen(strForm);
numCol = 79 / (i + 1);
/* ならば、出力の書式指定フォーマットは次の通り */
sprintf(strForm, " %%%dd", i);
/* 素数探し(表を書いて素数じゃない数を消して行く方法で) */
for(i = 0; i <= MAX; i++) tmp[i]=1;
for(i = 2; i <= MAX; i++){
if(tmp[i] == 1){
j = i << 1; /* j = i * 2 */
while (j <= MAX){
tmp[j] = 0;
j += i;
}
}
}
/* 以下が結果 */
printf ("◆◆◆ %d までの素数一覧 ◆◆◆\n", noMax);
for(i = 2, j = 0; i <= noMax; i++){
if(tmp[i]){
printf(strForm, i);
if(++j % numCol == 0){
putchar('\n');
}
}
}
printf("\n◆◆◆ 全部で %d 個 ◆◆◆\n", j);
}
¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥
fgets(tmp, MAX, stdin);
tmp[MAX] = 0;
noMax = atoi(tmp);
これが何をしているのかがわかりません。
そもそも
素数でないってどの段階でどうやって識別してるのですか?
大学でのこの半年間しかC言語にふれてなくて超初心者です・・・・
0015ジョブス2世
NGNG> fgets(tmp, MAX, stdin);
> tmp[MAX] = 0;
> noMax = atoi(tmp);
> これが何をしているのかがわかりません。
fgetsで標準入力から入力された文字列ををtmpに格納して、
atoiでtmpに格納された文字列を数値に変換し、noMaxに格納しています
# tmp[MAX] = 0;はちょっと何を意図しているかは不明です。
# これが無くても問題ないでしょう。
> そもそも
> 素数でないってどの段階でどうやって識別してるのですか?
以下で行なっています、
# 確か「何とかのふるい」っていうアルゴリズムのはず...
>/* 素数探し(表を書いて素数じゃない数を消して行く方法で) */
>for(i = 0; i <= MAX; i++) tmp[i]=1;
>for(i = 2; i <= MAX; i++){
> if(tmp[i] == 1){
> j = i << 1; /* j = i * 2 */
> while (j <= MAX){
> tmp[j] = 0;
> j += i;
> }
> }
>}
ただ、繰り返しはMAXまで行なう必要があるかどうか疑問です
>for(i = 0; i <= MAX; i++) tmp[i]=1;
>for(i = 2; i <= MAX; i++){
> while (j <= MAX){
はそれぞれ
for(i = 0; i <= noMax; i++) tmp[i]=1;
for(i = 2; i <= noMax; i++){
while (j <= noMax){
で十分のような気がします
001614
NGNG0017名無しさん@お腹いっぱい。
NGNGエラトステネスのふるいですよ。
このスレッドいきなりためになったわ。感動。
3にありがとう
0018デフォルトの名無しさん
NGNGパフォーマンス厨房どもはアルゴリズムとデータ構造の本でも読んでから出直してきなさい。
0019デフォルトの名無しさん
NGNG10年以上前から読んでるけど?何回も読み返してるし。
0020デフォルトの名無しさん
NGNG>>5 >もちろん、「一般的には有意な差では無い」が。
>>12 >どの程度パフォーマンスに差が出るかは分かりませんがね。。
の意味がわからないらしいから。
0021デフォルトの名無しさん
NGNG18の意図すら分からんのか?
3の質問なんてナンセンスだし、考察する価値も無い。
そんなことやってる暇があったら、アルゴリズムとデータ構造
でも勉強せい、っつーことだろ。
俺も同感だね。
002221
NGNG18=21の自作自演とか書こうとしてる、おまえ。
マジ、病院行った方がいいぞ。
0023デフォルトの名無しさん
NGNGなんだあんた。あんたに何で議論の内容決める権利があんだよ。
あんたが勉強中だからって、みんな勉強中だと思うなよ。
002420
NGNG>そんなことやってる暇があったら、アルゴリズムとデータ構造
>でも勉強せい、っつーことだろ。
これには完全に同意するが、おまえも
>>5 >もちろん、「一般的には有意な差では無い」が。
の意味が読めてない。
有意ではない=他にもっと重視すべき事柄があるから、気にするな
と言ってるんだろうが。
>3の質問なんてナンセンスだし、考察する価値も無い。
普通はな。
18は意図を汲み取っていないと思っただけで電波は感じなかったが
>んで、
>18=21の自作自演とか書こうとしてる、おまえ。
>マジ、病院行った方がいいぞ。
これには電波を感じたよ。
00263
NGNG簡単なクイズを出しただけなんだからさぁ。そんな噛み付かなくてもいいじゃん。
簡単なクイズ出してジョブス2世氏に解かせるぐらいやってよ。。ヽ(´Д`)ノ
002720
NGNG> の意味が読めてない。
> 有意ではない=他にもっと重視すべき事柄があるから、気にするな
> と言ってるんだろうが。
言ってないよ。優位は「差」に係る。
つーか、そんなことどうでもよい。俺がいいたいのは、そんなことじゃ
ないのも読めないのか?
002820
NGNG> >んで、
> >18=21の自作自演とか書こうとしてる、おまえ。
> >マジ、病院行った方がいいぞ。
> これには電波を感じたよ。
感じる方の受信機が壊れてるんじゃねーの?
俺がそう書いた意図は分かるだろーが。
002920
NGNG何が言いたいんだ?俺の読解力では理解できない。説明してくれ。
>優位は「差」に係る。
その通りだ。「有意」な「差」はない。したがって、
「実際には差が出ないから重視するな」
と読んだ。もちろん、重視すべきはアルゴリズムとデータ構造だ。
2-17はそんな当たり前の事は前提として、
予備知識だと理解した上で話と、俺は解釈した。
もちろん俺と違ってすばらしい読解力を持つ21なら、
2-17がもっと深遠な意味で話していたという事を
根拠と共に示してくれるよな。
>俺がそう書いた意図は分かるだろーが。
「アルゴリズムとデータ構造のほうがずっとずっと重要だ」か?
それならわかってるさ。その上で
「そんな事は、わざわざ指摘しなくてもみんなわかって話してるんだろ」と
と俺は20と24で書いたつもりだがね。
で、電波君、それ以外に言いたい事とは何だ?
「話をするな」
とでも言いたいのか?
電波なのは、意味も無く「自作自演」とか言い出すからだよ。
よっぽど普段、自作自演の多数多数派工作をやってるんだろうね。
0030名無しさんのレスが読めるのは2chだけ!
NGNG003120
NGNG今度は一応推敲したからね。
・俺の捉えた流れ
3-13
予備知識として、アセンブラレベルの話があった。
「予備知識」の根拠は>>20の通り。
18
「アルゴリズムとデータ構造のほうが重要だ」
20(俺)
「そんな事はみんなわかって話してるんだから、わざわざ指摘するな」
21
「18の意図すらわからんのか」
#ここに書いた以上の意味があるのか、未だ俺にはわからんね。
22
「自作自演だいすき」
24(俺)
「有意差がない=重要ではない=予備知識である」を繰り返した。
27-28
繰り返し。
少なくとも、俺が20に書いた意図は、
>「そんな事はみんなわかって話してるんだから、わざわざ指摘するな」
だ。それに対して、
>18の意図すら分からんのか?
>マジ、病院行った方がいいぞ。
と返す理由がわからないね。
18の意図とは何だ?
そして俺が病院に行ったほうがいい理由は何だ?
>マジ、病院行った方がいいぞ。
こんな言い方をされて「電波だ」と反論するのは当然だろう。
003221
NGNGもーいーじゃん。
003321
NGNG003421
NGNGあがいているだけ。
# 俺も粘着君(藁
003520
NGNG詫びる気は全然ねーんだな。
俺は、18の言い方ににあわせた言い方をしたんだよ。
それをてめーが理解できずに、俺につっかかってきたんだろ。
読解力が足りてねえ、電波なのはてめーなんだよ。
連続して書きこむところなんざ、
他のスレで大暴れしていた奴を思い出すね。
詫びの言葉とかはねーのか?
俺は18が俺の言葉遣いの悪さを指摘したら謝るつもりだがね。
003620
NGNG18の意図と21-22の意図とやらを。
003720
NGNGどこが対立してんだよ。説明してくれよ。
俺は、てめーがつけてきた言いがかりに反論してんだよ。
0038デフォルトの名無しさん
NGNG0039デフォルトの名無しさん
NGNG0040デフォルトの名無しさん
NGNG20と21、両方バカ
0041デフォルトの名無しさん
NGNG004220
NGNG28でageられたからageにしたんだけど、やっぱよくなかった。
というより、相手にした俺が悪かったって反省してます。
もう、この件での書きこみはやめます。
0043デフォルトの名無しさん
NGNG0044初心者
NGNG直して画面に表示するプログラムを作成しなさい。
という、問題かなり簡単らしいんですがCに関しては
まったくの初心者です。誰か教えてくれる人いませんか?
0045デフォルトの名無しさん
NGNGまずは、ヘルプでitoa関数を調べろ。
0046初心者
NGNGさっそく調べてみます。
0047デフォルトの名無しさん
NGNGあれ?なんでitoa??
printfのフォーマットの問題じゃないんですか?(^^;
0048デフォルトの名無しさん
NGNGchar strings[131];
gets( strings );
num = atoi( strings ); // メニュー番号取得
printf( "元=%d 16進=%x 8進=%o\n", num );
004948
NGNG染んで詫びよう・・・。
0050デフォルトの名無しさん
NGNGってゆーか、それってまともに動いてるの?
>printf( "元=%d 16進=%x 8進=%o\n", num );
printf( "元=%d 16進=%x 8進=%o\n", num, num, num );
なら話は分かるが...
0051デフォルトの名無しさん
NGNGint i;
scanf("%d"&i);
printf( "元=%d 16進=%x 8進=%o\n", i );
だけで充分だと思う
もちろん、48のが安全だけどね
005321
NGNG005451
NGNG逝って来ます・・・
0055デフォルトの名無しさん
NGNG#include<stdio.h>
#include<stdlib.h>
int main(){
char s[10];
int i;
printf("\x1b[2J\x1b[3;3HInsert int No : ");
gets(s);
i=atoi(s);
printf("\x1b[4;4H 10 : %d",i);
printf("\x1b[5;4H 16 : %x",i);
printf("\x1b[6;4H 8 : %o",i);
printf("\x1b[10;8HHit Enter. Then Exit.");
gets(s);
printf("\x1b[2J\x1b[1;1H");
return 0;
}
こんな糞プログラムはいいから
Cで作った共有メモリにFortranからアクセス
する方法教えてちょ。
005621
NGNG> 俺は18が俺の言葉遣いの悪さを指摘したら謝るつもりだがね。
ほー、やはり、俺の予想の
> 20は「日本語に不自由しているんだろ。 」と書いた自分を正当化しようと
> あがいているだけ。
は、正解みたいだったな。
# で、何をあやまれって言ってるの?妄想君。
0057初心者
NGNGみなさん本当にありがとうございます。
嬉しいです。(;o;)
0058デフォルトの名無しさん
NGNG質問者の邪魔になるから消えろ。
0059問題の18登場
NGNG俺の一言で随分ともめてた様だな。
それにしても3の言うパフォーマンスって何だろ。
結局こんなのアセンブラ出力と実行結果を確認すりゃおしまい。
それに大方コンパイラやプロセッサの環境依存っぽい。
だいたい2次元配列なんてそうそう使わないしね。
あのコードだけでプログラム組むわけでも無いのに。
まあ、レスも増えてここの1も少し得した気分だろう。
それとも余計なことしたかなあ?
0060続・問題の18登場
NGNGいちおう3に対しての俺の考察結果は、
「環境による」
ね。
ここはVisualC++専用スレってわけじゃないから。
これ以上発展しそうにない話題なのでsage
0061デフォルトの名無しさん
NGNGアセンブラ出力の質にこだわれば生産性は落ちるものですし
質と生産性はなかなか比例しませんから
それぞれの道を信じていけばいいのでは。
0062ななし
NGNGいや、余計な存在であるかと。。
0063デフォルトの名無しさん
NGNGうわっ。あたまわりぃ〜
「なんでこんな事件が起きたのでしょうか?」
「社会が悪いんです」
って受け答えぐらい頭が悪い返答ですねぇ。。
0064デフォルトの名無しさん
NGNG0065ジョブス2世
NGNG> Cで作った共有メモリにFortranからアクセス
> する方法教えてちょ。
すみません。Cか知らないので、私にはわかりません。
誰か知っている人いますか?
0066デフォルトの名無しさん
NGNG最近のプログラマはほとんどがアセンブラをやらないし、
読めない。
また、CPUのアーキテクチャに詳しい奴も少ない。
よって、彼らはお互いに議論できる場を通常持つことが
出来ない。それで、その手の話題が出て来ると、嬉々として
自分の知識をひけらかす。周りはついてこれないし、
興味も無い。
これがウザがられる原因。
006766
NGNGウザがる奴もいないから、いいんではと思うのだが。
0068名無しさん
NGNGhttp://www.ccur.co.jp/external/TechSup/rtu.html#SECTION830
0069デフォルトの名無しさん
NGNG大丈夫なんじゃない?
0070デフォルトの名無しさん
NGNGいや、君みたいな存在が一番うざいと思うぞ。
007166
NGNG0072初心者@2回目
NGNG直して画面に表示するプログラムを作成しなさい。
という、問題で%x、%oを使わないプログラムの書き方
を誰か教えていただきませんか?2回目で大変恐縮なのですが
お願いします。
0073デフォルトの名無しさん
NGNGじゃあ、itoa()の出番です
まず調べてみてください
>>45
申し訳ない、あなたが正解だったようです・・・
0074初心者@2回目
NGNGitoa関数、ヘルプで見てもないんです・・・。
ちなみに私が使っているCはウルトラCです。
では、本で調べてみますね。
0075デフォルトの名無しさん
NGNG何なら自分で同等関数つくってもいいですよ
てか、それが正解なのかも
1番下の桁を取り出して、基数で割る
これを繰り返せば・・・
0076初心者@2回目
NGNGう〜ん・・・教えてくれて嬉しいんですが
やっぱり書き方が解りません。すみません
本当初心者なんです・・・
0077デフォルトの名無しさん
NGNG0078初心者@2回目
NGNGそれは関数ですか?ちょっと解らないです・・。
007955
NGNGありがとうございます。
早速、見に行きます。
0080デフォルトの名無しさん
NGNG今CのプログラムをCGI化しようとしています。
でも、このプログラム(他の人が作成)ってのが5つの.cファイルで
できていてコンパイル(makeコマンド使用)すると実行ファイルが
できるのですが、これをCGIとして動かすにはどうしたらいいのか
わかりません。
ちょっと分野が外れているかもしれないのですが知っていれば
アドバイスいただけるとうれしいです。
0081デフォルトの名無しさん
NGNG>int i,j,k,l,m[100];
>i=(取ってきた整数);
>k=i;
>for(l=1;;l++){
> j=k%16;
> m[l]=j;
> k=(k-j)/16;
> if(k==0)break;
>}
こんなとこじゃないですか?
出力とデバッグは自分でやって下さい。
0082デフォルトの名無しさん
NGNGそこまで出来てるなら板違いと思われる。
CGI板で訊いた方がいいんじゃ?
0083デフォルトの名無しさん
NGNGperlと同じ要領で
chmodでパーミッションを実行許可して、
まずprintfで"Content-type: text/html\n\n"
を出力していけばふつーにできるぞ。
ただし、サーバでコンパイルしないと
機種依存ではねられるので、サーバ側がターミナルを許していて、
かつgcc,cc,g++なんかのコンパイラが使えるようになってないと
だめっすよ。(蛇足でしたね。)
0084デフォルトの名無しさん
NGNG著者が外人さんの名前で2人だったのは覚えているんですが...
どなたか教えてください。それと、C初心者でもこの本は読んでも理解できるのでしょうか?
0085>84
NGNGとか言わなかった?
0086デフォルトの名無しさん
NGNG0087>84
NGNGCプログラマでこの本もってないのはキリスト教の信者が聖書を持っていないのと
同じです。絶対買うべし。
0088デフォルトの名無しさん
NGNGネタでないみたい。
それはさておき、実行時間を測定したいので、CPU時間を計りたいの
ですが、どうやればいいんでしょう?
今は単に経過時間を測定してるだけなんです。
0089デフォルトの名無しさん
NGNGclock()。これはネタですか?
0090デフォルトの名無しさん
NGNGthreadのCPU消費時間のことじゃないかな。
WinならAPIにあったような気がするけど、忘れた。
0091デフォルトの名無しさん
NGNG0092デフォルトの名無しさん
NGNGどの環境でも動くんかな??
今VCでCGI作ろうと思って勉強中なんだけど
UNIX系OSのCコンパイラでコンパイルしても動くかな?
ってか、どんな風にすると他の環境で動かなくなるん?
0093デフォルトの名無しさん
NGNGANSIで定められていないライブラリーの関数を使うとダメだと思う。
0094デフォルトの名無しさん
NGNGchar ってsined charと断定したり
sizeof(int)が4バイトと信じてたりすると
痛い失敗をすることがあるらしい
0095デフォルトの名無しさん
NGNG009796
NGNGビットずらしを書いたらDLになっちまったい。
0098デフォルトの名無しさん
NGNGLは下三角行列で対角成分が全て1
Dは対角成分が全て整数でそれ以外が全て0
となるようにするプログラムです
お願いします
0099初心者@2回目
NGNG>遅れてすいません。
81さんありがとうございました。
これで単位がもらえそうです(^0^)
0100デフォルトの名無しさん
NGNG0101デフォルトの名無しさん
NGNG100バイトずつでもメモリ取って、リストにでもしたらどうかな。
0102デフォルトの名無しさん
NGNGこんだけありゃー足りるだろ(藁
0103デフォルトの名無しさん
NGNGVC++コンパイラの仕様ですか?バグですか?
ほかのコンパイラでもそうなりますか?
0104デフォルトの名無しさん
NGNGいや・・・その程度気合でオーバーしてくるツワモノも
結構居るもんだぜ・・。藁
0105デフォルトの名無しさん
NGNG0106デフォルトの名無しさん
NGNG> VC++コンパイラの仕様ですか?バグですか?
式の評価によってオブジェクトに格納された値を変更する回数は
高々一度だけでなければならない為、
(x=2,x)+(x=3,x) の計算結果は「未定義」です。
> ほかのコンパイラでもそうなりますか?
なるかも知れませんし、ならないかも知れません。
一番いいのはそんな式にしないことです。
0107デフォルトの名無しさん
NGNGstdinのバッファサイズ見てから考えれば?
getcharするなら
プログラム内で擬似的にバッファリングして
reallocするのが簡単か?死ぬほど重いけど・・・
0108秀樹
NGNGjをどのように扱えばよいのでしょうか?教えて下さい。
0109103
NGNGstatic struct HOGE hoge;
#define GetValue(x) (Func(x, &hoge), hoge.value)
という感じのマクロがあって、
GetValue(a)+GetValue(b)
とか計算したときに、期待通りの結果が得られなかったので
調べてみたら、>>103に書いたようなことが原因でした。
こういうマクロを使うときには気をつけなければならないってことですね。
106さん、ありがとうございました。
0110デフォルトの名無しさん
NGNGC++でまずcomplexクラスを作る。+-*/=等を多重定義で作っておく。
FORTRANで書く(complex型)
根性でカバー
このへんじゃないでしょうか?
0111デフォルトの名無しさん
NGNG>C++でまずcomplexクラスを作る。+-*/=等を多重定義で作っておく。
作らなくても、普通、あると思う。
0112初心者
NGNGウインドウをだしたりできるプログラムを作りたいのですが、
どのように勉強すればいいのでしょうか?本などを探しても乗っていないし、
よくわかりません。
よろしくお願いします。
0113第三者
NGNGC言語の標準機能ではマウス操作やウインドウは出したりできない。
標準外ライブラリ使用で実現はできる。
しかし、特定のコンパイラでコンパイルできても他のCコンパイラ
ではコンパイルできない。
なぜかというとC言語の標準外のライブラリを使っているから。
0114デフォルトの名無しさん
NGNGREG0を使うこったね!
0115ジョブス2世
NGNGプログラム言語 C の推奨されるスタイルとコーディング規範
http://dennou.ms.u-tokyo.ac.jp/arch/comptech/cstyle/cstyle-ja.htm
で、以下のマクロを推奨していたが、どう思う?
> #define STREQ(a, b) (strcmp((a), (b)) == 0)
01163
NGNGif(0==strcmp(str1,str2))
とか
if(!strcmp(str1,str2))
ってやるからなぁ。。
う〜ん。マクロはあまり好まない性格だからなぁ。
>どう思う?
嫌いだなぁ。
01173
NGNG0118デフォルトの名無しさん
NGNGサブルーチンが実際に受け取ったポインタパラメータのサイズを返してきますよね。
では、どうしたら正しいサイズを求められますか?
0119デフォルトの名無しさん
NGNG君は根本的な間違いを犯している。
sizeof()は関数ではない。コンパイル時に変数なり構造体なりの
サイズを求めて、その値に置き換えてるだけ。
だから、サブルーチンには配列と配列のサイズを渡さなきゃならない。
Do you understand?
01203
NGNG0121デフォルトの名無しさん
NGNG無理です。
引数で受け取るときに配列は配列の先頭アドレスを
指し示すポインタに格下げされてしまうので、
配列のサイズは受け取れません。
配列サイズを引数に追加するか
配列をメンバとした構造体を定義し、構造体を引き渡すようにすれば
構造体の配列のメンバサイズは計算できます。
0122デフォルトの名無しさん
NGNG>>120
>>121
みなさん、速答ありがとうございます。
配列のサイズも一緒に渡すか、構造体を使うんですか。
試してみます。
0123デフォルトの名無しさん
NGNG試してからカケ。
0124デフォルトの名無しさん
NGNGプログラムで作れって・・・3ヶ月細細と学んだ人にできるものなんですかね!???
0125デフォルトの名無しさん
NGNGできる。以下の手順で行なえばよい
1. Cygwinのソースをdownloadする。
2. uniqコマンドを見つける
3. こっそりコピる。
0126もちろんネタだ
NGNG0127切れそうなほど困ってる男
NGNG数字をそれぞれ一つずつ配列chromに格納のしたいのですが
実行してみるとすべて0が格納されてしまいます。どこが悪いのでしょうか?
ちなみに巡回セール問題を遺伝的アルゴリズムで解こうとしています。
よろしくお願いします。
0128切れそうなほど困ってる男
NGNGvoid gen_root(chrom,chrom_size)
allele chrom[];
int chrom_size;
{
double random();
int no,okflag,i,j;
chrom[0]=chrom_size*random();
for(i=1;i<chrom_size;i++){
do{
no=chrom_size*random();okflag=1;
for(j=0;j<i;j++)
if(chrom[j]=no)
okflag=0;
}while(!okflag);
chrom[i]=no;
}
}
/* 0以上、1未満の乱数を発生させる */
double random()
{
double r;
int i;
i=rand();
if(i!=0)
i--;
r=(double)i/0x7fff;
return(r);
}
0129デフォルトの名無しさん
NGNG/* 0 以上、1 未満の乱数を発生させる */
double hoge()
{
r = (double)(rand()) / (double)(RAND_MAX);
return r;
}
0130ってか
NGNG0131切れそうなほど困ってる男
NGNGありがとうございます。
>130
実は本に載っているプログラムを参考にしたので。
よろしかったらどの辺が昔の書式なのか教えてくれませんか?
初心者なのでよくわかりません。
面倒かもしれませんがよろしくお願いします。
0132デフォルトの名無しさん
NGNG一番上の関数の引数が古い。
0133切れそうなほど困ってる男
NGNGすみません。やっぱり0しか入らないのですが。
ちなみにchrom[]はunsigned int です。
doubleからintになるので0になってしまうのでしょうか?
0134デフォルトの名無しさん
NGNG> /* 0 以上、1 未満の乱数を発生させる */
Cでは0以上、1未満を整数に入力すると0になります。
(小数点以下切り捨てになる)
0以上、2未満の乱数を返すようにした方がいいと思う。
0135デフォルトの名無しさん
NGNGfor (int i = 0; i < chrom_size; i++) {
chrom[i] = i;
}
random_shuffle(&chrom[0], &chrom[chrom_size]);
とかは?外してたらスマソ。
0136切れそうなほど困ってる男
NGNGやってみましたがそれでも全て0になってしまいます。
0137デフォルトの名無しさん
NGNGそのプログラムは何をやりたいの?
0以上1未満の乱数の生成?
0以上1未満のユニーク(他と同じでない)乱数の生成?
0138切れそうなほど困ってる男
NGNGgen_root関数はrandom()関数を利用して、0〜chrom_sizeまでの
ユニークな整数をchrom[chrom_size]に格納するのが目的です。
0139恥さら137
NGNGよく読むと
> 以下のようなアルゴリズムで0〜chrom_sizeまでの
> 数字をそれぞれ一つずつ配列chromに格納のしたいのですが
つまりchrom_size=10だと
chromの中身が{9,4,7,8,2,1,6,5,3,0}な感じになりゃいいの?
0140恥さら137
NGNGif(chrom[j]=no)
は
if(chrom[j]==no)
だったり・・・。
0141切れそうなほど困ってる男
NGNGはい。そうです。
0142切れそうなほど困ってる男
NGNGあっ、気づきませんでした。
やってみたら解決できました。
僕かなりあほですね。すみませんでした。
こんな初歩的なミスするなんて・・・
みなさんありがとうございました。
0143脱恥さら139
NGNGこれじゃダメ?
void gen_root(int *chrom, int chrom_size)
{
int no, okflag, i, j;
for(i=0;i<chrom_size;i++){
do{
no = rand % chrom_size
okflag = 1;
for(j=0;j<i;j++)
if(chrom[j]==no)
okflag = 0;
}while(!okflag);
chrom[i] = no;
}
}
0144デフォルトの名無しさん
NGNG7分前に解決(ワラ
0145デフォルトの名無しさん
NGNGfortranでいうmaxみたいなものです。
mfc使っても構いません。VC++6.0使ってます。
すみません、fortranしか知らないもので。よろしくお願いします。
0146デフォルトの名無しさん
NGNG0147145
NGNGマジっすか、、、C++の方がfortranよりいろいろありそうなのに。
しょーがないから自分で作ります。
ありがとうございました。
0148デフォルトの名無しさん
NGNGSTLとかのコレクションライブラリ使ったら?
vectorとかには、自分が所有するリンクリスト内の要素数返す
関数とか有ると思うが。
C++はそもそも殆ど配列使わないで集合を扱えるよ。
配列を使うのは速度上の理由とかでどうしても必要なときだけ
にするくらいのほうがいいと思うよ。
0149145
NGNGありがとうございました。
STLは初耳なので、MSDNをみてみました。
ざっとしかみていないので最大値を返す関数はまだ見つかってませんが探してみます。
集合はよくわかりませんでした。配列とかリストのことを集合ってゆーんじゃないですか?
勉強してきます。
0150デフォルトの名無しさん
NGNG#include <algorithm>
int maxval(const int tbl[], size_t n)
{
return *std::max_element(tbl, tbl + n);
}
0151145
NGNGおお、ありがとうございます。MSDNみたらありました。探し不足でした。
さっそく利用させていただきます。
MSDNでみた述語バージョンと非述語バージョンというのがよくわかりませんが、
わかんなくとも利用できそうなので気にせずやります。
(150さんのは非述語バージョンなんですよね?)
0152150
NGNGつーかテンプレート知らなきゃ理解できない
つーかC++知らなきゃ理解できない
0153デフォルトの名無しさん
NGNG0154名無しさん@お腹いっぱい。
NGNGとしたら、コンパイルはできたのですが、実行時にエラーになりました。
配列が大きすぎると思うのですが、配列の最大値はどこで規定されてるのですか?
環境はDOS/V,Win98,Borland C/C++です。
0155デフォルトの名無しさん
NGNGわりとFAQな質問です。
スタックに確保するからだめなんです。
とりあえず、
static char a[256][10000];
とやってみよう。。。
0156デフォルトの名無しさん
NGNGこれ、何か良いことがあるんですか?
0157デフォルトの名無しさん
NGNGchar jittai;
char* name = &jittai;
の変わりになって1ステップすくない。。。かな。
0158デフォルトの名無しさん
NGNGそのために配列宣言するってのはなんだか、イヤだねぇ…
0159デフォルトの名無しさん
NGNG0160デフォルトの名無しさん
NGNG有名なプログラマ(きっとみんな知ってる)の隠れ家。・・・がいしゅつ?
0161デフォルトの名無しさん
NGNG環境や条件によって開けない場合があると思うが。
おそらく読込み専用モードで開けば大丈夫だと思うけどね。
書き込みもする場合は諦らめた方が良い。
あと、ファイルハンドルの制限もあるから、やたら開く物では無いよ。
ちなみにANSI-Cで規定されてはいない筈。
メモリマップドファイルが使える環境なら、
そのアドレスを取得して共有させた方が効率も良い。
0162161
NGNG環境がWindows9X/NT/2000なら「CreateFileMapping」、UNIX系なら「mmap」で検索して。
0163デフォルトの名無しさん
NGNG>char* name = &jittai; の変わりになって1ステップすくない。。。かな。
へ〜、そうなんだ。
シリアル通信の構造体に多く見られるから、これナンダ??
と疑問に思ってた。サンクス。
0164デフォルトの名無しさん
NGNGシリアル通信の構造体のは、メッセージのサイズを構造体の
宣言で明示したいという意図があるんじゃないの。
キャラ「一個」分の電文長だよん、という意味。
0165159
NGNG丁寧な回答をありがとうございます。
環境は主にMacですが、unix系やWindows系でも動作するようにしたいと考えています。
もしあれば、メモリマップドファイルによる解決がお薦めなんですね。
0166161
NGNG全員で勘違いしてるみたいだけど。
単体の、
char name[1];
の話題とはなんの関係も無い。
構造体の末尾メンバを可変長として使いたいって事でしょ。
struct s {
int hoge;
char name[1]; //最後のメンバ
};
struct s*p = (struct s *)malloc(sizeof(struct s) + namelen);
として、動的に確保して使う。nameが可変って事ね。
静的にスタック等には置けない。
ANSI-Cでの移植性は無いと言われているが、良く使われる。
0168167
NGNG0169デフォルトの名無しさん
NGNGVC++以外だと char name[0]; が多いと思う。
0170161
NGNGMACは…知らないです。
Linuxが動作するぐらいだから、似たような方法があると思います。
0171デフォルトの名無しさん
NGNGC++だとname[0]が通るような気もする。
標準C/C++だとどうなんだろ?<コンパイル
0172デフォルトの名無しさん
NGNG0173デフォルトの名無しさん
NGNGのsizeof(struct s)ってのも続くのがまた構造体だったりすると、
結構危険と思う。
0174161
NGNGname[0]は、通らないコンパイラ(特に昔の)多そうだね。警告で済むかな?
>172
わらっちゃう、ってか。何が?
>173
意味がわからなかった。
0175173
NGNGごめんname[1]の場合多分問題ないです。
name[0]とかだと処理系とかアラインがずれてきてよくバグをだした経験が...
お詫びに関係ネタを:
#define FIELD_OFFSET(type, field) \
((LONG)(LONG_PTR)&(((type *)0)->field))
#define CONTAINING_RECORD(address, type, field) \
((type *)( \
(PCHAR)(address) - \
(ULONG_PTR)(&((type *)0)->field)))
0176デフォルトの名無しさん
NGNGANSIで禁止されたんじゃなかった?
#gccでは通るようだ。うん。
0177デフォルトの名無しさん
NGNGstddef.h に offsetof() っていうマクロがあるよ。
0178デフォルトの名無しさん
NGNGちなみに、C99では char name[];という書き方ができるよ。
0179C言語独習3ヶ月目
NGNGA*A−sinA=0
の実数解を以下の5通りの方法で、
小数点第7位が一致する精度で解き、
その精度が得られる計算回数とともに示す。
ただし初期値 A1=1
(1)ニュートン法
(2)ベイリー法
(3)二分法
(4)10等分法(区間縮小法)
(5)逐次代入法(反復法)
0180かなり昔
NGNGなんとかもうちょっとのところまできて止まってます!!
考えかたが間違っているのかもしれないのですが・・・
ちなみにuniqは
文字列がソートされていることを条件に、
同じ文字列を二度表示しないこと以外は、catコマンドと同じです
0181デフォルトの名無しさん
NGNGまあ、行頭・行末のスペースをどう考えるか
とか、行中でも複数スペースが連なっている部分の
スペースの個数だけが違うやつをどう考えるか
とかあるけど。
0182デフォルトの名無しさん
NGNGいやぁ、クラスって便利ですね。
でも、あまりに簡単過ぎると無駄な
行数稼いでないか不安になりますね。
これって自分だけ?
0183デフォルトの名無しさん
NGNGちなみにwindowsプログラムはやりたくありません
ms-dosだけで何とかしたいのですが..
fopenとかで開く場合同じフォルダ内でしか開けないですよね(当然ですが)
ファイル名と場所で指定して開く方法は無いのでしょうか?
fp = fopen( "c:\windows\foruda\file.jpg", "rb" ); みたいな感じで
0184>183
NGNG0185デフォルトの名無しさん
NGNG>fopenとかで開く場合同じフォルダ内でしか開けないですよね(当然ですが)
そんなわけありません。開けます。
"c:\\windows\\foruda\\file.jpg"にしてみてください。
0186183
NGNGこれでレジストリとかいじれますよね?
0187デフォルトの名無しさん
NGNG0188デフォルトの名無しさん
NGNGレジストリってファイルじゃないぞ
APIを使えよ
0189デフォルトの名無しさん
NGNGint main(string args[])はできないのかな?
0190デフォルトの名無しさん
NGNGできない。
そういう仕様。
0191デフォルトの名無しさん
NGNG詳しくは知らないけど。
0192デフォルトの名無しさん
NGNGやってみよう。なんでも経験だ!
0193デフォルトの名無しさん
NGNG0194デフォルトの名無しさん
NGNG関数ってありますか?
あったら、教えて下さい
例えばファイルのなかのある文字列を置換するとか
文字列の中の、ある文字列を置換する
なんて事がしたいです。
0195デフォルトの名無しさん
NGNG意味がわかりません。
あたしにもわかるように教えていただけませんか。
半角カタカナ(シフトJISコードとする)の文字定数を処理するときは注意が必要で
す。例えば、
int ch;
ch = 'カ'; /* ch は -74 になる */
if (ch >= 128) 〜
はうまくいきません。
文字 'カ' は 0xB6 という値ですが、これはchar型変数(-128 〜 127) なので、
処理の過程で 0xFFB6 と判断され、変数 ch の値は -74 になります。
これを処理するためには、
ch = (unsigned char) 'カ'; /* ch は182 になる */
とキャスト処理されます。
0196デフォルトの名無しさん
NGNGあなたの理解力、知識量がわかりません。
私にもわかるように教えていただけませんか?
そうしたらあなたにわかるように教える事ができるかもしれません。
0197デフォルトの名無しさん
NGNG半角カタカナ使うなあほ
0198SAGE
NGNG・なので、'カ' は、char型の範囲( -128〜127)の値、つまり -74。
・-74は、unsigned char にキャストすれば、( 0〜255 )の範囲の値として扱われる。
・つまり、182として処理される。
0199名無しさん@LV2001
NGNGWin98SE+Borland C++ Compiler でコンパイルできません。
Cは勉強し始めたばかりでまだ呪文のようですが、とりあえず動かして
みたいのでだれかバグを教えてくださいませんでしょうか。
0200>199
NGNG2行くらいカットしたり、1文字カットしたりするとコンパイルは通るよ。
警告は消えなかったかもしれん。
中身は良く見てねーや。
0201デフォルトの名無しさん
NGNG書き方が悪かったです。ゴメンナサイ。
>198さん
理解できました。
ありがとうございます。
0202デフォルトの名無しさん
NGNGどれを開くかという指定はフォルダの中の上から何番目とか...
ダウンロ−ドしたファイルに一括して名前の先頭に
ある文字を入れてやることをしたいのですが
0203デフォルトの名無しさん
NGNGファイル検索系の関数ではだめか。
_dos_findfirst()とかFindFirstFile()
0204デフォルトの名無しさん
NGNGテクニカルタームはありましたっけ?
0205202
NGNGでも構造体の中が読めない..
c++のcout使ったのが悪かったのかな??
0206デフォルトの名無しさん
NGNG教えて下さい。ptyを開いてpipeして、、、というのは大体理解して
いるのですが、vt100対応や日本語入力の扱いなど込み入った事が
よく分かりません。
英語でもかまいません。どなたか御存じの方、是非お願いします。
0207デフォルトの名無しさん
NGNGTera Termのソース読め、以下のリンクの下の方にある
> Tera Term Pro 2.3 & Tera Term 1.4 のソースコード (C/C++)
>(著作権情報、使用条件については readmej.txt を読んでださい。)
http://hp.vector.co.jp/authors/VA002416/
0208デフォルトの名無しさん
NGNGそれとも心に深い傷を負って人前には出られなくなってしまったのですか?
0209身も蓋もない
NGNG0210名無しさん@LV2001
NGNGfloat balance[10][5];
に対して
float *p;
を当てはめるときに
p=balance;
ではだめで、キャスト
p=(float *) balance;
が要る理由が今ひとつわかりません。
これと関係するのかもわかりませんが、ポインタの定義って
float *P; <===> *pがfloat型の値を持つようなポインタp
と言う理解をしてたのですが、どちらかというと
float* p; <===> float*(=float型ポインタ)であるp
と読んだ方がいいのでしょうか。でも
float* p,1,r...
とはできないでしょうし。
0211デフォルトの名無しさん
NGNG皆さん、Cプログラムの仕様書作成ツールで
お奨めのものってあります?
0212デフォルトの名無しさん
NGNGfloat balance[ 10 ][ 5 ]の場合
balance[ n ][ m ] はfloat型のデ−タ
balance[ n ] はfloat型の要素を持つ配列へのポインタ( balance[ n ][ 0 ]へのポインタ )指すサイズsezeof(float)バイト
balance はfloat *型の要素を持つ配列へのポインタ( balance[ 0 ]へのポインタ)指すサイズsezeof(float)*mバイト
配列とポインタの関係は理解していますよね?
理解していないのならそこの部分をしっかり予習してください
理解できましたか?
おそらく難しいでしょう、しかし何度も考えながら
そして誰かに聞いたりしてがんばって理解してください
ここがC言語最大の難関なのですから
0213デフォルトの名無しさん
NGNG>>balance はfloat *型の要素を持つ配列へのポインタ( balance[ 0 ]へのポインタ)指すサイズsezeof(float)*mバイト
ここの指すさいず間違い、正しくはsezeof(float)*10バイトでした
0214デフォルトの名無しさん
NGNGよいのですか?やっぱwindowsプログラムやんないとダメですか?
0215210
NGNGありがとうございます。ただ、古いコンパイラだと
p=balance
でも通ったりするんですよね。
私も212さんのような理解をして、それを確かめるために
float balance[10][5], *p, *q;
p=balance[0];
q=balance;
printf("%p %p \n",p, p+1);
printf("%p %p \n",q, q+1);
としたとき、上の行ではその差がsizeof(float)、
下の行ではその差がsizeof(float)*5
だと思ったのですが、ポインタの変換で警告が出ます。
float **r; r=balance;
でも警告が出ますね。で、いずれの場合もその差はsizeof(float)
なのです。
0216デフォルトの名無しさん
NGNGfloat balance[10][5]*,p;
float (*q)[ 5 ]; //5つのfloat型要素を持つ配列へのポインタ
p=balance[0];
q=balance;
printf("%p %p \n",p, p+1);
printf("%p %p \n",q, q+1);
こうかくとエラ−はでません
0217デフォルトの名無しさん
NGNGこの書き方でキャストなしでエラ−が出ないのは問題だね
0218>214
NGNGどうやったらこんな間違い出来るの?すげー。
0219デフォルトの名無しさん
NGNGfloat balance[10][5];
float(*q)[5];
q=balance;
printf("%p %p \n",q ,q+1 );
0220219
NGNG0222デフォルトの名無しさん
NGNGbalance[0]-[10]をさすポインタはどうかくんだい?
0223>221
NGNG>218 名前:>214投稿日:2001/02/10(土) 01:09
>sezeofって何なの?sizeofの間違いじゃないの?
>どうやったらこんな間違い出来るの?すげー。
>>214のどこにもsezeofなんて書いてないぞ?
どうやったらこんな間違い出来るの?すげー。
の方が良くないか?
0224デフォルトの名無しさん
NGNG0225デフォルトの名無しさん
NGNGaaaa
bbbb
cccc
dddd
[EOF]
となっているテキストファイルの2行目を削除して
aaaa
cccc
dddd
[EOF]
にしたいのですか、どうすればいいのですか?
新しくファイルを作って書き込んで行く方法もあるのですが、それだと1行消すのにわざわざ全行を読み込まなくてはいけません。
ほかの方法を知っている方は教えてください。
0226名無しさん@お腹いっぱい。
NGNGこれ、どっかで見たことあるぞ。
0227デフォルトの名無しさん
NGNGデーターベース使えや。ゴルァ!!
0228デフォルトの名無しさん
NGNG少なくともANSI-Cの標準関数だけではできなかったはず。
OSのAPIにファイルをカットしたり短くしたりする
機能が在れば可能かも。
実行したいOSや環境を限定してその辺の関連スレで聞けば?
02291さんHELPME!
NGNG作りたいのですが、
BASICのlocate(だったかな?)OR
Textout関数(あんまり知りまへん)のような関数ありますかぁぁぁ??
え?意味がわかりません?
ようは、自由に位置を決めて文字を表示する関数のことです。
0230デフォルトの名無しさん
NGNGintとかの数値を文字列に変換する関数って何だっけ?
逆ならatoiとかだけど。
0231デフォルトの名無しさん
NGNGint i=100;
char buf[20];
sprintf(buf,"%d",i);
0234デフォルトの名無しさん
NGNG包茎?
0235デフォルトの名無しさん
NGNGくさっ!!
0236デフォルトの名無しさん
NGNG02371さんHELPME!
NGNGありがとうございまっす
これWindows、VC++でも使えます??インクルードできませんでした。
なんだか検索で調べてみると、どれもこれもUNIXばっかりで。
もう一度、この初心者によきアドバイスお願いいたします。
0238ゴルァ夫様
NGNGモサモサのツルツルだゴルァ
>>237
わかんなかったらcygwinのcurses関係のソース見ろやゴルァ。
とりあえずgoogleとかで検索だゴルァ
Linux-JFマニュアルも参考になりそうだゴルァ
0239ゴルァ夫様
NGNGそれと、(j)nethackや(j)angbandはWin32にも移植されてるぞゴルァ
rogueとかでも検索だゴルァ
UNIXで動かす必要が無いんならcurses使う事も無いかもなゴルァ
0240デフォルトの名無しさん
NGNGhttp://mentai.2ch.net/test/read.cgi?bbs=prog&key=981818961
0241デフォルトの名無しさん
NGNG処理時間を計りたいんですけど、どうやって計れば良いのですか?
できればミリ秒で計りたいです。
Win32ConsoleApplicationでやってます。(Fortranみたいなドス窓のやつ)
だからmfc使ってません。
time_t start,end,time;
time(&start);
〜計りたい処理〜
time(&end);
time=start-end;
でやろうとしたら、引数が違うって最初のtime関数とこでエラーが来ました。
他の関数でも構いません。教えてください。
よろしくお願いします
0242>>241
NGNG#include <time.h>
int main()
{
int i, j;
clock_t start, end;
printf( ">>" );
scanf( "%d", &j );
start = clock();
for( i = 0; i < j * 100; i++ ) putchar( '*' );
end = clock();
printf( "経過時間は%.2fです。\n", ( end - start ) / (float)CLOCKS_PER_SEC );
return 0;
}
0243デフォルトの名無しさん
NGNGすばやいお返事ありがとうごあいます。
さっそく使わせていただきます
0244デフォルトの名無しさん
NGNGっていうプログラムを作ってるんだけど、
Admini権限がないとCreateServiceができない!!
そこでCreateServiceする前に入力してもらったアカウント名が
Admini権限を持っているかどうか調べて
持っていなければ、再入力を促す。っていうふうに作りたいんだけど
どうすれば
「入力してもらったアカウントがAdmini権限を持っているかいないか」
って分かるの?
0245デフォルトの名無しさん
NGNG輩がいたんだがどうだ?
http://natto.2ch.net/test/read.cgi?bbs=netgame&key=982214610&st=845&to=845&nofirst=true
http://natto.2ch.net/test/read.cgi?bbs=netgame&key=982214610
0246デフォルトの名無しさん
NGNG0247デフォルトの名無しさん
NGNGだから?
0248デフォルトの名無しさん
NGNGDOS窓か?
エスケープシーケンスでも使っとき。
0249つじっこ
NGNG#include <stdio.h>
#include <string.h>
int find(void)
{
char mstr[256], fstr[64];
char *main_p, *find_p;
char *mp,*fp;
int flag=0;//フラグ
unsigned int i,j;
strcpy(mstr,"あいうえお");
strcpy(fstr,"いうえお");
main_p=mstr;
find_p=fstr;
for(i=0;i<=strlen(mstr)-strlen(fstr);i++){
if(*main_p++==*find_p){
mp=--main_p;
fp=find_p;
flag=1;
for(j=0;j<strlen(fstr);j++){
if(*mp++!=*fp++){
flag=0;
break;
}
}
}
}
return flag;
}
void main(void)
{
if(find())
printf("見つかりました\n");
else
printf("見つかりませんでした\n");
}
上のプログラムのどこが悪いんでしょうか?
strcpy(mstr,"aiueo");
strcpy(fstr,"iueo");
だとなるみたいなんですが。
アドバイスをよろしくお願いします。
学校の先生もわからなかったようなので。。(^^;
0250つじっこ
NGNGstrcmp関数はつかいたくないです(^^;
0251デフォルトの名無しさん
NGNG添削する気もうせる。自分で最初から作ったほうが100倍早い。
まぁ、いいや。
mp = --main_p;
を
mp = main_p - 1;
に直せ。
0252デフォルトの名無しさん
NGNG学校の先生は、「わからなかった」のではなく、
「読む気も起こらなかった」だけだと思うぞ。
勘違いして先生をバカにしないようにな。
0253デフォルトの名無しさん
NGNG相手の機器へデータを転送するには、
以下のコードでいいでしょうか?
(常に4バイト送ってくれるか心配なんだけど…。
改良点があれば教えて下さい。)
// 送り先のクリエート
handle = CreateFile("COM1", GENERIC_WRITE | GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
if(handle == INVALID_HANDLE_VALUE){
// クリエート時エラー
}
// 初期設定の取得
GetCommState(handle, &lpdcb);
// 必要に応じてここでlpdcb構造体のメンバを変更
// COMポートの設定をセット
SetCommState(handle, &lpdcb);
// 送り先へデータの送信
bRetW = WriteFile(handle, &iData, sizeof(iData), &dwNumber, NULL);
if(bRetW == 0){
// データ送信時エラー
}
// ハンドルのクローズ
bRetC = CloseHandle(handle);
if(bRetC == 0){
// ハンドルクローズ時エラー
}
0254デフォルトの名無しさん
NGNGよーするに学校の課題でstrstrを自作したの?
0255デフォルトの名無しさん
NGNGシステムが自動的に割り当てたポート番号を知る方法を
教えてください。
0256ド素人さん
NGNGfwrite()の動作が、良くわかりません。
static char Test[1] = { 0xa };
...... ~~~~0xaに限る。
......
fwrite( Test, 1, 1, outfp );
とかすると、出来たファイルには何故か 0x0d, 0x0a とどっからか0x0dが
出てきて、勝手に2バイト書きこまれます。
0x0aのときだけ起きます。
例えば { 9, 10, 11 } を fwrite すると、 09 0d 0a 0b になる感じです。
なんででしょう?
0257凍結C人類
NGNGfopenでバイナリモードとかでファイルオープンするんじゃなかったか?
なんか = fopen("いれもん","wb")
なんてなかったっけ?
0258ド素人さん
NGNG試してみました。
あっ。解決しました。
大感謝です。ありがとうございました!
0259デフォルトの名無しさん
NGNGテキストモードだと自動的に改行コードにされちゃう、ってことなのかな?
0260デフォルトの名無しさん
NGNGテキストモードで\n(0x0A)を書き込もうとすると、自動的に\r(0x0D)が頭に追加されて、実際は\r\nを書き込むんだよ。
0261つじっこ
NGNGその考えよくわかる(^^;
タメしに[251]が作ったプログラムを見せていただけないですか?
まぁ、暇があったらでいいですから。>251
えぇまぁ。。>254
0262251
NGNG//ロジックの間違いは直す気は無かったからね。
int/*bool*/ match(const char *text, const char *str)
{
for (; *str; ++text, ++str) {
if (*text != *str)
return 0/*false*/;
}
return 1/*true*/;
}
int/*bool*/ find(const char *text, const char *str)
{
for (; *text; ++text) {
if (*text == *str) {
if (match(text, str))
return 1/*true*/;
}
}
return 0/*false*/;
}
void test(const char *text, const char *str)
{
printf("[%s][%s]\n", text, str);
if(find(text, str))
printf("見つかりました\n");
else
printf("見つかりませんでした\n");
}
int main(void)
{
test("aiueo","iueo");
test("あいうえお","いうえお");
test("あいうえお","いうあ");
test("aiueokakikukeko","iueo");
return 0;
}
0263つじっこ
NGNGありがとございまし。
さっそく試してきます。
を〜、これが一流のプログラムというものなのか。。
自分のプログラムが恥ずかしく見える。。;;
0264デフォルトの名無しさん
NGNGでもこんなに提出したら絶対自分でやってないのばれる。
>#include <stdio.h>
>#include <stdlib.h>
>#include <string.h>
>
>
>int find(const char *text, const char *str)
>{
> int BMTable[256];
> int i, Index;
> int bFound;
>
> for (i = 0; i < 256; i++)
> BMTable[i] = 0;
>
> for (i = 0; i < (int)strlen(str); i++) {
> BMTable[(unsigned char)str[i]] = i + 1;
> }
>
> Index = 0;
> bFound = 0;
>
> do {
> for (i = strlen(str) - 1; i >= 0; i--) {
> if (text[Index + i ] != str[i])
> break;
> }
>
> if (i == -1) {
> printf("%s\n", text);
> for (i = 0; i < Index; i++) {
> printf(" ");
> }
> printf("^\n");
> Index++;
> bFound = 1;
> } else {
> Index += i - BMTable[(unsigned char)text[Index + i]] + 1;
> }
>
> } while (Index <= (int)strlen(text) - (int)strlen(str));
>
> return bFound;
>}
>
>void test(const char *text, const char *str)
>{
> printf("[%s][%s]\n", text, str);
> if(find(text, str))
> printf("見つかりました\n");
> else
> printf("見つかりませんでした\n");
>}
>
>int main(void)
>{
> test("aiueo","iueo");
> test("あいうえお","いうえお");
> test("あいうえお","いうあ");
> test("aiueokakikukeko","iueo");
>
> return 0;
>}
0265デフォルトの名無しさん
NGNGどうしてなんでしょ。(VC++6.0)
#include <stdio.h>
char* my_strcat(char *cp_alpha, const char *cp_beta);
main()
{
char str[5] = "ABC";
my_strcat(str, "DEF");
printf("%s\n", str);
}
char* my_strcat(char *cp_alpha, const char *cp_beta)
{
char *cp_head = cp_alpha;
while(*cp_alpha)
cp_alpha++;
while(*cp_beta)
*cp_alpha++ = *cp_beta++;
*cp_alpha = 0x00;
return (cp_head);
}
0266デフォルトの名無しさん
NGNG多分、境界整列の関係でstrは8バイト分確保されているのでは?
my_strcat(str, "DEFGH");
にすると退避しているフレームポインタが壊れておかしくなると思いますが?
0267デフォルトの名無しさん
NGNG0268デフォルトの名無しさん
NGNGなんで動くのかの予想も立てられる。
0269デフォルトの名無しさん
NGNGとあるウェブ見ていて思ったんですが、2番目の%.*sって何のことですか。
あと、右と左の変換数が違うのはどうしてですか。
0270デフォルトの名無しさん
NGNG何回出てきたか単語を数えるプログラムを作りたいんですが、
よくわかりません。 ファイルをwhile(fscanf(fp,"%s",str)で
読みこんだ後、strをどうすればいいですか。
0271デフォルトの名無しさん
NGNG0272デフォルトの名無しさん
NGNGどの処理系でもそうなのか?
0273デフォルトの名無しさん
NGNGprintf("%.6s\n", "1234567890");
printf("%.*s\n", 6, "1234567890");
2つのprintfはを標準出力に"123456"を出力する
詳しいことはリファレンスマニュアル参照。
0274デフォルトの名無しさん
NGNGリストに繋げ
0275デフォルトの名無しさん
NGNGlex使え。楽だぞ。
0276入社前研修中
NGNG#include <stdio.h>
int main()
{
int c,ct=0;
while((c = getchar()) != EOF){
if(c=='\n')
ct++;
}
printf("%d=\n",ct);
return 0;
}
EOFは何を入力すればいいの?
0277デフォルトの名無しさん
NGNGCNTL-Cじゃなかったかな?
0278デフォルトの名無しさん
NGNG環境を書いてくれ
winならctrl+z
unixならctrl+d
0279デフォルトの名無しさん
NGNGctrl+cはwin, unix共にプログラム中断だ
# CNTLは置いとくとしても
0280入社前研修中
NGNGどころで、推薦書ってありますか。どうもK&Rは色数少ないし、表もあんまりないので
別の参考書も買おうとしていますが、どれも難しいですか。
0281入社前研修中
NGNGC−Zのあと表示されないです。しくしく。
どこがダメなのか教えてプリーズ。
0282デフォルトの名無しさん
NGNG色数少ないとか言ってる時点で、もうダメダメ
まぁ、そんなに甘くないよ、もっとがんばんな
0283デフォルトの名無しさん
NGNGDOSプログラムの勉強しても役に立たないよ。
Windows系の勉強しなよ。
はっきりいってDOSよりもWindowsの方が簡単。
今どき getchar() なんて使わないよ。
ツインファミコンみたいなもん。
0284デフォルトの名無しさん
NGNGでも、起動時引数や標準入力を食って、標準出力に吐き出す
フィルター系ソフトくらいは組めた方がいいぞ。
OSのcopyコマンドはこんなふうにして作られてるって感じのことを
知っていれば、OSをことさら神聖視しなくなる。
それは正しい理解につながるような気がする。
0285269
NGNGまだまだ未熟っす。
0286入社前研修中
NGNG関数見ただけで貧血。一応、CのあとC++、VCと続くみたいです。
いきなりVCでも大丈夫なの?合間にVBもやるらしい。
0287>283
NGNGWindowsは泥沼にはまる。
OSの仕組みの理解すらともするとままならん。
まぁ、役にたつし、Windowsの方が便利なことはわかるけど。
0288>286
NGNGもし、そう教え込まれたなら教え込んでいる方が
問題ですが、まあ勘違いでしょう。
C,C++は開発言語
VC++はWindows用の開発環境です。
VC++はC,C++によるWindowsアプリの開発を「凶悪」に
支援するためのツールです。
C,C++より百倍「貧血」を催させるCOMや、
わけのわからない独自のクラス(マクロ)ライブラリを
インストールしてすぐに提供してくれます。
けれど、初めて覚える言語としてC言語はお勧めです。
VBやPerlなどからはじめた場合、
初心者の方は変なクセがつきがちです。
Cが気に入った場合、合間に入るVBは極力無視しましょう。
(断っておきますが、VBが気に入った場合はVBしてください。
人が勧めないからといって便利なツールを使わないのは間違い
です)
またC言語を覚えたら、すぐにC++に行けるとは考えな
いでください。C言語はカンの有るかたなら一週間くらい
で仕様が理解できますが、C++を覚えるのは無理です。
じっくりやりましょう。
0289入社前研修中
NGNGこっちの方もむずかしい。来週はJAVAの社外研修。
社会人って大変なのね。すでに挫折気味です。しくしく。
0290デフォルトの名無しさん
NGNG0291デフォルトの名無しさん
NGNGWindows2000とC言語をキーにして検索エンジンに聞いてみて下さい
ちなみに、googleの場合、1番最初にこんなものがあります。
http://www.vector.co.jp/soft/win95/prog/se104016.html
0292デフォルトの名無しさん
NGNG0293デフォルトの名無しさん
NGNGではなくenumを使ったほうがよい、と書いてあって、たしかにその通り
だなと思ったんだけど、実際にはenumを使ってるコードをほとんど見た
ことない。enumを使ってる人いる?
[マクロ]
#define NUM_FIELD 20
#define NUM_RECORD 16
[enum]
enum {
NUM_FIELD = 20,
NUM_RECORD = 16
};
0294デフォルトの名無しさん
NGNGhttp://www.catnet.ne.jp/~kouno/c_faq/c2.html#22
つーことで、C++になったときいいことがあるかも。
0295デフォルトの名無しさん
NGNGその会社むちゃくちゃやな。(笑)
結局なにもものにならず終了。って感じだね。
0296293
NGNG「列挙型の有効範囲がブロックであること」っていうのは、
ひとつの関数でしか使われない整定数があるときとかに便利だね。
「C++になったときいいことがあるかも」っていうのが分からない
んだけど、どういうこと?
C++だと定数はconstを使うのがベストなんだよね。
0297デフォルトの名無しさん
NGNGC++になると、そのfaqでCコミュニティーの多くが望んでいた
という、チェックが仕様になった。
(のだったと思う)
constはチェックされないね。
よくある例として
enum bool(TRUE,FALSE);
0298デフォルトの名無しさん
NGNGfalseがサキだね。false == 0。
enum定数はデバッガ内でつかえるので、#defineより断然良い。
0299デフォルトの名無しさん
NGNGデバッガ内で使えるってところ、ステキ
そうか、その手があったか・・・
0300デフォルトの名無しさん
NGNGtarget = rand()%SUM;
と書き(もちろんsrand済み)、1000000内の値をランダムに出そうとしているのですが、どうやら上限がかなり低いみたいなので小さな数字(30000くらいまで)しかでません。
どうやったらうまくいくでしょうか?
0301300
NGNG0302デフォルトの名無しさん
NGNGrand関数は0からstdlib.hのRAND_MAXまでの値を返すみたいだから
それをチェックしてみるとか。。。
0303300
NGNGint N = 32768,n1,n2,result;
n1 = rand();
n2 = N*rand();
result = n1 + n2;
return result;
しかし何か値の偏りがあるような気がします・・・
0304デフォルトの名無しさん
NGNGSUM>RAND_MAXなら
target=rand()+RAND_MAX*rand()%(SUM/RAND_MAX);
こんな感じ?
でも、うちのお婆ちゃんが
「randはなるべく上位ビットをつかうんじゃよ・・・」
と遺言を残してた気がするけど
0305名無しさん
NGNG0306デフォルトの名無しさん
NGNG君はまだ16ビットの世界でプログラムしてるのか?
0307デフォルトの名無しさん
NGNGint i[]={5,5,5,5,5,5,5};
もし、こういうのがあって個数を調べたい
プログラムを書くにはどうすればいいのですか?
よろしくお願いします。
0308デフォルトの名無しさん
NGNGえーっと、配列の要素数をCで調べたいって事なら無理です。
javaだとi.lengthで調べられます。
0309デフォルトの名無しさん
NGNGどうやっても出来ないから、自分ってめちゃあほやなって
思ってたんでなんとか救われました。
あなたは神様ですか?
ありがとうございました。
0310SAGE
NGNG0311デフォルトの名無しさん
NGNGそのi自体の型はint(*)[7]ですな。
sizeof(i)=sizeof(int)*7
になってるはずですよん。
関数のint*型引数とかにiをわたすと、関数内部では
int*型にキャストされてしまうので、そこでは
sizeof(i)=sizeof(int*)
だ・・・でいいんだよね?>詳しいひと誰か
配列とポインタの互換周りって、なんだかなあ、と思う。
この辺のややこしさが「ポインタ難カシヤ」と言わしめる
元なんだろね。おいらも、いまだに「難しい」というか
「胡散臭い」とおもうじょ。Javaのやり方が楽でいいよね。
(配列型の内部に、長さを示す変数領域持ってるっす)
0312デフォルトの名無しさん
NGNG>えーっと、配列の要素数をCで調べたいって事なら無理です。
え?
(sizeof(i)/sizeof(i[0]))で出来ますが?
0313デフォルトの名無しさん
NGNG標準rand以外の乱数生成ルーチン(MTとか)を使うべき。
>>307
ポインタになったときでも使えるように、
・要素の最後に終端子(-1とか)を入れて、strlenと同じ方式で逝け。
・構造体にしてint lengthとかを追加しろ
0314308
NGNGえーっと、そんなに自身有り気に言われるとちょっと自信ないけど、
sizeof(i)ってのは311氏の書くようにsizeof(int*)なんじゃ無いかな?
そうするとintのポインタの(大体のOS上で32bitとかかな?)大きさを
返すような気がするだけど・・・。
Cは大して知識が無いんで、もし間違ってたら詳しいこと解説希望&307さん
ゴメン。
0315312
NGNG>えーっと、そんなに自身有り気に言われるとちょっと自信ないけど
いえ、私も詳しくないので質問の意味で書きました。
もっとマシな書き方をするべきでした。
あれはあるページで見つけたんですが、これじゃ駄目なのかな?と。
313さんが書いてる方法が多分良いんでしょうね、スキル有りそうだし、
出来たらコードで教えて欲しいんですけど・・・
って、こんなこと書いちゃ駄目ですよね・・・。すみません。
0316デフォルトの名無しさん
NGNG0317デフォルトの名無しさん
NGNGあんたも知らんようだから黙ってれば(w
0318デフォルトの名無しさん
NGNG0320デフォルトの名無しさん
NGNGiの型はint[7]になります。int(*)[7]になるのは &iとした場合です。
sizeof(i)はsizeof(int)*7になります。ちなみにsizeof(&i)はポインタのサイズに
なります。
結論としては312氏のやり方でOKです。
C99なら、関数に渡すときの仮引数をint a[*]としておけば同じやり方ができるみたい。
0321デフォルトの名無しさん
NGNG「i を関数に渡したとき、その関数の中で i の要素数を知るには?」
なんだよね。
もしそうなら無理。要素数を別に渡すか313のやり方しかない。
0322デフォルトの名無しさん
NGNG関数に渡したときポインタに成り下がるんだから、その仕組みが
わかっているなら 関数に渡して要素数を知ることがナンセンスだって
わかるはずだけどな。
ついでにいえば、Cは要素数を知る仕組みを配列に入れることを
スペースの無駄、作業の無駄だと考えたんだよ。
C Trusts the programmer.
C keeps the language small and simple.
C makes it faster, even if it is not easy for novice programmer.
それくらい自分で管理しろということだ。
0323デフォルトの名無しさん
NGNGfor文とかでも使えるし。
もしくはターミネートしておく(307と同じ)。
0324デフォルトの名無しさん
NGNG#defineするくらいならtypedefする
0325デフォルトの名無しさん
NGNGTULINK-Error-209: Reference made to unresolved external symbol "__FP_STACK"
0326デフォルトの名無しさん
NGNGcc870って、TLCS-870用のコンパイラですよね。
ランタイムライブラリをリンクしないと__FP_STACKがないので怒られますよ。
cc870はフレームポインタを__FP_STACKというtiny領域のグローバル変数に持たせて
いるので、絶対必要です。他にランタイムライブラリをリンクしないと、c870_fin
とか c870_foutのような関数の最初と最後で行うスタックフレーム操作のサブルーチン
や乗除算ルーチンもリンクされません。
0327325
NGNGありがとうございます!やってみるです。
(C言語スレで聞いていいか解んなかったけど、聞いてよかった)
0328デフォルトの名無しさん
NGNGその含蓄の深い三行の出典をキボンヌ。
(K&R?)
0329野比玉子
NGNG構造体はバウンだリーとかを考慮した最適化がかけられてしまい
ますが、
どのように最適化されたかを簡単に調べる方法を教えてください。
ちなみに私の場合、面倒くさいのですが
gdb上で各要素の分かりやすい値を突っ込んでダンプ、
などと幼稚な方法でちまちま調べててもう疲れました・・・
0330デフォルトの名無しさん
NGNG0331野比玉子
NGNGさっぱりです・・・
どこから手をつければよいのやら・・・
アセンブラの知識はX1の頃でストップしています
0332デフォルトの名無しさん
NGNG0333デフォルトの名無しさん
NGNGchar c1;
int i1;
double d1;
char c2;
double d2;
};
printf("%d\n", offsetof(struct tester, i1));
printf("%d\n", offsetof(struct tester, d2));
0335デフォルトの名無しさん
NGNG説明するためのいい例はないでしょうか?
0336デフォルトの名無しさん
NGNGstatic void swap(int a, int b)
{
int tmp;
printf("a = %d, b = %d\n", a, b);
tmp = a;
a = b;
b = tmp;
printf("a = %d, b = %d\n", a, b); // ←a = 20, b = 10になるが
}
int main(void)
{
int a = 10, b = 10;
printf("a = %d, b = %d\n", a, b);
swap(a, b);
printf("a = %d, b = %d\n", a, b); // ←a = 20, b = 10にはならない
return 0;
}
0337デフォルトの名無しさん
NGNGでも上の例って、、、
passing by value − サブファンクションにコピーを作る
のと同じではないでしょうか?
0338デフォルトの名無しさん
NGNG全角のスペースを削除したいのです。
例えばchar line[256]の中に次の一行のような文字列
C言語も VC++も 両方とも、 中途半端 なのです。
が入っていて
それをを次の一行のように変換したいのです
C言語もVC++も両方とも、中途半端なのです。
できれば半角のスペースがあっても削除してくれるほうがよいのですが
今は全角スペースだけということでよいので教えてください。
全角(漢字)のアスキーコードとかさっぱりわからず、混乱中です。
0339デフォルトの名無しさん
NGNG・・・PerlとかAWKとかで十分ッス。
つうか、そんなもんエディタの”一括変換”ででもできるだろ。
0340デフォルトの名無しさん
NGNGプログラム内でそういう処理をしたいということでは?
とは言え…。
0341338
NGNGそのとおりです。元のデータがCDの中に入っているのですが
そこから取り出したデータにたまに全角スペースが入っているのです。
見栄えが悪いので削除したいのです。
0342ぴよこ
NGNG--------------------------------------------------------
#include <stdio.h>
#include <string.h>
#include <wchar.h>
#include <windows.h>
void main() {
char buf[256];
wchar_t wbuf[256];
FILE* fp;
if ((fp=fopen("test.txt", "r"))==NULL) return;
else{
while ((fgetws(wbuf,256,fp))!= NULL){
wsprintf(buf,"%ls",wbuf);
printf("%s",buf);
}
fclose(fp);
}
}
--------------------------------------------------------
test.txt は 「abcあいう」 という文字列を記しています。
このしかし、このプログラムでは 「abc___」 というように
2バイト文字である日本語部分が潰れてしまいます。
原因、解決方法を教えて下さい。長文失礼しました。
0343SAGE
NGNGstatic const char* zs = " "; // ←全角スペース
void rmvZenSpace( char* src, char* dst )
{
while( *src )
{
if( !is_lead_byte(*src) ) // ←is_lead_byteは適当に何とかしろ
*dst++ = *src++;
else if( *src!=*zs || *(src+1)!=*(zs+1) )
*dst++ = *src++, *dst++ = *src++;
}
}
>>342
printf とかも全部 w な方を使わないとダメじゃないのん?
0344デフォルトの名無しさん
NGNGconst unsigned char space[] = "(ここ)";
printf( "%u,%u\n", space[ 0 ], space[ 1 ] );
"(ここ)"には全角スペースを入れて試そう。
0345338
NGNGありがとうございます。実行しようとしてるのですが
そのまえにis_lead_byteをどうすればいいかで悩んでます。
>>344
実行してみました、129,64と出てくるだけです
カンマをはずしても12964になるだけです。
ちなみに
printf( "--%c%c--\n", 0x81,0x40 );
とやると--と--の間が全角のスペースになるのですが、
それでいろいろやろうとしてもうまくいかなかったのです。
0346ぴよこ
NGNGwsprintf(buf,"%ls",wbuf); で WCHAR型からchar型にして
printf()で出力するというふうにしてみたのですが、
wsprintfの過程で既に文字は潰れていたのでしょうか?
0347デフォルトの名無しさん
NGNG#include <stdio.h>
#include <locale.h>
int main()
{
wchar_t wb[255];
setlocale(LC_CTYPE, "jpn");
FILE *fp = fopen( "test.txt" ,"r");
fgetws(wb,255,fp);
printf("%S",wb);
fclose(fp);
return 0;
}
0348ぴよこ
NGNG!!
setlocale() という関数があるとは知りませんでした。勉強不足でした・・・。
大変たすかりました。ありがとうございます!
0349デフォルトの名無しさん
NGNG0350デフォルトの名無しさん
NGNG0351デフォルトの名無しさん
NGNG0352デフォルトの名無しさん
NGNGこれでコンパイル通ってしまうんですが、
これに関する詳しい説明をお願いします。
あと、エントリーポイントについても宜しく
0353デフォルトの名無しさん
NGNGアセンブラまででコンパイル止めてhoge.sを見ればわかるぴょん
0355353
NGNG0356デフォルトの名無しさん
NGNGコンパイルが出来てもリンカ通るとは限らない。
実際VCでは通らないし。関数や変数の修飾子の問題だと思うけど。
0357デフォルトの名無しさん
NGNGVCのことは分かりません。申し訳ないぴょん。
gccならx86系のマシンなら通ると思うぴょん。
つーか、実際動くコードだぴょん。
0358デフォルトの名無しさん
NGNG24Bit→256色→閾値より大きいと1、小さいと0という風に考えたのですが
もしこうなら、この時に24Bit色から256色への変換する方法を教えてくれませんか?
0360デフォルトの名無しさん
NGNGint main=37059;
といれてみて、よーやくわかりました。
ぴょんさんありがとう
mainてこんな動き方するんですね
ほかの関数でも使えるのかな。
アセンブラの本を引っ張り出して
マシン語プログラミングをはじめてしまいました
process_startupとかについて教えてください
0361デフォルトの名無しさん
NGNGInstruction OpCode表があれば文字列としても書けるね。
んでその文字列を実行・・・
結構面白いぞ。
0362デフォルトの名無しさん
NGNGRGBたしていきなり2値化するのがいいかと。
0363デフォルトの名無しさん
NGNGRGB→YCbCrに変換してください。
その後、Yだけ見て2値化すればOKです。
0364358
NGNG>>363
レスありがとうございます。すいませんがYCbCrとはなんですか?
http://indy.doshisha.ac.jp/~watabe/Image/n2000/
ここにある物体抽出(2値化) のやり方とは違うのでしょうか?
(ここでは24bitを濃淡白黒画像とやらにしています)
0365デフォルトの名無しさん
NGNG0366デフォルトの名無しさん
NGNG0367デフォルトの名無しさん
NGNG隣接画素同士の差をとる演算で微分を近似する。
L(x,y)=4*f(x,y)-{f(x,y-1)+f(x,y+1)+f(x-1,y)+f(x+1,y)}
みたいにする。
0368366
NGNG16777215色の場合その式でf(x,y)に当たる値はどう表すんですか?
例えば(200,100,120)という色が合った場合それを一つの値とする時
はこの200と100と120をどう計算すればいいんでしょうか?
そしてその処理が終わった後にまた3ビットのRGBに値を入れる場合は
その一つの値をどう分けるのですか?
もう一つは一番外枠のピクセルの場合は内側にないので
f(x-1,y-1)の時はどの値を使えばいいのですか?
よろしくお願いします。
0369デフォルトの名無しさん
NGNG> 16777215色の場合その式でf(x,y)に当たる値はどう表すんですか?
> 例えば(200,100,120)という色が合った場合それを一つの値とする時
> はこの200と100と120をどう計算すればいいんでしょうか?
> そしてその処理が終わった後にまた3ビットのRGBに値を入れる場合は
> その一つの値をどう分けるのですか?
Cならば構造体のメンバとして、C++ならクラスの属性として表現できる
なんかC/C++の参考書よんでみそ
一応、Cの場合の例を示す
struct Coler {
int Red; // 0-255までなのでunsigned charでも良い
int Green;
int Brue;
}; // 画素の定義
struct Coler x = { 200, 100, 120 }; // ある点x
> もう一つは一番外枠のピクセルの場合は内側にないので
> f(x-1,y-1)の時はどの値を使えばいいのですか?
適当な値でいいんじゃないの?(白とか黒とか)
0370368
NGNGありがとうございます。
なんとなくわかったので後は参考書を読んでみます。
本当にありがとうございました。
0371デフォルトの名無しさん
NGNG参照先のプログラムで大丈夫ですよ。
このプログラムでは、RGB->YCbCrのYだけ計算していますね。
0372デフォルトの名無しさん
NGNG本当にわかったんでしょうか。
ラプラシアンフィルタを何にかけたいんですか?
RGBデータにじかにかけてもどうしようもないような気がするんですが。
ラプラシアンをかける目的はなんですか?
輪郭強調なら元のデータに足さないとだめだし、輪郭抽出なら2値化が
はいるでしょ?
何がしたいの?
0373デフォルトの名無しさん
NGNGで、本探しているのですがVBのグラフィックスプログラミング
の本は有るのですが、VC++のグラフィックスプログラミング
の本が無いのでどなたか知っておられる方がいらっしゃいましたら
教えてください。
0374368
NGNG自分でわかった気になってたものよりも複雑そうですね。
ラプラシアン(2次微分)の輪郭抽出をしたいんですが、
自分にはまだ手におえなさそうです、
よろしければ教えていただけないですか?
(質問ばかりですみません)
0375デフォルトの名無しさん
NGNG座標系に変換できるんだよ。代表的なのにYCbCr、XYZ、Labなんかが
ある。
で、YCbCrとLabでは、YとLが色を含まない輝度成分、CbCrとabが
色情報になる。
だから、カラー画像からモノクロ濃淡画像をつくるにはYやLを計算して、
やればよく、そのモノクロ画像の輪郭抽出をするには、Y成分やL成分に
ラプラシアンフィルタを施し、必要ならある値以上を1、それ以外を0に
ニ値化すればいいわけ。
0376デフォルトの名無しさん
NGNG適当なこと書いてたらごめんね。
まず、変化の一様性が問題になるよ。
たとえば128から138に10変わった時と、230から240に10変わった時で、変化
の大きさがあまりに違えば、値の差から輪郭を得る時に問題になるよね。
これをなるべく一様にしたのがLab表色系だよ。
だから色の輪郭を抽出するには、Labを使うべきだと僕は思う。
簡易的なものだったら、YCbCrでも良いかもしれないし、ひょっとしたら
R、G、Bそれぞれに使っても良いかもしれない。
0377デフォルトの名無しさん
NGNGPoynton's Color and Gamma FAQで学びました。
http://www.landfield.com/faqs/graphics/colorspace-faq/
0378368
NGNGありがとうございます。
ということは16777215色の画像をモノクロ濃淡画像へ変換し、
YCbCrのYの値にフィルタをかけて必要ならば
2値化するという流れでいいんでしょうか?
私は輪郭抽出はカラーで表示されるものだと思っていたので
その点から間違えていました。
364さんが書かれたリンク先の物を見たのですが
a = 0.3*image[y][x][0] + 0.59*image[y][x][1] + 0.11*image[y][x][2];
これがYCbCrのYを計算する公式だということでしょうか?
本当に度々すいません。
0379デフォルトの名無しさん
NGNGhttp://www02.so-net.ne.jp/~koujin/jpeg/RGB2YCbCr.html
YCbCrとの関係はここで分かるよ
Labは良いページが見つからんなぁ
0380デフォルトの名無しさん
NGNGとりあえずその流れでいいんじゃないかな。
まずやってみるといいよ。
その後で、同じ明るさで色違いの輪郭を出すのに頑張るとか、
斜めの輪郭と縦横の輪郭の出方が違うからフィルタを考えるとか、
色々やってみるといいよ。
0381デフォルトの名無しさん
NGNGhttp://www_cv.ccm.eng.osaka-u.ac.jp/~skimura/constraction/node4.html
Labはこれでいいと思う。だけどここまで厳密な均等色空間は
ソース(最初の画像)にまともなヤツ用意しないと使っても意味ないかも。
どんな色の照明下で撮ってどんなガンマ補正かけてるかまでわかってないと。
0382368
NGNGまず、作ってから色々試してみようと思います。
本当にありがとうございました。
0383デフォルトの名無しさん
NGNG今、Cのプログラムを作っているのですがコンビネーション(nCrってやつです)の結果を出すプログラムを作りたいのです。
例)5C3なら
1 2 3,1 2 4,1 2 5,1 3 4,1 3 5,1 4 5,
2 3 4,2 3 5,2 4 5,
3 4 5
のようにです。
普通にプログラムを書けばfor文を何回か組み合わせたらできるのですがnCrのrの値が大きくなればfor文の回数が増えてプログラムが汚くなってきます。
そこで、一般的にnとrの値を入力すれば全ての組み合わせが表示されるプログラムをつくりたいわけです。
しかし、いくら考えてもうまくいきません。
どうやったらいいか教えてください!
0384SAGE
NGNGキーワードは「再帰」。
( ……もっと簡単に出来るかもしらんけどネ )
0385デフォルトの名無しさん
NGNGC++の入門書読んでもだめですか??
0386トリッキーの1
NGNGFAQですよね。C知らない人向けのC++の入門書を読めばいい、というのが大抵の答えですが、
実際の所どうなんでしょう。
どちらにしろC++をマスターするということは、C言語も同時にマスターすることですので
(どの機能がC++特有なのかわからない、という問題は起こりそうだけれど)
本質的な問題では無いかもしれません。
0387デフォルトの名無しさん
NGNG#include <stdio.h>
#include <string.h>
#include<conio.h>
char *sort(char *, int);
void main()
{
char str[20];
char *ptr;
int n;
ptr = str;
printf("ソートする文字列を入力してください(20文字以下) :");
gets(ptr);
n = strlen(ptr);
printf("-----Result-----\n");
printf("%s\n",sort(ptr,n));
getch();
return 0;
}
わざわざポインタ使わなくても、gets(str);n=strlen(str);
sort(str,n)でいいと思うし、この場合ポインタ使うメリットって
あるんですか?
0388デフォルトの名無しさん
NGNGまったくない。
0389387
NGNGども。
0390デフォルトの名無しさん
NGNGどうでもいいが、19文字までじゃねえの?それだと
0391デフォルトの名無しさん
NGNG全くもってどうでも良いサゲ
0392デフォルトの名無しさん
NGNG終わりのデータNULLから一つ前はどうやってみるの?
NULL−1は出来るの?リストの入れ替えしかないの?
おねがい。
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#define WORDLEN 50
struct wd {
struct wd *next;
char *str;
int count;
};
typedef struct wd WORD;
WORD *word = NULL;
WORD *add_word(char *);
int main(int argc, char *argv[])
{
FILE *fp;
char bunkatu[10] = " ,\t\n";
char *tokun;
char w[WORDLEN];
WORD *p;
fp = fopen(argv[1],"rb");
if(fp == NULL){
fprintf(stderr,"ERROR");
exit(1);
}
while (fgets(w, WORDLEN,fp) != NULL) {
tokun = strtok(w,bunkatu);
while(tokun!=NULL){
p = add_word(tokun);
if (p == NULL){
fprintf(stderr, "Too many words\n");
exit(1);
}
tokun = strtok(NULL,bunkatu);
p->count++;
}
}
for (p = word; p != NULL; p = p->next) {
printf("%d %s\n", p->count, p->str);
}
fclose(fp);
return 0;
}
WORD *add_word(char *w)
{
char *s;
WORD *p;
for (p = word; p != NULL; p = p->next) {
if (strcmp(w, p->str) == 0)
return p;
}
s = (char *)malloc(strlen(w) + 1);
if (s == NULL)
return NULL;
strcpy(s, w);
p = (WORD *)malloc(sizeof(WORD));
if (p == NULL)
return NULL;
p->str = s;
p->count = 0;
p->next = word;
word = p;
return p;
}
0393デフォルトの名無しさん
NGNGクイックソートかマージソートあたりでいいんじゃねえか?
(リストでクイックソートすると比較用の代表値に扱ってるリストの
頭の値しか使えないのがアレだけど)
コードは眠いんでパス
0394デフォルトの名無しさん
NGNGCで出来ることは、C++でも出来るんでしょうか?
ついでにC++はなんて読むんですか?
0395超初心者です。
NGNG#include <stdio.h>
int main()
{
int a[5];
int i;
for(i=0;i<5;i++){
printf("%d人目の点数を入力して下さい。->\n",i+1);
scanf("%d",&a[i]);
}
for(i=0;i<5;i++){
printf("%d番目の人の点数は%dです。\n",i+1,a[i]);
}
return 0;
}
これを点数の高い順(と低い順)にソートして出力せよ
というのですが全く分かりません。
学校の先生から明日までにと言われてしまいました。
本当に困っています。誰か分かる方いましたら答えを教えて下さい。
0396デフォルトの名無しさん
NGNGしーぷらすぷらす
CでできることはC++でもできます。
というか、Cだけの機能で書いてもコンパイルできます。
0397( ´∀`)さん
NGNGvoid (*spoint(int spx,void (*func)(int)))(int);
0398通りすがり
NGNGtypedef void function(int);
funtion *spoint(int spx, function *func);
とすれば簡単。
0399( ´∀`)さん
NGNG考える時間を時間を下さい。
あほ>俺
0400デフォルトの名無しさん
NGNGりんごを大きい順に並べ替えなさい。しかし、りんごは一つしか持ち上げられません。
もしその約束を破ったなら、魔人が彼方と彼方の家族を殺します。
並べ替えるための道具として、九谷焼の皿を一枚貸してあげます。
という状況をどうやって乗り切るかを試行錯誤すれば解ると思います。
int kutani;
kutani = a[i];
a[i] = kutani;
aはりんごのaです。
0401400
NGNGに対してね。
0403デフォルトの名無しさん
NGNG日本ではそれでいーんじゃない?
便乗だけど、C#ってなんて読むの?
シーイゲタ?
0404デフォルトの名無しさん
NGNG0405デフォルトの名無しさん
NGNG無料でコンパイル要らずで使いやすいと思うのですが
お勧めできますか?
0406nanacy
NGNGvoid (*spoint())(int); で spoint が戻り値として
返す関数へのポインタを使って関数をコールするってこ
とですよね? でもプロトタイプってことは、どういう
意味だろう? 関数へのポインタを返す場合は、
void (*func()) (int); と宣言するのかな? 戻り値
void で引数に int を取る関数へのポインタという意味で。
>>398の方の意味がわからない・・(^-^;
0407デフォルトの名無しさん
NGNGごめん。しーはっしゅってどういう意味があるのか教えて。
0408デフォルトの名無しさん
NGNG今時のパソコンは超速いから小さなプログラムならコンパイルも一瞬。
そんな訳で、インタプリタで即実行というのは今時あまり利点ではないかも。
BCCとか色々本格的なフリーのコンパイラも今はある事だし。
使ったこと無いから使い勝手は判らないけど…。
0409デフォルトの名無しさん
NGNG#はハッシュマーク(hash mark)と呼ばれる事もあるです。で、hashを
辞書で引いてみると・・・(むしろC++の方に当てはまりそうな意味です)
0410通りすがり
NGNGsignal関数の仕様を調べてみてください。
0411( ´∀`)さん
NGNGごめん、考えても分からない。
もう少し分かりやすくならないでしょうか?
0412通りすがり
NGNG406と同じで、signal関数の仕様を調べてみましょう。
関数名以外、全く同じ形式になっていますから。
0413これ
NGNG__export
ってどこのヘッダで実装されてるか誰か知らない?
つかってるのはmingw(gcc2.92.2)。
0414通りすがり
NGNG/usr/include/w32api/excpt.h
0415通りすがり
NGNG/usr/include/w32api/excpt.h
0416414〜415
NGNG0417デフォルトの名無しさん
NGNGなるほろ〜。個人的には、構造化以降のオブジェクト指向なんかの
考えは、全部hashしている気もする。厨房でスマソ。
0418413
NGNGなんて早すぎ。ありがとう。
__exportでなくて__exceptだったりして。
0419デフォルトの名無しさん
NGNGint aaa;
int bbb;
int ccc;
};
って構造体と文字列char sz[10]があって、
szが"aaa"のときはABCのメンバaaaを処理
szが"bbb"のときはABCのメンバbbbを処理
szが"ccc"のときはABCのメンバcccを処理
みたいに、その文字列が表している構造体のメンバを参照したいのですが、可能でしょうか?
0420デフォルトの名無しさん
NGNGこれじゃ駄目?
/* szの文字列より、abcのメンバのポインタを返す */
/* szの文字列が不正の場合、NULLを返す */
int *func(const char *sz, const struct ABC *abc)
{
if(strcmp(sz, "aaa") != 0){
return &abc->aaa;
} else if(strcmp(sz, "bbb") != 0){
return &abc->bbb;
} else if(strcmp(sz, "ccc") != 0){
return &abc->ccc;
}
return NULL;
}
怪しげなマクロを駆使すれば可能かもしれないが、
szに"ddd"とか入れられた場合、どうする?
0421デフォルトの名無しさん
NGNG説明不足だったのが悪いのですが、実際はその構造体のメンバは50個ぐらいありまして、さらに今後、メンバが追加されたり、削除されたりするかもしれないんです。
それでコード上にif文をたくさん書いて処理を分岐させるのは面倒ですし、構造体の仕様が変わるたびにコードを変更しなければなりません。
幸い構造体のメンバの一覧はテキストファイルの中の文字列から拾えるので、できればその文字列をもとに構造体のメンバにアクセスしたかったのです。
0422デフォルトの名無しさん
NGNGこんなのは?
typedef struct _dat{char[4] key, int val} DAT;
DAT[] = {
{"aaa", 1},
{"bbb", 1},
{"ccc", 1},
{"ddd", 1},
{"eee", 1},
{"fff", 1},
};
0423422
NGNGてきとーに書くといかんな、やっぱ。
まぁ、でも言いたい事はわかるよね。
0424デフォルトの名無しさん
NGNG文字列を添字にした配列、いわゆる『連想配列』だね。
と言うことで、419はサーチエンジンとか参考書とかで調べるべし。
でも、その様子だとそもそもの設計に問題がありそうな気がするなぁ
0425デフォルトの名無しさん
NGNGこんなのは?
struct XYZ{
char *szpName;
size_t nOfst;
VARTYPE type;
size_t nSize; //要素数
};
struct XYZ table[]=
{
{"aaa",offsetof(struct ABC,aaa),VT_UI4,1},
{"bbb",offsetof(struct ABC,bbb),VT_UI4,1},
{"ccc",offsetof(struct ABC,ccc),VT_UI4,1},
{},
{NULL,0}
};
VARIANT v;
for( int n=0;NULL!=table[n].szpName;n++){
v.vt = VT_EMPTY;
switch( table[n].type ){
case VT_I4:
v.lVal = *((DWORD*)&buff[table[n].nOfst]);
v.vt = table[n].type;
break;
case ....
}
if( VT_EMPTY != v.vt ) break;
}
return v;
}
インデントつぶれると思うけど勘弁。
0426デフォルトの名無しさん
NGNG>構造体の仕様が変わるたびにコードを変更しなければなりません。
>幸い構造体のメンバの一覧はテキストファイルの中の文字列から拾えるので
テキストファイルだって変更する必要があるんじゃないの?
0427デフォルトの名無しさん
NGNGやっぱりやっといた方がいいかなぁ
0428デフォルトの名無しさん
NGNGなお、氏名は14文字以内、忍従は50人以内とする」
(2)この名簿の作成をリスト構造を用いた処理に変更せよ
っと言う問題が解けません・・・・
お願いします
0429デフォルトの名無しさん
NGNG(2)で“変更せよ”っていってるくらいだから
(1)はリスト構造を使わずに書けってことなのかよ
0430デフォルトの名無しさん
NGNGだから、50人以内ってあいてあんじゃん
0431デフォルトの名無しさん
NGNG誰が教えてやるものか、ボケッ
0432デフォルトの名無しさん
NGNGmake時にソースをテキストから生成すりゃ良いだけでしょ?
awk '$1 ~ /^[a-z]+$/ {print "if(!memcmp(sz,\""$1"\"))return &abc."$1";"}' foo.txt
ってな感じで
0433デフォルトの名無しさん
NGNG#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char name[50][15];
int n = 0;
main()
{
int i;
while( strlen(gets(name[n]))>0 ) n++;
qsort( name, n, 15, strcmp );
for( i=0; i<n; i++ ) printf( "%d %s\n", i+1, name[i] );
}
0434デフォルトの名無しさん
NGNGしかし、並び替えが正常に行われません。
qsortへの引数が間違っているように思われますが正しい引数の渡し方がわかりません。
ご教示下さい。また、おかしなところの指摘も歓迎します。
以下に課題のソースを示します。
(main部分のエラーチェックはやっていません)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME 14
#define MAX_MEMBER 50
static char *list[MAX_MEMBER];
static int listcnt = 0;
static int addlist(const char *);
int main(void)
{
char buf[MAX_NAME + 2]; /* '\n' + '\0' */
int i, sts;
/* 名前の追加 */
for(i = 0; i < MAX_MEMBER; i++)
{
(void)fgets(buf, sizeof buf, stdin);
if(buf[strlen(buf) - 1] == '\n')
buf[strlen(buf) - 1] = '\0';
if(strlen(buf) <= 0)
break;
(void)addlist(buf);
}
/* 並び替え */
qsort(list, listcnt, sizeof list[0], strcmp);
/* 名前の出力 */
for(i = 0; i < listcnt; i++)
{
printf("[%2d][%p][%-*s]\n", i, list[i], MAX_NAME, list[i]);
free(list[i]);
}
return EXIT_SUCCESS;
}
/* listに文字列の追加を行う */
/* 正常終了時0, 異常終了時-1を返す */
static int addlist(const char *value)
{
char *buf;
buf = malloc(strlen(value) + 1);
if(buf == NULL)
return -1;
(void)strcpy(&buf[0], value);
if(listcnt >= MAX_MEMBER)
return -1;
list[listcnt++] = buf;
return 0;
}
0435428
NGNGこれってC言語じゃなくて、C++ですか?
>>433
ありがとうございます
とりあえず、もう一度これを見ずに自分でやってみます
それでも分からなかったら写させて貰います・・・・
0436デフォルトの名無しさん
NGNGC言語にしか見えませんが・・・
0437デフォルトの名無しさん
NGNGみーとぅー
0438428
NGNG>>433のプログラム何ですが、psortってのは、これで
いいんですか? 僕の参考書二冊にはこれ載っていなくて分かりません
後、stlenってのも、使い方が良く分からないです
0439デフォルトの名無しさん
NGNGネタじゃないなら、プログラム作っている場合じゃないぞ
眼科に逝け!
0440428
NGNG何とか出来るような難易度だったんですが、残りの二問が
考えても良く分かりませんでした 上記がその内の一問です
次の問題も・・・・すいません・・・・
次の形式で売上データを登録した売上ファイルを作成する
データは営業所コード順にソートして出力する
売上コード
営業所コード 商品コード 売上数量 売上単価
数字三桁 数字五桁 五桁 四桁
(2)上記で作った売上ファイルを読んで営業所別売上金額、
および合計金額を出力する
です。厚かましくてすいません・・・・追い込まれているもので・・・
0441デフォルトの名無しさん
NGNGstlen → strlen
参考書には載っていないよな...
0442デフォルトの名無しさん
NGNG0443428
NGNG追い込まれているので・・・・
0444428
NGNG一冊にはクイックソート自体は載っていたのですが
分かり易い僕が良く見ている本には載っていません・・・・
strlenはどうやって使うのかイマイチ分かりません
0445デフォルトの名無しさん
NGNGソートして出力は>>433の応用でできないか?
つーかそれは応用してやれ
2) 営業所別売上金額を計算するのは、営業コードでソートしてあるんだから
営業コードが変化したタイミングで出力すればいいんじゃい?
0446428
NGNG0447デフォルトの名無しさん
NGNG使わなくともできるけど、使った方が奇麗だな
struct 売上データ {
int 営業所コード;
int 商品コード;
int 売上数量;
};
みたいにな。
で、売り上げデータの配列を処理すればいい
0448428
NGNG構造体最近勉強したので、まだ完全に理解していません
今日一日二問考えてみます
夜になっても出来なかったらまた来ます・・・・
こんな僕でももう直ぐプログラマーです・・・・
すいません 足手まといで
0449デフォルトの名無しさん
NGNG----------------
#include <stdio.h>
char line[100];
int str_len;
main(){
printf("文字入力してちょ\n");
fgets(line,sizeof(line),stdin);
line[strlen(line)-1] = '\0';
str_len = strlen(line);
printf("文字列の長さは%dだぴょーん",str_len);
return 0;
}
-------------------------------
strlenは文字列の長さを扱う文字列関数。
0450デフォルトの名無しさん
NGNG理解していないなら使わないこと。
これが動くプログラム作成の基本です。
今回のケースでなら使わないほうが見通しが良いくらいだし。
0451デフォルトの名無しさん
NGNG新しいことには手を出すな、と言っているみたいで気に入らないのですが
0452デフォルトの名無しさん
NGNGっつーことでは??451
0454428
NGNG0455デフォルトの名無しさん
NGNGまるで質問者には責任はないかのような言い訳っぷりですね。
にちゃんを見る時間を勉強にかけるという選択肢はないんですかね。
きっとまた言い訳の書き込みがあるんでしょうね。
プログラマ以外にもたくさん仕事はありますよね。
0456433
NGNGchar name[50][15]; と char *list[50]; ではデータ構造がまるっきり違います。
後者をソートしたい場合は
int comp ( void *p1, void *p2 )
{
return strcmp( *((char**)p1), *((char**)p2) );
}
とかして、qsort( list, n, sizeof(char*), comp ); とします。
0457428
NGNG確かにその通りですね
返す言葉も無いです
0458428
NGNG教えて頂いたみなさんありがとうございます
少し考え方を変えて、多次元ではなく1次元配列で
上記の最初のプログラムもう一度考えてみました
とりあえず、qsortの使い方を知らないので、そこだけは
写させて貰おうかと思っています
後はもう少しで出来そうです
0459428
NGNG僕の書いたプログラムを一度見て下さい 見難いかも知れませんがお許しを
#include <stdio.h>
#include <string.h>
main()
{
char name[50];
int i=0,s,n=0;
do{
printf("氏名を入力して下さい\n");
gets(name);
s=strlen(name);
if(s>14)
printf("14字以内の名前を入力して下さい\n");
i++;
}while(i<50&&*name!='0' );
return(0);
}
0460デフォルトの名無しさん
NGNGどあぁ。お前プログラマ板でも質問してたやつだな?
あれだけみんな親切に教えてくれてたのに、まだ
こんなことやってるのか?
かわいそうだけど、才能ないよ、多分。
もうすぐソフト会社(?)に就職決まってるらしいけど、
早めに違う職探したほうが身の為…。
0461デフォルトの名無しさん
NGNG何事も経験だよ。
会社に入って扱き使われたら、イヤでもうまくなっていくだろ。
多分。
0462459
NGNG勉強し始めて4ヶ月経つんですが、どうも駄目です
自分でも才能無いって思うんですが
頑張らないとって思ってます・・・・
0463459
NGNG>>459のプログラムに交換の仕方を付け加えたいのですが
どうしたらいいのか分からなくて・・・・
0464デフォルトの名無しさん
NGNG無理だと思ったらさっさと首吊れやゴルァ!
0465463
NGNGもし気を悪くしたのなら謝ります すいませんでした
0466デフォルトの名無しさん
NGNG慰めにもならんと思うが
新入社員が即戦力になるとは誰も思っていないから
会社入れば新入社員研修とかで基礎くらいはやるかもしれないし
仕事はじまってもしばらくは先輩の下で教えてもらえるだろうし
会社だって仕事してんだからサンプルになるソースは山ほどあるし
そんなに追い詰められる必要は無いと思うよ
努力するのは良いことだけどね
0467465
NGNGはい 凄い心から嬉しいです
別に感謝されたくないだろうですけど、ありがとうございます
これ、会社に提出する宿題なんですね
誰かのプログラム写して出すのも変だと思ったのですが
やらないよりはましかと思いまして・・・・
0468デフォルトの名無しさん
NGNGの名前も知らないの?もし知らなかったとして、宿題出されてから
いままでの間にそれを調べる事も出来なかったの?
コードまで作れないにしても、そこへいたる中途段階にさえ至って
いないとしたら、俺が上司なら「こいつはダメだ」と思うと思う
じょ…
「解法」を世の中から探し出して覚える作業が、来年からの
仕事の中心になるんだよん。がんばりや。
…最近の学生ってみんなこんなのばっかりなのか?
うちにももうすぐくるんだろうな。鬱だ…
0469467
NGNGpsortってのは、単に打ち間違えでクイックソートですよね・・・・
まぁそんなフォローしても現状は変わりないです・・・・
0470デフォルトの名無しさん
NGNG0471デフォルトの名無しさん
NGNGアルゴリズムを知ってて出来ないのなら違う仕事を探しましょう。
0472469
NGNGmain()
{
int hoge[4]={2,4,5,3};
int i,j,k;
int tmp;
for(i=4-2;i>=0;i--){
for(j=0;j<=i;j++){
if(hoge[j]>hoge[j+1]){
tmp=hoge[j];
hoge[j]=hoge[j+1];
hoge[j+1]=tmp;
}
}
}
for(k=0;k<4;k++)
printf(" %d",hoge[k]);
}
一応今動きました・・・・
0473デフォルトの名無しさん
NGNGごめん。>>459をよく読んでなかった。
char name[50]; だとおかしい。使う配列は14*50の2次元の配列。
50人分配列に貯めて、その50の部分を並び替える。
これが分かれば出来るんじゃない?
あともう一つ。
if(s>14)
printf("14字以内の名前を入力して下さい\n");
i++;
もおかしい。50回連続で20文字の名前が入力されるとどうなる?
0474デフォルトの名無しさん
NGNG向いてない仕事やっても、お互い不幸になるだけだから。
ま、うちは中小だからかもしんないな。大手はきちんと教育してくれるのかね。
0475472
NGNG少しだけみなさんのを見て写させて貰った部分もあるのですが・・・#include <stdio.h>
#include <string.h>
#include <stdlib.h>
main()
{
char name[50][15];
int i=0,j,s,n=0;
printf("氏名を入力して下さい\n");
do{
gets(name[i]);
s=strlen(name[i]);
if(s>14)
printf("14字以内の名前を入力して下さい\n");
qsort( name, n, 15, strcmp );
i++; n++;
}while(s!=0);
n++;
for( j=0; j<n; j++ )
printf( "%d %s\n", j+1, name[j] );
return(0);
}
実行結果少し変です・・・・
0476472
NGNGいや、自分でも自分が嫌になります・・・・
これから頑張っていこうかと思ってます・・・・
0477デフォルトの名無しさん
NGNG大丈夫さ。
俺も最初はそうだった・・・・・。
特にポインタ勉強してる時ね。一日中鬱だ氏のう状態だったからな。
まさか、ドキュソ高校に逝ってた俺がCを理解できるとはな。
神が俺に与えた唯一の恩恵。ありがとう神様。
このまま童貞捨てさせてください。
0478デフォルトの名無しさん
NGNGdo whileの中でqsortやってるのが変。全部入力した後に整列すればよし。
配列の添字は最初の内は、てきとーにやって実行結果みてから修正って
かんじで良いけど、出来ればきちんと考えてからやるようにしよーね。
50人までしか入力出来ない様にするのは?
今のままだと長い名前が入っちゃう。
この二つはCでやりがちなミスだから、暇があるならよく考えてみると良いよ。
例えば1番目に1234567890123456って入れてから2番目に123って
入れるとどうなるでしょう? これは余裕が無ければ後で考えれば良いよ。
0479デフォルトの名無しさん
NGNG0480472
NGNG本当だ。長い名前も入ってる・・・・
う〜ん また明日考えてみます ってもう時間無い・・・・どしよ・・・
リスト構造はほとんど分かりません
読めって言われれば簡単なのなら読めますがリスト構造を使って
プログラムは作った事無いです
0481472
NGNG数字がどうも上手い事揃わないんです・・・・
明日また少し考えてみます・・・・
はぁ・・・・
0482デフォルトの名無しさん
NGNG>>456
なるほど! ポインタ配列の比較関数はstrcmpをそのまま渡しちゃ駄目で
こうすれば良かったんですね。勉強になりました。
ありがとうございます。
0483481
NGNG#include <string.h>
#include <stdlib.h>
main()
{
char name[50][15];
int i=0,j,s,n=0;
printf("氏名を入力して下さい\n");
do{
gets(name[i]);
s=strlen(name[i]);
if(s>14)
printf("14字以内の名前を入力して下さい\n");
else
i++; n++;
if(s==0) break;
}while(i<=50);
qsort( name, n, 15, strcmp );
printf("\n");
for( j=0; j<n; j++ )
printf("%s\n",name[j] );
return(0);
}
一応こうなって動きました
構造体ほとんど分からないかも・・・・
どなたか作って下さい・・・・
0484デフォルトの名無しさん
NGNGそれと
else
i++; n++; って
else{ i++; n++; } って書きたいんでしょ?
最後に入力する"\0"もqsortで整列しちゃってる。先頭に入るゴミはこれ。
ゴミが出ちゃうから
printf( "%d %s\n", j+1, name[j] ); ってコードをやめにしたでしょ。
そーゆー姿勢は駄目。なんでかちゃんと考えようね。
hoge[4]={4,2,6,3};
ってのを昇順にリストに繋ぐって出来る? やってみましょ。
この程度のやつなら、そのまんまのサンプルコードあるでしょ?
0485デフォルトの名無しさん
NGNG理解してから修正しよーね。
↑は慣れちゃえば別に構わんけど、最初の内はきっちりやろーね。
ちゅーか慣れれば、考えるまでもなく分かるよーになる。
0486デフォルトの名無しさん
NGNG0487481
NGNGはい・・・まさにその通りです・・・・・
後三問もあるので、時間が無いからいいやって甘い考えが出てしまって・・・・
上記のhoge[4]={4,2,6,3}ってのは、違うスレでもあったのですが
そこで一応答え書きました
0488デフォルトの名無しさん
NGNGダメにしてやってる気もするぞ。
0490デフォルトの名無しさん
NGNGってどういう意味よ
0491デフォルトの名無しさん
NGNG0492デフォルトの名無しさん
NGNG0493デフォルトの名無しさん
NGNG自分で調べたほうが身につくよってこと
聞いてばかりじゃだめよ
0494デフォルトの名無しさん
NGNGあれ、そういう趣旨でみんな答えを教えてるんだと思ってたよ。違ったの?
みんな残酷なことしてるなぁと思いながらニヤニヤしながらみてたんだけど?
0495デフォルトの名無しさん
NGNG例えば、
char buf[8];
として、データが
0x3031 1234 5678 9ABC
のときに、
3031 を char c[3] に
1234 を int i に
5678 9ABC を long l に代入するにはどうすれば良いのでしょうか?(ビッグエンディアン)
0496デフォルトの名無しさん
NGNG構造体を被せて使うのが定石
0497デフォルトの名無しさん
NGNGまず君が思うところのスマートでない方法を書いてみなさい。
0498デフォルトの名無しさん
NGNG移植性がない。
0499デフォルトの名無しさん
NGNG移植性のあるコードに出きるけど?
どこが拙いのやら
0500495
NGNG構造体を用いる場合、型キャストはどうやるのでしょうか?いろいろ試しましたが、上手くいきませんでした。また、一文字ずつコピーしたら、何故か途中にゴミが混ざりました。
>>497
とりあえず、シフト、AND、OR演算を使って一文字ずつコピってます。
0501デフォルトの名無しさん
NGNGおまえは仕事をするな。
alignmentの問題で正常にできるかどうかは処理系依存
0502デフォルトの名無しさん
NGNG構造体を定義しないうちに、できるできないを言い争うのはヴァカ
0503デフォルトの名無しさん
NGNGalignment って #pragmaで 間を空けないように指定出来なかったけか?
つか、出来ない処理系もあるの?かな
0504デフォルトの名無しさん
NGNG知ってるシステムの中でできないシステムはなかったけど
標準でもないはず。
0505495
NGNGかあさん、もうすぐ4月だというのに都会は寒くて凍えそうだ...
田舎に帰ろう...
0506デフォルトの名無しさん
NGNGstrncpy(c,&buf[0],2);
i = *((short*)&buf[2]);
l = *((long*)&buf[4]);
0507495
NGNGどうも有り難うございました。m(_ _)m
非常にすっきりしたコードになりました。
495はかしこさが2あがった!
0508デフォルトの名無しさん
NGNGのとき、
long l = *((long*)&buf[0]);
でlが0x12345678になるか0x56781234になるかは機種依存なんじゃないでしたっけ?
0509ちゃちゃ
NGNG0x56781234になる機種なんてあんの?
0510デフォルトの名無しさん
NGNGリトルエンディアンなら 0x78563412 だね。確かに機種依
存な方法だけど、元の質問者がビッグエンディアンと限定し
てるから、これでも良いんじゃない。
ただ、私だったら、Perl の pack, unpack みたいな関数
を実装して使う。似たような処理が出てきたときに使いまわ
せるし、コードの見通しも良くなるからね。
たとえば、こんな感じ。エラーチェックとか甘々だけど、骨
子は分かるよね?
#include <assert.h>
#include <stdio.h>
#include <stdarg.h>
char
ntoc(const int n)
{
static const char tbl[] = {
'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'A', 'B', 'C', 'D', 'E', 'F',
};
assert(0 <= n && n <= 0xf);
return (tbl[n]);
};
void
unpack(const unsigned char *dat, const char *fmt, ...)
{
char *cp;
int *np;
long *lp;
int i;
unsigned int n;
va_list ap;
va_start(ap, fmt);
for (; *fmt != '\0'; ++fmt)
switch (*fmt) {
case 'c':
cp = va_arg(ap, char *);
for (i = *++fmt - '0'; i > 0; i -= 2) {
n = *dat++;
*cp++ = ntoc(n >> 4);
*cp++ = ntoc(n & 0xf);
}
break;
case 'd':
np = va_arg(ap, int *);
*np = 0;
for (i = 0; i < 2; ++i) {
*np <<= 8;
*np |= *dat++;
}
break;
case 'l':
lp = va_arg(ap, long *);
*lp = 0;
for (i = 0; i < 4; ++i) {
*lp <<= 8;
*lp |= *dat++;
}
break;
}
va_end(ap);
}
int
main(void)
{
char buf[] = { 0x30, 0x31, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc };
char c[4];
int i;
long l;
unpack(buf, "c4dl", &c[0], &i, &l);
printf("c = %.4s, i = %X, l = %lX\n", &c[0], i, l);
return (0);
}
0511498
NGNG#include <limits.h>
struct T {
char c[2];
char i[2];
char l[4];
};
long getint(const char* p, int n)
{
long x = (signed char)p[0];
int i;
for (i = 1; i < n; ++i) {
x = (x << CHAR_BIT) | (unsigned char)p[i];
}
return x;
}
#define intof(x) getint((x), sizeof(x))
int main(void)
{
static const char buf[] = {0x30, 0x31, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc};
const struct T* t = (const struct T *)buf;
printf("c = %.*s, i = %X, l = %lX\n", sizeof(t->c), t->c, intof(t->i), intof(t->l));
return 0;
}
0512511
NGNG--- a.c~ Fri Mar 30 07:52:31 2001
+++ a.c Fri Mar 30 07:56:43 2001
@@ -16,12 +16,13 @@
return x;
}
-#define intof(x) getint((x), sizeof(x))
+#define intof(x) (int)getint((x), sizeof(x))
+#define longof(x) getint((x), sizeof(x))
int main(void)
{
static const char buf[] = {0x30, 0x31, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc};
const struct T* t = (const struct T *)buf;
- printf("c = %.*s, i = %X, l = %lX\n", sizeof(t->c), t->c, intof(t->i), intof(t->l));
+ printf("c = %.*s, i = %X, l = %lX\n", sizeof(t->c), t->c, intof(t->i), longof(t->l));
return 0;
}
0513デフォルトの名無しさん
NGNG>const struct T* t = (const struct T *)buf;
どこに移植性があるんだよ?
4バイト境界にそろえられる処理系だとうまくいかないだろ
0514デフォルトの名無しさん
NGNGCHAR_BITなんか使ったら、逆に移植性落ちるんじゃないか?
元のデータはオクテットだろ?
0515デフォルトの名無しさん
NGNG構造体のパディングのサイズは、次のメンバのアラインメントサイズ未満になる。
アラインメントサイズは:
* 組み込み型の場合はその型のサイズ未満(enumもこれに準ずる)。
* 配列の場合は要素のそれに等しい。
* 構造体/共用体の場合は各メンバのアラインメントサイズの最大値。
アラインメントサイズってのは正式な用語じゃないかもしれんが、このルールは
規定されてなかったっけ。
0516デフォルトの名無しさん
NGNGchar としか書いてないような気がするが。
0517デフォルトの名無しさん
NGNG0518495
NGNG勉強になります。
ありがとうございます。
0519デフォルトの名無しさん
NGNG例えば・・
ひし形の大きさ: 3 (’は無視して下さい。)
’*
***
’*
ひし形の大きさ: 4
’**
****
’**
0520デフォルトの名無しさん
NGNG0521519
NGNG__*
_***
*****
_***
__*
1−3−5−3−1
です。
0522デフォルトの名無しさん
NGNG0523519
NGNG__**
_****
******
_****
__**
2−4−6−4−2になります。 ちなみに2だと
**
**
四角になってしまいます。
0524デフォルトの名無しさん
NGNG(2*x-1)/2段になる。
こんだけで分かるでしょ?
0525デフォルトの名無しさん
NGNG0526519
NGNGありがとうございます。
早速試してみます♪
0527デフォルトの名無しさん
NGNG2だと**になるのが妥当だと思うんだが。
高さは全部奇数になってるから。
0528デフォルトの名無しさん
NGNG0529デフォルトの名無しさん@524
NGNG0530519
NGNG2だと四角にならないかも知れません。 でも確かひし形ではなくて、
四角か長方形だったと思います。
**
または
*
*
0531デフォルトの名無しさん
NGNGint width = 6; // 大きさ
int height; // 高さ
int space; // " " の数
int kome; // "*" の数
int i,j; //for文のため
height = width % 2 ? width : width-1;
for(i=0;i<height;i++){
space = i-height/2;
space = space > 0 ? space: -space;
kome = width - 2 * space;
for(j=0;j<space;j++) printf(" ");
for(j=0;j<kome;j++) printf("*");
printf("\n");
}
width の値をいろいろ変化させてみてくれ。
それにしても読みにくいな。
0532デフォルトの名無しさん
NGNG0x78563412だろうけど、
0x56781234になる処理系は未来永劫存在しないとは言い切れない。
0533デフォルトの名無しさん
NGNG往年の名プロセッサ PDP-11 だと 34 12 78 56 だし、ね。
# 古すぎて、知らんか……
0534デフォルトの名無しさん
NGNG敵の追尾アルゴリズムはどういうふうに組めば
良いのでしょうか?
C言語できぼん。
0535デフォルトのアホ
NGNGどうしても下記のようにするとコンパイルエラーとなります。
何故だかわかりません。
char str[4];
str="abc"; <=ここでエラー
要素数4の配列をまず宣言し、次行で"abc"の先頭要素への
ポインタをstrに代入したいのですが、出来ないのです。
式中なのでエラー箇所の str は配列の先頭要素へのポインタ
つまり &str[0] に読み替えられているはずなのですが、
なぜエラーになるのでしょうか。
エキスパートの先輩方、よろしくお願い致します。
0536しろうと
NGNGなぜ、strcpy()を使わない???
0537デフォルトのアホ
NGNGまだ仕事につかうレベルではありません。
>536
アホに免じて許してください。
どなたか、お願いします。不思議でしょうがありません。
0538デフォルトの名無しさん
NGNGエラーの理由は配列名は左辺値にならないから。
簡単に言うと、配列名に直接代入することはできんのよ。
strcpy(str,"abc")かsprintf(str,"abc")でコピーできる。
その前に、BASICみたいな str = "abcde"みたいな代入はCだと使えない。
理由はポインタを勉強すればわかるぞ。
0539デフォルトのアホ
NGNG#include "stdafx.h"
#include <stdio.h>
int main(int argc, char* argv[])
{
char str[4];
char *str_p;
int i;
str_p=str;
for(i=0;i<sizeof"abc";i++)
{
*(str_p+i)=*("abc"+i);
}
printf("str-->%s\n",str);第2引数のstrはポインタですよね?
return 0;
}
0540SAGE
NGNG> 式中なのでエラー箇所の str は配列の先頭要素へのポインタ
> つまり &str[0] に読み替えられているはずなのですが、
void func( int* ptr ) {
int x;
&x = ptr;
}
がエラーになるってのはOK?全く同じで、
&( str[0] ) = "abc";
もダメになる気がせんか?
0541デフォルトの名無しさん
NGNG(間違っても三田本は参考にするなよ)
大まかに言えば「配列名は定数」「ポインタ変数は変数」
0542B.W.カーニハン_with_D.M.リッチィ
NGNG0543>542
NGNG0544539
NGNGヤバイでしょうか?
0545>544
NGNGポインタ辺りでつまずいてるならアセンブラでもかじってみたら?
一見遠回りにみえるが一番の近道
0546>544
NGNGオプションが多分あるのでそれで確認するのもいい。
0547539
NGNGhttp://member.nifty.ne.jp/maebashi/index.html
配列はポインタだ!とか言ってて、私は始めてこの本でポインタ
を使ってるコード(簡単なもの)が読めるようになり始めている
ところなんですが。結構評判はいいようです。
ざっとご覧になって、どうでしょうかこの著者の理解は?
0548539
NGNGまともなC使いにはなれませんか?アホでスマソ。
0549名無しさん
NGNG配列の宣言は連続したメモリの確保だよ、知ってる?
>>547
しかし例外があるとちゃんと書いてたと思うが。
0550>547
NGNG(ここの出版社からはあんまり悪い本引いたことないんで)
0551>548
NGNG0552539=547
NGNG>しかし例外があるとちゃんと書いてたと思うが。
もっと本が破れるほど読みます。アホはつらい。
0553539=547=548
NGNG1年のころCASL、2年でCがカリキュラムに組み込
まれていたような気がします。
しかしめちゃくちゃ難しそうだ。私は学生時代は
工学部だったものの情報・電子・電気とは無縁でした
から。アセンブラの入門に最適な本とかお勧めとか
ありますか?
「てめえで探せ!」ってご意見も歓迎です。
0554>553
NGNG多分本は図書館で借りる程度で良い。
CPUの資料はオンラインで全て揃うし。
あとはインストラクション表とかあればいいかな?
あと下の方のアセンブラスレにあるやつだが↓とか
http://hp.vector.co.jp/authors/VA000124/index.htm
DOSアセンブラ単体で何か作りたい場合
http://www.delorie.com/djgpp/doc/rbinter/
0555名無しさん
NGNG>情報・電子・電気
プログラミングってそういうものじゃないよ。
>アセンブラの入門に最適な本
本よりもwebを適当に見ながら自分の作りたいものを適当に作るのが上達の近道だと思うよ。
http://www.astentech.com/tutorials/Assembly.html
0556名無しさん
NGNGここ。ただしDL時間は覚悟してちょ。
ttp://www.intel.co.jp/jp/developer/vtune/cbts/refman.htm
0557>542
NGNGあんなのはしなくて結構。実際使わないし★★
0558デフォルトの名無しさん
NGNG> 実際使わないし
オマエハナー
# ビットフィールドの方が実際使わない
0559デフォルトの名無しさん
NGNG0560デフォルトの名無しさん
NGNG今回の件に関しては、アセンブラを詳しく知らなくても、
きちんと説明すれば理解できると思う。アセンブラの
インストラクションまで知らなくても、基本的な仕組み
と、実行形式ファイルの中でどういう風に配置されてい
るかがイメージできれば、ポインタは大丈夫じゃないのかな?
0561デフォルトの名無しさん
NGNGほぼ同意。
出来れば、メモリーイメージ想像出来るように理解できた方がいいと思うの。
0562デフォルトの名無しさん
NGNG黙れこのネカマ野郎!!!(激怒)
0563デフォルトの名無しさん
NGNG爆笑
0564デフォルトの名無しさん
NGNG他人を罵倒するのは止めた方がいいと思うの。
0565デフォルトの名無しさん
NGNG(゚Д゚)ハァ?
0566aho
NGNG0567デフォルトの名無しさん
NGNGOSのInstallしたことある?
MS-DOS プロンプトって知ってる?
”C言語”を学校で最近知った用語?
0568261
NGNG羽津打紙野宇。
0569デフォルトの名無しさん
NGNGそんな旧い本は捨てて今時の本にしとけ
0570デフォルトの名無しさん
NGNGつーかいきなりGUIから入らないといけない今時のヤツは逆に可愛そうな気もするんだが。
キャラクタベースのほうが最初の1歩は100倍くらいやさしいと思う。
今時の本て
GUIのスケルトンをイキナリ数ページにわたってポンと渡されて
「とりあえずこれはこーいうもんだとおもって納得しとけ!
やってればそのうちわかる!」
ってなふうに始まるのかね。
0571参議院
NGNG0572デフォルトの名無しさん
NGNG0573名無しさん@LV2001
NGNGhttp://www.niitsu-misawa.co.jp/othervoice/movie/preview2.mov
http://www2.odn.ne.jp/~ccs50140/stars/movie/preview.mov
http://www.mangazoo.com/studio/shinkai/ec/
0574デフォルトの名無しさん
NGNG(;´Д`)<ウゼェ!
0575デフォルトの名無しさん
NGNG普通にコンパイルしたらコンソールアプリにしか
ならないから、とりあえずそれでやりますよ。
でもWindowsってDOSと比較すると「お約束」が
すごく多いですね・・・
0576デフォルトの名無しさん
NGNG0577デフォルトの名無しさん
NGNGおまじないの中身が最後まで説明されてない本は最低
0578デフォルトの名無しさん
NGNG説明が面倒で避けたいからか、判ってなくて説明できないからだよな。
0579デフォルトの名無しさん
NGNGそうだな。
例えば、Hello, Worldプログラムの説明で
#include <stdio.h> の説明は避けたいな
でも、いつかは説明しないと駄目だ。
0580デフォルトの名無しさん
NGNGが多いのじゃないかなぁ。
初心者に的確に簡単に教えることは、上級者に教えるより、深く正確な知識が必要。
つまり、とても難しい。
「おまじない」なんて言葉で逃げている本は、腐ってると判断して正解。
0581五番・サード・名無し
NGNG0582全部が全部とは言わないが
NGNGジャパネットの番組とか見てるとホントそう思うよ。
0583五番・サード・名無し
NGNG夢のじゃぱねっとたかた〜
0584名無しさん@LV2001
NGNG@
ヽlノ / ♪
.〆⌒ ⌒\
/ lノノ)ノ|.ノ http://www.geocities.co.jp/Hollywood-Studio/2461/ohayou.mp3
| | | �U�U|| \
((◯ |. | |'__▽.ソ| .◯)) シ
□|| ̄ ̄||~'†~|| ̄ ̄||□ ャ シ
゚ . ̄| ̄)|\/| |~ ̄ .゚ . カ ャ
\/ミ ミY カ
.| | | |
./ | | \
. \|__|/
| | \_\ ))
⊂二l (/
0585デフォルトの名無しさん
NGNGひとまず報告まで。
http://www.nihen.com/2ch/del.cgi?bo=netgame
//以下メルマガより転載
> 2ちゃんねるのお勧めな話題とネットでの
> 面白い出来事を配送したいと思ってます。。。
> 読者数は34055人
> __________________________________________
>
> こんばんはー、ひろゆきです。
>
> このごろ携帯がほとんど一日中鳴り響いているんですが
> アドレス帳に登録していない人はとらなかったりしてます。。。
> しかしなんでこんなに電話がなってるんですかねぇ。。。
> やっぱり裁判デビューの影響でしょうか?
>
> そんなわけで、2ちゃんねる裁判所デビューが目前なんですが
> (http://yasai.2ch.net/event/index2.htmlイベント板みてください)
> おいらが忙しくなっちゃうんでちょっとの間削除スクリプトを公開することにしました。
>
> 4/11の午後までです。。
> http://www.nihen.com/2ch/index.html
>
> 削除人になりたいなっってひとも練習を兼ねてやってみてください。。。
> http://www.2ch.net/guide/adv.html#saku_rule
> あ、削除人の心得はちゃんと読んでくださいね、、、
>
> んじゃ!
>
>
> __________________________________________
> 発行:ひろゆき [email protected]
> http://www.2ch.net/2ch.html
> 登録・解除 http://www.2ch.net/mag.html
> そんなわけで、今回の配信はおしまい。
> __________________________________________
0586デフォルトの名無しさん
NGNG0587デフォルトの名無しさん
NGNG0588デフォルトの名無しさん
NGNG05892ch
NGNGC言語はなんでC言語と言うの?
AとBはどっかいったの?
なんで?
0590SAGE
NGNGそんな感じ。
http://www.atmarkit.co.jp/icd/root/91/5787491.html
Bの由来は知らん。
05912ch
NGNGわかった
ありがと
0592デフォルトの名無しさん
NGNGそういう由来かと・・・ボソッ
0593いつでもどこでも名無しさん
NGNG@
ヽlノ / ♪
.〆⌒ ⌒\
/ lノノ)ノ|.ノ http://www.hayariki.com/
| | | �U�U|| \
((◯ |. | |'__▽.ソ| .◯)) シ
□|| ̄ ̄||~'†~|| ̄ ̄||□ ャ シ
゚ . ̄| ̄)|\/| |~ ̄ .゚ . カ ャ
\/ミ ミY カ
.| | | |
./ | | \
. \|__|/
| | \_\ ))
⊂二l (/
0594デフォルトの名無しさん
NGNGB は BCPL (Basic CPL) 由来。BCPL の文法は Algol-60
の影響を受けてるらしいけど、私は Algol-60 知らないの
でパス。
DMR 先生の Web Page に BCPL と B のリファレンスマ
ニュアルがあります。
http://cm.bell-labs.com/cm/cs/who/dmr/
0596デフォルトの名無しさん
NGNGwaitpidというのがあるのは知っていますが、使い方がいまいち解りません。
教えて下さい。
int main(){
int ret,ct1;
char cmd[256];
for( ct1 = 0 ; ct1 <= 2 ; ct1++ ){
ret = fork();
switch (ret ){
case -1:
printf("失敗\n");
exit(1);
break;
case 0:
printf("子プロセス\n");
sprintf(cmd,"echo '%d'",ct1);
system(cmd);
exit(1);
break;
default:
printf("親プロセス\n");
break;
}
}
wait();
printf("END\n");
return(1);
}
0597596
NGNG0598デフォルトの名無しさん
NGNG0599デフォルトの名無しさん
NGNG君はmain()を何だと思うんだ?
0600デフォルトの名無しさん
NGNGsignal(child signal, proc);? --or-- sigaction?
0601名無しサンプリング@48kHz
NGNG0602デフォルトの名無しさん
NGNGgetcharは1 文字のみ得ること
0603デフォルトの名無しさん
NGNGhttp://piza.2ch.net/test/read.cgi?bbs=tech&key=986573871
これ立てたの君かね?
>>602
違いがわからないとは言ってないと思われ。
0604デフォルトの名無しさん
NGNGスーバーメインの関数だからでいいのかな?
0605デフォルトの名無しさん
NGNGscanf("%d", &i);
printf("文字 =");
scanf("%*c%c", &a); ←%*cは改行読み捨てってどうして
printf("数値2 ="); これがそうなるのですか?解りません。
scanf("%d",&j); よろしくお願いします。
0606baka
NGNG0607デフォルトの名無しさん
NGNGモノの本とかでは、char a[5]とやっても、アライメントの関係で通常は8バイトとかとられる、
とか書いてあるのですが、gcc -S でアセンブリ調べてみると実際にはそうなっていません。
コンパイラ依存なので当然本とおりにならなくてもいいのですが、興味があります。
実際にどのようにメモリを割り当てるか、ではなく、
どういう方針でメモリを割り当てているのかを知りたいわけです。
識者のかた、よろしくお願い申し上げます。
0608デフォルトの名無しさん
NGNGgccのソースを読む、ってんじゃダメなの?
0609デフォルトの名無しさん
NGNGできればそれは避けたい・・
ついでにいうと、スタックポインタの動き、とか興味あるのですが、
コンパイルのソースを読む以外、どういう情報へのポインタがありますでしょうか?
例えば、X86系で
function(1,2,3)
とかを呼び出すコードをgcc -Sで生成してみると
subl $8,%esp
addl $-4,%esp
pushl $3
pushl $2
pushl $1
call function
addl $16,%esp
とかなるのですが、なんでaddl $16になってしまうのかとかが知りタイのです。
0610デフォルトの名無しさん
NGNGターゲットによって違うよ。
手持ちのgccでちょっと確認してみたが、ディフォルトだと
i386用は4バイトアラインメントで8バイト取られたが
H8用は2バイトアラインメントで6バイト取られた。
0611デフォルトの名無しさん
NGNG-mpreferred-stack-boundary=4 (16バイト) にしてるから
じゃないの。
0612デフォルトの名無しさん
NGNG本来は12を足せばいいんだけど、最適化の関係かな?
i386系の呼び出し規約は、Visual C++の__cdeclと
同じ(浮動小数点の扱いは知らない)だったはずだから、
MSDNライブラリに書いてありますよ。
0613607です
NGNG>>610
それはわかるのですが、単にアライメントだけの問題ではないようなのです。
char buf[5]
とかの配列の大きさを変えていって調べてみたのですが、うちのlinuxでは
char[x]の場合-> 16*(x /16)+24 とかいったわけの判らない増え方をしています。
配列が複数になると妙な相互作用をして関係式調べるのが大変みたいです。
やはり最適化が絡んでるんでしょうか?
>>611
試してみます。gccのオプションはたくさんありすぎてワケわからないのでした。
前にgccのオプション本買ってみたけどオプション羅列してるだけで全然わからんかったです。
>>612
素直に考えると、スタックを戻してるわけで、addl $12,%spcのはずですよね。
最適化というのは、効率のよいアセンブリを生成するように捉えていたのですが、
アセンブラはアセンブリ命令を機械的に実行するわけで、齟齬はおきないものでしょうか?
どうせ破棄されるスタックだから、多少計算が合わなくても速度を優先する・・てなことなのかしらん?
0614デフォルトの名無しさん
NGNGアライメントによってサイズが変わるのではなく、配置アドレスが
変わるのだと考えましょう。例えば8バイトアライメントでは
bufのアドレスは常に8の倍数になるように配置されます。
ところで>>609のコードはcallする前にスタックポインタが
16バイト動いているから addl $16,%esp で正しいんじゃないの?
0615611
NGNGスタックに引数を積む前に addl $-4,%esp してるのを見落
としてますね? これと pushl * 3 で合わせて 16 バイト
スタックに積んでいるので、関数呼び出しから戻った直後に
addl $16,%esp して辻褄が合います。
わざわざ addl $-4,%esp してるのは、スタック変数を 16
バイト境界 (-mpreferred-stack-boundary で変更可能)
にアライメントするため (*1) でしょう。gcc 2.95.2 でた
めしに
-mpreferred-stack-boundary=2
でコンパイルしてみましたが、これだとスタックトップが
4 バイト単位でアライメントされるため addl $-4,%esp
が無くなりました。
---
(*1)
ただし gcc-2.95.2 (mingw) 版はスタートアップルーチ
ンがアライメントを考慮していないので、結局 16 バイト
境界にアライメントされないんだけど。
0616デフォルトの名無しさん
NGNGint a,b,c;
a = 123;
なんとかして、最初の一数字(この場合1)だけを取って、それを他の変数(例えばb)の値にして、
さらに、残りの数字(この場合23)をまた違う変数(例えばc)の値にしたいのですが、
a = 123
b = 1
c = 23
↑
こんな感じに分けたいっす。
どうすれば宜しいのでしょうか?
0617デフォルトの名無しさん
NGNGchar buffer[16];
sprintf( buffer, "%+d", a);
c = strtol( buffer + 2, NULL, 10); buffer[2] = '\0';
b = strtol( buffer, NULL, 10);
君も何か面白いコードを書いてくれ 質問だけじゃあきるから
0618この業界から逃げ出した男
NGNGa=123;
b= a / 100; // 小数点以下 切り捨てだからね
c= a % 100; // 0〜99 まで有効だからね。
こんなんでええんかなぁ。
0619デフォルトの名無しさん
NGNGwhile(a >= i * 10) {
i *= 10;
}
b = a / i;
c = a % i;
0620616
NGNG返信ありがとう御座います。
さっそく試してみます。
がむばっておもしろいコードが書れるように修行するっす。
0621この業界から逃げ出した男
NGNGトリッキーなコードの方が良かったのかな?。
0622デフォルトの名無しさん
NGNG> scanf("%*c%c", &a); ←%*cは改行読み捨てってどうして
> printf("数値2 ="); これがそうなるのですか?解りません。
> scanf("%d",&j); よろしくお願いします。
man scanfと言いたいとこだけど....間違いだけは訂正します。
"%*c"は1文字読み飛ばす制御文字列であり、改行読み捨てではありません。
0623なまえをいれてください
NGNG0624デフォルトの名無しさん
NGNGエディタくらいは動くでしょう。
気合いが入れば、携帯のメールでもコード書くだけはできる。とか言ってみる…
0625623
NGNG実行の仕方も…
エディタってなんでしょうか?
0626デフォルトの名無しさん
NGNG使ったこと無いか?Windowsのメモ帳とか。
実行するにはまずコンパイルという作業が必要。
その作業のためにはコンパイラというツールが必要。
種々あるが、コマンドラインで動くコンパイラもあるから、容量やスペックが劣るマシンでも
何とかなるだろう。
0627623
NGNG0628デフォルトの名無しさん
NGNG逆に質問したいんだけど
ノートパソコンだとどうして障害になると思ったの?
液晶ディスプレイだったりキーボードが本体についてたりすると
何が違ってくるとでも思ったの?
0629デフォルトの名無しさん
NGNGhttp://sources.redhat.com/cygwin/
http://matsu-www.is.titech.ac.jp/~sohda/cygwin/setup11.html
0630623
NGNGいつも使ってたのはWINDOWSじゃなかったし。
どこでプログラミングするのかとかどうやって実行するのかさえ
分かりませんでした。
0631デフォルトの名無しさん
NGNG様な気がする。
0632623
NGNGありがとう。
0633デフォルトのC厨房
NGNG取得したい場合、Delphiだと...
Copy('12.ABC',4,3)
で可能ですが、C++の場合、スマートに取得するには
どうしたらよいのでしょうか?
0634デフォルトの名無しさん
NGNGXString str = "12.ABC";
XString strAbc = str.Mid( 3);
C++ の場合、XString のようなものを最初に作ってスマートにする。
で、このようなクラスライブラリは、出来合いのものがたくさんある。
MFCが数的にはもっとも使われているでしょう。
0635デフォルトの名無しさん
NGNGK&Rの演習1−20から1−24・・・・・。
出来ねえよ!!第一章「やさしい入門」でこの演習かよ!
ここでつまずいた厨房は俺だけじゃないはず・・・・・・。
0636デフォルトの名無しさん
NGNG難しいけど、第1章を何度も読み返せばできる。
根性で頑張れ。
0637デフォルトの名無しさん
NGNGK&R は「C言語の入門書」であって「プログラミングの
入門書」じゃないから、そんなもんだよ。
昔なら K&R を読むなら「ソフトウェア作法」と「UNIX
プログラミング環境」を併読と言うところだけど、さす
がに内容が古いことは否めず。
0638デフォルトの名無しさん
NGNG激しく同意!!
たしかにプログラミング初心者が読む本ではないな。
それなのに初心者にK&R勧める馬鹿の多いこと多いこと。
挫折しろっていってるようなもんだ。
0639デフォルトの名無しさん
NGNGいまどきC言語のみを使う開発ってあるの?
C++やJavaがあるのに・・・
なんかCから始める人はすっごく遠回りになるような
気がするんだけど。
素直に最近の言語学んだほうがいいと思うんだけどな。
0640デフォルトの名無しさん
NGNGK&Rに限らず、この世界の学習法の第一の基本を忘れないようにしよう。
第一の基本:どうにもわからないことは、ほっとけ。時間の無駄。
別の必要な知識が揃うと、わかるようになるから。
0641デフォルト名無し
NGNGうちも1-20、1-21分からんかった。
というか、タブストップって、何だ?
そこが一番のネックだった。。。
あとで答え立読みしたけど、結局わからんかったし…
0642デフォルトの名無しさん
NGNG回りにいない人は独学しちゃ駄目よ。
0643デフォルトの名無しさん
NGNG1-20はタブをスペースに置き換えろってことだろ。
こんな簡単なことをよくあんなに難しく書けると感心。
0644デフォルト名無し
NGNGしかし、後半のn文字云々の所はタブストップの意味を理解していないと実装できないっす。
タブ→スペースは分かったけどね・・・
0645デフォルトの名無しさん
NGNG独学しちゃ駄目なんじゃなくてK&Rが初心者には
完全な独学には向かないって事だろ。
0646デフォルトの名無しさん
NGNG組み込みがあるよ。
0647デフォルトの名無しさん
NGNG0648デフォルトの名無しさん
NGNG第二の基本:とにかく書く。そして実行しろ。
体が覚えるから。
0649なまお
NGNGhttp://web.kyoto-inet.or.jp/people/namao/index.html
0650デフォルトの名無しさん
NGNG偽者とは思うけど、このページは有害度がかなり高いので注意。
数年前にfj.comp.lang.cとかでさんざん叩かれた厨房のページだ。
0651デフォルトの名無しさん
NGNGまだいったことないんですけど、どんな風に有害なんですか?
0652デフォルトの名無しさん
NGNGあったりとか。
0653デフォルトの名無しさん
NGNG件のページから引用。
> 漢字は種類が多いのでcharでは256とおりしか指定できず、
> その倍のサイズを持つ shortでないと表現できません。
これ読んだだけでも、全然ダメ。
- char で 256 通りの数値を表せるとは限らない。
- sizeof(short) == 2 * sizeof(char) とも限らない。
- 文字列を MBCS で扱うときには、あくまでバイト列とし
て扱うし (short なんか使わん)、UNICODE で扱うとき
には、ASCII だろうが日本語だろうが wchar_t で処理
する。wchar_t が short と同一かどうかは、処理系に
よる。
前後を読むと、画面出力時の文字の幅とバイト表現時のサ
イズを混同していたりして、もう何が何だが。読んでも間
違った知識が身につくだけ。
0654通りすがり
NGNG>>653
>- char で 256 通りの数値を表せるとは限らない。
符号無しの場合は256通り以上の数値を表せることが保証されます。
符号付きの場合-127〜+127なので255種類以上ですが、現実には整数の負値の内部表現に
二の補数を使わない処理系はほとんど存在しないので、256種類以上と考えても問題ない
でしょう。
>- sizeof(short) == 2 * sizeof(char) とも限らない。
確かにそうですが、short型が16ビット以上の純二進基数表現であることは保証されます。
すなわち256通りを表現するのに必要な8ビットの倍以上のサイズを持つことが保証されて
います。
>- 文字列を MBCS で扱うときには、あくまでバイト列とし
> て扱うし (short なんか使わん)、UNICODE で扱うとき
> には、ASCII だろうが日本語だろうが wchar_t で処理
> する。
wchar_t型の内部表現がUNICODEかどうかは処理系依存です。しかも、UNICODEを使う
際になぜASCIIが出てくるのか不明です。
>wchar_t が short と同一かどうかは、処理系に
>よる。
そのとおりです。wchar_t = charの可能性もあり、wchar_t型を使って漢字が表現できる
という保証はどこにもありません。
0655デフォルトの名無しさん
NGNG思うんだが?
文脈からして、ASCII は ASCII コードセットではなく、ASCII
文字 (iswascii() が真になる範囲) の意味だろ。
0656通りすがり
NGNG>には、ASCII だろうが日本語だろうが wchar_t で処理
>する。
これは何度読み返してもwchar_tの内部表現がUNICODEで
あることを期待しているとしか思えませんが。
>文脈からして、ASCII は ASCII コードセットではなく、ASCII
>文字 (iswascii() が真になる範囲) の意味だろ。
好意的に見ればね。けど、好意的に見続ければ、C言語会話入門も
それほど悪くないかも。
0657通りすがりII
NGNG>>UNICODE で扱うとき
>>には、ASCII だろうが日本語だろうが wchar_t で処理
>>する。
>
>これは何度読み返してもwchar_tの内部表現がUNICODEで
>あることを期待しているとしか思えませんが。
UNICODEの表現にはwchar_tが必要である、
つまりUNICODE⊂wchar_tを意図してるとしか読めないが。
まぁ処理系によってはwchar_t==charだったりというのはその通り。
0658通りすがり
NGNG>UNICODEの表現にはwchar_tが必要である、
>つまりUNICODE⊂wchar_tを意図してるとしか読めないが。
単にUNICODEを数値として格納できるというだけなら、普通の数値型を使うはず。
敢えてwchar_t型にしているのは、やはりワイド文字定数やwchar.hなどにある関数を
使うことを想定しているのでは?
0659通りすがりII
NGNGそれこそ移植性をまったく無視したソースになりそうだけど。
「UNICODEならばwchar_t」だからといってその逆や裏が必ずしも真じゃないことは
いうまでもないし。
0660デフォルトの名無しさん
NGNG0661デフォルトの名無しさん
NGNGTRON code。
たぶん上位16ビットで文字セットを指定して、下位16ビットで文字を指定する、
みたいなのだと思うけど、鵜呑みにしないように。
0662通りすがり
NGNG>それこそ移植性をまったく無視したソースになりそうだけど。
単なる数値として扱って、ワイド文字定数も既製の関数も使わなければ、処理系
への依存性はまったくなし。
wchar_tは、実行文字集合に依存しない処理に使うもので、処理系に依存しない
UNICODEの処理に使うのは見当違い。
>「UNICODEならばwchar_t」だからといってその逆や裏が必ずしも真じゃないことは
>いうまでもないし。
対偶である「wchar_tでなければUNICODEでない」は、他の数値型でもUNICODEが
使えるので偽。故に元の命題も偽。
0663通りすがりII
NGNGこれは逆じゃない? wchar_tって処理系定義だし、実行文字集合に依存
しないワイド文字定数とかっておかしな気がする。
>>662> 処理系に依存しないUNICODEの処理に使うのは見当違い。
# UNICODEってバリバリに依存してるじゃん。ってのはさておき。
処理系定義の文字集合用のwchar_tとUNICODEという特定の文字集合を
混同するなっつーことね?
>>658> 単にUNICODEを数値として格納できるというだけなら、普通の数値型を使うはず。
>>662> 単なる数値として扱って、ワイド文字定数も既製の関数も使わなければ、処理系
>>662> への依存性はまったくなし。
たとえばunicode_tとかキチンと分けて、必要ならそれ用のライブラリ
を用意すべしと。
# そういえばUNICODEライブラリなんてのはないのかな。
まぁ>>653はそういうところまでは意図せずに、単にcharでは足りない
文字集合の例としてUNICODEを挙げただけのような気もするけど。
0664通りすがり
NGNG>これは逆じゃない? wchar_tって処理系定義だし、実行文字集合に依存
>しないワイド文字定数とかっておかしな気がする。
L'あ'と書けば、内部表現がシフトJISだろうが、EUCだろうが、UNICODEだろうが、もっと
独自の文字集合だろうが、コンパイラとライブラリが吸収してくれるということ。
wchar_tのサイズが足りなくて表現できない場合は致し方ないけど
>> 処理系に依存しないUNICODEの処理に使うのは見当違い。
># UNICODEってバリバリに依存してるじゃん。ってのはさておき。
それはフォントのマッピングや他の文字集合に変換する際の話で、数値そのものの話では
ないでしょう。
>たとえばunicode_tとかキチンと分けて、必要ならそれ用のライブラリ
>を用意すべしと。
そうですね。
unicode_t, shiftjis_t, euc_tとかいう感じで。
そこまでする気がないなら、unsigned intやlongを使う方が、むしろ混乱が少ないのでは?
># そういえばUNICODEライブラリなんてのはないのかな。
Tcl APIの中にはUNICODEとUTF-8用のライブラリが結構そろってるけどね。
>まぁ>>653はそういうところまでは意図せずに、単にcharでは足りない
>文字集合の例としてUNICODEを挙げただけのような気もするけど。
好意的に見ればね。前にも言ったけど、好意的に見続けるのであれば「C言語会話入門」
もそれほど悪いとはいえない。
0665デフォルトの名無しさん
NGNGたとえばchar *********pは使っていいのでしょうか?
0666デフォルトの名無しさん
NGNG特に決まってないし、使っても構わんが、
ポインタポインタ以上データ構造の場合、
データ構造を再考するか、typedefで読みやすくする事をお勧めする。
0667106
NGNGエディタみたいなの作ろうとして早くも挫折モードです。
下方向はうまくいくのですが上とエスケープが効きません。
ちなみに上方向はとりあえずは行数だけ出して古いの押し出す
てな感じでやってるとこです。C言語のプロよろしく
#include<stdio.h>
#include<stdlib.h>
#define Up 0x6b
#define Down 0x6a
#define ESC 0x1b
#define MAX 24
main(int argc,char *argv[])
{
FILE *fp;
char buf[256][256];
int fin=0,fmax=0;
int i,c;
/*引き数無し*/
if(argc!=2){
printf("usage:a filename");
exit(1);
}
/*ファイルオープン失敗*/
if((fp=fopen(argv[1],"r"))==NULL){
printf("can't open");
exit(1);
}
/*全文をbufに代入*/
while(fgets(buf[fmax++],sizeof(buf[fmax++]),fp)!=NULL){
}
/*初期画面*/
for(i=0;i<MAX;i++)
printf("%s",buf[fin++]);
/*ESCが押されるまでループ*/
while((c=getch())!=ESC){
/* j(下)を押した時*/
if(c==Down && fin<fmax){
printf("%s",buf[fin++]);
}
/* k(上)を押した時*/
if(c==Up && fin>MAX+1){
for(i=0;i<MAX;i++)
printf("%s",buf[i+fin-MAX]);
}
}
fclose(fp);
}
0668デフォルトの名無しさん
NGNG> }
ここ、動作は未定義だと思うよ。
つまり、fmaxが2つ増やされる場合もあるだろうし、
buf[0]に何も入らないかもしれない。
while (fget(buff[fmax], sizeof(buff[0]), fp) != NULL) {
fmax++; //サイズチェックもしたほうがいい
}
kを押した時にfinが減らされてないから、期待した通りには動かないね。
ESCは効くと思うけど。
0669デフォルトの名無しさん
NGNGprintfのように不特定数の引数をとる関数って
どうやって定義すればよいのでしょうか?
C#ではたしかparamが使えたと思うのですが
それが通用しません
だれか分かる方がいましたら教えていただけませんか?
0670デフォルトの名無しさん
NGNGC-FAQ 15-5から引用
http://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/C-faq/C-faq-15.html
> 「error: 」という文字列を先頭にエラーメッセージを出力し、改行で終わる関数error()を以下に示す。
> #include <stdio.h>
> #include <stdarg.h>
>
> void error(char *fmt, ...)
> {
> va_list argp;
> fprintf(stderr, "error: ");
> va_start(argp, fmt);
> vfprintf(stderr, fmt, argp);
> va_end(argp);
> fprintf(stderr, "\n");
> }
0671デフォルトの名無しさん
NGNG-------------
char cAftBuf[10];
char cBefBuf[10];
long lData = 0;
// '0'でクリア
memset( cBefBuf, '0', sizeof(cBefBuf) );
// 4バイト分コピー
wsprintf( cAftBuf, "%04d%4.4s", lData, cBefBuf );
0672通りすがり
NGNG間違い
0673デフォルトの名無しさん
NGNG良いんじゃない?
0674デフォルトの名無しさん
NGNG0675669
NGNGありがとうございました。
これで127個も引数をつかわなくてすみそうです。
0676デフォルトの名無しさん
NGNG0677通りすがり
NGNG"%04ld%4.4s"
0678デフォルトの名無しさん
NGNGTCHAR にして wsprintf 使いな。
char なら sprintf 使っとけ。
0679デフォルトの名無しさん
NGNG0680デフォルトの名無しさん
NGNGアクセスってブラウザ作ってる会社?
0681新入社員研修中
NGNGSJISで吐き出させるにはどうしたらいいんですか?
C++禁止です・・・。
0682デフォルトの名無しさん
NGNGnkf -s じゃだめか?もしかしたら"nfk"かもしれん。そういうコマンドが
あるはずだが?
0683新入社員研修中
NGNG8時ぐらいから探し始めて、
今さっきここにあるのを見つけました。どうもありがとうございます。
http://www.rsch.tuis.ac.jp/~mizutani/online/kanji/index.html
しかしこれに限らず初心者には苦しいタスク山盛りで・・・。
うう、プログラマキツイ・・・。
0684デフォルトの名無しさん
NGNG>TCHAR にして wsprintf 使いな。
WCHARだろ
0685デフォルトの名無しさん
NGNG0686( ´∀`)さん
NGNG0687デフォルトの名無しさん
NGNGおまえはヴァカだ
0688687に非ず
NGNGコンパイルの仕方によってはまずくない。
でも、少なくともこういう大勢の人の目に触れる場では、
TCHAR szHoge[]; wsprintf(szHoge, ...);
char szHoge[]; sprintf(szHoge, ...);
の違いを意識してお話をしましょう、という話。
684は論外。
0689デフォルトの名無しさん
NGNGint scanf( const char *format [,argument]... );
int wscanf( const wchar_t *format [,argument]... );
TCHARを使うなら_tscanf
0690689
NGNGint wsprintf(
LPTSTR lpOut, // pointer to buffer for output
LPCTSTR lpFmt, // pointer to format-control string
... // optional arguments
);
ということでTCHARで正しい
0691( ´∀`)さん
NGNG1行で
0x000080番地(関数のポインタ)に飛ぶ方法教えてください。
0692デフォルトの名無しさん
NGNGか?
0693通りすがり
NGNGそれを言うなら、
((void(*)(void))0x00000080)();
0696NoNoChan
NGNG#include <stdio.h>
void main(void)
ですか?
main ()
とかなっている本が大半なのですが、学校で習っているのは、
void main(void)
なんですが、どうしてなのでしょうか?
0697デフォルトの名無しさん
NGNGint main(void)
int main(int argc, char **argv)
int main(int argc, char *argv[])
(ただし argc, argv の変数名は何でもいい)
が正解。規格では関数定義において型を省略した場合には int、
引数を省略した場合には void と仮定されることになっているの
で main() は int main(void) と同じで、これも規格準拠。
void main(void) で動く処理系も多いと思うが、これは規格違
反。別の ANSI C 準拠の処理系でコンパイルすると、終了時に
プログラムが誤動作するかもしれないし、コンパイル時に鼻から
悪魔が出てくるかもしれない(このような処理系の動作は規格準
拠)。
まぁ標準規格はあくまで指針の一つに過ぎないが、従っておくと
良いこともある。特に ANSI C (C89) は大部分の処理系が準拠
している規格なので、この規格に従ってコードを書けば、自動的
に大半の処理系で動作が保証される点が大きい。
必要なら規格に違反しても構わないが、その場合には処理系のド
キュメントを調べて動作を確認し、また移植性が落ちるというデ
メリットを受容すること。
0698仕様書無しさん
NGNGCP/Mでは((void *())0)();って良くやってたな。
0699通りすがり
NGNG>で main() は int main(void) と同じで、これも規格準拠。
それは C++の話で、Cの場合は引数の型と個数を一切チェックしない。
C++で言えば、int main(...)と同じ。
0700デフォルトの名無しさん
NGNG0701NoNoChan
NGNG家で学校で習ったことを復習するときは、
int main(void)
って打ってやることにします。
void main(void)って先生間違っているんですね。
きちんとしたやつで教えて欲しい。
ありがとうございました。
0702( ´∀`)さん
NGNGはい。そうです。K社(だったと思う)で出てました。
関数を変数と見たてて代入とか、いろいろやって見たのですが
結局わからなかったので、聞いてみました。
692,693の答え聞いても完全に理解できなかったです。
詳しく教えてもらえますか?
C始めて3年経つ(まぁ、学生なのでマターリやってた)のですが、
今回ので、自分の未熟さを知らされました。
K&Rの本探して勉強して見ます。
0703692
NGNG692を書いたヴァカだが(普段こんなの使わないよね)
typedef void (*func)(void);
((func)0x00000080)();
これでもわかんないか?
関数型にキャストしてるわけ。
0704ど素人
NGNG--------------------構成: test - Win32 Debug-----------
リンク中...
LIBCD.lib(crt0.obj) : error LNK2001: 外部シンボル "_main"
は未解決です
Debug/test.exe : fatal error LNK1120: 外部参照 1
が未解決です。
link.exe の実行エラー
が出て、コンパイルは出来てもビルド、実行が出来ません。
これはどうすれば解決できるのでしょうか?
0705デフォルトの名無しさん
NGNG1の書き込みをちゃんと見た?
VC++は別のスレで。
0706デフォルトの名無しさん
NGNGVisualC++相談室
http://piza.2ch.net/test/read.cgi?bbs=tech&key=970607517
0708( ´∀`)さん
NGNGなるほろ、キャストでしたか。
わかりました。
ありがとうです
0709デフォルトの名無しさん
NGNG0710>>709
NGNG0711デフォルトの名無しさん
NGNGコンパイル速度メチャ速
これより速いのあったら教えてくれ
0712名無しさん
NGNG質問です。
Windowsでソケット通信をしたいのですが、
Lanボード(カード)が複数ある場合、各々のIPアドレスやNetMaskの取得の仕方
を教えてください。
コンパイラは、MicroSoft VisualC++ 6.0です。
0713デフォルトの名無しさん
NGNGWSAIoctl()でSIO_GET_INTERFACE_LISTを使う。
ただしWinSock2以上が必要。
WinSock1.1だとどうしらいいのかは僕も教えて欲しいです。
0714名無しさん
NGNGコマンドラインから route print
で何やらとれるみたいですが、よくわかりません。
詳しい人いますか?
0716713
NGNGrouteコマンドはルーティングテーブルを表示するコマンドみたいですね。
ネットワークインターフェイスの一覧を取るのはipconfigでいいと思う。
で、要はその実装でしょ?
http://www.cyberport.com/~tangent/programming/winsock/examples/getifaces.html
ここが参考になりますよ。(スレ違いか?)
0717デフォルトの名無しさん
NGNGWinSock1.1 で、古いWindows98でも動かす必要があるなら
snmp API でとるしか公開されている方法は無い。
SNMP API の使い方は Platform SDK かなんかのサンプルでも
見て。
0718デフォルトの名無しさん
NGNGchar HENSUU;
に入れるにはどうしたらいいんですかね?
0719通りすがり
NGNG処理系によっては代入できるけど、原則的には不可能。
そもそも、'12'がどんな値になるかも分からなければ、何ビットを必要とするのかも分からない。
確実に言えるのは、int型のサイズ以下だということだけ。(文字定数はint型だから)
0720デフォルトの名無しさん
NGNGありがとうございます。
今日、上司に「やり方考えといて」とか言われたんですけど
やっぱできないですよね・・・。
0721711>715
NGNGライセンスの詳細はよくわかりませんが自由に落とせます。
TurboC++1.01/C2.0/TurboPascal5.5など
DOS版なので当然セグメントやらの制限はありますよ
0722デフォルトの名無しさん
NGNG'12'が定数になるんか?"12"でなくて。
0723711>721=715
NGNG昔はよく使ったけどねぇ。
あの限られた環境としてはよくできてたと思うけど、今やもう。
0724デフォルトの名無しさん
NGNG定数('12')ってのが、何を表現したいのかわかんない。
char型(-125〜126)の整数12って意味なら、
#define TEISUU 12
char HENSUU = TEISUU;
でいいけど。
0725通りすがり
NGNG>char型(-125〜126)の整数12って意味なら、
何か別の言語の話ですか?
0726デフォルトの名無しさん
NGNGchar HENSUU; <- char
HENSUU が1バイトしかなくて良いわけないじゃん。
0727デフォルトの名無しさん
NGNGint cc;
long count=0;
while(((CC=getchar()!=EOF){
if(count&0x0f1==0x001)
printf("\n%06lx : ",count&~0x0fl);
count++;
}
}
この本何も解説ないんだけど。何でDUMPできるの。
if(count&0x0f1==0x001)てなんでこんなことするの。
count&~0x0flてなんでこんなことするの。
単にprintf("%x",cc)だけでいいような気がするのに。
わからん。初めてのC
0728デフォルトの名無しさん
NGNG'12'はconst intですらないぞ。
0729通りすがり
NGNGCCがハード的にダンプしてくれる出力ポートを表すんじゃないの?
>if(count&0x0f1==0x001)てなんでこんなことするの。
きっとprintfを実行させたくないので、コメントアウトの代わりに使ったんじゃない。
0730通りすがり
NGNGなぜダンプできるのかわかりました。
きっと上の方でこんな定義があるのでしょう。
#define CC *(char*)0
これならコアダンプを出力できます。
0731デフォルトの名無しさん
NGNG初めてのC不親切すぎ。あまり評判よくない。
DUMPの解説したプログラムないのかな?
0732デフォルトの名無しさん
NGNGHENSUU が1バイトしかなくて良いわけない
という理由(あと日本語も)がよくわからない
白痴?
0733デフォルトの名無しさん
NGNG0734デフォルトの名無しさん
NGNGどこがフリーだよ?
0735デフォルトの名無しさん
NGNG簡単なDUMPプログラムの作り方おしえて
簡単なDUMPプログラムの作り方おしえて
簡単なDUMPプログラムの作り方おしえて
簡単なDUMPプログラムの作り方おしえて
簡単なDUMPプログラムの作り方おしえて
簡単なDUMPプログラムの作り方おしえて
0736デフォルトの名無しさん
NGNG#include<stdio.h>
int main(void);
{
printf("うんこたれ\n");
return(1);
}
0737デフォルトの名無しさん
NGNG市ね
0738中途半端くん
NGNG#include <stdio.h>
#include <fcntl.h>
main(int argv,char *argc[])
{
int fd,ad=0;
unsigned char c;
fd=open(argc[1],O_RDONLY);
while(read(fd,&c,1)>0)
{
if(ad%16 == 0)printf("\n%04x: ",ad);
printf("%02x ",c);
ad++;
}
printf("\n");
}
0739736
NGNGゴメソ
じゃあ真面目に。
1.ファイル開く
2.ファイルからデータを読み込む
3.読み込んだデータを16進数で出力
4.データがなくなるまで2〜3を繰り返す
5.ファイルを閉じる
0740デフォルトの名無しさん
NGNGodだろ。
0741デフォルトの名無しさん
NGNGod?
おど?
0743デフォルトの名無しさん
NGNG目ぇ付いてるか? '1'と'l'は違う字だぞ。
0744デフォルトの名無しさん
NGNG0745ウォーフ
NGNG0746デフォルトの名無しさん
NGNGから、Borland C++ Compiler 5.5 をダウンロードしました。
アップデートがあったので、ダウンロードして、
インストールしました。しかし、bcc32.exeのバージョンが
5.5から5.51に代わりません。どうしてなのですか?
0747デフォルトの名無しさん
NGNG<常識>
PATHは大丈夫か〜〜〜???
0748デフォルトの名無しさん
NGNG0749746
NGNGどのようにすればいいのですか?
0750デフォルトの名無しさん
NGNGAB-BAを求めるプログラムを書きこシテチョ!
0751デフォルトの名無しさん
NGNGAB-BAを求めるプログラムを書きこシテチョ!
0752デフォルトの名無しさん
NGNG0753デフォルトの名無しさん
NGNG中級者がどんなもんなのかわからないが
http://www.gulf.or.jp/~damayan/
0754デフォルトの名無しさん
NGNG(1)
strcpy( char * p, const char * q) {
char * r = p;
while( (*r++ = *q++) != '\0');
return p;
}
(2)
strcpy( char * p, const char * q) {
register size_t c = 0;
while( (p[c] = q[c]) != '\0') ++c;
return p;
}
0755デフォルトの名無しさん
NGNGAPIでなんでもかんでもてえっかんじかね。
0756デフォルトの名無しさん
NGNG0758通りすがり
NGNGターゲット依存
0759デフォルトの名無しさん
NGNGそんなもん測ってみりゃいいじゃん。人に聞いてどうするの?
0760通りすがり
NGNGデバッガも表示装置もタイマもない環境がある。
(1)と(2)の実行速度が響いてくるのは、むしろそういった
環境の方が多い。
逆アセンブルして、実行サイクル数を数えるのが一番確実。
0761デフォルトの名無しさん
NGNG答(1)
0762中途半端くん
NGNGうちのペンティアム3の機械でgccでO2つけてやってみたら
whileの中は(2)の方が1命令分短かった。
ただ、将来最適化のアルゴリズムがもっと賢くなったら
多分(1)のが速いと思う。
0763通りすがり
NGNGR4000系のような純粋なRISCの場合は、おそらく(1)の方が速いよ。(試してないけど)
(1)はループあたり加算が2回なのに対して(2)は3回必要になるからね。
strcpyじゃなくて、wcscpyとかならもっと顕著になるはず。
CPUのアドレッシングモードにどんなのがあるかでほぼ決まってくると思うけど。
0764>762
NGNG命令数とスピードは直接繋がらないよ
0765759
NGNGそんなにキビシイ環境もあるのか。
そしたら10^5回くらいループで回して腕時計で計ったらダメ?
命令コード数で測るのは有効だと思うし、この例ならそれで充分だと
思う。でもキャッシュの効き方とかで速度変わったりすることも多いから、
何らかの形で実測するべきだと思うよ。
0766760
NGNG腕時計やストップウォッチで計ろうにも、表示装置(最悪の場合はLEDすら)
なかったりするから、どこからどこまで計ったらいいのかさっぱりわからない。
そういう環境の場合は、大抵キャッシュもなければバス調停もないから命令
サイクル数が即実行速度になる。
0767760
NGNGキャッシュの効き方とかはリンクする際のモジュールの配置順序とか、
関数をキャッシュラインに整列させるかどうかといったリンク時の問題
がほとんど。あとはできるだけ少ないキャッシュラインで済ませること
ぐらいだけど、C言語レベルのコーディングとはそもそも直接関係が
ないと思うけど。
0768くみこ
NGNGhttp://piza.2ch.net/test/read.cgi?bbs=tech&key=988084737
0769デフォルトの名無しさん
NGNG0770754
NGNGP6系のCPUならアドレス計算のペナルティが何故か無いので(2)のほうが
クロック数が少なくて済むのですが,レジスタを一本使うしchar型でなく
何らかの構造体ならアドレス計算に乗算が必要なので(1)のほうが良いかも
なぜこんな質問なのかというとstrcpyとstrlenとひとつにした
関数を書いていて
while( (*p++ = *q++) != '\0' ) ++c;
p++, q++ を削れないかとふと思ったからです(^-^;
素直に書いたほうが良いのですね
最近は命令よりもL1,L2キャッシュに収めるほうが重要ですが...
0771754
NGNGinc di // p++ u-pipe
inc si // q++ v-pipe
でペナルティ 0 ですね (藁
アホだ..
0772通りすがり
NGNG標準ではないけどstpcpyっていう関数があるよ。(Borlandだけかな)
'\0'の格納位置を返すので、長さが欲しいのなら引き算するだけ。
そもそもP6系でなぜそんなにシビアになるのかがわからない。
それに、P6系ってレジスタ少なすぎ。旧式アーキテクチャのポンコツCPUと
しか思えないよね。
0773ど素人
NGNGいいでしょうか?
↓の状態にハマって抜け出せません。
4つのchar型配列をメンバに持つ構造体。各メンバ(配列型)の
先頭[0]に0x00を入れることで既存データを削除しようとする
と実行中エラーが出て終了になる。
help me...
0775氷川きよし
NGNG鬱だ死のう。
0776766
NGNG出力ポートだけでもあれば、最悪の場合、ロジックアナライザとかで
計るという手はあるけどね。
0777759
NGNGもしよろしければ、出力ポートもない場合のデバッグ手法を教えて
いただけないでしょうか。
0778デフォルトの名無しさん
NGNGメンバの先頭に0x00を入れるのは間違ってないけど、エラーになるのはやり方が悪いんじゃない。
それだけじゃわからん。
0779デフォルトの名無しさん
NGNG比較するのか決まってるんですか?
日本だとunsigned charの方が都合がいいと思うけど、
英語版コンパイラのstrcmpがsignedで比較されてたらと思うと、
夜も眠れません。
0780デフォルトの名無しさん
NGNG「>>半角数字」の書き換えとリンク張りの実装がみっともないのしか出来ない・・
bufにレスの本文を読み込んであって
1. >>の部分のタグをメモリ上で置換(<a name="レス番号">みたいなのを全レスに貼り付けてある)
2. リンク貼りは書き込みながらタグを付加
って感じになってる。
int WriteRes(char *writing, FILE* htmlfp)
{
char ch;
char *start_url, *end_url;
if(!ReplaceRef(writing)) {
return 0;
}
end_url = writing;
start_url = strstr(end_url, "http://");
while (start_url!=NULL) {
*(start_url++) = '\0'; //文字列を普通の文とURLとに分割、httpのhに'\0'を上書きしてる
fputs(end_url, htmlfp); //URLの手前まで出力
end_url = FindEndUrl(start_url);//urlの終端の次の文字を探索
ch = *end_url; //その文字をchに一時保存
*end_url = '\0'; //URLを抽出、頭のhは抜けてる。hは↓で手で出力
fprintf(htmlfp, "%s%s%s%s%s","<A HREF=\"h",start_url,"\" TARGET=\"_blank\">h",start_url,"</A>");
if (ch=='\0') { //文末がURLだとカンマ置換したときに上書きされなかったのがくっつくから
break;
}
fputc(ch,htmlfp);
start_url = strstr(++end_url, "http://");
}
fputs(end_url, htmlfp);
return 1;
}
0781デフォルトの名無しさん
NGNG{
char *StartTag, *EndTag, *StartRefResNo, *EndRefResNo;
char buf[MAX_SIZE_RES];
StartTag = strstr(writing, "<a");
while(StartTag != NULL) {
if((StartRefResNo = strstr(StartTag, "&st="))==NULL)
return 0;
StartRefResNo += 4;
EndRefResNo = StartRefResNo;
while(isdigit(*EndRefResNo))
EndRefResNo++;
*EndRefResNo = '\0';//ResNoの切り出し
buf[0] = '#';
strcpy(buf+1, StartRefResNo);
if((EndTag = strstr(EndRefResNo+1, "\">"))==NULL)
return 0;
*(StartTag + 9) = '\0';
strcat(buf, EndTag);
strcat(writing, buf);
StartTag = strstr(EndRefResNo, "<a");
}
return 1;
}
0782デフォルトの名無しさん
NGNG書き直したいんだけど、どっから手を付けるべきか分かんない。。
0783デフォルトの名無しさん
NGNGerrorのチェックいい加減だし。。
0784デフォルトの名無しさん
NGNG> strcmpやmemcmpは、unsigned char、signed charのどっちかで
> 比較するのか決まってるんですか?
charです。
charがsignedかunsignedかどうかはコンパイラに聞いてください。
0785通りすがり
NGNG> strcmpやmemcmpは、unsigned char、signed charのどっちかで
> 比較するのか決まってるんですか?
strcmp, strncmp, memcmpは各バイトをunsigned charとして比較します。
>>784
ネタにしてはたちが悪いです。
0786デフォルトの名無しさん
NGNG#define X_SIZE 40
#define Y_SIZE 60
char graphics[X_SIZE / 8][Y_SIZE];
#define SET_BIT(x,y) graphics[(x) / 8][y] |= (0x80 >> ((x) % 8))
int main(){
int loc;
void print_graphics(void);
for(loc = 0; loc < X_SIZE; ++loc)
SET_BIT(loc,loc);
print_graphics();
return 0;
}
void print_graphics(void)
{
int x,y;
unsigned int bit;
for(y=0; y < Y_SIZE; ++y){
for(x = 0; x < X_SIZE / 8; ++x){
for(bit = 0x80; bit > 0; bit = (bit >> 1)){
if((graphics[x][y] & bit) != 0)
printf("x");
else
printf(".");
}
}
printf("\n");
}
}
//意味不明、理解不能、俺厨房
0788766
NGNG出力ポートも何もない場合、まずはPC上で(PC用のコンパイラを使って)ロジック
の検証をする。後は、そのハードが備えている周辺デバイスの振る舞いを調べるのと
並行して、必要ならロジックアナライザでアドレスバスとデータバスのログをとって
頭の中でオペコードを同時通訳しながらデバッグしたこともあったっけ。
基板の引き回しとの相性とかで、実機で起こらない現象を調べるときとかは、ICE
も何も使えないので、こんな方法を使うしかない。それでもロジアナをつなげられれば
ましな方。
0789デフォルトの名無しさん
NGNGをご存知でしょうか?
探しても見つからないんです。
0790759
NGNGうおーん。ソフトのデバッグというよりは、ほとんどハードのデバッグみたいですね。
ロジアナがつながらないときは... 一つ一つ仮説を積み上げていって作業するんでしょうね。
当方ゲームプログラマで「PS2でアセンブラコーディングしてるから、ずいぶん組み込みより
だよネ」とか勝手に思ってたんですが、全然認識が甘かったです。
貴重な体験談をどうもありがとう。
0791デフォルトの名無しさん
NGNGp=q+1 とかだと楽しそう…。(^^;
あと、(1)だけど、「const char」て、
インクリメントして、いいんでしたっけ…?
って、ネタなので、あまり気にしないで下さい。
0792デフォルトの名無しさん
NGNG> インクリメントして、いいんでしたっけ…?
ネタだよね…?
> って、ネタなので、あまり気にしないで下さい。
って、ほんとにネタかい!
0793デフォルトの名無しさん
NGNGもう少し、無駄を省けそうな気もしますが、こんな感じです。
int strcpy ( char *p , char *q ) {
int i , j ;
char *r ;
for ( r = q ; *r ; r++ ) ;
j = i = r - q ;
for ( p = p + j++ ; j ; j-- ) {
*p-- = *r-- ; }
return ( i ) ; }
ついでに、本当は
size_t strcpy ( char *p , const char *q ) {
size_t n ;
n = strlen ( q ) ;
memcpy ( p , q , n + 1 ) ;
return ( n ) ; }
これで、ほとんどロスはないですし、環境依存もなく綺麗です。(^^;
って、またネタなので、以下同文。
0794791&793
NGNG0795通りすがり
NGNG文字列を二回も走査するのにどこがロスがないというの?
それに後の方は関数を呼び出す際のロスがかなり大きい。関数呼び出しの際のコストを
甘く見てない?
0796通りすがり
NGNG0797通りすがり
NGNGゲーム機でもロット依存性を評価するときとかは実機でないとできない
ので、似たようなことやるでしょう。
64にロジアナをつないだときはさすがにめげたけどね。
0798791&793&794
NGNG何となく、自分がアホっぽく見えたので、マジレス。
size_t strcpy ( char *s1 , const char *s2 ) {
size_t n = 0 ;
while ( *s1++ = *s2++ ) n++ ;
return ( n ) ; }
環境依存もあるけど、strcpyを延長したものなら、これでOK。
0799anonimity
NGNGint Coins[]={500,100,50,10,5,1};
#define ASIZE(sizeof Coins/Coins[0])
main()
{
int NoOfCoins[ASIZE];
int Price,Payment,Change, i;
void CompChange(int, int[]);
while(scanf("%d %d",&Price,&payment)==2)
{
Change=Payment-Price;
if(Change>0)
{
CompChange(Change,NoOfCoins);
printf("turisen ha %d yen\n",Change);
for (i=0;i<ASIZE;i++)
if (NoOfCoins[i]>0)
printf("%4d yen kouka:%4d mai\n",Coins[i],NoOfCoins[i]);
}
else if(Change<0)
printf("%d yen fusoku\n",-Change);
else
printf("tyoudo \n");
}
}
void CompChange(int Rem,int NC[])
{
int i;
for (i=0; Rem>0; i++)
{
NC[i] =Rem / Coins[i];
Rem %= Coins[i];
}
for ( ; i<ASIZE; i++)
NC[i] =0;
}
Would you mind telling me the reason of compile error in 5 line?
error message;
badly punctuated parameter list in '#define'
0800gentleman
NGNGYou need a whitespace between ASIZE and (sizeof Coins/Coins[0]) , I think.
Tte, nande eigo nanja goruaa!!
0801anonimity@799
NGNGThank you for pointing out!
You correctly spotted the cause of the error.I have compiled the source code.
Though I look up my text,I can't find out a need of "a whitespace".
I have been learnig on C programing.----beginner.
>Tte,nande eigo nanjiagoruaa!!
Sorry,I am poor at Japanese.What meaning?
MORE THANKS.
0802デフォルトの名無しさん
NGNG0803sage
NGNG#define DAT_BIT_SIZE ( 8)
#define CRC_BIT_SIZE (16)
/* CCITT-CRC = X16+X12+X5+1 */
#define GENERATION_POLYNOMIAL ((0x01L<<(16))|(0x01L<<(12))|(0x01L<<( 5))|(0x01L<<( 0)))
unsigned short int CalculationOfCRC16( unsigned char *SourceBuffer,
unsigned char DataSize){
unsigned short int ResultData = 0xFFFF;
unsigned char SourceData = 0;
unsigned short int i;
int j;
for(i=0; i<DataSize; i++){
SourceData = *SourceBuffer++;
for(j=(DAT_BIT_SIZE-1); j>=0; j--){
if(((ResultData>>(CRC_BIT_SIZE-1))^(SourceData>>(DAT_BIT_SIZE-1))) & 0x0001){
SourceData=SourceData<<1;
ResultData=ResultData<<1;
ResultData^=GENERATION_POLYNOMIAL;
}else{
SourceData=SourceData<<1;
ResultData=ResultData<<1;
}
}
}
return ResultData;
}
0804デフォルトの名無しさん
NGNGstruct node *left; /* 左枝 */
struct node *right; /* 右枝 */
char *word; /* ノードに対する単語 */
};
とした場合のツリー構造の単語を表示する以下の関数
void print_tree(struct node *top)
{
print_tree(top->left);
printf("%s\n", top->word);
print_tree(top->right);
}
この再帰の表現がイメージできません。
誰か教えてください。
0805デフォルトの名無しさん
NGNGイメージできんて言われても。。
実際にtreeの図を書いて辿ってみれば?
0806>804
NGNG0807804
NGNGvoid print_tree(struct node *top)
{
if(top == NULL)
return;
print_tree(top->left);
printf("%s\n", top->word);
print_tree(top->right);
}
0808デフォルトの名無しさん
NGNG配列も0,1,2に格納されないで、0,2,4に格納されます。
どなたか、解決方法教えてください。
#include <stdio.h>
#define N 5
void main(void)
{
int j;
int point[N];
char po;
for(j=0; j<N; j++){
point[j]=0;
printf("%d番は?a:40ポイント b:35ポイント c:30ポイント",j);
scanf("%c",&po);
switch(po){
case 'a':
point[j]+=40;
break;
case 'b':
point[j]+=35;
break;
case 'c':
point[j]+=30;
break;
default: /* 変な文字を入力した場合 */
printf("\n入力エラー!\n");
break;
}
}
printf("1 番の合計ポイント %d\n",point[0]);
printf("2 番の合計ポイント %d\n",point[2]);
printf("3 番の合計ポイント %d\n",point[4]);
}
0809cafe
NGNG>scanf("%c",&po);
scanfの使い方が間違っている。入力には改行文字も含まれるので
aを入力すると"a\n"がバッファに入る。scanfで一文字しか
取り出していないから、次のループでpoに改行文字が入り
配列1,3,5が入力エラーとなっている模様。
poをchar po[256];としてscanf("%s",po);でとりあえずいい。
あとswitch(po[0])で参照。ずいぶんアバウトなコードだが。
>>804
ツリー構造がわからないの?再帰が分からないの?
0812たけ
NGNGその入力頻度(A=1文字、B=1文字・・・)というふうに表示させる
プログラムの作り方わからないのですがどなたか教えて下さい。
まだC言語の知識がまだ乏しいので・・・。
どうか、お願いします。
0813デフォルトの名無しさん
NGNGどういった書き方をするのが良いのでしょうか?
とりあえず、自分は以下の方法で回避したのですが
char *test_menu[] = {
"x7fSELECT",
// "x7fAUTO LOAD", /* これだと'x7fA'と認識されてwarningが出る */
"x7f" "AUTO LOAD", // とりあえずこれで回避
"x7fTEST",
};
/* x7fは特殊記号扱いのオリジナルの文字 */
この""の連続をコンパイラが受け付けてくれる環境だったので、
上記の書き方で回避できたのですが、普通はこういった場合
どういった記述をしますか。
0814デフォルトの名無しさん
NGNG例えば以下のような配列があったとして・・
char array[100];
array[0] = 'a';
array[1] = 'b';
array[2] = 'c';
array[3] = '\0';
この配列を全部消してまったくの初期の状態(配列を宣言しただけの状態)
に戻したい場合どうしたらよろしいのでしょうか?
こんな感じ
↓
array[0] = 不定;
array[1] = 不定;
array[2] = 不定;
array[3] = 不定;
なんか特別な関数でもあるのでしょうか?
0815デフォルトの名無しさん
NGNG隣接する文字列リテラルは連結されるってのは標準化されてるんだから
気にしなくてオケ。
0816813
NGNG全て"\x7f〜" の書き間違いでした。(痛
>>815 さん、どうもです。
とりあえず上記のやり方でいってみます。
ところで、ここからは余談になりますが、
隣接する文字列を連結してくれない環境の場合、
他にどういった記述方法が考えらるでしょうか?
0817デフォルトの名無しさん
NGNG一度使用した文字列 char array[100] を再利用するために
空の状態にしたい、という質問だと解釈します。
ならば
array[0]='\0';
で array は空の文字列になりprintf しても何も出力されません。
本当に不定にするのなら rand() でも使いなされ。
用途が思い浮かばないが。
0818814
NGNGなるほど!
さっそく試してみます。
ありがとうございました。
0819デフォルトの名無しさん
NGNGAも16進で書く。適切とは思えんけど。
0820デフォルトの名無しさん
NGNG815氏の言う通り、標準化されているのでほぼ問題ないはずだけど、
万が一連結不能なCで書く場合、私なら普通に見えるアスキーコード
を使っちゃう。見やすさ命。
\x7f はメニューのカーソルに見えるが、
そのまんま '>' とかに当てておき、表示ルーチンで '>' を
本来の文字とかグラフィックに置き換えて作画するとか。
0821820
NGNG0822デフォルトの名無しさん
NGNG0823デフォルトの名無しさん
NGNG配列や構造体の初期化は
memset(array,0,sizeof(array));
としてゼロを並べるのがいいよ。
この方が汎用性が高いから。
int a[10];
char b[5][10];
struct AAA c;
の場合でも、それぞれ
memset(a, 0,sizeof(a));
memset(b, 0,sizeof(b));
memset(&c,0,sizeof(c));
と書ける。
0824>816
NGNG"\177AUTOLOAD"とか。
0825デフォルトの名無しさん
NGNGprintf(" %d %d\n",i,a[i]);
sort(point);
for(i=0; i<N; i++)
printf(" %d %d\n",i,a[i]);
}
sort(昇順に並び替え)した時に、
a[i]の値は昇順になるのですが、iの値もそれと対比させて、
出力するにはどうすればよいのでしょうか?
0826デフォルトの名無しさん
NGNG例えば、構造体
struct{
int a;
int index;
}b[N];
を作って、メンバaに配列a[]の値を、メンバindexには0,1,2,3・・・を入れていく。
b[0].a = a[0];
b[0].index = 0;
b[1].a = a[1];
b[1].index = 1;
・
・
・
b[N].a = a[N];
b[N].index = N;
それで、配列b[]をメンバaでソートする。
メンバindexには元の順番が残っている。
0827デフォルトの名無しさん
NGNG言語仕様上書けないようなのですが、
どうしても書きたいんです。
トリッキーな書き方でも良いので教えてください。
0828デフォルトの名無しさん
NGNGマクロでいいんでは。#define B00010010 0x12 とか。
0829827
NGNGどうすればよいでしょう?
0830通りすがり
NGNGとりあえず8進表記にして、シフト演算と論理演算で2進数に変換すれば?
例えば、話を簡単にするために2桁にすると、
#define B(n) ((0##n>>2)&2|(0##n&1))
のようにすれば、B(00), B(01), B(10), B(11)という書き方で2進数が使える
ようになるよ。8進数にするのは少しでも桁数を多く使えるようにするため。
もちろん使い方を間違って、B(12)とかしてもエラーにならないので危険だけど。
0831デフォルトの名無しさん
NGNG自動的に
#define B00000000 0x0
#define B00000001 0x1
#define B00000010 0x2
#define B00000011 0x3
:
:
というヘッダファイルを出力するプログラムを書いて、それをincludeする。
0832827
NGNG実は32bitくらいの2進数を書きたいんです。^^;)
無理かなぁ。
0833デフォルトの名無しさん
NGNG別に831のやり方でいいんじゃない?(藁
ほんの120Gのinclude fileで
0834通りすがり
NGNG830の方法だとニブル単位かバイト単位に区切って引数を渡すしかないですね。
B(10000000,10101000,00110000,00000001)という感じで。むしろこの方が
見やすいかも。
831の方法の場合、翻訳限界さえ許せば原理的には何ビットでもできそうだけど、
すごいヘッダファイルになりますね。
0835デフォルトの名無しさん
NGNGアホかおまえら・・・(w
ふつーawkやperlかなんかでプリプロセスするだろ。
0836デフォルトの名無しさん
NGNGそれだと827の希望通りにはならない。
0837835
NGNGhextoi("0xabcd_ef01") -> 0xabcdef01
bintoi("b0000_0100_1000") -> 72
0838827
NGNGB(10000000,10101000,00110000,00000001)
これ結構イケてますね。確かに区切ったほうが見やすいです。
bintoi("b0000_0100_1000") -> 72
これだと、関数になっちゃう?
重いのはヤダなぁ。
マクロ内でパースするとなると、上と同じになるかな?
0839デフォルトの名無しさん
NGNG#define B2(b,a) ((B1(b)<<8)|B1(a))
#define B3(c,b,a) ((B1(c)<<16)|B2(b,a))
#define B4(d,c,b,a) ((B1(d)<<24)|B3(c,b,a))
0840デフォルトの名無しさん
NGNG| (0##n>>22)&2048 | (0##n>>20)&1024 | (0##n>>18)&512 | (0##n>>16)&256 \
| (0##n>>14)&128 | (0##n>>12)&64 | (0##n>>10)&32 | (0##n>>8)&16 \
| (0##n>>6)&8 | (0##n>>4)&4 | (0##n>>2)&2 | (0##n&1) )
で、16bitまでOKですね。
8進定数は、何bitまで書けるんだろう?
0841デフォルトの名無しさん
NGNG自動的に ヘッダファイルを出力するプログラムを書いて、
#define B32(s1,s2,s3,s4) (long)((B16(s1,s2)<<16)|B16(s3,s4))
#define B16(s1,s2) (int)((B8(s1)<<8)|B8(s2))
#define B8(s1) (char)(B##s1)
#define B00000000 0x0
#define B00000001 0x1
#define B00000010 0x2
#define B00000011 0x3
:
:
出てきたファイルに、最初の三行を挿入し、include。
これで、B8(n) B16(n,n) B32(n,n,n,n) の3種類はOK。(n=8bit)
キャストは、某試食版で上手く行かなかった為(手抜き)。(^^;
0842841
NGNG0843841&842
NGNG#define B32(s1) ((B16(0##s1>>32&0xffffffffffff00000000)<<16)|(B16(0##s1&0xffffffff)))
#define B16(s1) ((B8(0##s1>>16&0xffffff0000)<<8)|(B8(0##s1&0xffff)))
#define B8(s1) ((0##s1>>14)&128|(0##s1>>12)&64|(0##s1>>10)&32|(0##s1>>8)&16|(0##s1>>6)&8|(0##s1>>4)&4|(0##s1>>2)&2|(0##s1&1))
12バイト長の数字を扱えれば、
B8(8bit) B16(16bit) B32(32bit)の3種類はOKのはず。
でも、試せないので…。(^^;
0844841&842&843
NGNG#define B32(s1) ((B16(0##s1>>32&0xffffffffffff0000)<<16)|(B16(0##s1&0xffffffff)))
#define B16(s1) ((B8(0##s1>>16&0xffffff00)<<8)|(B8(0##s1&0xffff)))
#define B8(s1) ((0##s1>>14)&128|(0##s1>>12)&64|(0##s1>>10)&32|(0##s1>>8)&16|(0##s1>>6)&8|(0##s1>>4)&4|(0##s1>>2)&2|(0##s1&1))
何かおかしいと思ったら、ゼロの数をミスってました…。m(_ _)m
0845841&842&843&844
NGNG#define B32(s1) ((B16(0##s1>>48)<<16)|(B16(0##s1&0xffffffff)))
#define B16(s1) ((B8(0##s1>>24)<<8)|(B8(0##s1&0xffff)))
#define B8(s1) ((0##s1>>14)&128|(0##s1>>12)&64|(0##s1>>10)&32|(0##s1>>8)&16|(0##s1>>6)&8|(0##s1>>4)&4|(0##s1>>2)&2|(0##s1&1))
眠くて頭が働かないので、まだ、間違ってたら、他の人に期待。(^^;
0846デフォルトの名無しさん
NGNGchar *psz1 = "12345";
char *psz2 = "67890";
sprintf(sz1, psz1, psz2);
この時のpsz2って何の意味が有るの?
0847デフォルトの名無しさん
NGNG別ですけど。
0848デフォルトの名無しさん
NGNGfp=fopen(file,"w");
とやると、自分の今いるディレクトリのfileを開こうとしますよね?
それを、実行ファイルのあるディレクトリの、fileを開くようにしたいのですが・・・
0849デフォルトの名無しさん
NGNGとやると、test.cが無くなってしまうのですが、なぜなんでしょう?
-lm を付けないと、ちゃんとしたエラーを返してくれるのですが・・・
0850845
NGNGint j[N] ;
for(i=0;i<N;i++){
j[i]=i;
printf(" %d %d\n",i,a[i]);}
sort(point);
for(i=0;i<N;i++)
printf(" %d %d\n",j[i],a[j[i]]);
※sort(a[j[i]]の結果で、jをsortする)
分かり辛いかも知れませんが、こんな感じで…。(^^;
>>827さん
根本的に間違ってたので訂正。(何を寝ぼけてるんだ>自分)
#define B32(s) ((B16(s>>48)<<16)|B16(s))
#define B16(s) ((B8(s>>24)<<8)|B8(s))
#define B8(s) ((0##s>>14)&128|(0##s>>12)&64|(0##s>>10)&32|(0##s>>8)&16|(0##s>>6)&8|(0##s>>4)&4|(0##s>>2)&2|(0##s&1))
12バイト整数が使えれば、B8(n) B16(nn) B32(nnnn) でOK。(n=8bit)
でも、今は扱える整数なら全て使える841の方法をお勧め。
0851デフォルトの名無しさん
NGNG0852デフォルトの名無しさん
NGNGホームページがあれば教えてください。お願いします。
0853デフォルトの名無しさん
NGNGmainのargv[0]
>>849
gcc -o test test.c
>>852
http://www.google.com/intl/ja/
0854デフォルトの名無しさん
NGNGgcc -o test.c
だと、ちゃんとエラーが出るんです、出力ファイル名入れろって。
でも
gcc -o test.c -lm
だとtest.cが消えてしまうんです。
何故なんでしょう?
0855デフォルトの名無しさん
NGNGgcc -otest.c -lm
と解釈されてるんじゃない。
0856デフォルトの名無しさん
NGNG0857848
NGNGargv[0]だと、その実行ファイル名も含まれてしまいませんか?
0858デフォルトの名無しさん
NGNG自分で加工すればいーじゃん。
0859848
NGNGその方法を教えていただきたいのですが。
0860デフォルトの名無しさん
NGNGファイル名を含むフルパスからファイル名以下を取り除く。
デリミタとかは処理系依存なので自分で調べれ。
0861デフォルトの名無しさん
NGNGgcc -c test.c --> test.o
gcc -o test test.c --> test
0862848
NGNGargv[0]にはコマンド名しか入っていませんよね?
この場合はどうすれば良いのでしょう?
>>860
デリミタと言うのは、区切り文字、みたいな理解で良いんでしょうか?
WINなら"\",UNIXなら"/" ということでしょうか。
0863仕様書無しさん
NGNG-lmがあるとエラーにならないのは何故か、
と言ってるんじゃないかな。
854の最初のコマンドラインは、「出力ファイル名を入れろ」ではなくて
「入力ファイル名が無い」と言うはずだよ。
入力が無いからgccはエラーをだして何もしない。
ところが次の(-lmが付いている方)は、libmという入力ファイルがあるから
リンカが起動する。それで出力先が指定されているから(-o test.c)
test.cを先ず消すんだが、libm以外に入力が無いためmainが無く
リンクには失敗するので結果として test.c が無くなって終わり、
というわけだ。
0864861
NGNGそだね
0865デフォルトの名無しさん
NGNGC-FAQ 19.31 19.32参照
http://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/C-faq/C-faq-19.html
ちなみにunixの場合、whichをpopenすれば可能
0866デフォルトの名無しさん
NGNGフルパスなのかコマンド名だけなのか調べて場合分け。
ヒントはもーここまで。デリミタがなんなのか知ってるなら、フルパス名の時と
コマンド名だけの時を切り分ける条件くらい自分で考えれ。
0867デフォルトの名無しさん
NGNGUNIXの場合execveに渡すファイル名は幾らでもでっちあげ
られるので、プログラム側から自分自身のファイル名を
確実に得る方法はありません。
~~~~
どうでもいいレスですけど。
0868デフォルトの名無しさん
NGNGSORTを呼び出して、降順にしたいのですが。アドバイスお願いします。
#include <stdio.h>
#define N 3
typedef struct{
int a;
}b;
void sort(int *);
void swap(int *x,int *y);
void main(void)
{
b std[3];
int i;
for(i=0;i<3;i++){
printf("番号?");scanf("%d",&std[i].a);
}
sort(std[i].a);
for(i=0;i<3;i++){
printf("%4d\n",std[i].a);
}
}
void sort(int *a)
{
int i,j;
for(i=0;i<N-1;i++){
for(j=i+1;j<N;j++){
if(*(a+i)<*(a+j))
swap(a+i,a+j);
}
}
}
void swap(int *x,int *y)
{
*x = *y - *x;
*y -= *x;
*x += *y;
}
0869デフォルトの名無しさん
NGNG{
char p[MAX_PATH * 2];
memset(path, 0, len);
::GetModuleFileName(NULL, p, MAX_PATH * 2);
CString s = p;
int pos = s.ReverseFind('\\');
s = s.Left(pos);
memcpy(path, s, len - 1);
if(print)
printf("%s\n", path);
}
0870デフォルトの名無しさん
NGNGvoid hoge_sort()
{
b p[N];
int i = 0;
int j = 0;
int x = 0;
/* input */
for(i = 0; i < N; i++)
{
printf("number");
scanf("%d", &(p[i].a));
}
/* sort */
for(i = 0; i < N; i++)
{
for(j = i; j < N; j ++)
{
if(p[i].a < p[j].a)
{
x = p[i].a;
p[i].a = p[j].a;
p[j].a = x;
}
}
}
/* print */
for(i = 0; i < N; i++)
{
printf("%4d\n", p[i]);
}
}
0871デフォルトの名無しさん
NGNGそうです、私の質問はそういう事を言いたかったわけです。
文章下手で申し訳ない。
>854の最初のコマンドラインは、「出力ファイル名を入れろ」ではなくて
>「入力ファイル名が無い」と言うはずだよ。
これもその通りです。私の勘違いでした。
0872868
NGNGアドバイスありがとうございます。
sort(条件文)→swap(交換)を呼び出すのはどうしたらいいのでしょうか?
0873SONY
NGNG求人欄でよく見る、Cができる人とか、VBができる人とかいうのは、
どの程度のレベルの事を指しているのですか?
漠然としすぎてて分かりません。
また、初心者がそのレベルに達するまでにはどれくらいの時間が必要ですか?
0874デフォルトの名無しさん
NGNGC言語とC++の違いは何?
全く違う言語と考えていいの?
0875デフォルトの名無しさん
NGNG本読め>874
0876ヒロト
NGNG自分のノートパソコンにcプログラミングの環境を作りたいのですが、
良く分かりません。
シグナスはフリーで落ちているのではないかと聞いたので、
色々と調べましたが訳が分かりません。
只では無理なのでしょうか?
0877デフォルトの名無しさん
NGNG> 只では無理なのでしょうか?
環境を整えるだけなら只でできる。
やり方は「無料」「コンパイラ」「C言語」で検索エンジンに聞け
ちなみにgoogleで上記のキーワードで検索した最初のURL
http://www2s.biglobe.ne.jp/~maekawa/dev/vc/freec/bcc55/
0878デフォルトの名無しさん
NGNG#define N (10)
#include <stdio.h>
typedef struct
{
int a;
}b;
void hoge_input(b p[], int num)
{
int i = 0;
for(i = 0; i < num; i++)
{
printf("[%d] = ", i);
scanf("%d", &(p[i].a));
}
}
void hoge_swap(int* a, int* b)
{
int x = 0;
x = *a;
*a = *b;
*b = x;
}
void hoge_sort(b p[], int num)
{
int i = 0;
int j = 0;
for(i = 0; i < num; i++)
{
for(j = i; j < num; j++)
{
if(p[i].a < p[j].a)
{
hoge_swap(&(p[i].a), &(p[j].a));
}
}
}
}
void hoge_print(b p[], int num)
{
int i = 0;
printf("----------\n");
for(i = 0; i < num; i++)
{
printf("[%d] = %d\n", i, p[i].a);
}
}
int main()
{
b p[N];
hoge_input(p, N);
hoge_sort(p, N);
hoge_print(p, N);
return 0;
}
0879ヒロト
NGNGありがとうございます。色々奮闘したいと思います。
0880デフォルトの名無しさん
NGNGテキストて書き込むのとバイナリで書き込むのとは差があるのでしょうか
char a='A';
をテキスト形式で書き込むと.10進で
バイナリで書き込むと16進で書き込まれると考えていいものなのでしょうか。
0882デフォルトの名無しさん
NGNGとりあえず
int main(void)
{
printf("%c %c %c \n", 'A', 0x41, 65);
printf("%d %d %d \n", 'A', 0x41, 65);
printf("%x %x %x \n", 'A', 0x41, 65);
}
これを実行してみて、結果を報告してみてくれ。
0883某2年
NGNGあんまりよくわかりません。
何かお勧めの参考書ありますか??
0884某2年
NGNGあんまりよくわかりません。
何かお勧めの参考書ありますか??
0885某2年
NGNGあんまりよくわかりません。
何かお勧めの参考書ありますか??
0886デフォルトの名無しさん
NGNGC初心者なのでいまいちピントきません。
バイナリファイルて16進ですか?
0887デフォルトの名無しさん
NGNGプログラマ板にもマルチポストしてやがるな。
C言語以前の問題なので、自分でいろいろお調べなさい。
0888デフォルトの名無しさん
NGNGあなたの持っている本やドキュメントの "fopen" の説明には、
なんて書いてありますか?
0889デフォルトの名無しさん
NGNG>>866
まず、10進で書き込まれるとか、16進で書き込まれる、という考え方が
間違っています。
'A'を書き込んだのなら、十進表記で65がファイルに書き込まれます。
これを16進で表示すると0x41となり、キャラクタで表示させると'A'と
なるのです。
テキストモードとバイナリモードの大きな違いは、改行コードをどう扱うか、
に差があります。
しかし、このことを知る前に、上記'A' = 0x41 = 65という考え方が
わかるようになりましょう。
0890デフォルトの名無しさん
NGNG書き込まれてあとは表示の違いと考えて良いのですよね。
0891デフォルトの名無しさん
NGNG>ファイルは65で書き込まれて
この考え方がまちがいです。
0892デフォルトの名無しさん
NGNGですよね。
0893デフォルトの名無しさん
NGNGおいおい
0894デフォルトの名無しさん
NGNGどうでもいいじゃん、そんなこと。
0895デフォルトの名無しさん
NGNG違うと言うんなら、説明してやれよ。
ヤレヤレ
0896デフォルトの名無しさん
NGNG0897デフォルトの名無しさん
NGNGだから、65、0x41、'A'で書かれる。
どの辺までハードよりに考えるかは、その人の自由だが、
初心者にはこれでOKだろう。
つーか、俺も詳しくはしらんが(w
0898通りすがり
NGNGプログラマ板の方に書いておいたから、それを見るように。
0899デフォルトの名無しさん
NGNG例え話なんだが、
○○○○○○○○○○○○○
「この丸は幾つある?」って答えは
「10進数の13」
「16進数のD」
「2進数1101」
のどれもが正しい。
ファイルに書き込まれてる情報も同じ。
"13"を書き込むんじゃなくて○○○○○○○○○○○○○が書き込まれてると思ってくれ。
13、D、2と表現が変わっても、結局同じ量を指している。
0900デフォルトの名無しさん
NGNGこれを細かく説明すると
ASCII文字の'A'はASCII CODE '65' 番で65の16進表記は''0x41'
ってこと。
ファイル上のデータはビット列だけど、便宜上1byte( =8bit)を最小
単位として扱う。だから、
0x41 = 0010 0001
と書きこまれている。
>65すなわち00000110(6)00000101(5)
これだと 0x06 0x05 の2bytesデータを表現したことになる。
16進数の一桁は4bitである事に留意せよ!
0901デフォルトの名無しさん
NGNG2、2、二、�U、�A どれも2
65, 'A', 0x41 どれも65
65, 'A', 0x41 どれも'A'
※機種依存スマン
ところで、新スレは先頭にC FAQへのリンクきぼん
0902デフォルトの名無しさん
NGNG0903ジョブス2世
NGNG> ところで、新スレは先頭にC FAQへのリンクきぼん
ここでいいか?
http://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/C-faq/C-faq-00.html
新スレは950越したら立てたい、他にも要望があったら挙げてくれ。
0904デフォルトの名無しさん
NGNGちょっと、300万円ほど貸してくれ。
0905デフォルトの名無しさん
NGNG俺の下着洗濯してくれんか。
0906デフォルトの名無しさん
NGNG0907デフォルトの名無しさん
NGNG嫁を世話してくれ
0908デフォルトの名無しさん
NGNGワロタヨ
0909名無しさん
NGNG0910名無しさん
NGNG0911どりす
NGNGの&aみたいな、参照演算子って
C++ですか?
0912どりす 911
NGNGgoto みたいな、禁じ手(最終手段)みたいなものなのでしょうか?
また、アセンブラレベルだと
push popやってるのでしょうか?
0913通りすがり
NGNGint mona(int &a)の&はaが参照型であることを示しますが、演算子では
ありません。
参照渡しは禁じ手ではありませんが、最近はconst参照以外を嫌う傾向も
あるようです。それと、gotoは何も禁じ手ではありません。
機械語レベルの話ですが、これはどんなプロセッサを使っているかや、
どういう局面で使っているかに依存します。
例えばインライン関数の場合にはスタック操作が全くない場合も考えられ
ますし、多くのプロセッサは最初にいくつかの引数をレジスタで渡すので、
やはりスタック操作は発生しません(mona関数の中で他の関数を呼び出し
たり、複雑な処理を行う場合には、mona関数の内部でスタックに詰まれる
と思います)。
0914通りすがり
NGNG&による参照型を使えるのはC++です。
0915通りすがり
NGNGもしかして、push popって値をスタックに積むと思っていませんか?
スタック渡しであれ、レジスタ渡しであれ、実際に引数として渡すのは
アドレスです。念のため。
0916デフォルトの名無しさん
NGNG参照は
int& mona(int)
なかんじで使うことはおおい
0917どりす
NGNGやっぱりC++でしたか。
Cの本しか持ってないので、分かりませんでした。
&aは、眠い時にこびとさんがかってにやってて、さっき気づいたです。
インラインアセンブラ(x86)紹介していたHP(どこかわすれた)では
関数の引数の渡し方に何通りかあって
fast型だっけ、それが、レジスタで
他の方法が スタックとか(push popするタイミングが違う)聞いたです。
>実際に引数として渡すのはアドレスです。
おわ、知らんかった。
ということは、関数呼び出し側で使用されていた変数アドレスが
わたされて、そのアドレスの中の数値を使うのが
mona(int a) とか mona(int *a)で、
そのまま アドレス使うのがmona(int &a)?
そんなかんじですか?
なんか混乱してきた。
0918デフォルトの名無しさん
NGNG0919どりす
NGNG>gotoは何も禁じ手ではありません
わかっておりますが、嫌われてる傾向にあるので
"禁じ手(最終手段)"って書きました。
たくさんのループから抜け出すにはこれが速いし。
0920どりす
NGNGみてみます。それが一番早かった。すんまそん。
0921通りすがり
NGNG>関数の引数の渡し方に何通りかあって
>fast型だっけ、それが、レジスタで
__fastcallのことですか?Windowsの処理系ではそういうのが多いですね。
他のプラットフォームの処理系では、何も指定しなくてもレジスタ渡しに
なるものが結構あります。
参照渡しは(実現方法は何でもいいのですが)実際にはポインタ渡しと同様の
方法で実現されています。インライン関数の場合は敢えてアドレスを渡して
操作する必要がないので、マクロのような展開が行われると思います。
0922どりす
NGNGちょっと出かけなければならいのでまた今度。ありがたう。
0923デフォルトの名無しさん
NGNG誰かお願いします。なんか2分法を使うらしいのですが。
0924デフォルトの名無しさん
NGNGranddouble()をdoubleの乱数を返す関数として、
double solve_f() {
double x, y;
do {
x = randdouble();
if (x == 0.0) continue;
y = x - exp(1.0 / x);
} while (y != 0.0);
return x;
}
0925825
NGNGj[i]=i;
って事は、
printf(" %d %d\n",i,a[i]);}と
printf(" %d %d\n",j[i],a[j[i]]);
は、同じ意味になるのではないでしょうか?
うまくいきません。
0926デフォルトの名無しさん
NGNG#include以外の関数使おうとすると、
「定義されていません」ってなります。なんでですか?
0927デフォルトの名無しさん
NGNG>「C言語お勉強コンパイラ」みたいなやつ
と言われても解らないので、正確な名前を書くこと。
なお、#includeは関数ではありません。
0928↑
NGNGこれでいいですか?
0929↑
NGNGこれでいいですか?
ちなみにCマシン ってやつです。
0930デフォルトの名無しさん
NGNGっつーお決まりの煽りは置いといて、
最新のCの規格だと確かプロトタイプ宣言が必須なんじゃなかったっけ?
たいていの処理系だと互換性とか利便性とかのために標準関数くらいなら
無くても通ってしまうけど。
本来なら標準関数もプロトタイプ宣言を記述したヘッダファイルをインクルードすべき。
0931デフォルトの名無しさん
NGNGを作成して下さい。
ただし、
・ポインタpaを定義し配列Aの先頭アドレスを格納する。
・ポインタpbを定義し配列Bの先頭アドレスを格納する。
・2重ポインタdpaを定義し、ポインタpaのアドレスを格納する。
・2重ポインタdpbを定義し、ポインタpbのアドレスを格納する。
・配列の内容は添字を使って参照しない。
・配列Bに値を格納する際に、dpa、dpbの少なくともどちらかを
利用すること。
0932デフォルトの名無しさん
NGNG#include <stdio.h>
main()
{
HANDLE hText;
char *pText;
OpenClipboard(NULL);
hText = GetClipboardData(CF_TEXT);
if(hText == NULL) {
printf("クリップボードにテキストデータはない。\n");
} else {
pText = GlobalLock(hText);
printf("%s\n", pText);
GlobalUnlock(hText);
}
CloseClipboard();
}
0933デフォルトの名無しさん
NGNG#include <stdio.h>
#define N (5)
int main(int argc, char* argv[])
{
int a[N], b[N], *pa = a, *pb = b, **dpa = &pa, **dpb = &pb, i = 0;
/* set */
for(i = 0; i < N; i++) *(pa + i) = i;
/* reverse */
for(i = 0; i < N; i++) *((*dpb) + (N - i - 1)) = *((*dpa) + i);
/* print */
for(i = 0; i < N; i++) printf("a[%d] = %d, b[%d] = %d\n", i, *(pa + i), i, *(pb + i));
return 0;
}
0934デフォルトの名無しさん
NGNG#include <stdio.h>
#include <windows.h>
int main(int argc, char* argv[])
{
HANDLE hText;
char *pText;
OpenClipboard(NULL);
hText = GetClipboardData(CF_TEXT);
if(hText == NULL)
{
printf("クリップボードにテキストデータはない。\n");
}
else
{
pText = (char*)GlobalLock(hText);
printf("%s\n", pText);
GlobalUnlock(hText);
}
CloseClipboard();
return 0;
}
0935デフォルトの名無しさん
NGNG同じ値を返さないようにするにはtime使う以外に何がありますか?
以上。教えて厨房でした。
0936名無しさん@Emacs
NGNG#include <stdio.h>
main()
{
int a=5;
int b = (a++) * (--a);
printf( "%d\n", b);
}
コンパイラによって数値が違うのですが、
どうすればいいのでしょうか。
目をつぶるべきでしょうか。
0937デフォルトの名無しさん
NGNGどんな動作を期待してるの?
int b = (a-1) * (a-1);
じゃだめ?
0939デフォルトの名無しさん
NGNGその計算結果は未定義だからです。
副作用完了点までに同一のオブジェクトを複数回更新すると、結果は未定義です。
b = 5 * 6と計算させないならば
int a = 5;
int work, b;
work = a++;
b = a * work;
とでも書き直してください。
0940939
NGNG0941名無しさん@Emacs
NGNG>>937
お返事ありがとうございます。20になるコンパイラ、
ちょっと書き換えるだけで30や25になるコンパイラなど、
いろいろありました。
一つの式に(インクリ||デクリ)メント演算子を共存させるな
ということでしょうか。
調べてみたところ、「コンパイラ依存だゴルァ」ということ
でした。
0942デフォルトの名無しさん
NGNG>同じ値を返さないようにするにはtime使う以外に何がありますか?
・いつもフリーランで動いているハードウェアが載っていれば、
そのポートを読む。(timeもこれの一種)
・ユーザの入力待ちのあるプログラムならば、Runした後初めて
入力があるまでの、待ちループの回数を利用する。
・FDDがある環境なら、スピンドルを回してみて、
index信号が入力されるまでの時間をカウントする。
・本当にハードウェアで乱数を発生させるデバイスを載せる。
(抵抗の熱雑音や同位元素の分裂などを発生源とする。)
などなど。
0943デフォルトの名無しさん
NGNG>#define N (5)
さすがにその括弧は不要だと思うが。
重箱の隅でごめんね。
0944新米ジェダイの騎士
NGNGどこが間違っているのでしょう?
#include<stdio.h>
main()
{
int days[12] =
{
31,28,31,30,31,30,
31,31,30,31,30,31
} ;
int i ;
for(i=1; i<=12; i++)
{
printf("%d月は、%d日まであります。\n" , i , days[i-1]) ;
}
}
0945デフォルトの名無しさん
NGNG全角スペースが2つ入ってるから。
全角スペースを表示してくれるエディタを使おう。
0946デフォルトの名無しさん
NGNGHDDでも、ファイルを読んでみて、読むのにかかった時間をseedに
使うと、けっこうランダムです。そのときのHDDのヘッドの位置、
ディスクの角度などが、とても不確定だからね。
0947デフォルトの名無しさん
NGNGLEAで?
それは違うだろ。
0948デフォルトの名無しさん
NGNG>>946
参考になりました。
問題は、漏れがそれを利用したプログラムが書けるかどうかだ。(藁
0949デフォルトの名無しさん
NGNGコンパイルエラーしたときの表示も書いた方が何処が悪いか分かりやすいと思うが。
srand((unsigned int)time(NULL));
time以外の時もこのような使い方なのだろうか?
0950デフォルトの名無しさん
NGNG文法書を見ると、後置のインクリメントは
式全体を評価してから行なうと書いてありました。
その式全体とはどれの事ですか?
0951デフォルトの名無しさん
NGNG0952950
NGNG0953デフォルトの名無しさん
NGNG|3|8|4| |4|23|17|11|10|
| ̄| ̄| ̄| → | ̄| ̄| ̄| ̄| ̄| ・・・・の様な配列のソースはどの様に
|5|�@|9| |6|5|24|18|12| 書けばいいのでしょうか?
| ̄| ̄| ̄| | ̄| ̄| ̄| ̄| ̄|
|7|6|2| |13|7|�@|25|19| 条件:�@は必ず真ん中に来る。
 ̄  ̄  ̄ | ̄| ̄| ̄| ̄| ̄| 枠(Y,X)は、奇数。
|20|14|8|2|21| 最大の枠数_29枠まで
| ̄| ̄| ̄| ̄| ̄| (scanfで,枠数の指定が、
|22|16|15|9|3| できる様にする。)
 ̄  ̄  ̄  ̄  ̄
確か、このパズル問題は、以前何かの雑誌に載っていたと思います。
自分には、解けなかったのでお願いします。
0954デフォルトの名無しさん
NGNG|3|8|4| |4|23|17|11|10|
| ̄| ̄| ̄| → | ̄| ̄| ̄| ̄| ̄| ・・・・の様な配列のソースはどの様に
|5|�@|9| |6|5|24|18|12| 書けばいいのでしょうか?
| ̄| ̄| ̄| | ̄| ̄| ̄| ̄| ̄|
|7|6|2| |13|7|�@|25|19| 条件:�@は必ず真ん中に来る。
 ̄  ̄  ̄ | ̄| ̄| ̄| ̄| ̄| 枠(Y,X)は、奇数。
|20|14|8|2|21| 最大の枠数_29枠まで
| ̄| ̄| ̄| ̄| ̄| (scanfで,枠数の指定が、
|22|16|15|9|3| できる様にする。)
 ̄  ̄  ̄  ̄  ̄
確か、このパズル問題は、以前何かの雑誌に載っていたと思います。
自分には、解けなかったのでお願いします。
0955ジョブス2世
NGNGC言語なら、オレに聞け! <3>
http://piza.2ch.net/test/read.cgi?bbs=tech&key=989929288
0956ジョブス2世
NGNG> ・・・・の様な配列のソースはどの様に書けばいいのでしょうか?
最大が29なので
int array[29][29];
とするかmallocで動的確保をする。
アルゴリズムは以下のリンク先にいくつかのってる。
魔方陣の作り方
http://www.ne.jp/asahi/suzuki/hp/houjin3.htm
0957デフォルトの名無しさん
NGNG#include<stdio.h>
int main(void){
int p[29][29];
int i,j,n,m,x,y;
printf("? 1〜29の奇数 ");
n = 0;
scanf("%d",&n);
if(n%2==0||n < 0||29 < n){
printf("不正な値\n");
return 0;
}
m = n * n;
for(i=0;i<m;i++){
p[i/n][i%n] = -1;
}
for(i=0;i<m;i++){
if(i==0){
x = n / 2;
y = n / 2;
}
else{
if(p[(x + 1) % n][(y + 1) % n]==-1){
x = (x + 1) % n;
y = (y + 1) % n;
}
else{
x = (x+n-1) % n;
y = y;
}
}
p[x][y] = i;
}
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("%4d",p[j][i]+1);
}
printf("\n\n");
}
return 0;
}
0958デフォルトの名無しさん
NGNG>957 ソースを書き込んでくれて感謝
0959デフォルトの名無しさん
NGNG0960デフォルトの名無しさん
NGNGVC++環境で使えるTrue Time 使ったらどぉ。
numegaだっけ?
0962デフォルトの名無しさん
NGNG5ヶ月と14日前の書きこみにレスするなんて、親切ですね。
0963デフォルトの名無しさん
NGNGCRCを作りたいんですが、独自でもかまいません。
規格が存在するか、参考になるURLなどはありませんか?
16ビットならその辺にありました。
#C言語です。
0965コロコロ
NGNG課題 文字列操作
<処理概要>
入力ファイルに入っているランダムな文字列を読み込んで編集する。
入力ファイル名 \public\C言語応用\課題02\input.txt
入力ファイルの内容
io4@5ovgiq@w340 9tn@q0mikanb924 rwijra;o4 aestrawberryut@90
240strawberry9t animikanrja ddg fvbananaxjfringogqworiadf;
amomolkjtcwieroutstrawberry34t7vv
dsgfoiuto sdrgovq@4r q0awitflksjd;f
laumikanwett errgt thhbcvbasf fitu@qo4rfachocolateaaarffvnxdkjfq23
sdfgi oq34itu aqeurgvksjd q9bananau4 tue ggsjdgoiumomoq349tifvk
asrgmomoio uweringoorigporegf
asdmomofg sjd;fmikanligurin@qa94it kwjegfr:bananaa ergtqaegr
dfgi oeoitgu;fldkgj b9wu44tlgkjjlksvdjgfsmikanadfg
oiupqoi34 ta;lkdf j;lakjdfg0987 bjlhbxcvblkj
;lkjchocolateroigeurrgssdmomoffkjahljhringoglar+ j;lkj4rti
<詳細仕様>
入力ファイルの内容は、ランダムな小文字のアルファベット文字列からなり、
1行の文字数は揃っていない。これを1行ずつ読み取り、次の編集を加えて
1行を20文字に揃えて標準出力する。加える編集項目は、以下の通り。
1.文字列"ringo"を発見したら、"APPLE"に変換し、発見回数を数える。
2.文字列"mikan"を発見したら、"ORANGE"に変換し、発見回数を数える。
3.文字列"momo"を発見したら、"PEACH"に変換し、発見回数を数える。
4. 文字列"banana"を発見したら、後ろに"cake"を付ける。
5. 文字列"strawberry"を発見したら、後ろに"cake"を付ける。
6. 文字列"chocolate"を発見したら、後ろに"cake"を付ける。
7. 1〜6以外の文字列の場合は、"."(ピリオド)を出力する。
例えば、入力ファイルの1行目にq0mikanb924という文字列があるが、
この"mikan"の部分が"ORANGE"に変わる。他の文字はピリオドになる。
【結果の表示例】
・・・・・・・・・・・・・APPLE・・
・・・・・ORANGE・・・・・・・PE
ACH・・・・・・bananacake・
・・・・・
ringoの出現回数は、1回
mikanの出現回数は、1回
momoの出現回数は、 1回
bananaの出現回数は、1回
以上が課題の内容です。ご託宣お願い致します。
0966デフォルトの名無しさん
NGNG0967デフォルトの名無しさん
NGNGあちこちに同じ書き込みすんな
宿題は自分でやれ
いやならそんな単位落としてしまえ
0969デフォルトの名無しさん
NGNGお前らもageんなよ。
0970デフォルトの名無しさん
NGNG俺がその課題やってやろうか?
ただし、150万円戴くが…。
とか、ブラックジャック風に言ってみるテスト
…まじで150万くれるんだったら 頑張ってやっちまうな俺。
0971デフォルトの名無しさん
NGNG当方なら100万で引き受けますYO! 競合他者より50万もお得Death!(藁
0972デフォルトの名無しさん
NGNG学校でわざわざプログラムを教わっている奴ほど、
この程度の問題すら自力で解けない。
矛盾した世の中だよな。
0973デフォルトの名無しさん
NGNG暇だったから只でくれてやるよ。可哀想だしな(藁
---- t.dat ----
# [0] fromstr [1] tostr [2] appear count
$map_text = [
["ringo" , "APPLE" ,0],
["mikan" , "ORANGE",0],
["momo" , "PEACH" ,0],
["banana", "bananacake",0],
["strawberry" , "strawberrycake",0]
["chocolate" , "chocolatecake" ,0]
]
def hittest( str , index )
$map_text.each { | i |
next if str[index, i[0].length] != i[0]
i[2] += 1
return [true, i[1], i[0].length]
}
return [false]
end
out = "";
while (ARGF.gets)
chop!
i=0
while( i < $_.length )
ret = hittest($_, i)
if ret[0]
then
out += ret[1]
i += ret[2]
else
i+=1;
out += '.'
end
end
end
i=0
while( i < out.length )
print out[i, 20],"\n"
i += 20
end
$map_text.each{ |i|
print i[0],":",i[2],"\n"
}
--- main.c ---
#include <stdlib.h>
int main()
{
system("ruby t.dat input.txt");
return 0;
}
system関数が不満なら、#include "ruby.h"でevalれよ(藁
0974コロコロ
NGNG見るものだし、理解できず、説明もできません。
誠に申し訳ないのですが、もう少し判りやすいソースでお教え願えないでしょうか?
0975デフォルトの名無しさん
NGNG>mailto:[email protected]
こっちでヤレ
http://piza.2ch.net/test/read.cgi?bbs=tech&key=989929288&ls=50
1000ヨシケー
NGNG10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。