1 :
v(^o^i)d :
05/02/26 14:01:13
2気と
3 :
デフォルトの名無しさん :05/02/26 14:56:48
4 :
デフォルトの名無しさん :05/02/26 14:57:55
4様
5 :
デフォルトの名無しさん :05/02/26 15:05:54
5
6
7
8 :
デフォルトの名無しさん :05/02/26 15:36:21
arg1に文字列、arg2にint型の数値で画面に文字列を表示させる関数を 作ったんですが文字列の長さに関わらず以下のように表示させようと 思ったんですがよくわかりません。 AAAA 0 BB 0 C 0 sprintf(buf,"%-s %5d",arg1,arg2); ではうまくいかないんだが何をどう変えればいいか教えて
>>8 そりゃ、sprintf()では画面には表示されないだろ。
puts(buf)
c:\AVI.exe char name[]="[映]君と僕[15].AVI" このファイルをコマンドラインから読み取り c:\AVI Fopen=[c:\[映]君と僕[15].AVI] Fout=[d:\[[映]君と僕[15].AVI]] このようにオプションを指定して ファイルを読み取りたいんですが どうやってファイル名を読み取ればいいのでしょうか?
>>12 ファイル名を [, ] で囲まなければならないのか?
ファイル名自体に [, ] が含まれてるからめんどいぞ。
とりあえず,日本語で説明し直せ
すいません、間違いました char name[]; ← これは保存用変数でした そうなんです、ファイル名はすべて読み込みにしたいんです だから、あえてファイル名に[、]を付けました この場合のコマンドラインから ファイル名を読み取るにはどうすれば良いのでしょうか? ファイル名 [映]君と僕[15].AVI ファイル読み込みオプション -Fopen=[c:\[映]君と僕[15].AVI] (その他のオプション は アルファベット+= にスペースで区切り) 実行ファイル AVI.exe AVI -Fopen=[c:\[映]君と僕[15].AVI] void main (int argc, char *argv[])) { char *p,*p2; char name[_MAX_PATH]; int num = 0; while (num < argc) { if ((p = strstr(strupr(argv[num]),"-Fopen")) { ファイル名取得処理 } num++; } } これで良いでしょうか? ファイル名取得処理のところはどうすれば良いのでしょうか?
すいません 上のは忘れてください [、]のあるファイル名を -Fopen=[デレクトリ+ファイル名] を読み込みたいんです 文字取得処理が知りたんです char name[]="-PP -OP -MM -Fopen=[c:\[映]君と僕[15].AVI] -Fout=[d:\[[映]君と僕[15].AVI]" この文字列の中から -Fopen=[ (ここにある文字列を取得) ] どうすればいいのでしょうか?
ビット演算で値を1/10にできますでしょうか
if(int i;i<n;i++) みたいに if の()の中で宣言できる処理系ってあります? GCCだとできなかったんですけど。
たぶんC++使えるコンパイラなら普通できんじゃないの 違うのかな
C99でも出来ることにはなっている。 C99対応のコンパイラはどこにも存在しないが。
>>12 ,15,16
なんでわざわざ [] で囲む仕様にするの?囲まないほうがかなり簡単な
コードになるよ?
23 :
デフォルトの名無しさん :05/02/26 23:37:58
1/10 =(1/8)(1/(1+1/4)) 1/(1+1/4) =1-1/4+(1/4)^2-(1/4)^3+… 無理っぽい。 シフトと加算だけだがビット演算じゃないし
>>18 とりあえず…その比較はやばそうだな…
if(int i=0;i<n;i++)
にしる
>>8 もし「文字列は4文字で左詰めで、数字は5文字で右詰め」
という意味だったら、
"%-4.4s %5d" とかそんなかんじ。
>>16 OSのシェルと、コマンドライン引数について勉強してからにした方がよさげ。
カッコで囲まないとどのような 物になるのでしょうか? 一応、ファイル名がどこから始まり、どこで終わるかを 指定しているんですけど この場合、ファイル名の先頭から 1文字づつ調べて、 次がオプションの文字かどうか調べないとダメなのかな "-PP -OP -MM -Fopen=[[映]君 と 僕 -PP -OP -[15].AVI] -Fout=[d:\[[映]君と僕[15].AVI]" こんなファイル名だったら、やはり無理ってことでしょうか?
>>27 まず、argv を1行ずつ表示するプログラムを作っていろいろ試してみな?
for (i = 1; i < argc; i++) {
printf("'%s'\n", argv[0]);
}
で、
foo.exe -PP -OP -MM -Fopen=君 と 僕.avi
と
foo.exe -PP -OP -MM "-Fopen=君 と 僕.avi"
の結果を見て考察せよ。
おっと、↑のは printf("'%s'\n", argv[i]); の間違いね
いえいえ、コマンドラインは忘れてください char name="-PP -OP -MM -Fopen=[[映]君 と 僕 -PP -[15].AVI] -Fout=[d:\[[映]君と僕[15].AVI]" この変数からの取得したいんです
32 :
デフォルトの名無しさん :05/02/27 00:00:38
>>30 馬鹿かてめーは
その変数から取得するなら既にわかってるじゃねーか
char *p = "[映]君 と 僕 -PP -[15].AVI";
ほれ取得できたぞ
>>17 (x-x
>>2 +x>>4-x
>>6 +x>>8-…)
>>3 でx/10ができるはず。
…の部分はxのビット長で適宜延長すること。
+を使わない方法が知りたい。
>>31 そんなぁ〜
初めのトークン取得までは良いんですが、最後の判定が分からないんです
そのファイル名をC言語で取得する方法を教えてください
-Fopen=[ (もちろんこの部分はいろいろ変わります) ]
シフトがアンカーになってしまった
(x-x>> 2+x>> 4-x>> 6+x>> 8-…)
>>3
さらに訂正。 (x-x>> 2+x>> 4-x>> 6+x>> 8-…)>> 3 サイナラ
>>23 おお、ありがdございまする
+があっても無問題ですー
これは余談ですが
他にもこれはよさげってなビット演算ワザありませんでしょうか?
>>34 まず、ルールを紙か何かに書いて生理汁。
そうすれば、どういう処理をすべきか見えてくる。
標準関数一発で出きるようなモノじゃない。
甘ったれるな!
>>30 その文字列になる前に何とかしないと、かなり難しい。
char name="-Fopen=[[映]君 と 僕 -Fopen=[ほげー] -PP -[15].AVI] -Fout=...";
ってあったら、どうすればいいと思う?
そんなことをする前に、引数の渡し方を変更しろ。 こういうレベルの奴の言うことは、目先の問題ではなく、根本の問題を解決して やる方が100倍簡単。
43 :
デフォルトの名無しさん :05/02/27 00:36:46
プログラミング初めた時から正規表現使ってた若い奴って こういう簡単な解析処理が書けないんだよな
>>38 >他にもこれはよさげってなビット演算ワザありませんでしょうか?
すぐは思いつかないです。
御免なさい。
代わりにビット演算とループで加算を実現するという無意味なワザなら…
x+=y
は確かこんなん↓
{
z=x^y; ビット毎の+
y=(x&y)<<1; 繰り上がり
x=z;
}while(y);
>>45 do です。抜けてました。ご指摘m(__)m
do{
z=x^y;
y=(x&y)<<1;
x=z;
}while(y);
>>23 すごい!できました
うーんビット演算ていろいろできますね〜
サンクスでした!
48
50
>>17 何故ビット演算にこだわるのか?と小一時間(ry
>>51 解決したんだからいいんじゃないのか?と小一時間(ry
53 :
デフォルトの名無しさん :05/02/27 12:53:33
> C99対応のコンパイラはどこにも存在しないが。 VC厨でたー
54 :
デフォルトの名無しさん :05/02/27 12:54:27
> みたいに if の()の中で宣言できる処理系ってあります? ありません。 > GCCだとできなかったんですけど。 当然。 C++でもできません。
55 :
デフォルトの名無しさん :05/02/27 13:07:50
c:を出てからe:に入るコード教えてください
56 :
デフォルトの名無しさん :05/02/27 13:14:30
CでCoroutineを実現するライブラリありますか? 標準Cじゃなくてもいいです
>>56 setjmp(),longjmp()使って自分で書け。
59 :
デフォルトの名無しさん :05/02/27 13:35:22
command promptでd:からc:に入るにはどう書けばいいですか?
c:
C言語すらない世界に突入。
62 :
デフォルトの名無しさん :05/02/27 13:40:46
63 :
デフォルトの名無しさん :05/02/27 13:44:15
インラインアセンブラを書くオフィシャルな構文ってあるの?
64 :
デフォルトの名無しさん :05/02/27 13:50:25
昨日まではなかった。
構文が無ければ書けないのだが。国際規格の構文を言っているのか?
>>63 「オフィシャルな」って意味がよく分からないが、「規格にあるか」
って意味なら無いんじゃない。コンパイラ依存。
67 :
デフォルトの名無しさん :05/02/27 13:51:57
なんで6分間の空白の後に一気に3レスもつくのさ。
しるか!
>>63 C++にはそういうのがあるはず。asmも予約語になっているし。
あくまでもC++での話、参考までに。
70 :
デフォルトの名無しさん :05/02/27 15:43:00
3:41:31 PM: void_No2: PageFaultって 3:41:41 PM: void_No2: SegmantationFaultみたいな、エラーの一種だと 3:42:00 PM: void_No2: おもってたらしい > 21歳女性眼鏡使用
71 :
デフォルトの名無しさん :05/02/27 15:46:05
慶応工学部です。何か質問ありますか?
72 :
デフォルトの名無しさん :05/02/27 15:46:41
それはにせものですね。本物は 慶應です
73 :
デフォルトの名無しさん :05/02/27 15:47:44
KO-SFC ノックアウト-スーパーファミコン
74 :
デフォルトの名無しさん :05/02/27 15:57:02
湘南工科大工学部です。何か仕事ありますか?
私は京大です。
京大ってあふぉなやつばっかだよな
東大・京大の人に会ったことも喋ったこともない 自分も周りもみんな低学歴なので
78 :
デフォルトの名無しさん :05/02/27 16:28:14
初心者です。 visual windows for BC++というのをゲットして "hello world"コードをコンパイルしたんですが、hello worldが ディスプレイにプリントされません。学校でやった時はDOSみたいな 画面にプリントされたんですが、なぜでしょうか?
79 :
デフォルトの名無しさん :05/02/27 16:28:51
77は正直すぎ。 76はおまえよりもっと低学歴だぞ。まわりにそういうひとがいるわけもない
>>78 なぜでしょうか?って言われてわかるわけないだろ
どういう状況なのか少しは説明しろ
本当の初心者は「初心者です」とは書かない
85 :
デフォルトの名無しさん :05/02/27 17:47:44
俺は現役京大生だけど
>>76 の言うとおり馬鹿ばっかりだよ
他大生と比べても酷いものがある
>>85 世間的には「京大」って、
「馬鹿」というよりは「基地外」の
イメージのほうが強いけど、
そこらへん、実際のところどうよ?
天才と基地外は紙一重 だからノーベル賞受賞者が出る 10人中5人が京大出身だったかな?
>54 ないんですか。なるほど。 いや、他で見掛けたちょっとしたプログラムなんですけど、そこだけがコンパイル通らなくて。 他の人は普通に使えてたみたい?だったから、処理系の問題なのかなと思ったんです。なんか不思議。
89 :
デフォルトの名無しさん :05/02/27 20:43:18
>>88 for文の間違いじゃないのか?と小一時間(ry
91 :
デフォルトの名無しさん :05/02/27 21:09:22
あるルーチンがどれくらいCPUを消費するか測定するのに clock()を使うのは適切ですか?
92 :
デフォルトの名無しさん :05/02/27 21:14:25
void printtree( struct record *tree ){ if( tree == NULL){ return; } else{ printtree( tree->left ); printf("%16s:%2d\n",tree->name,tree->score); printtree( tree->right ); } } void printtree( struct record *tree ){ if(tree){ printtree( tree->left ); printf("%16s:%2d\n",tree->name,tree->score); printtree( tree->right ); } return; } 参考書にあった二分木のデータ構造のリスト内容を表示する例で、再起処理を用いた物です。 上が参考書に書いてあったコードで、下がそれを元に僕が書き換えてみたものです。 プロの意見としては、どちらがよりすぐれたコードでしょうか?評価をお願いします。
93 :
デフォルトの名無しさん :05/02/27 21:16:59
このスレにプロなんていません
>>92 まあ何というか、どっちでもいい。
それより、再帰が深くなりすぎないように
カウンタ引数つけるとか、
繰り返しに書き換えてみるとかする方が有意義。
挑戦してみれ。
95 :
デフォルトの名無しさん :05/02/27 21:19:42
プロでなくても皆さんの方が絶対にスキルが上なので、誰でも答えてもらえれば幸いです。
96 :
デフォルトの名無しさん :05/02/27 21:20:54
>>91 実装による、としか言えない点では、適当ではない。
実装によらない選択肢が他には無いという点では、まず適当。
どの程度深く調べるか次第ですな。
97 :
デフォルトの名無しさん :05/02/27 21:22:00
>>94 カウンタ引数用意しなくていいのが、再帰の最大の利点だと考えていましたが、
やはり深くなりすぎるのはいけないんですね。
じゃあちょっとやってみます。ありがとう^^
>>96 ありがとうございます。
標準Cから外れますが、time()やgettimeofday()や
getrusage()を使うよりは適当ですよねえ?
そんなこともないのかな・・・
>>97 一般的なC言語の実装的には、線形スピードで再帰が深くなって
いくアルゴリズムは良くない。スタックは無限ではないから。
>>97 一番いけないのは、
>>94 のような奴の意見を
真に受けることだと思うのだが・・・
101 :
デフォルトの名無しさん :05/02/27 21:31:10
>>100 実際どうなんですか?最近nasmかじったばかりなので
>>94 さん
の意見も一理あるように感じるんですが・・・・
102 :
デフォルトの名無しさん :05/02/27 21:31:14
文字のアニメーションをさせようと思っています 次の文字の表示を待たせたいです 長い計算をさせる、 clock関数である時間になったら表示させる 等とやってみましたが CPU使用量が100パーセントになってしまう 嫌なので何か良い方法は無いですか?
>90 for(int i=0;i<=7;i++){〜} gcc -std=c99 ... で警告は出たものの通りました
106 :
94 :05/02/27 22:04:27
>>101 言葉が足りず、すまんかった。
とりあえず92の例はどっちでも機能は変わりません。
あとはポリシーの問題です。
>>94 で俺が言いたかったのは、再帰処理ってのは
スタックオーバーフローを起こす危険性があるから、
よく気をつけて使って下さいってことです。
例に挙げられてるツリーをトラバースする処理なんかは
特にね。
107 :
デフォルトの名無しさん :05/02/27 22:06:30
0からはじめるくせに<=にするなよ ぼけ ...という警告はでませんでしたか?
108 :
デフォルトの名無しさん :05/02/27 22:07:43
forだったらCでもC++でも通るのはあたりまえじゃないか
109 :
デフォルトの名無しさん :05/02/27 22:09:03
> for(int i=0;i<=7;i++){〜} > で警告は出たものの通りました それで警告出るって...その部分そのものは違ってないわけだから、 どこか他にバグあるんだろ? 全部かけよ ぼけ 実際にでた警告もな!
.cpp なら通るけど .c なら通らない(BCC5.5)
111 :
デフォルトの名無しさん :05/02/27 22:15:44
まずforの後ろに空白あけろ。セミコロンの後ろにもだ! で、 for (int i = 0; i < 8; i++) { ... } これが正しい。
112 :
デフォルトの名無しさん :05/02/27 22:16:43
> .cpp なら通るけど .c なら通らない(BCC5.5) そんなのはCコンパイラーとは呼べない。捨てろよぼけ
113 :
94 :05/02/27 22:18:28
んなもん、文中で宣言できるようになったのはC++からなんだからしょーがないじゃん(´・ω・`)ショボーン
115 :
94 :05/02/27 22:19:28
>>113 ぐは、名前残ってるし。
今日はいろいろ恥かいたから、もう寝る!
116 :
デフォルトの名無しさん :05/02/27 22:19:51
> んなもん、文中で宣言できるようになったのはC++から デマです。Cもできますね。C++はその真似でしょう(先にやっただけで)
118 :
デフォルトの名無しさん :05/02/27 22:20:36
113はなぜそこでわらう?
119 :
デフォルトの名無しさん :05/02/27 22:21:38
そんなものはありません > C99でも Cです。別に特別なCがあるわけじゃあない。C89はもうないです。
すみません、どなたか以下のプログラムをCygwin以外の POSIX環境で動かしてどのくらいの値になるか試して いただけないでしょうか。 入力は20Mbytesくらい(私が使ったのはJREのrt.jar です)、出力は/dev/nullにリダイレクトでお願いします。 Cygwinでは「10324 - 10 = 10314」と出たんですが こんなに遅いのはCygwinレイヤのせいなのか気になって・・・ #include <time.h> #include <stdio.h> int main(int argc, char *argv[]) { int c; clock_t c1, c2; c1 = clock(); while ((c = fgetc(stdin)) != EOF) { fputc(c, stdout); } fflush(stdout); c2 = clock(); fprintf(stderr, "%u - %u = %d\n", c2, c1, c2 - c1); return 0; }
121 :
デフォルトの名無しさん :05/02/27 22:23:06
そんな言い方するからVC厨がばかのひとつおぼえみたいに言うわけだ。 ちゃんと「ふつうのC」ならできる、といえばいい > 現在の規格に乗っ取った文法
122 :
デフォルトの名無しさん :05/02/27 22:29:13
0 - 0 = 0 としか出んぞ
>>92 どうでもいいけど、
if (...) {
return;
} else {
...;
...;
}
ってのは気持ち悪いな。
return使うなら
if (...) {
return;
}
...;
...;
でいいし、そうでないなら
if (...) {
} else {
...;
...;
}
でいいよ。
124 :
デフォルトの名無しさん :05/02/27 22:31:48
正しく書き直してみた。 #include <stdio.h> #include <stdlib.h> #include <time.h> int main(int argc, char **argv) { clock_t c1, c2; int c; c1 = clock(); while ((c = fgetc(stdin)) != EOF) fputc(c, stdout); fflush(stdout); c2 = clock(); fprintf(stderr, "%lu - %lu = %ld\n", c2, c1, c2 - c1); return EXIT_SUCCESS; }
125 :
デフォルトの名無しさん :05/02/27 22:33:41
> ってのは気持ち悪いな。 こいつはぼけ。ちゃんとその2つは使い分ける必要がある。 実際に出るコードは同じでも、たとえばパラメーターエラーなどの 異常系なら、if-returnだけ切り離すが、そうでない場合はむしろif-elseがよい。 returnは後ろにつければいいし
>>122 ええっ、マジですか
超はいすぺっくマシンですか?
127 :
デフォルトの名無しさん :05/02/27 22:35:59
ポインタ、構造体などは分かるレベルです。 分かるというだけで使えません・・・。 そこで演習問題をたくさんときながら最初っから復習したいのですが、 演習が豊富な本はありませんか?
128 :
デフォルトの名無しさん :05/02/27 22:36:57
> 超はいすぺっくマシンですか いえ、ふつうの5万8000円程度のUnixマシンです。
129 :
デフォルトの名無しさん :05/02/27 22:37:25
130 :
デフォルトの名無しさん :05/02/27 22:38:48
131 :
デフォルトの名無しさん :05/02/27 22:40:19
133 :
デフォルトの名無しさん :05/02/27 22:44:04
>>120 55MBくらいのファイルを開いて、12760000 - 0 = 12760000 だった。
134 :
デフォルトの名無しさん :05/02/27 22:44:11
当然解答は出てませんよ!
135 :
デフォルトの名無しさん :05/02/27 22:45:41
>>134 そりゃそうだろうなあ。
答え載ってたら意味ねーじゃん
>>134 やっぱり・・・。
なにか解答のあるものありませんか?
>>133 ありがとうございます
やっぱり激しく環境依存の数値になるんですね
139 :
デフォルトの名無しさん :05/02/27 22:47:50
宿題スレに丸投げすれば誰か解いてくれるよ。
140 :
デフォルトの名無しさん :05/02/27 22:48:42
> 後半を無視してぼけとか言っちゃ なんて言っているうちは、いくらぼけって言われてもしかたねーだろうなこのぼけは 要点は最初の3行以内に書けって学校でならわなかったか? ふつう、そのあとは読み飛ばすんだよ。
clock()の話とはあんまり関係ありませんが、fgetc(), fputc()を getc(), putc()に変えてもほとんど数値は変わりませんでした。 まあマクロと関数の差なんてそんなもんですよね。
142 :
デフォルトの名無しさん :05/02/27 22:55:37
128==131のやつよりは、うちのは1ランク遅いが(前者はG5、うちのはG4) 9.5Mのファイルで 128 - 1 = 127 と出た。
136==140? 必死だな。
#include <stdio.h> #include <stddef.h> int main(){ wchar_t wstr[] = L"漢字"; char str[] = "漢字"; printf("%s\n",wstr); printf("%s\n",str); return 0;} 2バイト文字を使いたいのですが、wstrの方はなにも表示されません。 strはちゃんと表示されます。どこがいけないのでしょうか? お願いします。 もひとつ char でできるのに wchar_t は何のためにあるのですか?
>>144 wchar_tは鬼畜米英が作成した国際化機能なので役に立ちません
>>147 ,148
回答ありがとうございます。
wchar_t の使う例をあげたりはできますか?
>>149 いくら頑張ってもlocaleの実装がきちんとしてない環境では
うまく動きませんよ。そしてそういう環境の方が多い。
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
int i, len;
/* 環境のnative文字コードで保存すること */
char buf[] = "あいうえお";
char cbuf[100];
wchar_t wbuf[100];
/* エラーチェック省略 */
setlocale(LC_ALL, "");
mbstowcs(wbuf, buf, 100);
for (i = 0; wbuf[i]; i++) {
len = wctomb(cbuf, wbuf[i]);
printf("%.*s\n", len, cbuf);
}
>>150 勉強になりました。
ありがとうございました。
>109 警告: return type defaults to `int' 警告が出たのは for が記述してある行だけです。for の中身は別の行。 レスの盛り上がりを見てまぁ規格が色々と倒錯してるってのは分かりましたw
153 :
デフォルトの名無しさん :05/02/28 05:23:14
#include <stdio.h> #include <time.h> #include <conio.h> #define LCD_CMD 160 #define LCD_CMD1 40 #define LCD_CMD2 6 #define CLR_HOME 1 #define input #define end void main(void) {FILE *lcd; /*stream for lcd data*/ unsigned char LCD_POS1=0xC3; unsigned char LCD_POS2=0xCB; unsigned int value=0; setbuf(lcd,NULL); fprintf(lcd,"%c%c",LCD_CMD,LCD_CMD1); fprintf(lcd,"%c%c",LCD_CMD,40); fprintf(lcd,"%c%c",LCD_CMD,0xC); fprintf(lcd,"%c%c",LCD_CMD,LCD_CMD2); fprintf(lcd,"%c%c",LCD_CMD,CLR_HOME); fprintf(lcd,"%c%c",LCD_CMD,LCD_POS1); fprintf(lcd,"%c%c",LCD_CMD,LCD_POS2); if input == 1 value++; if input == 2 value++; value++; if input == x return; end if fprint(lcd,"%c%c",LCD_CMD,LCD_pos); while (!kbhit()){} getch(); return; } これをコンパイルしたら以下の様なエラーが出ました。なぜでしょうか? Error E2376 ..\projc2.c 34: If statement missing ( in function main
超初心者なのでこういう書き方は始めて見た どんなコンパイラ使ってるんだろう・・・
エラーメッセージも読めないのか。あほ。 main()の戻り値はintじゃ。ぼけ。
156 :
デフォルトの名無しさん :05/02/28 06:47:24
masm32って何やねん? コンパイラー?
157 :
デフォルトの名無しさん :05/02/28 07:40:33
>>156 : 05/02/28 06:47:24
masm32はアセンブラ
>>153 エラーメッセージにかかれているとおり、ifに括弧がない。
159 :
デフォルトの名無しさん :05/02/28 08:07:31
> 警告: return type defaults to `int' > 警告が出たのは for が記述してある行だけです。 ぼけ、その行で呼んでいる関数のプロトタイプが抜けてるんだろ! それぐらいつけとけ! ぼけ
160 :
デフォルトの名無しさん :05/02/28 08:09:08
154と155と156は同じレヴェルにだめすぎ。
161 :
デフォルトの名無しさん :05/02/28 08:13:50
どんなにまともな回答でも「ぼけ」の一言で、こいつにだけはお礼の一言でさえ言いたくなくなる
162 :
デフォルトの名無しさん :05/02/28 08:19:02
ふふふ ぼけ!
163 :
デフォルトの名無しさん :05/02/28 08:20:08
155はかなり英語だめなぼけだとみた。 すごいよなあ「mainがint」だって、どう関係あるんだ? ;-)
164 :
デフォルトの名無しさん :05/02/28 08:25:09
反応を楽しんでいる「ぼけ」荒らしにレス不要。
この板はAA禁止ですか? このスレはage推奨ですか?
166 :
デフォルトの名無しさん :05/02/28 08:51:52
あほばっか。
168 :
166 :05/02/28 08:58:51
わかったからいいや。三きゅ
169 :
167 :05/02/28 09:01:52
ここはレベルの低いたこの集まりですか?
170 :
デフォルトの名無しさん :05/02/28 09:12:09
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland ..\3.c: Error E2141 ..\3.c 11: Declaration syntax error Error E2040 ..\3.c 16: Declaration terminated incorrectly *** 2 errors in Compile *** なんでこれがエラーなんでしょうか??? unsigned char array[8]; unsigned char ch ; unsigned char number; unsigned short int count, first =0; { printf("\ Type in a number value\n"); scanf("%f" &array[8]);
>159 文句いいながらも朝からレスthxですぼけ。 でもその行は for(int i = 9; i >= 0; --i) しかないんですよぼけ。よくわかんないですぼけ。
172 :
デフォルトの名無しさん :05/02/28 09:13:16
>>167 つまんねーこと言ってんじゃねー、ぼけ。
ぼけてた。ごめん。
unsigned short int count, first =0; ↑このカンマは何? scanf("%f" &array[8]); ↑???
単純なコンパイルエラーも自力で直せない奴は、 プログラミングを諦めて欲しい。
176 :
デフォルトの名無しさん :05/02/28 11:46:29
ここは素人を罵倒しかしない奴らの集まりか? ネット以外の世界では大したことのない奴らっぽいな。 インターネット恐るべし。
>unsigned short int count, first =0; > ↑このカンマは何? あと、こんな事を書く奴も人に教えようとするのは止めて欲しい。
>>176 お前が懇切丁寧に答えてやれば終わる事だ
179 :
デフォルトの名無しさん :05/02/28 12:06:20
C言語なら俺に聞け! Part 103 ↑↑↑ スレタイトル・ 誰も教えません。分かりません。 ネット上でいきがってる人間の集まりです。
ここで質問するやつは負け組み。
181 :
デフォルトの名無しさん :05/02/28 12:17:24
↑ ネット上で負けとか勝ちとか言ってる真の負け組み
早稲田大学医学部の俺がなんでも教えてやろう
広島県立宮島工業高等学校卒の俺が何でも教わってやろう。
ねえ、おぢさんたち、そんなにひまなの?
はっきり言って、ヒマです。
おぢさんじゃないよ
ごめんね、おばちゃんたち
190 :
デフォルトの名無しさん :05/02/28 16:24:37
「ポインタ」についてなんだが /*--- 文字列sをdにコピーする(参考書より) ---*/ char *str_copy(char *d, const char *s) { char *t = d; while (*d++ = *s++) ・・・(1) ; return (t); } (1)の "*d++ = *s++" で文字列をコピーする方法は 勧められるものじゃないのでは、と直観でおもたのだが この使い方に問題はあるか、もしダメだったら普通どう表すか の二点を教えてくれ。レベル低くてスマソ
>>190 >while (*d++ = *s++)
*s を *d にコピーし
s 及び d をインクリメントし
*d が 0 になるまで繰り返す。
ごく普通ですね。
>>191 すばやい回答どうも
マジですかwこれからもっと修行を積みますわ
お舞いら、早く気づいてくれ…早稲田に医学部も薬学部も無いことに…
無粋な奴だ
じゃあ漏れは、ぬるぽ学部という事で。
197 :
デフォルトの名無しさん :05/02/28 17:23:08
Cってコツとかあるんですか? Cがすごく苦手で困っています。コツとかあれば教えてください。 お願いします。
コツ:慣れ
コツというかコシを使ってやるといいよ
人をいかにうまく利用するか わからんところは人に聞いて丸写しするか、あるいはやらせるかすればいい
201 :
デフォルトの名無しさん :05/02/28 17:28:17
コシ?
コシの無いうどんはマズい。気をつけろ!
203 :
デフォルトの名無しさん :05/02/28 17:33:58
わかりました。もう慣れですね!!では、頑張ってみます。 ありがとうございました。
>>197 Cに限らずいいコードをたくさん読むことが上達の早道。
逆に糞コードばっかり見てると段々とほんとのぼけになる。
>>197 Cに限らずいいコードをたくさん読むことが上達の早道。
逆に糞コードばっかり見てると段々とほんとのぼけになる。
初心者のうちは糞コードか良いコードかの区別が出来ないのが問題なんだよなぁ〜
207 :
デフォルトの名無しさん :05/02/28 19:28:33
大人になってからでも区別出来てない人もいるけどね
>>206 漏れは習い始めMSのコードを「あの有名なMSが書いてるんだから間違いない」
と思ってスタイルやその他もろもろを盗みまくった。
マジで失敗だったよ。
マクロ使いまくり、汚いハンガリー記法、不要なdynamic_cast、
new(nothrowでない) の戻り値の NULL チェック等、典型的な
糞コードだった。
教えてください。通常インクリメント演算子で前置でも後置でも 同じなら前置(++i)にしたほうが効率がいいのですよね? たしかそんなこと本に書いてあったと思ったのですが。 後置だと一時変数が必要になるとかで・・・。 ただ、解説書の中には堂々と後置形をつかってるのもあるんですよね。
>前置でも後置でも同じなら 同じじゃないんだろ
あ、失礼、同じ処理になるなら・・・ということです。
Cだとあんま気にしなくていいよ。組み込み系だと 後置を前置に最適化できるから。 C++だとオーバーロードやらiteratorの関係で 前置を使うから、統一目的で前置でも後置問題 ないときは前置を使う。
s/組み込み系/組み込み型
そうなんですか、どうも・・・じゃまぁ前置を使いましょうかね
215 :
デフォルトの名無しさん :05/02/28 19:51:36
forなんかはたいてい後置 意味もなく前置使うのはアホ
というからには後置にも意味があるんですか? forだとなぜ後置がいいのでしょうか?
217 :
デフォルトの名無しさん :05/02/28 19:55:01
標準関数のソースとかそういう風だし
というか、意味もわからず使い分けてる方がアホだと思うのだが
値を参照しないのであれば、どっちでもいい。
; a++ mov eax, DWORD PTR _a$[ebp] add eax, 1 mov DWORD PTR _a$[ebp], eax ; ++b mov ecx, DWORD PTR _b$[ebp] add ecx, 1 mov DWORD PTR _b$[ebp], ecx 最適化無しで、コンパイル結果一緒
ふむふむ、というと後置で一時変数を使うと本で読んだ気がするのは なんだろう・・C++?いずれにせよ、昔の話なんですかね。
自分のコンパイラで調べてみたら?
223 :
デフォルトの名無しさん :05/02/28 20:14:54
>>220 アドレス加算→メモリアクセスを一命令でできる環境もあるよ。
>>223 そういう命令があったとして、
結果の参照が無い場合には
まともなコンパイラなら、
どっちの場合もその命令を使うでしょう。
225 :
デフォルトの名無しさん :05/02/28 20:24:20
参照しないのにインクリメントするの?
結果の参照じゃなくて、値の参照ですね;
(++i)の値を、参照してなければ、 前演算でも後演算でも、差は無いって事。 あたりまえ。
C++だとコンパイラは後置を前置に最適化出来ないから、 普通は前置で統一するが、Cだと好きな方使えばいいんじゃ ないか?
そんなマニアックな速度を気にする前に、 もっと分かりやすいソースコードを書いてくれ、 おまえら・・・
マニアックな速度とというより、 普通に避けられる無駄を避けるか避けないかの話。
>>229 Hacker's Delightでも読んどけ。
232 :
デフォルトの名無しさん :05/02/28 21:41:13
>>229 性能面に限らず機能面の問題に対しても同じようなことしか言わん(言えない)アフォに
わかりやすいコードじゃ勝負に勝ち目ねえんだよ
上っ面なめただけでいい気になってるハエに用はない、とっとと失せろ
標準関数のソースを見てみたけど普通に後置つかってます。 聞きかじった知識だけ多くて経験が浅いのも考え物だね。
特定の環境や分野の経験だけでものを言うのも考え物だね
標準関数のソースがどうとか、理論のかけらもないな。 聞きかじった知識の方がまだマシだ。 自分が後置派だから前置の考えを全否定したいだけだろ
236 :
デフォルトの名無しさん :05/02/28 22:21:42
結果の確認もロクにしていない単なる思いこみが「理論」とかほざく机上の96500クーロンいらねー
>>236 組込型なら最適化できるからどっちでも変わりないって書かれてるだろ
アホかお前
そんなこと気にしていたら高級言語の意味無いな。ワロス あっCは低級言語だったな。スマンカッタ
239 :
デフォルトの名無しさん :05/02/28 22:26:38
>>237 どこに?
最適化つーた瞬間からツール依存だぜ
アフォかをそのまま返す
別に前置に統一しとけばいいじゃん。C++使う人とか統一しとけば 間違いないでしょ?後置使う意味は前置使う意味よりうすいと思うぞ。 単に○○のソースがそうしてるからとか、慣習からきてるだけだから。
>>240 他のソース見てやってもいいけど
あいにく暇じゃないんで
探しといてくれる?
243 :
デフォルトの名無しさん :05/02/28 22:31:27
最近の若造は汗かかねえもんなあ・・・
244 :
デフォルトの名無しさん :05/02/28 22:33:17
最適化とか嬉しそうにほざきながら変数はメモリとか思いこんでたり同時並列を知らなかったり・・・痛杉
>>239 後置を前置に最適化できないコンパイラしか使ったこと無いのか?
アホはお前だろ
とりあえず一人必死にageてる香具師がいることは分かった
247 :
デフォルトの名無しさん :05/02/28 22:34:53
プ
結局どっちがいいんですか?
特に意味がなければ後置が一般的
C言語のスレなので結局どっちでもいい。
252 :
デフォルトの名無しさん :05/02/28 22:43:37
移植性を隠れ蓑にしてるアフォはいつでも区別がつく 利害がない限り見逃してやるのは構わんがテリトリーが当たったら容赦しない
必死すぎ
254 :
デフォルトの名無しさん :05/02/28 22:52:31
明日のメシがかかってんだよ 必死がおかしけりゃ笑え
後置が一般的て、後置の意味はまったくねぇじゃん。 前置に最適化するとかしないとかの問題や、C++使うときとか、 すべてをひっくるめて前置で統一することになんらデメリットはないでしょ。
結論 主にCだけ使う香具師→好きな方使え。ただしどっちも使える場面では統一しろ。 C++とかDとか使う香具師→前置使え。
(∩゚д゚)アーアーきこえなーい
258 :
デフォルトの名無しさん :05/02/28 23:02:35
>後置の意味はまったくねぇじゃん。 おまえがプログラム書くことと同じくらいなw
>>256 MFCのソース見てみたんですが、ほとんど後置でした。
>>258 またお前かよ
お前はお前で好きな方つかってりゃいいだけだろがよ
無意味な煽りしか出来ないんだったらすっこんでろ
261 :
デフォルトの名無しさん :05/02/28 23:13:51
>>260 意味通じてねえやつが無意味とか言うな・・・いや、それは仕方ないな
++i; なんとなく収まりが悪い。 i++; やっぱりこの方がかっこいい。
263 :
デフォルトの名無しさん :05/02/28 23:16:22
265 :
デフォルトの名無しさん :05/02/28 23:21:52
教えてあげないよ じゃん
C++であって++Cではないところに本質的な意味が隠されていると思う。
>>259 intとかの組み込み方に対しては前置後置は結果を使わなければ全く同じ。
クラスのオペレーターオーバーロード時に初めて効率の違いが出てくる。
68000系のCPUでは、 c = *p++ c = *--p の方が、 c = *++p c = *p-- よりも効率が良い。
2へぇ〜
271 :
デフォルトの名無しさん :05/02/28 23:32:44
HPでBBS立てたい時、C言語使う?
Perl使う
273 :
デフォルトの名無しさん :05/02/28 23:35:34
じゃ!このスレと関係無いか・・・; サンクスoソースとったけど作り方がわからなかった
BBS立てたいときは既に完成したものを拾ってきます
275 :
デフォルトの名無しさん :05/02/28 23:37:23
拾って、メモ帳で開いたら化けて出た;
277 :
デフォルトの名無しさん :05/02/28 23:45:09
わざわざ・・・サンクスw 逝ってくる〜
278 :
デフォルトの名無しさん :05/02/28 23:52:28
うちの大学の教授は++iで記述してた
279 :
デフォルトの名無しさん :05/02/28 23:56:50
俺、矢フーでHP作っててんo HTMLとjavaはヒットするけど、こういうの探すのが大変だった
280 :
デフォルトの名無しさん :05/03/01 01:17:09
281 :
デフォルトの名無しさん :05/03/01 01:38:29
a = b = c = d = e = 0 ; この書き方ってまずいですか?
別に
283 :
デフォルトの名無しさん :05/03/01 01:40:49
284 :
デフォルトの名無しさん :05/03/01 01:41:26
> C++だとコンパイラは後置を前置に最適化出来ないから これウソ
>>284 inline Hoge& Hoge::operator++()
{
++n_;
return *this;
}
inline const Hoge Hoge::operator++(int)
{
std::cout << "ぬるぽ" << std::endl;
}
こんなんも最適化できるってこと?
>>284 せめて禿本なり、Effective C++ なり、Exceptional C++
くらいは読んでおきましょうね^^;
アホが懲りずにまた来たようだな
ゴガギーン
ドッカン
m ドッカン
=====) )) ☆
∧_∧ | | / / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( )| |_____ ∧_∧ < おらっ!出てこい
>>284 「 ⌒ ̄ | | || (´Д` ) \___________
| /  ̄ | |/ 「 \
| | | | || || /\\
| | | | | へ//| | | |
| | | ロ|ロ |/,へ \| | | |
| ∧ | | | |/ \ / ( )
| | | |〈 | | | |
/ / / / | / | 〈| | |
/ / / / | | || | |
/ / / / =-----=-------- | |
289 :
デフォルトの名無しさん :05/03/01 05:49:29
int main( int argc, char* argv[] ) argv[0] が "C:\Documents and Settings\hoge.exe" argv[1] が "C:\Documents and Settings\foo.txt" そして、 sprintf( buf, "%s %s", argv[0], argv[1] ) ; で結合。 それを system( buf ) ; の形で、引数付きで、実行させようとしているのですが、 『'C:\Documents' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。』 と出ます。考えられる、エラーの原因として、何があるでしょうか?
>>289 よくわからんがくっつけるだけなら
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
char buf[200] = { "0" };
if (argc == 3){
strcpy(buf, argv[1]);
strcat(buf, argv[2]);
puts(buf);
}
return 0;
}
ああ、勘違いした 290は無かったことに
>>289 空白文字のせいで正しいパスがみつからなんでは。
sprintf( buf, "\"%s\" \"%s\"", argv[0], argv[1] ) ;
にしてみたらいかがでしょう。
294 :
デフォルトの名無しさん :05/03/01 08:02:17
295 :
デフォルトの名無しさん :05/03/01 08:53:03
290だったぞ
stdinて入力の最後は必ず'\0'になってると保証されてましたっけ? というか、出力してみるとどうやらそのようですが。 stdinもファイルと考えるとEOFでもよさそうですが、やはりそうなると int型で受けなければいけないからですかね?
297 :
デフォルトの名無しさん :05/03/01 12:10:52
>>296 stdinて入力の最後は必ず'\0'になってると保証されていないと思います。
298 :
デフォルトの名無しさん :05/03/01 12:49:19
ねえ、おぢさんたち、そんなにひまなの?
ああ。昼休みだからな。
まぢですか? となるとシステムは標準入力の終端をどうやって検出しているのでしょうか? それと、そもそもEOFとはファイルの終端に書かれている値そのもの? それともシステムがファイル終端を検出して返すための値?
>>301 EOFのキャラクタコードの後にデータが存在していてもおかしくは無い
\0の後にも同じ
>>296 stdin が '\0' を送出しているわけではありません。
stdin から入力することのできる関数が '\0' を
付加しているのです。
そうですか。じゃあ標準入力に限らず、普通のテキストファイルとかでも ファイルの終端には決められた特定の値が書き込まれているというわけでは ないのですか?OSはどうやって最後を知るのでしょうか・・・。
(-=・=- ∀ -=・=-)ニヤニヤ
たしかに昔は終端にEOFのキャラクタコードを付け、それによって管理 しているOSもあった
308 :
デフォルトの名無しさん :05/03/01 13:16:39
#include <dos.h> #include <stdlib.h> int main() unsigned char array[8]; unsigned char ch ; unsigned char number; unsigned short int count, first =0; { printf("\ Type in a number value\n"); scanf("%f" &array[8]); first = 0; for(count =1; next < strlen(array); ++count if (array[count] >= '0' && array[count] <= '9') { strcpy(number, &array[first], count - first); number[count - first] = '\0'; printf("%f\n",number); first = count } printf("%d\n", strcpy(number, &array[first])); return(0); } これどう思う?
>>305 大抵のファイルシステムでは、ファイルサイズくらい情報として持ってるでしょ。
311 :
デフォルトの名無しさん :05/03/01 14:05:27
リンクリストとかをCで書くことが結構あるんですが、 C++にあるSTLやboostみたいに C言語にもそういう広く使われてるライブラリって ないんでしょうか?
C++が好きならC++使えばいい
313 :
デフォルトの名無しさん :05/03/01 14:13:39
wind XP&visual windows c++で以下のコードを書きました。2つのエラーが出ました。 #include <dos.h> #include <stdlib.h> int main() unsigned char array[8];←ここにはSyntax errorがでました。 unsigned char ch ; unsigned char number; unsigned short int count, first =0; { ;←この行にDeclaration ; terminated incorrectly printf("\ Type in a number value\n"); がでました。 scanf("%f" &array[8]); first = 0; for(count =1; next < strlen(array); ++count if (array[count] >= '0' && array[count] <= '9') { strcpy(number, &array[first], count - first); number[count - first] = '\0'; printf("%f\n",number); first = count } printf("%d\n", strcpy(number, &array[first])); return(0); } Syntaxエラーのほうは何がいけないのか、まったく理解できません。 2つ目の方は括弧をずらしてみたり消してみたり色々駆使したのですが エラーが消えません。どなたか助けを・・・・。お願いします。
>>313 変数宣言の場所が間違ってる。
int main()
{
変数の宣言
printf("Type in a number value\n");
...
ですよ。ちゃんとした入門でも読んだほうがいいと思うよ。
316 :
デフォルトの名無しさん :05/03/01 14:21:45
void mainとint mainって何が違うの?
mainの戻り値はint型と決まっているのだよ
( ´,_ゝ`)プッ
C言語使えそうだなと零細IT企業の人間に思わせる資格を教えてください。 名称と、級があれば何級かも。
>>321 この業界、資格なんてケツ拭く紙にすらなりません
今までにどんな物を作りましたか?といわれたら答えられるくらいの物を作ってなさい
IT企業なら資格じゃごまかせないな
>>308 >>313 しかし、ここまで間違いだらけのソース書ける奴もすごいな。
デバッグの問題に使えそうだよw
326 :
デフォルトの名無しさん :05/03/01 15:09:38
>>325 名前:デフォルトの名無しさん :05/03/01 14:58:55
直してみろよ。ハッタリ小僧。
327 :
デフォルトの名無しさん :05/03/01 15:13:40
C, C++(gcc)で任意の文字コードをEUCやUTF-8に変換したいのですが, 良いライブラリがあったらお教えください。 ちょっと探してみたんですがシンプルで使いやすそうなのが見つかりませんでした。
329 :
デフォルトの名無しさん :05/03/01 15:18:58
>328 どこにいけばよいですか?
331 :
デフォルトの名無しさん :05/03/01 15:20:09
いいかた間違えた。 基本を知ってそうな感じに見える資格は何ですか? で、どう?
仮想VRAMて何ですか?
334 :
デフォルトの名無しさん :05/03/01 15:21:28
>>333 Virtual Video Random Access Memory (w
336 :
デフォルトの名無しさん :05/03/01 15:22:09
337 :
デフォルトの名無しさん :05/03/01 15:23:55
ommaera minnna hima dana〜〜〜
omaemona〜
>>336 omaigotokinyakoredejuubun (w
340 :
デフォルトの名無しさん :05/03/01 15:29:50
fuck you, omaera〜〜〜
>>340 go to hell!!!!!!!!!!!!!!!!!!!!!!
damn you! sun of a bitch!
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<io.h> #include<FCNTL.H> void main( int argc, char* argv[] ) { FILE *fp, *w_fp ; char buf[255] ,name[255] ,a[300] ; int fh ; long size ; char drive[_MAX_DRIVE], dir[_MAX_DIR] ; char*b = " \"C:\\naho.txt\"" ; _splitpath( argv[0], drive, dir, NULL, NULL ) ; _makepath( name, drive, dir, "dada", "txt" ) ; strcpy( a, "\"C:\\hoge.txt\"" ) ; w_fp=fopen( name, "w+b" ) ; fprintf( w_fp, "\"C:\\hoge.txt\"" ) ; fprintf( w_fp, " \"C:\\foo.txt\"" ) ;/* dada というファイルにデータをまとめる。*/ fclose( w_fp ) ; fp=fopen( "dada.txt" ,"r" ) ; fh=open( "dada.txt" ,_O_RDONLY ) ; size=_filelength( fh ) ; fread( buf, size, 1, fp ) ; fclose( fp ), _close( fh ) ; system( buf ) ; }
343 :
デフォルトの名無しさん :05/03/01 15:43:32
what the fuck is your problem, you motherfuckin' nigger.
345 :
デフォルトの名無しさん :05/03/01 15:44:09
you damn ass motherfucker.
292さんのやり方で、できるのに、これでは望むように動作しません。 何故なのでしょう。 もうお手上げです、誰か助けて下さい。
347 :
デフォルトの名無しさん :05/03/01 15:46:06
>>342 訂正
char*b = " \"C:\\naho.txt\"" ;
char*b = " \"C:\\foo.txt\"" ;
名前の付け方は適当で、読みにくいかもしれないですがお許しください、
scanfとかのフォーマットの仕様ってどこかに詳しくのってませんか?
351 :
デフォルトの名無しさん :05/03/01 16:11:07
KISS MY FUCKIN' ASS!!!!!!!!!!!!!!!!!!
Are You Deaf? shithead!
You! Motherfucker! Fuck Off!!
ゲームを作っててわからなくなっちゃいました。 ググってみたり本見てもさっぱりわかりません。 最近はC言語なのかすらわかりませんorz 先輩、質問です! 「at sta pa egne ben」ってなんのことなんでしょう? わかるかたいらっしゃいませんか・・・?
初心者って文字を見るだけで教える気が萎える いや、今回は何のことかわからないから関係ないが
I wanna suck your oyster!bitch!HAHAHA.
>>357 I don't wanna be teached by ya!!!!!!!!!!!!
fuck off!!!!!!!!!!sucker!!!!!!!!!!!!!!!
>>358 SUCK MY FUCK'N DICK!
他をあたります。 ありがとうございますた。
C++にはbool型というのがありますが、C言語の場合たいてい標準で TRUEやFALSEというのがint型で定義されてるかと思いますが、 例えばa==0という式が真だったときの式の値と、TRUEの値は必ず一致する ものなのでしょうか?
364 :
デフォルトの名無しさん :05/03/01 17:13:50
コールツリー作成ソフトで最強なのはなんですか 対象ソースはC++ 教えてエロイ人
>>363 >C言語の場合たいてい標準でTRUEやFALSEというのがint型で定義されてるかと思いますが
されてない。
にゃははは
#include <stdbool.h>
バブルソートについてだけど /*--- 配列dataの先頭n個の要素を昇順にソート ---*/ void sort(int data[], int n) { int k = n - 1; while (k >= 0) { ・・・☆ int i, j; for (i = 1, j = -1; i <= k; i++) if (data[i - 1] > data[i]) { j = i - 1; swap(&data[i], &data[j]); /* ポインタが指す整数の値を交換 */ } k = j; } } ☆の (k >= 0)は「>=」ではなく「>」で十分だと思うんだが、 「>=」の必要性を教えてくだされ
>>370 You make my penis enlarge!!!!!!!!!!!!!!!!
質問がヘタクソで罵倒された初心者が荒らしてますねw
375 :
デフォルトの名無しさん :05/03/01 21:25:47
#include <kusosure.h>
>>374 きっとHSPスレの連中ですぜ。なにせ、やつらはム板のゴミだめですからねぇ。
>>370 そう思うなら勝手に「>」にすればいい。
>>377 回答THX
そういわれると身も蓋もないが・・・(´・ω・`)
できれば、>= にしている意味をキボンヌ
>>379 何故、「>」に変更して試してみない?
色々なケースで試してみてどう変わるか、
自分の目で確かめろ。
>>380 Hey sucker!!!!!!!
suck my dick soooooooooooooooooooon!!!!!!!!!!!
382 :
デフォルトの名無しさん :05/03/01 22:19:26
> C++にはbool型というのがありますが、C言語の場合たいてい標準で ぼけ。Cでもふつう bool / true / false だ。常識!
383 :
デフォルトの名無しさん :05/03/01 22:21:30
> a==0という式が真だったときの式の値と、TRUEの値は必ず一致する ものなのでしょうか? それと一致するのはCではtrue。 TRUEなんてのはどこでも定義されていない。 Cでは、 0だったら偽 0以外だったら真 偽だったら0 真だったら1 つまり、true == 1 は常に成り立つ。
なんでやねん
偉そうにしてるヤシ程関数一つまともに作れないものだwwwwww ここのスレなど零細ITのキモヲタ系が集まってるんだろうなw
c言語でオーバーフローの検出ってどうやればいいですか?
>>387 何がしたいのか、何が問題なのか、
書かれていないわけだが…。
int型とかdouble型です。
394 :
デフォルトの名無しさん :05/03/01 22:35:17
>>342 のやつです。
#include<stdio.h>
#include<stdlib.h>
#defineDEF_EXE"C:\\text_check.exe"
#defineGOKUU_TXT" \"C:\\Documents and Settings\\012345\\desktop\\test.txt\""
int main( int argc, char* argv[] )
{
char name[255] ;
sprintf( name, "%s%s" ,DEF_EXE, GOKUU_TXT ) ;
printf("%s",name) ;
system( name ) ;
return 0 ;
}
これはうごくのに、DEF_EXE を "\""C:\\text_check.exe"\""
にすると、動かないのは何故なのでしょうか?
>>383 C言語ではないという意味だろうが、「どこでも定義されていない」ってのが気になった
windef.h
>>394 これは何?
↓ ↓
"\" " C:\\text_check.exe " \""
397 :
デフォルトの名無しさん :05/03/01 22:41:16
書き間違えました。 #define DEF_EXE "\"C:\\text_check.exe\"" としたら、動かないのは、なぜなのでしょうか。
>>391 int x,y;
x=100
y=100;
if(x+y>INT_MAX){
puts("検出");
}
else{
}
上がってたので質問 intの配列って作ったとき int array[10] 全て0で初期化されるんですか
>>399 いいえ、そうとは限りません。
グローバル変数として宣言した場合は0に初期化されることは保証されていますが、
それ以外は不定です。
#include<stdio.h> #include<stdlib.h> #define DEF_EXE "\"C:\\text_check.exe\"" //#define DEF_EXE "C:\\text_check.exe" #define GOKUU_TXT " \"C:\\Documents and Settings\\012345\\desktop\\test.txt\"" int main( int argc, char* argv[] ){ char name[255] ; sprintf( name, "%s%s" ,DEF_EXE, GOKUU_TXT ) ; printf("%s",name) ; system( name ) ; return 0 ; } プログラムは動きますよ。 (意図どおりかどうかは別にして)
402 :
デフォルトの名無しさん :05/03/01 22:44:58
いや、ローカルでもstaticをつければ0に初期化される。
自分のは ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。 と、出て動きません。どうすれば直りますか?
>>400 そういえばグローバル変数でした
ローカル変数は無理なのね
ありがとうございました
>>403 まず、コマンドラインの使い方を覚えろ。
僕はからかわれたのですか?
>>404 ちなみにint a[10] = {1, 2, 3};とすると残りのメンバは0で初期化されることが保証されている。
コマンドラインで、 "C:\text_check.exe" "C:\Documents and Settings\012345\desktop\test.txt" このようにすると、ちゃんと、test.txt を引数として、実行してくれるのですが、
>>407 それってローカルの話?
そうだっけ?
C++じゃなくて?
まじで?C?
昔と仕様変わった?
410 :
デフォルトの名無しさん :05/03/01 23:33:01
>>409 いわゆるC89からそうなっているが。もちろんローカル変数も。
FUCK!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
WOW!!!!!!!!COOOOOOOOOOOOOOOOOOOOOOL!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
かなり古いCの本には、ゴミが入るとあるな。
ポインタでちょっとわからなくなったのでちょっと質問です float *array[4]; と float (*array)[4]; はどう違うんですか
>>370 で
/*--- 配列dataの先頭n個の要素を昇順にソート ---*/
void sort(int data[], int n)
{
int k = n - 1;
while (k >= 0) { ・・・☆
int i, j;
for (i = 1, j = -1; i <= k; i++)
if (data[i - 1] > data[i]) {
j = i - 1;
swap(&data[i], &data[j]); /* 交換 */
}
k = j;
}
}
☆を「>」にせず「>=」にしている理由を尋ねたものだが・・・わからねぇorz
俺的は、終了時k = -1になるようにするため、という結論に至った
申し訳ないが、先輩諸氏の意見をおねがいいたします
>>418 えー出典は「明解C言語入門編」柴田望洋著
warnigを「ワーニング」と読んで(ryの望洋先生でつね
k=j; for (i = 1, j = -1; i <= k; i++) if (data[i - 1] > data[i]) { 最後にdata[0]とdata[1]を比較してる
間違ったーー k>=0か 意味ないねk>0で十分
for (i=0; i<n-2; i++){ for (j=i+1; j<n-1; j++){ if (data[i] > data[j]){ swap(&data[i], &data[j]); } } } バブルソートってこうゆうのかと思ってた。泡だからわざわざ下からやるもんなんだっけ?
floatがdoubleの2倍早かったなんてしらなかったよーーーーー!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
424 :
デフォルトの名無しさん :05/03/02 01:59:05
すいません。 ヘッダファイルに構造体でキャラクターのパラメータを持たせて 戦闘プログラムを作りたいのですがどうしたらよいのでしょう?
>>422 そのバカ正直なソートプログラムは、
一般にバカソートと言われています。
>>424 まず、ヘッダファイルに構造体でキャラクターのパラメータを持たせる。
そのかわり、かすうぶのせいどが、52びっとから、23びっとに
>>422 たまに、これをバブルソートだとして説明してるとこがあるけど、
これは遅い癖に安定ソートじゃないんだよな・・・
429 :
デフォルトの名無しさん :05/03/02 02:32:50
>>426 その後にソースフォルダ main.cにヘッダファイルを呼び出すところまでは
できるのですが計算のやりかたがわからないのです
432 :
デフォルトの名無しさん :05/03/02 05:08:31
433 :
デフォルトの名無しさん :05/03/02 05:10:50
実際にはdoubleのほうが速いことが多い
結局取り出すときはdoubleになるからな
>>388 「ハッカーのたのしみ」
という本を読んでみな。
リアルタイムにネットワークの転送量を表示したいのですが、 式はどうなるのでしょうか? dwInOctets dwInUcastPkts dwInNUcastPkts は表示できるのですが、Octetsは通信してない時も値が入ってますし・・ どうかよろしくお願いします。
437 :
デフォルトの名無しさん :05/03/02 08:23:57
行方不明になった担当者の後を引き継いで ソースのメンテナンスをしている俺だが、 ↓このコードに悩まされている。 #ifdef __ASSEMBLY__ これは一体どういう意味なんだ。 お前ら、教えてください。
「もしプリプロセッサシンボル__ASSEMBLY__が定義されていれば」
いや、そういうことじゃなくて、
440 :
デフォルトの名無しさん :05/03/02 09:14:25
> C++だとコンパイラは後置を前置に最適化出来ないから これウソ
>>416 >float *array[4]; と
>float (*array)[4];
上のarrayはfloat *型を要素とする配列
下のarrayはfloat型を要素とする配列へのポインタ
配列へのポインタ型があるのだよ
*演算子より[]演算子の方が強いから、カッコがないと
まずarrayは配列ってことになって何の配列かってことで
float *型の配列になっちゃうけど、カッコをつけると
まずarrayはポインタってことになってそれは要素数4の配列への
ポインタとなる。型はfloat (*)[4]だ。
442 :
デフォルトの名無しさん :05/03/02 10:05:07
441はウソ 後者は下のarrayはfloat型を要素とする配列[4]へのポインターだろう。 そうじゃないと++したときにfloat4つ分増えない
443 :
デフォルトの名無しさん :05/03/02 10:07:03
float型の4つの要素をもつ配列へのポインターだな。
sizeof(array)としたとき、それぞれどんな値が得られますか?
>>442 いやウソってことはないだろ。
あえて最初の説明では簡単にするために要素数には言及してないけど
要素数の概念のない配列へのポインタなんてもともとないんだから。
その後で詳しく説明してんじゃん。float型を要素とする配列への
ポインタであることは間違いない。配列の要素数は?って言ったら
4てだけだろ。
446 :
デフォルトの名無しさん :05/03/02 11:39:16
言葉で説明するからわかりにくいのだ。 (*array)[4] == *( *array + 4 ) なのら。
447 :
デフォルトの名無しさん :05/03/02 11:53:29
すみません教えてください。 1992年頃にC言語を使ってプログラムを作りました。 使っていたパソコンはPC-9801かFM-Vのどちらかだったと思います このプログラムを現在のDOS-Vマシンでコンパイルして実行型ファイルに して使用できるでしょうか? 又コンパイルするソフトは現在売られているC言語のソフトで変換できるでしょうか?
>>447 プログラムのソースが残っているのなら、その内容を見て判断するほか無い
449 :
Cとアセンブリの混合 :05/03/02 11:56:58
charデータをストリーミングファイルから読み16ビットunsigned numberのodd parity を計算して、8ビット(7ビット+parity bit)をアウトプット書き出す作業をして ボーランドプロジェクトとしてコンパイルするという cコード書けという問題です。 "Odd parity" forces the number of "1s" to be odd including the parity bit. Some examples are: x1001110 -> 11001110 x0011001 -> 00011001 どなたかヒントください。
451 :
デフォルトの名無しさん :05/03/02 12:24:43
>>448 ありがとうございます。ソースファイルは残っています。C言語もコマンド
の変更とかあって、今では対応していない部分もあるんでしょうかね?
>>451 Cを始めから勉強し直せ。
Cにコマンドはない。
>>451 これ以上ここで聞いても何もならない
ソフト会社に問い合わせて見積もりを出してもらえ
>>447 > PC-9801かFM-V
両者ともに癖がある機種だな、処理系依存の部分が無ければうまくいくかもしれない
あと、多分ファイル名は8.3形式しか認識できないような気がする。
>>432 WIN32APIではBOOL/TRUE/FALSEだよ。
VCしか知らんの?
>>453 の、bccでも普通に使うし
関数のオーバーロードで、戻り値が違うものを定義できるんでしたっけ?
C++ような気がする
やはりそうですか・・・どうもCとC++両方使うと ごっちゃになりますね。
ならねぇな
なるわけないし
ときどきなるよ。 struct宣言のtypedefとかね。
ちがうよ
468 :
デフォルトの名無しさん :05/03/02 16:42:31
c言語で画像処理について勉強したいんだけど なんかいい参考書があれば紹介してください ちなみに私が使ってるソフトはvc++.net standardです
470 :
デフォルトの名無しさん :05/03/02 16:46:13
了解
おれのコンパイラじゃ430のCのバブルより422の馬鹿ソートのが早いのだけど 馬鹿ソートが安定しないってどうゆうこと?
474 :
デフォルトの名無しさん :05/03/02 20:29:00
Ruby !!!!!!!!!!111111
>>421 回答THX
そうでつか。望洋先生はなんで「>=」したんだろw
わざわざありがと
422のは、洗濯ソートというやつでは、ないかなー? nが配列のindexとすると、 最後の要素がぬけるような気がするけど、 たぶん気のせいだ。
477 :
デフォルトの名無しさん :05/03/02 21:46:42
floatとdoubleの計算機イプシロンっていくつでしょう? 2^-nの形で教えていただけるとたすかります。
選択ソートは最小(最大)のをみつけて、先頭とひっくりかえすやつ!
479 :
デフォルトの名無しさん :05/03/02 21:55:02
実験せずに実測値を聞きにきたり 規格票を参照せずに保証値を聞きにきたり ・・・アフォか!! 筋悪い奴は帰れ
480 :
デフォルトの名無しさん :05/03/02 21:56:58
>>479 ごめんなさい、実験はしてみましたよう
floatが2^-25
doubleが2^-53
でした
>>478 基準であるところの自分よりも、小さいのをみつけると、
とりあえずひっくりかえしておく、
ということを、そのパスで、もれなくやると、
結果的に、そうなる、ような。
L"aaa" みたいな感じで、文字列を const にするのありませんか?
>>482 const char * const s = "aaa";
484 :
デフォルトの名無しさん :05/03/02 22:08:17
>>484 そんなヘッダファイル知らなかったよ
ありがとう
実行ファイルのreadonlyページに配置されるのを保証したいって ことではないかな
質問の意味がわかんないわりに聞いてる内容は深いね
>>468 ほかに逝け
C++.NETはC++.NETであってC言語でもC++でもあらず。
良く知らんが、ソフトがVC++.netでも、C言語も使えると思うんだが 少なくとも、VisualStudio.netでは出来る というか、既にほかに行ってるけどね→画像処理スレ (GUIプログラミングの事を画像処理と勘違いしてる可能性あるが)
491 :
デフォルトの名無しさん :05/03/03 02:29:38
> 実験せずに実測値を聞きにきたり > 規格票を参照せずに保証値を聞きにきたり おまえはアホか? 参照したら聞きに来るわけねーだろ。 参照しないからききにくるにきまってるじゃねーか ぼけ
492 :
デフォルトの名無しさん :05/03/03 02:30:14
> いやウソってことはないだろ。 いいえウソです。
493 :
デフォルトの名無しさん :05/03/03 02:30:56
> (*array)[4] == *( *array + 4 ) なのら。 ちがいます。
[1] 授業単元:C言語 [2] 問題文:スキュターレ暗号文を以下に示すように自動解読するプログラム Level1B.Cを作成しなさい。 [3] 環境 [3.1] OS: unix [3.2] コンパイラ [3.3] 言語:C [4] 期限:今日の朝まで・・ 例: 原文 あすミケーネでアテネぐんをむかえうつ 暗号文 あでをすアむミテかケネえーぐうネんつ 暗号文 さいれがいてるんしんよばはをうろよとにう 実行結果 何文字ごとに読みますか?3 さがるんはろにいいんよをようれてしばうと 何文字ごとに読みますか?4 さいしはよいてんがとれるようにがんばろう
さいし?妻子?祭祀?
496 :
デフォルトの名無しさん :05/03/03 03:27:53
#include <stdio.h> int main(void) { char array[] = "さいれがいてるんしんよばはをうろよとにう"; int skew, len, i, j, k; printf("%s\n", array); printf("何文字ごとに読みますか?"); scanf("%d", &skew); len = sizeof(array) / 2; for(j = 0; j < skew; j++) for(i = j; i < len; i += skew) k = i % len * 2, printf("%c%c", array[k], array[k + 1]); printf("\n"); return 0; }
あー、iはlen超えないからkいらんわ。 printf("%c%c", array[i * 2], array[i * 2 + 1]); でいいかな。
498 :
デフォルトの名無しさん :05/03/03 04:00:28
>>496 #include <stdio.h>
int main(void)
{
char array[] = "さいれがいてるんしんよばはをうろよとにう";
int skew, len, i, j, k;
printf("%s\n", array);
printf("何文字ごとに読みますか?");
scanf("%d", &skew);
len = sizeof(array) / 2;
for(j = 0; j < skew; j++) {
for(i = 0, k=j; i < len; i ++, k=(k+skew) % len)
printf("%c%c", array[2*k], array[2*k+1]);
printf("\n");
}
return 0;
}
の方がいいと思う。
496氏ありがとうございます!感激です
C言語の宿題やりますスレで聞いたけど人いなくて・・
出来たら残りの2問も知恵をお貸りしたいけど・・迷惑ですよね。
でも、本当にこんな夜遅くからありがとうございました!神
>>495 再試なんですよー。この問題が出るから必死><
>>499 人が居ないとか決め付けてマルチしてんじゃねぇよ。
宿題スレを見て2と3をやってたんだが、
そんなことされたら公開する気が失せるってもんだ。
>>500 氏
すみませんでした
ここのルールとか知らないで、あきらめかけてた時に
2ちゃんでこの板見つけて、ココロオドってコピペしちゃいました、、
自分勝手で必死になってしまい夜中に気分を害しちゃってごめんなさい。
一応2問目も出来たし
もう一人いるみたいだし、眠いし、あとは任せた。
うわーヤヴァイ!
本当にイイ人、いや温かい人っているんですね。
涙でそう・・ありがとうございます
>>503 氏
眠いのに、アホな俺のために本当にすみません><
おやすみなさい。テスト頑張ってきます!!!
たぶん2より3の方が簡単だと思う
>>505 氏
2より3の方が簡単なんですかー?2をみながら3を解いてみます
1と2の復習もしないといけないけど、間に合いそうで嬉しいなー
>>501 次からは気をつけてね。
まだ起きてるみたいだし、2と3が出来たから宿題スレに貼っておくよ。
少しでも参考になれば幸いかな。
再試ガン(・∀・)ガレ!!
>>500 はい、気をつけます。何か何から何までお世話になって・・
ありがとうございます!何か皆さんのおかげで元気出ましたー
再試ガンバリます!
510 :
デフォルトの名無しさん :05/03/03 07:56:39
>>493 多分コンパイルしてみたんだろうが
int (* array)[4];
int ar[4];
array = (int(*)[4])ar;
ar[4] = 4;
printf("%d",*(*array+4));
こうやってみ。
511 :
デフォルトの名無しさん :05/03/03 09:23:59
>>510 こうだろう
int (* array)[4];
int ar[4];
array = (int(*)[4])ar;
ar[3] = 3;
printf("%d",*(*array+3));
printf("%d",(*array)[3]);
それと
>>441 のいってることは正しい。
int (* array)[4];
はint型の4個の要素を持つポインターを定義している。
従って、4番目の要素にアクセスするには、
*(*array+3)とするのら。
array = (int(*)[4])ar; じゃなくて array = &ar; でええんちゃうの? 普通はこうでっしゃろ?
あと4番目の要素にarray使ってアクセスしたいなら (*array)[3]の方が自然やぞ。 あくまで配列や。
質問なのですが、 #include <stdio.h> int main(){ printf("2Pは必ず負けてください。\n"); int a=0,b=0,i; do { printf("1:グー 2:チョキ 3:パー\n"); printf("1P:"); scanf("%d",&a); printf("2P:"); scanf("%d",&b); i = ((b+3)-a)%3; }while(i==0); printf("%dP の勝ちです!!\n",i); return 0; } のプログラムで1Pが選択してから2Pが2秒で選択しないと負けとしたいのですが、どうすればよいでしょうか? C++でいうタイマーコントロールなどを使えばいいと思うのですが、Cのタイマー関係がググっても出ないので、どなたか教えていただけますか?
2秒たったら自動的に終了でしょ? それってAPI使うほか無いのでは?
>>514 時刻を見て、2秒経ったら負けにすればいい。
回答ありがとうございます。 2秒経って自動的に終了ではなくて、2秒たったら2Pの負けです。と表示させたいのです。
そうか。
あ、終了というかさ、入力を受け付けるじゃん? で、ユーザがなにも触らずに2秒たったら、自動的に入力受付終了して メッセージを出したいってことじゃないの? 時刻調べるにも、何か入力した後にはじめてチェックするのでは だめなんでしょ?
>>519 それは、環境依存のAPIかC言語以外(WIN32とか)じゃ無いとダメでしょ。
@2pのscanfの前に時間取得 A2pのscanf後にも時間取得 ソレを比較して2秒以上経過してたら”後出しでおまいは負けました。”って表示してやれば ユーザーに警告を与える意味においては充分なのでは?
考えてくださってありがとうございます。 後だしじゃんけんを作りたいのですが、時間比較の仕方、2秒以上経過した後のPrintfの仕方がわからないのです。
だな、 マルチスレッドでやればできる
>>525 マルチスレッドを使用してどのようにすればよいですか?
入力するときにタイマースレッドをスポーンする、 タイマースレッドが満期になったらメインスレッドに イベントを知らせる。
>>523 difftimeつかやいいじゃんよ。
マルチスレッドなんか使うような高級なプログラムじゃないでしょw
どうやってマルチスレッドにするんだ
@2pのscanfの前に時間取得 A2pのscanf後にも時間取得 ソレをdifftimeで時間比較して2秒以上経過してたら”後出しでおまいは負けました。”って表示してやれば ユーザーに警告を与える意味においては充分なのでは?
>>528 喧嘩売るつもりはありません。
意外と、タスク、プロセス、スレッド、使うと簡単になるよ。
select使っとけ。
#include <stdio.h> #include<time.h> int main(){ time_t time1, time2; int a=0,b=0,i; printf("2Pは必ず負けてください。\n"); do { printf("1:グー 2:チョキ 3:パー\n"); printf("1P:"); scanf("%d",&a); time(&time1); printf("2P:"); scanf("%d",&b); time(&time2); i = ((b+3)-a)%3; }while(i==0); printf("%dP の勝ちです!!\n",i); return 0; } ここまでは自分で考えたのですが、2秒以上経過した場合の表示が分かりません。 比較はIFでやればよろしいでしょうか?
535 :
デフォルトの名無しさん :05/03/03 16:06:23
ローカル変数のUSHORT型変数3つをDWORD型変数3つに変えたら、 Run-Time Check Failure #2 - Stack around the variable 'data' was corrupted. というメッセージが表示されなくなった。 メモリ配置の事だと思うんですが、アセンブラでプログラム組んだことが無いから よく分からない...。スタックがどうなってるんでしょう。 pop,pushとか、ほんの障りしか知りません。
>>535 ありがとうございました。
少し変えましたが、おかげで今日中になんとか間に合いそうです。
本当にありがとうございました。
なんだ。解決したのかw
>>536 USHORTは2バイト変数でDWORDは4バイト変数だし、
そこらへんの関係じゃないの?
まあ、まず元に戻して、1個づつ修正&確認をしていったら?
標準Cではできない事の質問は使用している開発環境のスレへGo! または死ね。
542 :
デフォルトの名無しさん :05/03/03 20:51:55
標準Cでできる/できないは聞いていいのか?
関数に多次元配列を引数として渡すにはどうすればいいですか?
先頭アドレスを渡せばいい
545 :
デフォルトの名無しさん :05/03/03 20:59:16
>>543 おい偽物、関数名(型 仮引数名[][列幅]) で受け取れるが、とりあえず騙り野郎は氏ね
ありがとうございました
ちょっと上に出てたdifftime(time1, time2)って何のためにあるんですか? time2 - time1 じゃダメなんですか?
RUBY!!!!!!!!!!!!>>>>>>>>>>>>>>>>>>>>>>>>C
糞具合だな
>>547 time_tが秒単位で時刻を格納しているとは限らない。ミリ秒・マイクロ秒単位のこともある。
552 :
デフォルトの名無しさん :05/03/03 22:40:27
do-whileループの代わりに、 for(;;) の中に if 入れて break かけてたのですが、 会社の仲間に、そういう素人っぽいことはヤメてくれ、と注意されてしまいました。 特に反論する理由も無かったので全部やりなおしましたが、これってそんなにマズいのでしょうか? 無限forループを使うことで可読性が著しく低下するとは思えません。 もしかしてdo-whileループのほうが効率のいいマシンコードが生成されるのですか?
553 :
デフォルトの名無しさん :05/03/03 22:41:53
>>552 do-whileを知らない素人が書いたものに見えるから。
もっと別な事に気を使ったほうが...。
>>552 コードにはパターンがあるからな。
do-whileで書くべきパターンにはdo-whileを使え。
556 :
デフォルトの名無しさん :05/03/03 22:59:22
do-while使うべきなのは確かだが、わざわざ全部書き直すのはアホ
557 :
デフォルトの名無しさん :05/03/03 23:06:05
>>552 for(;;)
if(foo) break;
#define A
for(;;)
A;
ソースは会社の財産だから、書き直せとは言わないけど、次からはこうしてくれとは言うかもな
でもdo whileにしたいがために条件を無理やり最後に持って きて結果可読性を損なってたら馬鹿だよな
それは使うべき場所じゃないわけだろ?なんでそんな事をもちだすかな
>全部やりなおしましたが、 このへんが気になるんじゃない?
562 :
デフォルトの名無しさん :05/03/04 09:36:57
当然です > 全部やり直す。 一部しかやりなおさなかったらバグのもと
563 :
デフォルトの名無しさん :05/03/04 09:49:13
全部やり直すなんていう単純作業こそバグのもと
どうせ3つくらいでしよ。
>>552 for(;;)とif() break;の組合せが素人くさいというやつこそ素人。
566 :
デフォルトの名無しさん :05/03/04 11:19:29
>>552 そんなコード普通気が付かないから、他の人が読んだとき、
暫く何が起こってるか、判るまで時間がかかるから。
>>550 >time_tが秒単位で時刻を格納しているとは限らない。ミリ秒・マイクロ秒単位のこともある。
time() は紀元 (1970年1月1日00:00:00 UTC) からの経過時間を秒単位で返す。
>>567 ISO/IEC 9899:1999 7.23.2.4 The time function
2 … The encoding of the value is unspecified.
内容はunspecifiedだそうな。残念でした。
>>550 time_tがミリ秒、マイクロ秒単位の処理系なんて本当にあるの?
ちなみにPOSIXでは
>>567 の通り定義されている。
int *(*func(char))(float); こう宣言すれば、funcの型は 「引数がchar型で、戻り値が、float型を引数にしint*型を返す関数への ポインタ」ということになってますかね?
だから、実際がどうであろうと規格では秒とは限らないと(ry
ほんの少し行儀良く書けばいい事を、何故拒むのかねぇ
575 :
デフォルトの名無しさん :05/03/04 13:33:46
CでPSの「パネキット」のようなものは作れますかね?物理法則等が難しそうなんですが…
576 :
デフォルトの名無しさん :05/03/04 13:47:33
配列へのポインタpにおける *p++と(*p)++の違いを簡潔に述べよ
素直に教えてくださいと言ったらどうだね
578 :
デフォルトの名無しさん :05/03/04 14:13:41
どうせわからないんだろおおおーーーーーーーwwww
そうやって必死に答えを導き出そうとするなやw
くだらねぇ質問にくだらねぇレス カス共マンセー
>>576 *p++
*p を評価した後 p をインクリメントする
(*p)++
*p を評価した後 *p をインクリメントする
おお、すげぇ。目から鱗だぜ。
そんなルアーで俺が
#include <stdio.h> int main(void) { char a; char *ap; a="abcdefg"; ap="abcdefg"; printf("%s\n",a); printf(ap); printf("\n%s\n",ap); return 0; } ポインタの勉強のためにこんなプログラムを書いたのですが、コンパイラに "01.c 6: 警告: ポインタの型が合わない (=)" と言われてしまいます。 なぜでしょうか? 使用しているコンパイラは"LSI C-86 v3.30c"です。
cont: if (expression) goto out; goto cont; out:
"abcdefg" はchar型へのポインタ型で 値は abcdefgのaが入っているアドレスを返す。 a="abcdefg"; char型=char型へのポインタ型となっており 型が一致してない。
答えたくて仕方がない年頃なの
>>587 &a="abcdefg";
としてみましたが今度は"左辺値が必要"と言われたので"a"をポインタ変数にしてみたらいけました。
「&aは"a"のアドレスを"示す"もので、*aは何かのアドレスを"格納するため"の変数」という解釈でいいのですか?
また、char型変数で文字列を扱うにはどうすればいいのでしょうか?
配列変数にするしかないのですか?
そもそも、 >"abcdefg" >はchar型へのポインタ型で これが間違い ってかム板も随分レベル下がったな
>「&aは"a"のアドレスを"示す"もので、*aは何かのアドレスを"格納するため"の変数」という解釈でいいのですか? いけません。
&aは"a"のアドレスを"示す"もの>正解 *aは何かのアドレスを"格納するため"の変数>不正解 こう理解してると、*a = &b; とかやって収集つかなくなるぞ。 >また、char型変数で文字列を扱うにはどうすればいいのでしょうか? 配列変数にするしかないのですか? yes *aは変数ではなく、あくまでaが変数。 宣言の char *a は、a というポインタ変数の宣言です。
つーか、LSI-Cなんて捨てろって。
普通になんで間違ってるかわからんわw
わからん奴が答えようとするなぼけ
俺もわかんね
レベルの高い
>>591 よ
なにがおかしいのか解説しる
バカでも答えられる、これが2ch
>>593 >*aは変数ではなく、あくまでaが変数。
>宣言の char *a は、a というポインタ変数の宣言です。
試しに
char a;
char *a;
としてみたら重複エラーが出たので理解できました。
ありがとうございました。
>>594 Borland C++ 5.5にしてみました。
>>599 分からんうちは、
char *a;
じゃなくて
char* a;
だと思っておけ
>>600 1.char *a;
2.char* a;
3.char * a;
どれでもいけるんですね。。知りませんでした。
確かに2の書き方だと解釈が楽ですね。
助言ありがとうございます。
アホすぎる。 basicでもやっとけとw
規格ソースキボンヌ 手元にはARMしかない...orz
>>603 すいません。
もうすぐ高2なのですが、バイトの給料をほとんどPC自作につぎ込んでいるのでCの教本を買う余裕が無いんです。
昨年11月からはじめたのですがなかなか上達しません。
>>602 char* a,b;
とやってもbはchar型だということを忘れずに
>>605 ガンガレ、俺は応援する。
俺はプログラミング始めた瞬間からポインタが完全に
理解できた、といっているような輩の言う事は気にすんな。
>>605 そんな状態なら尚更ネットのありがたみを知るべきだろ
ググればしょぼい教本以上のサイトもあんだろしな
がんばれ
で、規格ってウェブで見られるのけ?
>>610 ググれもしねぇのか。
もう来なくていいよ
馬鹿ばか馬鹿ばか、口の悪いブタどもでつね!
char型配列と理解したが、合ってんのか
621 :
デフォルトの名無しさん :05/03/04 19:42:34
Ruby!!!!!!!!!!!111
"abcdefg"のみならば文字列リテラルという存在でしか無いようだが。
>>623 話についてこれない馬鹿は出てこなくていいから
すみません、意味が分からないのですが・・・ 最凶VB厨房さんと同一人物か?と言うことなら、違います。 単に、通りすがりで気になったもので・・・ 雰囲気を乱してしまったならば謝ります。
>>616 以下とは<=の事
未満は<の事
まぁ、未満の意味で以下って普通に使われてるけどね
文字列リテラルの型をどうのこうの
言っているんだから
>>623 の発言は
どう考えてもおかしいだろボケ
>>628 文字列リテラルってchar型配列なの?
>584 "0123" と記述すると連続した4バイトのメモリが確保されて、その中に 0x30,0x31,0x32,0x33,\0 というデータが格納されます。 \0 は NULL 文字と言って文字列がここで終りである事の目印となるデータです。 それでその先頭の(0x30が入っている)メモリのアドレスが返されます。 これは char 型のデータのアドレス(住所)なので代入するのは char 型のポインタでなければいけません。 よろし?もっと丁寧にわかりやすく解説してるサイト沢山あるから探してみるといいよ。
>>630 ぐぐるキーワード教えてください
文字列リテラル char型配列 ではわからなかった
5バイトだろ
>>635 あぁ見つかった
"文字列リテラルの型"ね。tx
ポインタに増分(減分)演算子を使う場合について、 ++*p;は++(*p);と同じことでpの指す値を増分することはわかったのですが、 *p++;のようにpの次の値を指す意味で++(--)を前置するとはできますか?
規格見てもわからんぞw
6.1.4ってないしよ。ANSIの方なのか?
まっそれはいいとして。
>>632 と言ってることが同じのような気がするのだが、
>>632 も間違っているということか?
(
>>634 の指摘を除く)
馬鹿にもわかるようにずばっと言ってくれぇ
まぁそういうな。
>>632 は間違ってるのか間違ってないのか(634の指摘事項を除く)
どっちなんだ?間違っていないと言うのなら納得いかんからな。
643 :
デフォルトの名無しさん :05/03/04 21:09:52
C言語初心者つかまったくわからんのだが、有料のソフトを買わなくちゃいけないんですか? 調べたんだが書いてあることが(話が飛びすぎて)良くわからなかった 簡単に手順を教えてほしいんですが・・・・
*(++p)
>>643 図書館や本屋行って入門書なり何なり調べてきましょう
646 :
デフォルトの名無しさん :05/03/04 21:17:02
>>645 わざわざレスありがとう。明日いってきますわ
なんせ何をしたらいいかわからないもんで・・・
>643 まず文体を統一しようね。誰にも相手にしてもらえなくなるよ。 それと何がしたいのか分からない。 C のコンパイラが欲しいのか C 言語を学びたいのか? 有料のソフトとは?コンパイラのこと?
>>643 買わなくても良いから
テンプレのリンク先全部見るぐらいはしようよ
>>643 とりあえず不安を一つ解消してあげると、
勉強するための本以外は全部無料で
かなりのものが揃えられるよ
>>632 >0x30,0x31,0x32,0x33,\0 というデータが格納されます。
"0x30,0x31,0x32,0x33"はアドレスですか?
だとしたらなぜ"\0"も一緒に格納できるのですか?
"0,1,2,3"という値なら"0x01,0x02,0x03,0x04"だと思うのですが
そんなえさで
もしかして単なる揚げ足取りだったのけ?
くだらん。
>>612 には感謝する。
0x30 -> 0 という文字を表すASCIIコード \0 == 0x00 "0123"はメモリ上に 0x3031323300 と配置されます。(ビッグエンディアンの場合) char *p = "0123"; と書いた場合は、pに0x3031323300の存在するアドレスが格納される
>>655 すいません。
charだからASCIIコードなんですね。
吊ってきます
ビッグエンディアンじゃなくてもそうだろって? 揚げ足取りの糞はだまっとけ
ASCIIなんだっけ。
はぁ…
そか、バイトだから同じですね。失礼。
で、
>>658 よ
>>655 のどこが揚げ足取りなのか説明してくれ
あと
>>657 もナニが変か分からないので、マジレス頼む
>>662 あんたも>655も滅茶苦茶。人に説明できるほど理解できないならおとなしく引っ込んでろ。
何か書店逝って、帰って来てネットで調べたら分かりそうな事ばっかりハァ
あ、そゆことですか、納得。
言葉遣い悪くてスマソ。
>>662 しかし、
>おいおい・・・
ってレスはどうなのかね?
一言、「バイトだからリトルでも同じだろボケ、氏ね」
ですむんじゃないかな?
これなら言われた方(俺)も納得するんだけど。
なぜわざわざ少しの間違いに対して、冷たい、突き放した
レスを付けるのか、自分が人間出来てないせいなのか
分かりません。
ここの住人はこんな人ばっかなの?
インデアン嘘つかない。ぎゃははは
>>663 だから無茶苦茶だと切り捨てる前に、ナニがどう
無茶苦茶なのか説明して下さい、と言う事なんですが。
それともあなたも私と同じで説明する事が出来ないのですか?
(´ω`)
>655 それじゃ、あんたは自分の説明が無難だと思う? どこかおかしいと思わない? エンディアン云々以前なんだよ。 一々説明する気になれないほどね。
670 :
デフォルトの名無しさん :05/03/04 22:39:20
大文字を小文字にしてから検索にかけて、小文字にする前の文字列を表示させたいのですが。 char s[DATALONG], s2[DATALONG]; と用意しておいて、 strcpy(s2, s); とsの値をs2にコピーしておき、 s[i] = tolower(s[i]); と小文字にしました。 sに対して文字検索をさせ、ヒットしたsを小文字のままでなく 小文字にする前の状態で出力したいのですが、 printf("%s", s2); としたところで小文字のままで表示されてしまいます。 ご教授願います。。
各処理の前後でs2を表示させて、 s2が小文字になるところを探すところから。
673 :
643 :05/03/04 22:45:16
あまりに基本的なことすぎて答える気にならん 初心者向けのサイトをもう2,3調べて来い
675 :
デフォルトの名無しさん :05/03/04 22:50:26
>>673 :643
・「ソースを変換して、リンクする」という一連の作業はコンパイル一つで済む。
・メモ帳だと「名前を付けて保存」すればよい
> ・「ソースを変換して、リンクする」
> という一連の作業はコンパイル一つで済むんですか?
コンパイルとリンクは別物。
一回でやるかどうかは開発に用いるソフトウェア次第。
> ・ソースの拡張子が「.c」と(p)
http://www9.plala.or.jp/sgwr-t/c/sec01.html#s1-2 > の最初に書いてあったんですが、メモ帳だと.txtになってしまいます。メモ帳では
できないんでしょうか?
もしWindowsを使っていて、メモ帳で作る気ならWindowsの操作方法から勉強しろ。
>>673 メモ帳でも拡張子を自分で".c"にすればいい。
初心者スレなら、誰かもっと丁寧に教えてくれるんでない?
678 :
670 :05/03/04 22:58:14
>671 strcpy(s2, s); としてsの値をs2にコピーすると、 その後sに変化が起きたらs2も同じように変わるんですよね。 上手い具合にsの値を保存しておく方法が分かりません。 >672 ソース見せてもしょーがない問題です。。(w
くだらねぇ。こんなことも自分で解決できねぇようなヤシに今後の発展は見込めない。
> strcpy(s2, s); としてsの値をs2にコピー そんなことはできない。
>>678 それは有り得ない。
strcpyしたらコピー元とコピー先は別物。コピーなんだから。
お前のプログラムにバグが有るに違いない。
早くUpしろ。ソース見せれば解決する問題だ。
うぜぇーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
質問いいですか?
684 :
デフォルトの名無しさん :05/03/04 23:16:30
WordでUNIX向けソース書いてる人が昔、職場にいた。 それが一番使い易いといってWord形式で保存するので大変だった。 書けないことはないが…
本当すいません。解決しました。 小文字に変換しているwhileの中でstrcpyしていました。 申し訳なかったです。
>670 そーやって一歩ずつ進んで行くんだよ。野次は気にすんな。 ただし何でもかんでも安易に質問してすませるなよ?自分で苦労しないと身につかないからね。
683は670じゃないですけが、これどうしても詳しい人に聞かなきゃ分からないと思うから、 質問させていただきます。 以前ここで、ファイル構造体のメンバに直接アクセスはしないよう言われたのですが、 その危険性が未だよく理解できません。 普通に動くし、何故いけないのですか?
>>685 ついでっちゃーついでだけど、
tolower()にchar値を直接渡すのはやめようね。
tolower((unsigned char)c)とするべし。
>>689 tolower(int)の引数は、EOFか、あるいは
0〜255の範囲になければならないから。
charは符号付きの型だから、intに直接キャストすると
まずいのです。isalpha()とかも同じね。
(0-255以外は未定義になるだけだろうに・・・変なの)
692 :
643 :05/03/04 23:57:17
うんこしてくる
>>691 普通は未定義になったらまずいと思うんだが・・・
>>692 とりあえず cd と打って結果をここに
C:\Documents and Setting\Owner と出ました
>>692 しかし、なぜにわざわざLSI-Cを選んだのw
せめて Visual C++ Toolkit 2003 とかにしたほうがいいよ。
>>697 違いがわからなかったもので・・・
Visual C++ Toolkit 2003 は使い勝手が良いのですか?
スレがだいぶ汚れてますね
>>698 LSI-Cって、結構古いコンパイラなのよ。
今となっては時代遅れで、使うメリット薄い。
Visual C++ .NET Toolkit 2003は、
製品版の Visual C++ からコンパイラ部分だけ
切り出したやつだから、それなりに機能も整ってる。
701 :
デフォルトの名無しさん :05/03/05 00:24:36
Cを学習するためならLSI-Cの方がいいと思うが。 フォルダ構成がシンプルだし。 もちろん実用的なアプリはつくれないけど。
なるほど。でも今からそれに変えると不具合生じたりしませんか?
703 :
デフォルトの名無しさん :05/03/05 00:29:22
なぜググればでる質問に丁寧に答える?
だいじょぶだよ 色々触ってみるのも良いかもね
705 :
デフォルトの名無しさん :05/03/05 00:30:21
な ぜ
>>687 は ス ル ー な の か ? !
>>690 ふ〜ん。でも英数字って文字コードで0〜127でことたりちゃうんじゃ
なかったっけ?符号付charの範囲は-128〜127だけど、英数字はマイナスに
ならないのでは?
| | | | /V\ ,J /◎;;;,;,,,,ヽ _ ム::::(;;゚Д゚)::| ジー ヽツ.(ノ::::::::::.:::::.:..|) ヾソ:::::::::::::::::.:ノ ` ー U'"U'
そんな決まりあったっけ
決まりというか処理系の文字コードによるけど ASCIIは7ビットで表現してるよ。 だからシフトJISは2バイト文字の先頭バイトをみるだけで、 それが2バイト文字とわかる。1バイト文字にはありえない 値だから。
この時代にLSI-C使ってる人ってなんなの?
>>688 charをunsigned charにキャストしなけりゃいけない文字を
tolowerに食わせちゃなんねぇということだな
>>701 そもそも、フォルダ構成なんて意識しなくてもいいコンパイラが多いのに?
もしそういう文字がある環境なら キャストして食わせるのがむしろ正解では? そういう文字とは文字コードをchar型にぶっこんだときに 最上位ビットが1になる文字やね。
>>687 ファイル構造体のメンバにアクセスすることを推奨してるところなんてあるのか?
>714 推奨してるところなんてない…はずだと思いたい。 問題はどうして使っちゃいけないのか、だろ? 規格で決まっていない以上、処理系が違う場合、例えば、コンパイラを変えた場合、最悪コンパイラ のバージョンをあげた場合ですらコンパイルできるかどうかも保証されない。 わざわざそんなことする必要あるか?
716 :
デフォルトの名無しさん :05/03/05 06:15:42
>>711 いや、だいじょうぶだよ。マクロの中でも関数でも0xffでマスクしてるので
717 :
デフォルトの名無しさん :05/03/05 06:16:32
> しかし、なぜにわざわざLSI-Cを選んだのw > せめて Visual C++ Toolkit 2003 とかにしたほうがいいよ。 どっちもダメ。そんなものはCではない。
じゃあ何がいいの?
719 :
デフォルトの名無しさん :05/03/05 06:53:54
>>718 >>3 くらいは見てるんだろうけど、目的による
必ずしも規格合致性が高ければ良いってものでもない
そのへんがわかってないアフォが1匹煽りに来てるけどスルーしろ
720 :
デフォルトの名無しさん :05/03/05 09:04:46
質問です。 グローバル変数は0に初期化されるって聞いたんですが、配列の場合どうなるんでしょう。 グローバルに配列を定義すると、その要素が全部0になるんでしょうか。 よろしくお願いします。
すみません。上の質問は、初期化を自分でしなかった場合の話です。
722 :
デフォルトの名無しさん :05/03/05 09:49:30
こんな良スレあったんですね。俺も質問させてください。 K&Rに free((void *)p); みたいなコードがあるんだけど、 pは p = (char *)malloc(...); 見たいな奴です。freeで(void *)って必要でしょうか? 無駄なような気がします。でもK&Rだし。 どなたか教えてください。
724 :
デフォルトの名無しさん :05/03/05 10:44:47
>>723 初版はポリシーがはっきりしててよくできてたのに第2版ときたらえらく中途半端になったものだな
俺はコーディング基準次第だがデフォルトはこう
void* → 非void* はキャストする
非void* → void* はキャストしない
725 :
デフォルトの名無しさん :05/03/05 10:47:19
726 :
デフォルトの名無しさん :05/03/05 10:49:36
>>717 たしかにそうだな。
どちらも、printfさえまともにうごかない。
for文もちゃんとまわらない。
そんなものCコンパイラーと呼べるか?
> どちらも、printfさえまともにうごかない。 > for文もちゃんとまわらない。 その仮定が正しければCコンパイラと呼べないが、 その仮定は間違っているのでCコンパイラと呼べる。
728 :
デフォルトの名無しさん :05/03/05 10:55:56
>>726 本当にそうかね。
どちらも、printfさえまともにうごかない、for文もちゃんとまわらない、そんなバグ付きのCコンパイラーだと呼べる。
文句は使ってから言うもんだ
730 :
デフォルトの名無しさん :05/03/05 11:04:31
for の初期化式で定義した変数のスコープの話でもしてるなら痛いアフォだな
731 :
デフォルトの名無しさん :05/03/05 11:04:36
> その仮定が正しければCコンパイラと呼べないが だよねー
printfもforもマトモに動いているので Cコンパイラと呼べると言うことでFA。
733 :
デフォルトの名無しさん :05/03/05 11:11:51
いいえ うごいてません。
弘 法 は 筆 を 選 ば ず
>>726 このコードをこのコンパイラでコンパイルすると
こういう風にダメである
という現実に存在する証拠だせよ
仮定じゃ話にならん
736 :
デフォルトの名無しさん :05/03/05 11:13:24
>>735 やーだよw
まともにうごいていません。
737 :
デフォルトの名無しさん :05/03/05 11:13:32
実際ゴミだろ > VCやLSI-C
| | ∩___∩ | | ノ _, ,_ ヽ (( | プラプラ / ● ● | (=) | ( _●_) ミ _ (⌒) J )) 彡、 |∪| ノ ⊂⌒ヽ / ヽノ ヽ /⌒つ \ ヽ / ヽ / \_,,ノ |、_ノ
739 :
デフォルトの名無しさん :05/03/05 11:15:04
ふつうのコンパイラーだったら、いや、ちょっとボケな(規格はずれの)コンパイラーでさえ いくらなんでもprintf関数ぐらいはまともにうごく。(printf関数ぐらい初心者でも知ってるよな?) なのにVCやLSI-Cは、そのprintf関数さえまともにうごかん。 main() { double pi = 3.1415926; printf("%g %a\n", pi, pi); printf("%zx\n", sizeof(long)); }
740 :
デフォルトの名無しさん :05/03/05 11:15:55
VCやLSI-CはまともなCコンパイラーではないので、 というか、もはやCとは呼べないぐらいだめだめなので、 for文さえちゃんとまわらない。 int main(void) { for (int i = 0; i < 5; i++) { for (int j = 0; j < 10; j++) printf("hello %d:%d ", i, j); printf("\n"); } return EXIT_SUCCESS; }
printfさえまともにうごかせない。 for文もちゃんとまわせない。 そんなものCプログラマーと呼べるか?
>>737 参考までに。
どの様なコンパイラはゴミじゃないのでしょうか?
>>743 gccと答えるんじゃないかと予測
(もしくは、Intel?)
745 :
デフォルトの名無しさん :05/03/05 11:23:11
準拠規格を確認し忘れてるアフォがいるスレはここですか?
746 :
デフォルトの名無しさん :05/03/05 11:25:07
> どの様なコンパイラはゴミじゃないのでしょうか? Cの文法に沿ったソースがちゃんとまともにコンパイルできるコンパイラーです > ゴミじゃない そんなのあたりまえだろ ぼけ
俺の使っているコンパイラがCコンパイラと信じたいばかりに 俺の使っているコンパイラが拡張で対応している物も標準規格。 拡張機能に対応していないコンパイラはCコンパイラじゃないと 思い込みたい人がいるスレはここですか?
748 :
デフォルトの名無しさん :05/03/05 11:26:38
741は、自分のアホさ加減をさらしすぎ。 きっと739に何かケチつけようと思ったが、それだけの知識も頭もないので、 とりあえず「うわっ。お前アフォだろ」とだけ言ってみたというところ。
749 :
デフォルトの名無しさん :05/03/05 11:27:25
> 拡張機能に対応していないコンパイラはCコンパイラじゃないと こいつぼけ。拡張機能じゃなくて「標準規格」だというのに。 わざわざこんなところでぼけをさらさなくても ;-)
>>746 具体的にどのコンパイラがゴミじゃないのか教えてください。
751 :
デフォルトの名無しさん :05/03/05 11:28:17
VCやLCI-CはまともなCコンパイラーではない。 なので、 構造体のポインターをとる関数に、定数を渡せない。 #include <stdio.h> #include <stdlib.h> typedef struct { int x; int y; char *str; } FOO; void sub(FOO *); int main(void) { sub(&(FOO){1, 2, "xyz"}); return EXIT_SUCCESS; } void sub(FOO *p) { printf("%d %d %s\n", p->x, p->y, p->str); }
753 :
デフォルトの名無しさん :05/03/05 11:32:11
かなりサブセットなのね > 752 やっぱりそんなのはCコンパイラーとはよべん
世の中には完全なCコンパイラは無いよ?
755 :
デフォルトの名無しさん :05/03/05 11:33:50
VCやLCI-CはまともなCコンパイラーではないので、 inline関数が使えない。 VCの場合は_inlineとかいうへんな方言を使うと、いちおうそれっぽいことができるが、 本物のインライン関数ではない。
>>753 サブセットな"Cコンパイラ"ですよね。
いつのまにか、Cコンパイラじゃないから、 「完全な」とか「まともな」とか プリフィックスがつくようになっているなw
758 :
デフォルトの名無しさん :05/03/05 11:36:02
>>753 K&R初版のプロトタイプ宣言すらできない古いコンパイラーもCコンパイラーとはよべんのけ?
1.レスアンカーもまともにできない 2.sageも出来ない
| 釣れますか? , \ ,/ヽ  ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ,/ ヽ ∧_∧ ∧∧ ,/ ヽ ( ´∀`) (゚Д゚,,),/ ヽ ( ) (| つ@ ヽ | | | ___ 〜| | ヽ (__)_) |――|. ∪∪ ヽ  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| ヽ /⌒\/⌒\/⌒\/⌒\|彡~゚ ゜~ ~。゜ ~ ~ ~ ~~ ~ ~~ ~ ~~ ~~ ~~
761 :
デフォルトの名無しさん :05/03/05 11:37:26
VCやLSI-CはまともなCコンパイラーではないので、 #define BAR(a, b, c, ...) 形式の「可変個数引数」のマクロを定義できない。(エラーになる)
763 :
デフォルトの名無しさん :05/03/05 11:38:08
> サブセットな"Cコンパイラ"ですよね。 規格ではサブセットを認めてはいないので、Cコンパイラーとは呼べない
GCCやVCやLSI-CはまともなCコンパイラーではないので、 #define BAR(a, b, c, ...) 形式の「可変個数引数」のマクロを定義できない。(エラーになる)
765 :
デフォルトの名無しさん :05/03/05 11:38:14
>>759 1.レスアンカーは適当にする
2.sageはしない
GCCやVCやLCI-CはまともなCコンパイラーではないので、 inline関数が使えない。 VCの場合は_inlineとかいうへんな方言を使うと、いちおうそれっぽいことができるが、 本物のインライン関数ではない。
767 :
デフォルトの名無しさん :05/03/05 11:39:32
VCやLSI-CはまともなCコンパイラーではないので、 drawline((struct point){.x = 1, .y = 1}, (struct point){.x = 3, .y = 4}); のような引数で関数を呼べない。 もはやこのようなものはCコンパイラーとは呼べないのは当然である。
768 :
デフォルトの名無しさん :05/03/05 11:40:22
> GCCやVCやLCI-CはまともなCコンパイラーではないので、 > inline関数が使えない。 おい ぼけ。gccはつかえるぞ。
「C言語はまともな言語ではない。」 これで良いよ。 まともじゃない言語のまともじゃ無いコンパイラ使ってくから。
770 :
デフォルトの名無しさん :05/03/05 11:46:01
本物のCコンパイラーの簡単な見分け方。 #include <stdio.h> #include <stdlib.h> int main(void) { #if defined(__STDC_ISO_10646__) printf("私は本物のCコンパイラーです (%d)\n", __STDC_ISO_10646__); #else printf("すみませんわたしは偽物です\n"); #endif return EXIT_SUCCESS; }
771 :
デフォルトの名無しさん :05/03/05 11:47:36
うちのは、本物と出たな。 ためしに、VC++6.0 と LSI-C とgcc3.3とBorlandのbccは偽物だった。
772 :
デフォルトの名無しさん :05/03/05 11:48:23
やーい にせもの > VC、LSI-C
>icc test.c >./a.out 私は本物のCコンパイラーです (200009) >gcc test.c >./a.out 私は本物のCコンパイラーです (200009)
774 :
デフォルトの名無しさん :05/03/05 11:52:20
っていうか、いまどき LSI-C なんか薦めるなよ。ぼけ。 VC++はごみ
>>692 の質問をとりさげます
自分でいじくってたらできました。ご協力感謝します
776 :
デフォルトの名無しさん :05/03/05 11:53:15
777 :
デフォルトの名無しさん :05/03/05 11:54:40
>>773 >gcc --version
gcc (GCC) 3.3.2 20031218 (Vine Linux 3.3.2-0vl8)
Copyright (C) 2003 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
779 :
デフォルトの名無しさん :05/03/05 11:56:56
> 偽物が全く見つからんぞ それはつまり、VCやLSI-Cみたいなぼけなコンパイラーモドキを「持っていない」と 自慢したいわけですか? :-) %dより%ldにするべきだな。
780 :
デフォルトの名無しさん :05/03/05 11:57:15
つーかよー、クレームたれる前に マ ニ ュ ア ル く ら い 読 め つ ー の どこに ISO/IEC9899:1999 って書いてあったんだよ? てめえら、やってることが DQN な客の典型だろうが
782 :
デフォルトの名無しさん :05/03/05 11:59:10
>>779 ぶー 外れー
ちなみに、おまえさんの言うブツはちゃんと持ってるぜ
やーい、わかんねーwwwwwwwwwwwww
783 :
デフォルトの名無しさん :05/03/05 12:03:10
> どこに ISO/IEC9899:1999 って書いてあったんだよ っていうかそうじゃないものは「Cコンパイラー」とは呼べん。 そんな当たり前のこともわからないのか ぼけめ。
>>783 だからISO/IEC9899:1999準拠のコンパイラなんてどこにあるんだよ。
さっさと教えろ。
785 :
デフォルトの名無しさん :05/03/05 12:05:58
> マ ニ ュ ア ル く ら い 読 め つ ー の > どこに ISO/IEC9899:1999 って書いてあったんだよ? 書いてないからCコンパイラじゃないんだろ?
786 :
デフォルトの名無しさん :05/03/05 12:06:46
> ISO/IEC9899:1999準拠のコンパイラなんてどこにあるんだよ さっきのひとが書いてた「簡単な判定」プログラムで探せばいいじゃん。
787 :
デフォルトの名無しさん :05/03/05 12:08:03
なるほど。 ようは、 「VCC++みたいなゴミをつかっているぼけが、自分のつかっているものをボケだと おもいたくないがために、'まともなものなてどこにもないんだ!!' ということにしてしまいたい 症候群」なわけですね?
788 :
デフォルトの名無しさん :05/03/05 12:08:29
こまったもんだなあVCユーザーにも。
いつもの週末の風景ですね。
最早どうでもいいかもしれないけれど、LSI-C86を使わないほうがいい理由。 ・フリー版は実数演算ライブラリが別である。 →printf()系などで"%g"を使うには実数演算ライブラリを明示的にリンクする必要がある。 ・intが2バイトである。 →ちょっとした演算ですぐオーバーフローしてしまう。 ・メモリモデルが所謂ショートデータショートプログラムモデルである。 →ちょっとした容量のデータや大きめのプログラムを工夫無しに作れない。 ・コンパイラが比較的小さいメモリでしか動かない。 →結構大き目の関数をコンパイルしようとすると根を上げてしまう。 ・ロングファイル名に対応していない。 →長いパス名を与えるとバッファオーバランする標準関数がある。 後なんかあったかな?
791 :
デフォルトの名無しさん :05/03/05 12:14:57
>>1 にも標準Cのことだけ書けってかいてあるから、
VCユーザー立ち入り禁止にすればいんだよ!!
週末はVC厨が多いからなあ。
792 :
デフォルトの名無しさん :05/03/05 12:16:15
> intが2バイトである。 VCももともとがそうだからVCもやめたほうがいいね
bcc 5.51&cl 13.10.3077 すみませんわたしは偽物です まぁ、道具に使われるんじゃなくて使う人になれば無問題だけどな
794 :
デフォルトの名無しさん :05/03/05 12:18:09
Cの規格は、Complexなどの一部の機能を除いてサブセットを認めていないので、 機能がサブセットなものはCコンパイラーではなく、Cコンパイラー「もどき」に すぎないことは確かです。
795 :
デフォルトの名無しさん :05/03/05 12:22:07
> まぁ、道具に使われるんじゃなくて使う人になれば無問題だけどな かなりいいわけがましいですが、 実はいいわけにさえなっていませんね。 まけおしみというか
796 :
デフォルトの名無しさん :05/03/05 12:35:15
マニュアルを確認してないことを図星で突っ込まれてもなお それを棚に上げて往生際の悪い言い訳をたらたらと・・・ D Q N 客 そ の も の だ な
797 :
デフォルトの名無しさん :05/03/05 12:37:20
> D Q N 客 そ の も の だ な などと書いてみても、おまえがVC厨であることにはかわりない ;-)
798 :
デフォルトの名無しさん :05/03/05 12:37:50
話そらすしかねえでやんの(ププ
799 :
デフォルトの名無しさん :05/03/05 12:38:06
マニュアルにそう「書いてない」ことが、Cコンパイラーではない証拠だという あたりまえのことがまだわかっていないわけだからな。
800 :
デフォルトの名無しさん :05/03/05 12:39:10
やーい > にせもの
今日は啓蟄か・・・ 虫がいっぱい湧いているるのもうなづける
803 :
デフォルトの名無しさん :05/03/05 12:56:34
>>802 おまえみたいなVCユーザーのことだな。
804 :
デフォルトの名無しさん :05/03/05 12:58:24
801おまえぼけ > only completely conforming option today. これがウソなことさえわからんのか。 何年前の話だよ!
805 :
デフォルトの名無しさん :05/03/05 13:03:00
Red HatについてもV8.0までしか書いてないような「超 おおむかし」の記述を根拠に するような801はかなりのまぬけ。
#include <???>と #include "???" って何が違うのかな
808 :
デフォルトの名無しさん :05/03/05 13:22:24
809 :
デフォルトの名無しさん :05/03/05 13:25:48
>>806 後者は、カレントディレクトリー(というかそのファイルがある場所)を探してから
-I指定した場所や標準の場所(/usr/include等)を探すが、
前者は、カレントディレクトリー(というかそのファイルがある場所)を探さない。
810 :
デフォルトの名無しさん :05/03/05 14:08:44
ぼけ荒らしの傾向 1.自分を絶対正しいと考えている。 2.仲間たちを例外なく無知な大馬鹿者と考えている。
811 :
デフォルトの名無しさん :05/03/05 14:16:10
今ある環境で動くものを作れということだよ。 「このコンパイラは規格にあってないので作れません」「明日から来なくていいよ」
815 :
デフォルトの名無しさん :05/03/05 16:23:57
引きこもりは世間が狭いね
引きこもってないで、スカイマークスタジアム行ってこい。 阪神とオリックスが雪の中、野球やってるぞ。
818 :
デフォルトの名無しさん :05/03/05 17:44:31
>>812 当たり前すぎていちいち言うのも馬鹿馬鹿しいが
それすらわかってないどアフォのすくつだよなここ
今ある環境にしがみついてしか仕事ができなくなった爺たち乙
i = i++とかしても、動けば問題ないよね。
821 :
デフォルトの名無しさん :05/03/05 17:55:16
>>820 保証がない特性を使わないことと
保証がある機能を使うことの区別がつかないアフォは
>>812 の登場人物
実際のコード以上の保障なんてどこにあるんだ? 規格書に書いてればそれで満足なのか?
きちんと書けないわけじゃない時にわざわざ行儀悪く書く事は無いと思うがね
K&Rの145ページで、 void qsort(void *lineptr[], int left, int right,
アヘ。ミスすまそ。 K&Rの145ページで、 void qsort(void *lineptr[], int left, int right, int (*comp)(void *, void *)); とプロトタイプ宣言されているqsortを、mainの中で呼ぶときに 第四引数を (int (*)(void *,void *))(numeric ? numcmp : strcmp) と指定しているのがわからんです。 (int (*(numeric ? numcmp : strcmp))(void *,void *)) と書くべきだとおもうんですがなんで上のように書くんですか?
>(int (*)(void *,void *)) この部分はキャスト。
>(*) この部分はアナル。
>>826 ををををを!そういうことですか!サンクス!!!
830 :
デフォルトの名無しさん :05/03/05 19:10:47
>>822 >どこにあるんだ?
それは自分で考えろ
わかんねー奴ぁ適性低すぎ
廃業を推奨する
831 :
デフォルトの名無しさん :05/03/05 19:18:59
引きこもりは手段が目的だから
規格もコードも信じられないのか。 結局、何を信じてるんだ?経験?
実際にプログラム動かして検査してみるまで信用できないけど
834 :
デフォルトの名無しさん :05/03/05 19:31:47
俺は愛を信じるね
>835 あ、俺も最初気づかなかったけど右上でジャンル選べるから。 今のところ、14/15+13/15。まだまだ先は長いぜ。
>>821 じゃ、
x = (i++ > j++) ? i++ : j++;
って、どう?俺は、これはちゃんと動く保証そのものがないと思うんだが。
ここがネタスレだったのをすっかり忘れていたよw
>>837 iが10、jが0とすると、xに11、iに12、jに1が入りますが何か?
>837
規格上保証されてても実装上不安が残るって意味?
そりゃま、規格上正しくてもよろしくないコードもいくらでもあるし、どこで線を
引くかは想定する環境等程度問題じゃないすかね。
VC7.1, BCC 5.5.1, gcc 3.3.3 (cygwin) だと動いとるようですが。
とりあえず 137/150 だった。
で、↓って undefined じゃないの?
>int a = 1;
>printf("%d", ++a, a + 5);
関数呼び出しについては副作用完了点は関数呼び出し前で、引数は評価順序不定。で、
ttp://www.kouno.jp/home/c_faq/c3.html#8 >更に、変更前の値は、格納される値を決定するためだけにアクセスしなければならない。
a + 5 はそうじゃないよな?
gcc も "may be undefined" だけど警告出すし。
クイズの中で気になったのはこれ これって b=2 が保証されるんだっけ?? int a = 1; { int a = 2; b = a; }
844 :
デフォルトの名無しさん :05/03/05 22:24:26
a->b = 0 "->"、これなんて読むの?
aro-
>>843 bのscopeがそのブロックの外なら、b==2。
852 :
デフォルトの名無しさん :05/03/06 01:08:53
質問です。 あるファイルをバイナリ形式でfopenして 最後から6Byte目までを消したいのですが、 どうすればよいのでしょうか? ファイルを読むときEOF!=判定を使うので EOFを埋め込めばと思い、fseek()でFPを最後から-6に移動し putcでEOFを埋めましたが変化ありませんでした。
853 :
852 :05/03/06 01:10:13
ちなみに、埋めたというのは putc(EOF , fp); のような書式で行いました。 よろしくお願いします。
855 :
852 :05/03/06 01:22:05
856 :
デフォルトの名無しさん :05/03/06 01:26:29
> EOFを埋め込めばと思い ぼけ。ファイルにそんなものが入っているわけじゃねーよ。常識だろうが
857 :
デフォルトの名無しさん :05/03/06 01:29:10
>>856 おまえみたいなのがレスする意味がわからん。
何の役にも立たないのに。
EOFをちゃんと解説してる解説書ってそんなに無かった気がする
>>852 FILE* fp;
FILE* fp_tmp;
int len, i;
/* ファイル名を binary.dat とする */
if ((fp = fopen("binary.dat", "rb")) == NULL) {
printf("File couldn't open.\n");
exit(0);
}
if ((fp_tmp = fopen("binary.tmp", "wb")) == NULL) {
printf("File couldn't write.\n");
fclose(fp);
exit(0);
}
fseek(fp, -1, SEEK_END);/* 最後から1バイト前に移動 */
len = ftell(fp) + 1;/* ファイルのサイズ */
fseek(fp, 0, SEEK_SET);
for (i=0; i<len-6; i++) {
fgetc(fp);
fputc(fp_tmp);
}
fclose(fp_tmp); fclose(fp);
860 :
デフォルトの名無しさん :05/03/06 01:33:44
> EOFをちゃんと解説してる解説書ってそんなに無かった気がする くさかべ先生の本を読めばだいじょぶ
862 :
デフォルトの名無しさん :05/03/06 01:42:05
質問です。 カレントディレクトリから一つしたの階層の全ファイルそれぞれにある処理をさせたいのですが、 違う階層のファイルを全て開くにはどうすればいいのでしょうか?
863 :
852 :05/03/06 01:45:00
chsize ですね。
しかし仕様があまりHPにのってないです。
困りました。
>>859 ありがとうございます。
ですが、扱うファイルサイズもGByteオーダなので
コピーの方法は避けたいのが現状です。
たかが後ろ6Byteほど削るだけで、コピーするのは時間の無駄と思いまして。。
>>858 今手元にないんで, はずしてるかも知れないんだが,
K&R にはちゃんと書いてあったと思うが...
>>862 プログラムの起動オプションでファイル名を指定するのが簡単かな。
>>863 C の使い方って言うより, 使ってる OS の仕様によると思うが...
Unix 系の OS だと truncate なるシステムコールがあって,
ファイル名と ファイルサイズを指定すれば, その長さに切り詰
めてくれる.
truncate("ファイル名", size)
ってな使い方.
867 :
852 :05/03/06 02:02:49
>>866 なるほど。ファイルの最後という概念は、EOFというより
OSレベルで管理されているという理解でいいんでしょうか。
バイナリで読むのになぜここでファイルの最後なのかが
わかるのか不思議でした。
OSはWindowsXPなんですけどこれじゃ無理ですかね・・
>865 失礼しました、補足があります。 一つ下の階層にもディレクトリがある場合、さらにそのディレクトリ内も全ファイル処理をさせたいのです。
869 :
852 :05/03/06 02:19:29
解決しました。 int truncate(const char *path, off_t length); int ftruncate(int fd, off_t length); を使うか BOOL SetEndOfFile(HANDLE hFile); を使う必要がありそうです。 ただC言語というより、OSレベルの話でした。
>>868 処理系によって方法や関数名が異なるけど、OSは?
871 :
デフォルトの名無しさん :05/03/06 02:35:54
なにか初心者用のmix of C&assemblyみたいないい本ある?
>870 そうなんですか〜。 OSはWindowsXP、Windows2000です。
>>872 とりあえず試作品を作ってみるから、少し待ってくれる?
>873 はい。 すみませんがよろしくお願いします。
875 :
デフォルトの名無しさん :05/03/06 03:19:59
> カレントディレクトリから一つしたの階層の全ファイルそれぞれにある処理をさせたいのですが、 ぼけ。findつかえよ。
>>872 お待たせ。
少し強引な方法だけど、作ってみた。
OS:Windows XP
コンパイラ: lcc-win32
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <direct.h>
/* 改行文字を削除する */
void chomp(char* str) {while(*str) {if (*str == '\r' || *str == '\n') {*str = '\0'; break;} str++;}}
/* 文字列を空白で区切る */
void split(char strs[4][1024], const char* str) {
int i=0, count; char s[1024]; char* ptr;
strcpy(s, str);
chomp(s);
if ((ptr = strtok(s, " ")) == NULL) return;
strcpy(strs[0], ptr);
for (i=1; i<3; i++) {if ((ptr = strtok(NULL, " ")) != NULL) strcpy(strs[i], ptr);}
i=0; count=0; while (count<3) {if (s[i] == '\0') count++; i++;}
while (s[i] == ' ') i++;
strcpy(strs[3], s+i);
}
877 :
870(続き) :05/03/06 04:39:47
/* ディレクトリ内のファイル全てにコマンド処理をする */ void dirs(const char* dirname, const char* comname) { char s[1024]; char s2[1024]; char strs[4][1024]; FILE* fp; int i; static int flag = 0; if (dirname[0] == '.') {if (flag == 0) flag = 1; else return;} chdir(dirname); system("chdir"); system("dir > temp.txt"); if ((fp = fopen("temp.txt", "rt")) == NULL) {printf("Can't open temp.txt.\n"); return;} for (i=0; i<5; i++) fgets(s, 1024, fp);/* 最初の5行は無駄なので飛ばす */ while(1) { fgets(s, 1024, fp); chomp(s); if (s[0] == ' ') break; split(strs, s); if (strs[2][0] == '<') dirs(strs[3], comname); else {sprintf(s2, "%s %s", comname, strs[3]); system(s2);} } fclose(fp); system("del temp.txt"); chdir(".."); }
/* 第一引数にディレクトリ名、第二引数に実行したいコマンド名 */ int main(int argc, char** argv) { char buf[1024]; char* ptr; if (argc != 3) {printf("Usage: %s directoryName commandName\n", argv[0]); exit(0);} dirs(argv[1], argv[2]); return 0; }
(´-`).o0(あー、漏れもC言語の練習にと似たようなの作ってみたことあったな… 恥ずかしい) その方法で行くならもっとdirコマンドのオプションを駆使したほうがいいかと思われ あと、リダイレクトしてるファイルの処理面倒だし tmpfile 使うとか boostで幸せになれるけどCスレだからなぁ…
>876 ありがとうございます! 試してみたところ、 第2引数にまずいコマンドを渡してしまっているせいか、 tempファイルが作成されたあたりで止まってしまいますが。 もう少しいろいろ試してみます。
(ノД`)なんか恥の上乗せしちゃった tmpfile使い所ないですね
>>879 dir コマンドはあくまでもカレントディレクトリのファイル(とディレクトリ)
の一覧を得るためだけに使っていますが。
それと、tempファイルは使っているのですが・・・
>>880 第二引数に何を指定したの?そのコマンドの内部で chdir してなければ
大きな問題は発生しないと思うけど・・・
ちなみに、動作テストするときは第二引数に echo と書けば
ファイルに影響を及ぼさないで済みます。
カレントディレクトリを指定するときは . 第一引数に「.」と書きます。
それと、そのプログラムの実行速度はかなり遅いです。
ディレクトリが変わるたびにファイルの読み書きをするのが
原因かも知れません。そうでなければ、system コマンドが遅いことも
考えられます。
即興で作ったので、きめ細かな動作テストやエラー処理をちゃんと
やっていないです(スマソ)。
>>881 ???。temp.txtを使っていますが?
>>882 =870
たぶん、ディレクトリ取得だけなら
dir /ad /b
でいいんじゃない? ということだと思うよ。
あ、ごめん。ファイルの取得がメインなら dir /a-d /b
>>884-885 dir コマンドのオプションを使えば、わざわざ文字列の分割とかをしないで
済みますね。それは盲点でした。
それを知らずに余計な労力を費やしていました。
ご指摘ありがとうございます。
main()から dirz("/");、で、たぶん、うごく。貼。 #include <stdio.h> #include <sys/types.h> #include <dirent.h> #include <sys/stat.h> #include <unistd.h> #include <string.h> #include <stdlib.h> void dirz(char *name) { DIR *d; struct dirent *dd; struct stat st; char out[256]; if (strcmp(name, "/dev/fd") == 0 || (d = opendir(name)) == NULL ) return; while ((dd = readdir(d)) != NULL) { strncpy(out, name, 256); if (strcmp(out, "/") != 0) strncat(out, "/", 1); if (dd->d_name[0] == '.') continue; puts(strncat(out, dd->d_name, 256 - strlen(out))); if (access(out, R_OK) == 0) { if ((stat(out, &st) != -1) && (st.st_mode & S_IFDIR)) dirz(out); } } closedir(d); }
888 :
デフォルトの名無しさん :05/03/06 10:58:28
> なんか恥の上乗せしちゃった 上乗せ...
889 :
デフォルトの名無しさん :05/03/06 11:00:02
find . -type f -exec ほげ {} \; で一発だろ
891 :
デフォルトの名無しさん :05/03/06 11:15:04
ぼけ。MS-DOSの時代からあるわ! > find.exe いまどきDOSプロンプトにそれいれてないやつはぼけ
892 :
デフォルトの名無しさん :05/03/06 11:17:28
そう。むかしから標準コマンドのほうを殺してそっち生かすのがふつうだったね。 昔は、上書きしたり、標準のほうを消したりしてたけど、 いまのコマンドプロンプトはalias機能もあるので、そんなことしなくていいし。
>>891 find.exe がドス時代からあることは知ってる。
find のオプションのことを言いたかった。
そのオプションだと unix でしか使えないと言ったつもり。
896 :
デフォルトの名無しさん :05/03/06 12:24:13
> find.exe がドス時代からあることは知ってる。 またまたしったかぶりしちゃってー
897 :
デフォルトの名無しさん :05/03/06 12:25:01
> 「*output = '\0' ;」ではなく「*output++ = '\0' ;」 ++するとなにかいいことあるわけ?
>>893 何でデクリメントした方が良いと思ったの?
899 :
デフォルトの名無しさん :05/03/06 12:44:36
質問です。 もし#includeを1つも使わなかったら、 ライブラリにまったく依存しないプログラムができるんですか?
> find.exe がドス時代からあることは知ってる。 イタタタ
>899 NO
>>899 includeディレクティブを使わなくとも、
自分で .c の中にヘッダ書けばライブラリは使えるから、回答はno
>>896 昔はDOSプログラマーだったから、find.exe が昔からあったことくらいは知っている。
証拠を出せと言われたら、DOS 時代の(プログラミングに関係する)知識を(多少)披露して見せる。
>>899 出来ないことはないけど、全ての入出力はライブラリを使うから、
無入力無出力の、何の意味もないプログラムしか出来ない。
>>904 わ、ヘッダの内容だ、ごめん。
関数プロトタイプとか構造体とかね。
906 :
899 :05/03/06 12:59:06
インラインアセンブラを使った場合などはどうなるんでしょう?
908 :
デフォルトの名無しさん :05/03/06 13:04:10
>899 答えはno C言語では関数宣言はオプション、つまりヘッダはなくても何の問題もなくライブラリ関数を使える。 細かく言うとライブラリを使う、つまりリンクするはリンカの仕事。 includeの関数宣言を見てそれと整合性がある使い方をしてるかチェックするが、コンパイラの仕事。 んで、宣言がなければこのチェックもなくなるので、 あとはリンカがリンクさえすればよいので、includeの有無つまり関数宣言の有無は無関係。
>>905 了解。
>>906 インラインアセンブラから外部入出力装置にアクセスすることになるので、
結局はライブラリを自分で作るのと同じくらいの労力が必要になる。
というか、ライブラリを使わないメリットなんてあるんだろうか・・・・・・
>>903 はいはい。find.exeが昔からあるってことを知ってるのはわかったから
911 :
899 :05/03/06 13:17:00
いや、libcって、5と6と2.0と2.1と2.2の間で互換性がないんですよね? そしてこれから新しく出てくるバージョンも互換性がないわけで、 ライブラリに依存しないプログラミングができたらいいなと思ったわけで。 どうもありがとうございました。
>>910 信じてないだろ?
INT86H とか、dosshell とか、640KB の壁を EMS のページングで処理するとか、
浮動小数点計算は遅いから全部整数化するとか、
MS-DOS 5.0 以降はアセンブラなどの開発用ツールが別売りになったとか、
FM音源とか、メモリの一部がそのまま VRAM になっていたとか、
INT命令は86h以外はハードウェア制御で86hが MS-DOS のシステムコールだとか、
ストップボタンを押してから電源を切るとか、4096色中16色モードとか、
昔から DOS を扱ったことが無ければ出てこないキーワードを幾らでも挙げることが出来る。
しまった、釣られてしまったorz
913 :
ゆう :05/03/06 13:23:56
大学でファイルをやってるんですが、 ファイルをオープン、文字を1文字づつ読み込んで表示、 クローズ、オープンの時のエラー処理あり。のプログラムを Cでお願いします。
>>913 int main(int argc, char** argv) {
FILE* fp;
int c;
if ((fp = fopen(ファイル名, モード)) == NULL) {printf("File can't open.\n"); exit(0);}
while ((c = fgetc(fp)) != EOF) {fputc(c, stdout);}
exit(0);
}
モードは、r が読み込み、w が書き出し、t がテキストモード、b がバイナリモード。
そのファイルがテキスト形式だったら、モードに "rt" を指定する。
あ、最後の exit(0) の前に、 fclose(fp); を忘れていた。
まあ、exit()したらfclose()されるけどね。
>>912 チラシの裏はいいからさ、find.exeが何をするためのコマンドなのか知ってから喋ってね。
find.exeのオプションを知ってる割に何をするのか知らないでこんだけ語っている元プログラマの人って(^^;
919 :
ゆう :05/03/06 13:41:05
すいません 914さん。 あの‥もっと簡単で、初心者的なプログラムでお願いしたい!! それか、これがもっとも簡単っすか?? 申し訳ない‥
>>916 fopen には fclose が無いと気持ち悪い。単に心理的な問題だけど。
>>917 スマソ
>>918 >チラシの裏はいいからさ、find.exeが何をするためのコマンドなのか知ってから喋ってね。
多数のファイルの中から特定の文字列を含むファイルを探すコマンド?
というか、find.exe は検索の目的でしか使ったことがないから良く分からない。
何度も言うように、オプションの形式が明らかに DOS と異なっていて、
unix 形式だったから、find ≠ find.exe と考えて発言したまでのこと。
>>919 >>914 以上に簡単に書くことは出来ない。
よく使うから、ファイル操作をするプログラムを5〜6個くらい作れば、
反射的に書けるようになる。
というか、マルチはやめよう。
>>897 自分はこう思い込んでいます。
↓
最後に whileから脱して outputの末尾に \0 を付け加える。
「付け加える」のだから
( if内の「 *output++ = '\%' ; 」と同様に) ++でインクリメントするべき。
925 :
デフォルトの名無しさん :05/03/06 14:07:01
>>923 >>910 だけどさ勝手に暴走して
>>912 書いて「釣られてしまった」って、何?
だから、あんたはfind.exeがあるのを知ってる程度ってことでいいじゃねーか?
漏れはそれがわかった、ってしか言ってないんだが。
>>926 言い方が悪いから、その言い方に合わせて発言しただけ。
>だから、あんたはfind.exeがあるのを知ってる程度ってことでいいじゃねーか?
>漏れはそれがわかった、ってしか言ってないんだが。
それならそうと早く言ってくれれば良かったのに。
わざわざ人を馬鹿にするような言い回しをするから話がややこしくなる。
いくら2ちゃんねるでも最低限のネチケットは守れよ。釣りや煽りの意図がないんだったら。
>>924 char *p = output;
*output++ = '%'; p[0] = '%';
*output++ = chars[ ]; p[1] = chars[ ];
*output++ = chars[ ]; p[2] = chars[ ];
*output = '\0'; p[3] = '\0';
929 :
デフォルトの名無しさん :05/03/06 14:39:24
>>927 >>だから、あんたはfind.exeがあるのを知ってる程度ってことでいいじゃねーか?
で、これに異論があるわけなのか?
ないんだろ?
>>929 >で、これに異論があるわけなのか?
無いよ。言い方に気をつけないと駄目だということしか言ってない。
内容はまともでも、言い方一つで印象が全く変わってくる。
煽りだと思われたくなければ言い方に気をつけろと言いたい。
それ以上のこともそれ以下のことも言っていない。
というか、もうこの話はやめよう。
>>927 プ
釣られる意図がないなら釣られるなよ。
DOS時代からプログラマやってて、Unixのfindがどんなコマンドか知らないのも驚きだけど、
話の流れでfind.exeじゃ初めから目的に合わないってことも理解できない当たり終わってるがな。
>>927 もし煽りだったとしても、スルー出来ないと自分が荒らしや煽り扱いになるよ
(上の方のレスよんだけど、find知ってても知らなくてもどうでも良いし、それをアピールする必要も無かったんだし)
仕様がどうこうで揉めたりして、もう900超えてるし……
>>931 >プ
>釣られる意図がないなら釣られるなよ。
釣られる意図?面白い日本語だw
>DOS時代からプログラマやってて、Unixのfindがどんなコマンドか知らないのも驚きだけど、
DOS時代は中学高校に通っていたんだよ。そこのパソコンのOSがDOSだけだったから、
DOSの知識は身についてもUnixの知識は(当時は)皆無だった。
>話の流れでfind.exeじゃ初めから目的に合わないってことも理解できない当たり終わってるがな。
だから目的に合うプログラムを書いたんだよ。頭大丈夫?
934 :
デフォルトの名無しさん :05/03/06 15:06:35
うわぁ…元プログラマがお手前披露したかったのかな
>>931 それを言っちゃ(ry
>>932 >もし煽りだったとしても、スルー出来ないと自分が荒らしや煽り扱いになるよ
スマソ。つい頭に血がのぼってしまった。
>(上の方のレスよんだけど、find知ってても知らなくてもどうでも良いし、それをアピールする必要も無かったんだし)
文面から「find.exeを知らないんだろwバッカジャネーノ」という雰囲気が漂ってきたから、
つい無駄にアピールしてしまった。
と、脳内で補完しますた
>>934 >うわぁ…元プログラマがお手前披露したかったのかな
元も何も、現役で日常的にプログラムを書いているのだが。
書き方が悪かった。実務経験は無くて、高校までは趣味で、
大学に入ってからは趣味+授業の課題でプログラムを作っていたから、
プログラマーを自称した。断じてプログラミングを引退したわけではない。
938 :
デフォルトの名無しさん :05/03/06 15:14:53
>>937 ここではなくHSPとかPerlのスレが面白いよ。きっと。
なぜにfindでここまで熱くなれるのか…
暇なんでしょ
DOSおやじきもおおおおお
とりあえず次スレいってみよ〜w テンプレ・タイトルに希望ある人どうぞ。なければ現行のままでいきますぃ
946 :
デフォルトの名無しさん :05/03/06 16:15:20
> 文面から「find.exeを知らないんだろwバッカジャネーノ」という雰囲気が漂ってきたから、 > つい無駄にアピールしてしまった。 というか、DOSの時代にフリーソフトで有名だったfind.exeは 「. -type f -exec {} \;」みたいなパラメーターやオプションが「そのまま」 使えるのがウリだったんだから、「あったのはしってる。だがそのようなオプションは」云々 いうやつってのは、ただの「しったかぶりオヤジ」だということだよ。
947 :
デフォルトの名無しさん :05/03/06 16:17:16
で、昔だったらDOSについているfind.exeを「上書きする」か、 そっちを消すことによって同じ名前のfind.exeを生かしてたのだが、 いまどきのコマンドプロンプトなら「alias」がつかえるので、そんなことしなくていい、 っていうわけだ。
948 :
デフォルトの名無しさん :05/03/06 16:19:05
> fopen には fclose が無いと気持ち悪い。単に心理的な問題だけど。 こういうまぬけなこというぼけは、じゃあfreopenだったらどう思うんだろうね ;-P それにもfcloseつける?
949 :
デフォルトの名無しさん :05/03/06 16:21:26
> INT86H とか、dosshell とか、640KB の壁を EMS のページングで処理するとか、 そんなの使ってたようじゃだめだね。history.comとかその手のフリーソフトがでてくる前に ditから出てたH-SHELLを使っていてこそDOSプログラマー
950 :
デフォルトの名無しさん :05/03/06 16:22:55
> ストップボタンを押してから電源を切るとか、4096色中16色モードとか、 > 昔から DOS を扱ったことが無ければ出てこないキーワードを幾らでも挙げることが出来る。 あのー、それはDOS云々ではなく「PC-9801独自」の仕様だが。
951 :
デフォルトの名無しさん :05/03/06 16:27:03
> テンプレ・タイトルに希望ある人どうぞ。なければ現行のままでいきますぃ Part 100近辺のがよかったなあ。
> 文面から「find.exeを知らないんだろwバッカジャネーノ」という雰囲気が漂ってきたから、 これで話をされるのはまじで怖い。勘弁してくれ。
>>943 一応冷静にレスしているのだが。
>>944 言われなくても、区切りのいいところで逝くよ。
>>946 フリーソフトだったとは・・・・・・てっきりDOSコマンドだとばかり思ってたorz
しつこいようだけど、漏れはオヤジじゃない。
>>948 freopen は使ったことがないから分からない。
>>949 当時はネットが使えなかったから、全然分からないorz
大学に入るまでスタンドアローンでしかパソコンを使ったことがないOTZ
>>950 間違えたorz
当時はPC98シリーズのDOS環境しか知らなかったから、PC98とDOSを混同していた・・・・・・
ああ、漏れは何て無知だったんだorzorzorz
ちょっと首吊ってくる。
以後、次スレの話題以外禁止。
>954 なんですと!?
957 :
デフォルトの名無しさん :05/03/06 16:39:16
958 :
デフォルトの名無しさん :05/03/06 16:39:44
やーい おやじ > しつこいようだけど、漏れはオヤジじゃない。
>>954 荒らし軍団は、スレ埋め立て部隊ということでw
960 :
デフォルトの名無しさん :05/03/06 16:42:59
>>903 メモリマップドI/Oは?
あの時代、いちいちドライバ書くとは限らなかったぜ
それから、無入力無出力でちゃんと意味のあるコードときどき書くぞ
961 :
デフォルトの名無しさん :05/03/06 16:43:05
あれ? にせもののほうのPart 100が収録されてるのかな? そこには 100だったか99だったかは2つずつあったはず。
962 :
デフォルトの名無しさん :05/03/06 16:44:25
>>917 スレ違いを看過しながらたかがマルチなんぞ指摘するおまえさんもおかしいぞ
>>961 あ、マジっすか よくわからんのでw、具体的にどうぞ
964 :
デフォルトの名無しさん :05/03/06 16:46:41
【隔離】C言語なら俺に聞け! Part 104【隔離】
965 :
デフォルトの名無しさん :05/03/06 16:46:59
「きけ」はPart 78みたいな字がいいな
966 :
デフォルトの名無しさん :05/03/06 16:49:00
>>965 それ言ったら、「言語」もPart 78みたいにつけないほうがいいだろ
さすがにかっこわるい > C言語
967 :
デフォルトの名無しさん :05/03/06 16:51:57
>>948 fclose(stdin); を書かないのは stdin = fopen(); をした階層ではないモジュールを書いているときで
誤魔化しも矛盾もしていない、通常どおりポリシーに従ってやっていることだ
968 :
デフォルトの名無しさん :05/03/06 16:54:20
だーかーらー stdinをfreopenしたらどうするの? ってきいてるの > 967
969 :
デフォルトの名無しさん :05/03/06 17:00:54
そうね Part 95みたいなAA貼ってくれ!
971 :
デフォルトの名無しさん :05/03/06 17:04:17
>>968 stdin を fopen した階層で fclose が行われる予定の場所に、fopen されたオブジェクトを置いているだけだ
972 :
デフォルトの名無しさん :05/03/06 17:04:57
95も2つあるね
えー残り少ないけど、なんか希望があったらドゾ
スレタイはこうしてくれ! 【隔離】Cなら俺に訊け! Part 104【病棟】 こうしとけばアレな人は寄ってこなくなると思うが
くさかべせんせいのHPリンクも
スマソ連稿規制にあってた
>>977 不吉だなwおk
>>978 りょーかい。日下部って書いてくさかべって読むんだなwしらんかった
日下部氏まで巻き込むな
あーネタだったのか;失礼
吊る前に一言。
>>957 間違い大杉>漏れorz
>>958 漏れが幼稚園に入る前、8時だよ(ry を少しだけ見た記憶がある。
○井注は知らなくて、志○けんがドリ○ターズに入っていた。
幼稚園〜消防の頃、「まんが○本昔話」や「クイズダー○ー」を見ていた。
最後の倍率が「18、20、4、8、18」くらいだったのも覚えている。
一番左側に座っていたのは、最初は篠○教授だったが、途中から北○大教授になった。
消防の頃、「ひみつの○ッコちゃん」や「ド○ゴンクエスト(主人公○ベル)」を見ていた。
あと、「聖○士星矢(せ○んとせいや)」も見ていた。12宮の頃が一番好きだった。
覚えている技は、星矢→ペガサス流星拳、紫龍→魯山昇竜波、氷河→ダイヤモンドダスト、瞬→ネビュラチェーン、
一輝の鳳翼天翔。彼らはブロンズ聖闘士。あと、ジェミニのアナザディメンション、アフロディーテのロイヤルデモンローズ、
アーレス教皇の「げんろうまおうけん」などなど。
聖○士星矢の特徴は、何故か技を受けてから数秒〜数十秒後にダメージを受けること。
FC版DQ4が発売されたときには消防の高学年だった。発売日は2月11日。
AI戦闘機能搭載、五章に分かれたストーリー、エンドールのカジノでコイン838861枚を4Gで買える。
厨房の頃、「YAYAYA」などが流行した。
3年の頃、T-*OLAN の「マリア」などをよく聞いた。
工房の最初の頃、麻原が逮捕された。
テレビは「しあわせ○族計画」などを見ていた。
「たまごっち」が流行ったのも漏れが工房の頃。
大学に入ってから、浜○あゆみ(WHATE*ERなど)や宇多○ヒカル(Au*omaticなど)とかをよく聞いていた。
これだけ証拠を挙げても、まだ漏れをおやじ呼ばわりするつもりかと聞きたい。
テレビ番組や芸能人などから年齢を逆算すれば、馬鹿でも漏れがおやじでないことが分かるはずだ。
もちろん捏造なんかではない。小さい頃の記憶を思いついたままに書いただけ。
もし漏れがおやじだったら、上のようなことは書けないはず。さあ、誤りを認めよ。
これを書いているうちに日が暮れてしまったorz
漏れどう考えても912の内容が分からん。どうやら色々と間違って覚えていたようだ。 86hのシステムコールとか知らんし。 int86関数も知ってるし、ファンクションコールINT 21Hも知ってたつもりだけど 最近のバージョンって違うん? スレ違いだけど、埋め代わりってことで許して。
>>982 馬鹿だな。若い振りするのは簡単なんだよ。
歳の離れた弟か従兄弟、或いは子供でもいればいくらでもその振りができるだろ。
そんなことも理解できないから「オヤジ」って言われているんだよ。
つまり実年齢がどうのではなく、言動が「オヤジ」なわけだね。
実際にDOSを知っている40前後の連中は頭が柔軟だから、あんたよりもよっぽど若々しいもんだよ。
987 :
デフォルトの名無しさん :05/03/06 18:27:58
> int86関数も知ってるし、ファンクションコールINT 21Hも知ってたつもりだけど int86関数はLattice-Cについてたものだ。それをまねしたmscにも当然ついていたが、 最近のOSでは動かない。自己変更コードが含まれているからだ
988 :
デフォルトの名無しさん :05/03/06 18:28:39
☆次スレ☆ VCならヨソへ逝け! Part.104
989 :
デフォルトの名無しさん :05/03/06 18:31:07
unsigned char uchar[2]; int i; uchar[0]=0xff; uchar[1]=0xff; for(i=8*2-1;i>=0;i--) { printf("%c",( *(uchar+1) & (1<<i) ) ? '1':'0'); } 結果を1111111111111111にしたいのですが、0000000011111111になります。 どうしてでしょうか?
990 :
デフォルトの名無しさん :05/03/06 18:34:02
えー荒らしに巻き込まれてスルーされちまった
>>925 を
このスレ埋め立てかねて教えてくだされ 頼みまつ
>>968 freopen を使ったことがないからググらないと分からない。
他の証拠といえば、幼稚園児の頃に「にこにこぷん」を見ていた。
登場キャラクターは「じゃじゃまる」「ピッコロ」「ぽろり」
ピッコロが「ピッコ!」と言いながら地面を蹴ると残り二人が倒れる。
ぽろりは「いよいよ」と泣く
消防の頃からファミコンするようになった。最初にやったゲームがスーパーマリオ。
1−2のゴール直前の土管のところから−1面に行けた。
3−4か4−4の無限ループに苦しんだ。
斧を取ると同時にクッパに触れると、サイズは大きいままだけど1回敵に当たると死ぬ。
スーパーキノコを取ると小さくなり、ファイアーフラワーを取るとチビファイアーマリオになる。
この(消防の)頃が藤子不二雄の最盛期だったような気がする。
プロゴルファー猿、ウルトラB、忍者ハットリくん、パーマン、オバケのQ太郎、
エスパー魔美(テレポーテーション1回で移動できる距離は600m)、
怪物くん、ビリ犬(ガリ犬は100万円以上のお金を見ると気絶する)、
ドラえもん、キテレツ大百科、チンプイ(主人公エリが何故か「殿下」と結婚するように迫られる)、
21エモン(オープニングテーマを光GENJIが歌った)、などなど。
消防低学年の頃、美空ひばりが死んだ。
消防半ばの頃、昭和天皇崩御。テレビでは天皇の事しか放送しないから、
ビデオ屋はかなり儲かったらしい。
消防高学年の頃、東京の電話番号(市内局番)の頭に3がついて4桁になった。
消防の頃と言えば、千代の富士(名は貢(みつぐ))が横綱だった。
朝潮や北天佑もいた。千代の富士は、断髪式のときに涙を流していた。
あと、国鉄がJRになったのも漏れが消防の頃だ。テレビで、国鉄のことを
「国 金矢」と放送していたのも覚えている。
993 :
デフォルトの名無しさん :05/03/06 18:40:05
994 :
デフォルトの名無しさん :05/03/06 18:40:24
>>989 BigEndiganかLittieEndian環境かでかわってくるので、
「そんなキャストはしてはいけない」の典型だ。ぼけ
995 :
デフォルトの名無しさん :05/03/06 18:42:01
ちがうだろ。 uchar にしようが、uchar + 1にしようがそこを「unsigned char」として1バイト分 とりだしてシフトしたものだ。隣にどんな値があるかは無関係。
996 :
デフォルトの名無しさん :05/03/06 18:42:42
> freopen を使ったことがないからググらないと分からない。 freopenもつかったことないくせに、fcloseについてえらそうなこと言うなよ ぼけ
このスレのNGワード ぼけ
998 :
989 :05/03/06 18:44:47
隔離スレへようこそ!
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。