弐
>1 乙 >2 早
5 :
デフォルトの名無しさん :02/06/24 21:48
strings.hってobsoleteなヘッダですよね? 単純にstring.hに置き換えて問題ないですか?
メール欄がvoidでなくなって久しいなあ・・・・
>5 なぜおとなしく日本語で書かないの?辞書引いたよ
>7 日本語がわからないから
>>5 もしかして日本人じゃなくて?隣国の方ですか?
10 :
デフォルトの名無しさん :02/06/24 22:07
ポケコンの内蔵C言語はどのくらいの大きさのプログラムを作れますか?
obsoleteって慣用表現だろ。
前スレの
>>846 >>954 へ
10 ていう数字は
>>846 で malloc で 10 文字分確保してたから。
それに合わせて書いただけ。
>>846 の場合だと「一桁の数字」と「改行文字」と「ヌル文字」で 3 以上あればいい。
入力文字数分あればいいけど、特に理由がないときは 80 ぐらい。
80 てのは、端末の1行分から来てるらしい。(未確認)
あとは、 atoi に掛ける前に改行文字をヌル文字に置き換えた方がいいよ。
15 :
デフォルトの名無しさん :02/06/24 23:47
すみません、教えて戴けないでしょうか。 linux(vine 2.5)で、ディレクトリの中のファイル数を 知りたいのですが、readdir(3)をNULL まで回して数える以外に 方法はあるのでしょうか。言語はCです。DIR構造体の中に 何か情報があるのでしょうか。
16 :
デフォルトの名無しさん :02/06/25 00:55
1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 配列なんですけど、プログラム教えておながい。
>>15 readdir()でいいと思う。
おおざっぱでよければ、ハードリンク数が
ファイル数+2ぐらいになってるかもしれない。
ああ、ごめん。勘違い。 ・・・もう寝よう。
ありがとうございます。 ハードリンク数は使えない…んですかね。 地道にループするしかないのかな。
ごみファイルを増やしても、ハードリンク数は 変わらないんですね。(ディレクトリのハードリンク数は) ディレクトリの数しか見ていない? ファイルシステムがまったく分かってない発言をしている 気がしますが。
22 :
デフォルトの名無しさん :02/06/25 02:09
malloc() で、SIGSEVが発生するが、これは、mallocのバグなのだろうか?
malloc(0x18, 0xeffff348, 0xb78964, 0x35000000, 0x0, 0xb78981)
_smalloc(0x18, 0xeefabcf8, 0x8, 0x0, 0x0, 0xeefa5868)
--- シグナル SIGSEGV を発生しました ---
sigacthandler(0xb, 0xefffe9a8, 0xefffe6f0, 0xef666b60, 0x2c, 0xac5020)
__sighndlr(0xb, 0xefffe9a8, 0xefffe6f0, 0xef654598, 0xac5010, 0xac4ff0)
__libthread_segvhdlr(0xb, 0xefffe9a8, 0xefffe6f0, 0xef666b60, 0x0, 0x0)
日本語Solaris2.6、コンパイラはWorkShop5.0。実行ファイルがでかいとの、
でばっかのバグで、メモリアクセス検査は使えない。
http://sources.redhat.com/ml/glibc-linux/2000-q2/msg00094.html には、獲得してないメモリを開放すると、まったく関係のないところで、
SIGSEGVが発生するとあるが、本当なのか?
fseekみたいな感じで、ディレクトリのストリーム?のSEEK_ENDに セット、とかできればなあ。DIR構造体はどういう構造なんでしょう。 __dirstreamのデファインとしかヘッダに書いてないし。
>>23 BSD 系だと telldir(), seekdir() なんてシステムコールがあった気がするが。
何にせよ ANSI C の範囲外だから、UNIX プログラミングのスレに移動しない?
>>22 たぶん 22 のソースのバグ。たぶん malloc() で割り当てたメモリブロックの前後
に管理情報が書いてあって、そこを壊しているので、結果的に次の malloc で死
んでるのだと思う。
Solaris 2.6 だとソースは読めんと思うが Solaris 8 のソースで malloc の実装を
確認してみたら? もしくは、別の(性能より耐久性重視の)実装をした malloc で
差し替えてみるとか。
ElectricFenceを入れて、cc -o app source.c -lefence はだめ?
27 :
デフォルトの名無しさん :02/06/25 09:49
char int float double struct union enum long short signed unsigned if else for while do continue break goto return auto static extern register volatile この他にC言語の予約語はありますか?(ただしCプリプロセッサ命令は除きます)
28 :
デフォルトの名無しさん :02/06/25 10:06
typedef
>>12 確かにobsoleteっていう慣用表現はobsoleteだと思いますが…
あ、すまん
>>31 あとvoidも入ってないな。
何のために調べてるか知らないけど、Cの文法が載ってる適当な本を探した方が
早くないか?
>>27
sizeof
みなさんありがとうございます。
列挙しようとすると普段使っていても思い出せないものが結構ありますね・・・
autoなんて使っていないものは思い出すのに。
>>32 昔借りた本にファイルの中に存在するCのキーワードの個数を数えろという問題があったので、それを解こうと思ったんです。
const
autoってあれだろ、行番号自動でつけてくれるヤツ。
37 :
デフォルトの名無しさん :02/06/25 12:12
懐かしい・・・ contが漫才ではなくcontinueの略と知ったのは小学6年の頃だった・・・
38 :
デフォルトの名無しさん :02/06/25 15:06
>>27 _Bool
_Complex
_Imaginary
この問題を教えてください 3×3行列Aに対し 1,Aを読み込みAの行列式を出力 2,Bを読み込みA×Bを出力 3,|A|≠0の時のA^-1を出力
宿題スレ行け。あとマルチすんなボケ。
>>39 1.2.は簡単なので
3.掃き出し法(ガウス・ジョルダン消去法)を用いる。
「ガウス・ジョルダン消去法」でぐーぐるってみ。
|A| = a[1][1]*a[2][2]*a[3][3]+a[2][1]*a[3][2]*a[1][3]+a[3][1]*a[1][2]*a[2][3] -a[1][1]*a[3][2]*a[2][3]-a[3][1]*a[2][2]*a[1][3]-a[2][1]*a[1][2]*a[3][3]
>>43 あ、ちなみに配列の添え字を0から始める時は全部1引いてね。
宿題スレあるのになんで、C言語スレとすれ立てるまでも〜スレ に宿題投げるんじゃいハゲ。
3.の別の求め方。 |A|≠0のとき、各要素について余因子行列Δ11〜Δ33を求め、 A^-1=1/|A|×余因子行列(Δ11〜Δ33)で求める。 Δ11 = (a[2][2] a[2][3] a[3][2] a[3][3] ) のように。
|Δ11|=a[2][2]*a[3][3]-a[3][2]*a[3][3] ........... あとは自分でやれ。
それって余因子じゃなくて小行列式じゃないの? (-1)^(i+j) * △ij = Aij の、Aijの方でないかと。
>>48 小行列式は、適当にいくつかの行といくつかの列を取って作る行列です。
それに対し余因子は、aijのi行j列を取り除き、それに符号(-1)^(i+j)を
掛けたものです。
〜 〜
逆行列A^(-1)=1/|A|×Aで、ここにAはAの余因子行列のつもりで
書きました。
読みにくかったのならすみません。
>>39 は今さっき宿題スレ行ったね・・・。問題もそのまんま。
やっぱいろんなスレに宿題投げといて、時間経ってから答えだけ見にくるってか。
>>50 見たよ。数学の基礎もわからないで、プログラムだけ作ってやったって
何の役にも立たないからねえ。放置放置。
>>49 さらに突っ込んで(しかもスレ違いで)申し訳ないんだけど、
最後に掛けてるAって、転置しないといけなかったような気が。
それとも、逆行列を求めるときに登場する余因子行列Aは、すでに転置済みなの?
>>52 余因子行列は、転置済みです。これぐらいなら初等数学の本を読めば
書いてあるから、特に書かなかった。
54 :
デフォルトの名無しさん :02/06/26 05:13
CD-ROMのイメージを変換するプログラムを作りたいのですが ISOイメージ(2048バイト/セクタ) → RAWイメージ(2352バイト/セクタ) RAWイメージ → エラー訂正 → ISOイメージ 等々 ECCとEDCの求め方と使い方(エラーの訂正方法と検出方法)が分かりません そこら辺の事を詳しく説明している日本語か英語のホームページか Cのソースがあるホームページを知ってる方は教えて下さい
56 :
デフォルトの名無しさん :02/06/26 19:52
32bitの符号付き整数型である long は一般に最小・最大いくつまで使えるんですか? bitですよ。
>56 0xffffffffから0x7fffffffまで
まちがえた。 0x8000000からか?
>>56 >long は一般に最小・最大いくつまで使えるんですか?bitですよ。
問題聞き直してこい。
61 :
デフォルトの名無しさん :02/06/26 20:06
32bitの脱字でしょう。
62 :
デフォルトの名無しさん :02/06/26 20:07
「
>>1 」は「/2」と同じ効果が得られますが
これはどのCPU、どのコンパイラでも同じですか?
エンディアンとか関係あるのでしょうか?
>>62 普通は、エンディアンは考えなくていいとおもう。
>>62 エンディアンを問題にしなきゃいけないのは他CPUにデータを渡す場合。
>>63 どうもありがとうございます
ちなみにunsigned int型の整数なんですけど
考えなくてはいけない場合とかないですよね・・・
>>66 そっか、char->long(32bit)とかすると値変わるね。
>>62 unsignedだとだいたい同じだが、singedだと保証花井。
69 :
デフォルトの名無しさん :02/06/26 21:25
32bitの符号付き整数型である long は一般に最小・最大いくつまで使えるんですか? 先ほどはすいません。32bitの間違いでした。(気にしないで下さい) 16進数ではなく、10進数で教えてください。お願いします。
宿題か?
>>69 そもそもどんな腐ったCの入門書にも必ず書いてあるもんだと思うが・・・
2147483647 〜 -2147483648
limits.hミロ
>72 微妙にひねくれた書き方だね。
>>74 なんで?
LONG_MIN〜LONG_MAXの方が良いって事?
10進数って書いてあったからこう書いた。
>>75 > LONG_MIN〜LONG_MAXの方が良いって事?
普通そう書くだろ。
> 10進数って書いてあったからこう書いた。
意味不明。
>>76 それじゃ10進数で教えたことにならんのでは?
大きい方先に書いたからでそ。
なんか微妙に話がすれ違ってるな。
ふつう 小さい数〜大きい数 の順に書くところを
>>72 が逆に書いてるから
>>74 が「ひねくれた」って書いたのではないかと。
で、
>>75 でdefineになった上に 小さい数〜大きい数 の順にもどってるから
さらにややこしいことになってる。
>>76 の「ふつうそう書くだろ」はdefineのことを言ってるんじゃなくて、
「ふつう小さい数〜大きい数 の順で書くだろ」の意味。
ビットの並びで考えると、0 〜 -1? 意味ないけど。
ところでいつからジョブスから日(略)にかわったの?
麻雀ゲームをを作ろうと思っているんですけど
字牌はまとめちゃっていいのかな?
>83 来襲してきたころでなかったかいな?
90 :
C全くの初心者 :02/06/26 23:32
これからC言語を始めようか と思うのですが、やはりCからやった方がいいのですか?
このスレの01は、2000/09/03に建った。1の名はビル・ジョブス。 それから一年、01/10/19に建つ 07 までジョブス。 01/11/15の 08 は凡才ハカーとある。 KusakabeYouichiが付くのは01/12/02の09。 09から14まで、日下部である。 15(3/19) Dennis Richie 16(4/11) マカー代表 日下部陽一 17(4/21) 金融プログラマー日下部陽一 18(5/01) きょうはいいテンキーです。日下部陽一 21(5/07) ともっち 20(5/15) ともっち 21(5/22) 伝説の日下部陽一 22(5/26) 日下部陽一 23(6/02) 日下部陽一 24(6/14) デフォルトの名無しさん 25(6/24) スーパープログラマ日(以下略)
マンズ ピンズ ソーズはそれぞれ一つの配列にいれるとして 字牌のdナンシャペイ白發中もひとつの配列にぶちこんでいいんでしょうか
ごめん。 21が二つあるだけだったね。
気になったのでちょっと過去ログ検索してみたら 15(3/19) Dennis Richieと19(5/07) ともっち も38才でワラタ
>>92 そうか、おれが前に見てたやつは、
初期の頃のスレだったのか。
なんで変わったの?
>>98 スレ立てる人の趣味じゃない?
次は ken thompson きぼん。
意表をついて stroustrup でもいい。
彼女が出来たらしい RMS はどうよ。 1 は emacs のリンクだけ。
風の様に駆け抜けた伝説のともっち…
>>90 そりゃぁC始めるんならCからやるしかないだろな。
>>90 AとBはもう済ませた?
もし、まだならそこからお願い!
女の子はとてもナイーブだから
108 :
デフォルトの名無しさん :02/06/27 01:22
ハン板からのこぴぺ
684 : :02/06/26 15:33 ID:r+yCWVhX
韓国人がどうしておかしな事をいうのかわかりました。
どうやら、彼らの頭の中では”セグメンテーチョンフォルト”が頻繁に起きている模様。
686 : :02/06/26 15:40 ID:PZqRs7P/
>>684 んで、その ”コアダンプ”が日本に吐き出されていると。
すると、俺らは ”デバッガ”か? 一体デバッグがどれだけしんどいか小一時間(略
688 : :02/06/26 15:51 ID:r+yCWVhX
>>686 誠に申し訳ありませぬ。
本プロジェクトでは gcc と gdb のみしかありませぬ。
689 : :02/06/26 16:12 ID:tmFKv03x
>>686 デバックするより、書き直した方が早いっす。
690 :tenpura ◆UMAIu01k :02/06/26 16:22 ID:0hFhBlaF
>>689 書き直ししても無駄なコストが発生するだけだから、
フロジェクト全体をあぼーんするのが正しい判断では?
693 : :02/06/26 17:59 ID:zoiie7dc
>>690 会社の方針として、向こうのアプリがエラーを出さないように
こちら側のアプリケーション群を改修しろとの事です。
ん?
110 :
デフォルトの名無しさん :02/06/27 01:30
すいません。 ホストネームをipアドレスに変換するサンプルプログラムってありますか?
gethostbyname
プログラムだからhost(1)だろ
>>111 。
$ host 127.0.0.1
1.0.0.127.in-addr.arpa. domain name pointer localhost.
口ではそういっていても…
すいません。質問の仕方を間違えました。 具体的には 例えば www.yahoo.co.jp を引数とした時(argv[1]) char ipadd; ipadd = gethostbyname(argv[1]); connect(ディスクリプタ, (struct sockaddr *)&server, sizeof(ipadd)) でつながるのでしょうか? もしかして訳のわからない質問をしていますか?僕。
なんだよそれ server.sin_addr.S_addr = gethostbyname(argv[1]); #他のメンバは適当に埋めてくれ connect(fd,(sockaddr*)&server,sizeof(server));
gethostbynameの返値ってstruct hostent *じゃねーの?
そうだった。 直してくれ
s/S_addr/s_addr/
返り値は構造体でかえってくるんですか。納得。 じゃあ struct hostent *servhost; servhost = gethostbyname(argv[1]); memcpy((char *)&server.sin_addr, servhost->h_addr, servhost->h_length); connect(fd,(sockaddr*)&server,sizeof(server)); これはどうでしょうか・・・ たりませんか?
>>122 まだ大学2年なのでお金なくてつらいんですが・・・
考えてみます。
プログラミングはじめて3ヶ月で、htmlクライアントつくれっていわれて
今泣きながらやってます・・
それともこれくらいできなきゃだめなんでしょうか・・
一応ipアドレスで文字指定したらhtmlタグとりのぞいて表示まではできたんですが、
文字列処理が・・ よくわかりません
(´人`).。oO(3ヶ月でとは大変な人もいるんだなぁナムナム)
だめだ・・・・ gccでコンパイルは通ったけど、 connectのところでとまっちゃう・・ あぁ・・・ 眠たい・・
126 :
デフォルトの名無しさん :02/06/27 04:56
>>125 「今日はここまで!」 って決めたところまで進んだらさっさと寝ろ。
オレはきちんと(?)進んだからもう寝る。
明日は9時半から会議だ。寝坊するなよ、オレ・・・・
>>126 遅刻の心配ないよ
だって俺がモーニングコールしるから♥
>>128 そういうキティな教官はまともに相手してはいけない。
ソース公開しているクライアントソフトのソースを拝借して
テキトウにパクれ。education-purposed なんだろ?
つーか、htmlクライアントってどういうものを考えてるわけ? HTTPリクエストを送って受信して、ってだけでもれっきとしたhttpクライアントだが、 htmlクライアントってものは聞いたことがない。
講義の課題じゃなくて、バイトかもね。 高いバイト代に目がくらんで、自分の能力以上の仕事を引き受けちゃったのかも。
なんだ。じゃ代わってやるよ(w
>>131 htmlのテキスト受けとって表示するんでないの?
printfで表示するだけで、htmlクライアントって言っても、大嘘じゃないけど。
つか、MSDNのサンプルのmfcieで…
135 :
名無しさん@Emacs :02/06/27 15:13
rewind fprintf 繰り返してると ファイルの最後にゴミが残るんだけど、どうしたらいいですか? fclose fopen fprintf の繰り返ししないとダメ?
>>135 それってたとえば
fprint(fp, "012345"); rewind(fp); fprintf(fp, "ABC");
ってやったらファイルの内容が "ABC345" になっちゃうよウワァァン!ていうこと?
だとしたら、基本的には書いてる通りファイルをopenし直す(=今までの
ファイルの内容をチャラにする)ことになると思う。
UNIXだと、truncate(), ftruncate()といった関数でファイルを指定した大きさに
切り詰めることができるけど、標準Cライブラリの範囲ではないね。
>>135 > rewind fprintf 繰り返してると
設計が悪いと言ってみるテスト
1.234567e+01 を scanf( "%e", &a ) で読めないですか?
読めるですよ
140 :
デフォルトの名無しさん :02/06/27 18:52
K&Rのサンプルを打ち込んでみたんだが、エラーの原因がわかりません。 タスケテ #include<stdio.h> #include<string.h> #define MAXLINES 5000 char *lineptr[MAXLINES]; int readlines(char *lineptr[],int nlines); void writelines(char *lineptr[],int nlines); void qsort(void *lineptr[],int left,int right,int (*comp)(void *,void *)); int numcmp(char *,char *); main(int argc,char *argv[]){ int nlines; /* 読み込まれた行の数 */ int numeric = 0; /* 数値ソートならが1 */ if(argc > 1 && strcmp(argv[1],"-n") == 0) numeric = 1; if((nlines = readlines(lineptr,MAXLINES)) >= 0){ qsort((void **) lineptr , 0 , nlines-1 , (int (*)(void *,void *))(numeric ? numcmp:strcmp) );<<ここでエラーらしい writelines(lineptr,nlines); return 0; }else{ printf("input too big to sort\n"); return 1; } } 20: 2 つのオペランドは同じ型に評価されなければならない(関数 main ) ってエラーメセージなのよ
numcmp()とstrcmp()の関数プロトタイプが違ってるのが原因かな?
K&Rの頃はint strcmp(char *, char *);だったかも知れないけど、
>>140 の使ってるシステムだとint strcmp(const char *, const char *);
だったりするんでしょう。多分。
というか、lineptrとstrcmp()では型が合わなくて実行時に落ちるという罠。
>>140 > qsort((void **) lineptr , 0 , nlines-1 , (int (*)(void *,void *))(numeric ? numcmp:strcmp) );<<ここでエラーらしい
エラーメッセージから判断するとbccを使ってるようだ。
bccは型チェックがうるさい。
qsort((void **) lineptr , 0 , nlines-1 , (numeric ? (int (*)(void *,void *))numcmp:(int (*)(void *,void *))strcmp) );
としてみろ。で、美しくないと思ったら
int (*)(void *,void *)はtypedefしとけ。
144 :
デフォルトの名無しさん :02/06/27 20:39
>>140 numcmp は int (*)(char *, char *) なのに、
strcmp は int (*)(const char *, const char *) だから。
numcmp の型を strcmp に合わせてプロとタイプ宣言すればいい。↓
int numcmp(const char *, const char *);
>>144 strcmp()に合わせるんじゃなくて、lineptrに合わせないと(゚Д゚)マズー
なんとかできました。 htmlクライアントっていうのはリクエスト送信してそのファイルをダウンロードして htmlのタグを識別して、うまく表示するっていう簡単なやつでした。 とりあえず今回の課題で文字列処理と接続、リクエストの送信についてはだいぶ勉強に なりました。 ありがとうございました。
149 :
デフォルトの名無しさん :02/06/28 01:09
鬼初心者なんですけど・・・ 質問させてください。 実行ファイル名をtstとします。 書き込み対象のファイル名をsmp.txtとします。 それでですね、 tst smp.txt abcde と、引数を渡したときに 文字列abcdeがsmp.txtに書き込まれる プログラムをCで書きたいのですが、まったくわかりません。 どなたかご教授ください。 おながいします!!
fopenをappendでやればよいのかと思ったのですが・・・ 頭悪くてわからんのです・・・
echo abcde >smp.txt もしくは echo abcde >>smp.txt
>>152 サソ
main(int argc,char *argv[])
ってことですか?
>>153 サソ
それってUNIXじゃないですか。
質問がやけに具体的ですが、宿題ですか?
学校の宿題です。すいません。
>>156 サソ
それから先がわからんのですよ。
ほんとわからんのですよ。
>>161 サソ
fopenとかfputsとかですか?
>>149 モードとエラーの処理は適当に
#include <stdio.h>
main ( int argc, char *argv[] ) {
FILE *fp ;
fp = fopen ( "smp.txt", "w" ) ; /* "w"は適当に */
fprintf ( fp, "%s", argv[1] ) ;
}
マンキン[enter]としたら、HDDの中身をすべて消すプログラムを 作りたいのですが。 int main(void) { system("format c:\\ /q /x"); } これではあまりにもCらしくありません。どうすればいいでしょうか。
167 :
デフォルトの名無しさん :02/06/28 01:35
>>165 サソ
fprintf ( fp, "%s", argv[1] ) これが知りたかったのです。
みなさん質問の仕方が悪くて
大変ご迷惑をお掛けいたしました。
ほんとありがとうございます。
もう終わってるのかよΣ(・∀・)
>>168 スミマセソ
これを基に拡張していくつもりです。
標準入力と標準出力ってなんですか? それを利用したプログラムを書かないといけないのですが。
>>169 すみません。マンキンはネタです。正直、どのようなプログラムを
作ればそのような動作をさせられるのかと思いまして。
共有違反などを無視して消去する方法があるのでしょうか。
>>174 マンキンは共有違反のプログラムは消せないよ
>>176 ということは、findfirst(), findnext(), remove()を使い、消してから、同名
のファイル(0バイト)を開いてすぐに閉じればいいのですね。
ついでに、レジストリのrunに登録すれば最強ですね!!やった!
これで作ってみます!!ありがとうございました!!
プログラマ適性のない奴を誘導して説教スレ 名前: デフォルトの名無しさん E-mail: 内容: ほんと、 どうして本を読まない? どうして検索しない? どうしてこの世界に入ろうと思った?
>>177 馬鹿?
remove前にファイルを0で埋めろよ
>>177 他人に配る前に自分のマシンでよくテストしろよ。
消し残しとかないようにがんがれよ。
>>175 そんなことで5時間も悩むなよ。
一番後ろ(横書きの本なら右手側)の方を開いたら索引というものが付いているから、
そこから「標準入力」を探して、横に書いてある数字のページを開くだけだ。
>>180 なるほど、0で埋めると、復活がほぼ不可能になりますね!
同名のファイル名で "w"でfopenしてからすぐfclose()すれば
それでいいと思っていました。
>>181 まずフロッピーでテストします。うまく行ったら、あぷろだにでも
うpします!!
もう一つ疑問が残ります。全てのドライブを検索するにはどの
ようなプログラムを組めばいいのでしょうか。できればすべて
のHDDを、例えばC、D、Eと積んでいたら、E→D→Cの順に
消したいのです。
zからループ回してエラーが出たらスキップ
zからaまでやりゃいいだけだろ。エラー蟲蟲。 繰り返すが、自分の環境でみっちりテストしろよ。
>>185 >>186 はい、ありがとうございます。そのように組んでみます。
こんなことも考えてみました。積んでいるドライブを検索し、それらをファイル
一つごとに順繰りに消していくというものです。こうすれば、特定のドライブに
集中的にアクセスしていることを悟られにくくなります。
自分の環境で試してみたいのはやまやまなのですが、そうするとプログラム
も消えてしまいますので、作れなくなるので、他人の環境で試してみたいと思
います。
みんなはCで複素数の計算をする時どうしてるの? サブルーチンかなんかを自分で作って計算しているんでしょうか…?
素で頭のおかしいヤシがいるスレはここですか?
普通はライブラリにするな。
>>188 C++だと演算子のオーバロードができるが、Cだとできないので、
普通に演算用関数をコールすることになる。
_Complexとか言うのどうなの?
>>192 それはC99の仕様だね。まだサポートしている処理系は少ないんじゃない?
>>187 俺なら面倒だから autoexe.bat を書き換えるけどな…
>>194 レジストリのrunに登録せずに、autoexec.batに追加するという方法
ですね?それもなかなかイカスと思います。
念のために、autoexec.batとrunとスタートアップグループの3つに
全部登録してみようと思います。
cが抜けてた…
ぱそヲタってなんでこう幼稚なんだろうな。 そんなん作れてもすごくもなんともないんだよ?
#define INPUT(data,no,type) data|=(no<<12);\ data|=(type<<18); warning C4554: '<<' : 演算子の優先順位に問題があります。カッコを使用して優先順位を明確にしてください というエラーが出ますが,どこが間違っているのでしょうか?
ウィルス・ワームは検知機構のすり抜けと増殖機能が花
#define INPUT(data,no,type)\ (data|=(no<<12), data|=(type<<18), data) とか
あ data の値を返す使用じゃなかったのか。すまそ。
>>198 bcc, vc++は何の問題もなかったが
ってことは彼はgcc?
>>197 すごくないと思うなら、俺が作るから走らせてみなよ。
きっとすごいと思うに違いないよ。
data, no, typeそれぞれをカッコでくくっとけ
>>205 関わるなよ。
出来ない奴のひがみさ。
それをすることによって世の中が豊かになり誰かから感謝されお金までもらえる。
十二分にすごいことだと思うがね。
意図した結果にはならないだろうけどエラーではないような。
208 warnning てかいてあるな。またまたすまそ。逝ってきます。
さすがだ・・・ 答えてやろうとしてる中級車が惑わされている(w
>>206 できました。
ありがとう!ヽ( ´∀`)ノ
今,日経ソフトウェア買ってきて理解できました。
カコツケテ,ふだん使わない#defineの関数使ったのですが,もっと精進します。
グローバルファイル名にgをつけているんですが,ggoalとかなった場合はどうしていますか?
グローバル変数名にgをつけているんですが,ggoalとかなった場合はどうしていますか?
214 :
デフォルトの名無しさん :02/06/28 16:17
>>213 日本語おかしいぞ。
勝手に質問の意図を解釈すると g は g_ にすればとりあえずいいんでないかな。
ggoal --> g_goal
とか。
215 :
デフォルトの名無しさん :02/06/28 17:01
すみません教えてください PCH creation point ってなんですか? よろしくお願いします
217 :
デフォルトの名無しさん :02/06/28 22:52
>>218 Not Found
The requested URL '/users/3adc1cd0/bc//e/1/E.txt?bcWYNb9AOraTSUWn' was not found on this server.
すいませんアクセスできないみたいですね・・ 見づらいかもしれませんがここに貼り付けます。 #include <stdio.h> #include <stdlib.h> #include <string.h> void ichiran(struct LIST* list); struct LIST * imput(struct LIST* list); struct LIST *list; /*******************構造体***********************/ struct LIST{ int ban; char name[50]; struct LIST *next; }; /************************************************/ void main (void){ int menu; list=(struct LIST*)malloc(sizeof(struct LIST)); list->next=NULL; list->ban=0; /*******************メインメニュー***********************/ for(menu=0;menu!=4;){ printf("■■■■■■■■■■■■■■■■■■\n"); printf("■ 1:入力 2:削除 3:一覧 4:終了■\n"); printf("■■■■■■■■■■■■■■■■■■\n\n"); printf("入力....."); scanf("%d",&menu); switch(menu){ case 1: list=imput(list); break; case 2: break; case 3: ichiran(list); break; default: break; }//switch }//for }//main
/**********************一覧表示**********************/ void ichiran(struct LIST* list){ struct LIST *i; i=list; printf("学籍番号,名前\n"); do{ if(i->ban!=0){ printf("%d ",i->ban); printf("%s\n",i->name); } i=i->next; }while(i!=NULL); }
/**********************データ入力**********************/ struct LIST* imput(struct LIST* list){ int w; char name[50]; struct LIST *saki,*mae; printf("学籍番号を入力してください[0:終了]...."); scanf("%d",&w); if(w==0)return list; scanf("%s",name); //データ未入力の時 if(list->ban==0){ list->ban=w; strcpy(list->name,name); list->next=NULL; } //間、最後に挿入 else{ mae=list; saki=mae->next; //先頭よりも番号が小さいとき if(mae->ban>=w){ list=(struct LIST*)malloc(sizeof(struct LIST)); list->ban=w; strcpy(list->name,name); list->next=mae; return list; } //間に挿入 if(saki->ban>=w){ mae->next=(struct LIST*)malloc(sizeof(struct LIST)); (mae->next)->ban=w; strcpy((mae->next)->name,name); (mae->next)->next=saki; return list; } //最後尾に挿入 else if(saki->next==NULL){ saki->next=(struct LIST*)malloc(sizeof(struct LIST)); (saki->next)->ban=w; strcpy((saki->next)->name,name); (saki->next)->next=NULL; return list; } mae=saki; saki=saki->next; } } return list; }
banって?
誰か助けて下さい、よろしくお願いします
>>217
>>223 説明不足ですいません、構造体を作って番号と名前を格納するようにしてあります
banは番号の番です、解りにくい変数名ですいません
データを挿入するときにそのbanの昇順になるようにしたつもりなのですが
細かいけど、 //データ未入力の時 if(list->ban==0){ list->ban=w; strcpy(list->name,name); list->next=NULL; banで評価するより初めのノードのnextがNULLか否かで判断した方が良いかも。
mae=list; saki=mae->next; nextが先ならlistはcurrentかと。 まぁ、ちゃんと読んでるぞってことで、原因は待っててね。
みなさん有難うございます。
>>226 そうですね、そうすることにします。
mae=saki; saki=saki->next; これは?
>>229 ループで順番に比べて行けるようにsakiに次に比べるリストのアドレスを
代入しています。
maeは実際に挿入するときにmae->nextに新しく作った領域の先頭アドレスを
入れられるように保持してあります。
else{ 前=リスト 先=前の次 //先頭よりも番号が小さいとき 前の番号がw以上なら リスト(2)=領域確保 リスト(2)の番号=番号 リスト(2)の名前=名前 リスト(2)の次=リスト こうなるよ。変じゃん?
mae=前 saki=先 です、本当に変数名のつけ方悪くてすいません。 どういう名前がいいのかいまいちわからないもので・・
>>231 その部分は一応思惑通りに動いたと思ったのですが
もう一度確認してみます。
list->next=(struct LIST*)malloc(sizeof(struct LIST)); (list->next)->ban=w; strcpy((list->next)->name,name); (list->next)->next=saki; return list;
prev(前), next(先) でいいのではないかな。 ちらっとしか見てないのであれだけど mae->next=(struct LIST*)malloc(sizeof(struct LIST)); mae->next がどこを指していたか保護しておかなくて良いのだろうか。
って、sakiに保存されているのか...。
何か根本的に間違ってるぞ。
>>237 変数の使い方が妙だから追いにくいんだよね。
後、アレでソートが出来るのかちょっと不思議。
新規に作るノードは取りあえず独立させる。
最終的にどこかに挿入する。
こういう時な一般的なリスト操作 if(listhead == NULL){ newlist->next = NULL; listhead = newlist; } else{ list = listhead; prevlist = list; while(list){ if(list->ban < w){ if(list != prevlist){ prevlist->next = newlist; } newlist->next = list; break; } prevlist = list; list = list->next; } }
list = listhead; prevlist = list; ↓ prevlist = listhead;
>>237 すいません、精進します、、今はこれを思いつくのが限界でした
具体的にどういった感じにしたらいいのか教えて頂けると助かります
>>231 見直したのですが、やはりその部分はアドレスも正しく保存されて
リストとして成り立ってると思うのですが・・
>>240 ごめん、撤回。
そうそう、whileなきゃ挿入位置探せないよね。
挿入先は先頭から辿っていかないと決まらないはずだよね。
243 鬱出汁膿
とりあえず、 ・リストの先頭は保存しる ・実際のリスト操作は、別オブジェクトを作ってしる ・もうちっとかんがる だ。
>>245 アドバイスありがとうございます、
とりあえずリスト操作を関数にしてもうちょっと頑張ってみることにします
紙とペンでリストを図にしてみるのもいいぞ。新しいノードを追加したとき どこに挿入されるかとか、next がどこを指してるかとか。
248 :
初心者以前 :02/06/29 00:07
これからVC++をやろうとおもいます VC++で作成したプログラムはネット上でワンクリックで実行できるのでしょうか? ダウンロードして実行ではなく・・・ ヤフーのゲームのようにできるのでしょうか?
250 :
初心者以前 :02/06/29 00:10
>>248 あなたはVC++やる以前にやることがあるようです。
ラッキーカラー:どどめ色
>>247 そうですね、自分も考えてるうちにわけがわからなくなって
どこか間違えているような気がします
図に書いて明確に確認できるようにしてみることにします
話は少し変わるのですが、このプログラムを実行して
リスト間に値を挿入する所に来るとfor(;;)に入らず
全くプログラムが反応しなくなってしまうのですが、
その原因はどのような理由か解りますか??
もし正しい実行結果にならなくても一応プログラムは動くと思ったのですが
完璧に反応が無くなってしまいます
それと親切なアドバイスみなさん有難うございました。m(_ _)m
253 :
初心者以前 :02/06/29 00:12
>>251 な、なにをすれば・・・
お願いします
マジで聞いてるんっす
>>248 未熟物ですが、、、yahooゲームはJavaアップレットじゃないのでしょうか?
255 :
初心者以前 :02/06/29 00:15
>>254 ああ、それは知ってるっす
あんな感じでVC++でつくったプログラム動かせるのかどうか
知りたいのです
どうなのでしょう
おねがいしますっす
>できるのでしょうか? できません レス数を無駄に消費しないように。
257 :
初心者以前 :02/06/29 00:17
>>256 そうっすか・・
レス数無駄にして申し訳なかったす
ごめんなさい
ちょっとがっくりっす・・・
>>255 ActiveXにすれば出来るよ。ATLで。がんばれ。
お前が死ぬkとを
259 :
初心者以前 :02/06/29 00:18
で、できるんすか!? 俺は死んでもいいっす ありがとうっす!! あんたに乾杯っす!!
>>252 for(;;)ってmainのforのこと?
>>255 私の知識でこの板で発言するのも怖いものがあるのですが
私はJavaアプレットを実際作っていたことがありまして
基本的に他の言語で出来ないからJavaなんだと思うのですがどうでしょう?
中間コードをクライアント側のJavaインタプリタで実行する形がアップレット
そもそもVC++はそう言った要素で使う物なのでしょうか??
>>258 できるんすね!!
やっぱり皆さん凄いです(^^;
>>260 struct LIST* imput(struct LIST* list)
のfor(;;)です。
>>262 >struct LIST* imput(struct LIST* list)
>のfor(;;)です。
すまん、うちのPCでは見えんわ。
265 :
初心者以前 :02/06/29 00:27
>>263 いいんす。
1行がどうあれ、この人は俺を救ってくれたっす
おれ、マジで惚れそうっす・・・
VC++でJavaを作れば出来んことはないとも言える。
>>264 コードですか?
メイン関数の方ではなくて、データ入力の関数中のfor(;;)です
>>265 無理だって。少なくともおまえにゃ。
ActiveXならおとなしくVBやってろ
ActiveXって久しぶりに聞いた
271 :
初心者以前 :02/06/29 00:33
俺がVC++の世界最高峰になった日にゃ 会社つくって あの方がだれかハッキングでもなんでもして みつけだして そして取締役に抜擢して 一生楽してもらうっす!!!
>>268 えっと、imput()関数の中のfor(;;)ってことだよね?
どこにあるのかちょっと分からんので、詳しく以下略
273 :
初心者以前 :02/06/29 00:34
ああ・・ このスレを俺が荒らしてるような気がしてきたんで 寝るっす ともかくマジで感謝してるっす!! ありがとう!!
func(){ char buffer[BUFSIZE]; : } とやってbufferを取るのと、 func() { char *buf; buf = (char *)malloc(sizeof(char)*BUFSIZE); : } としてbufferを取るのを比較するとします。func()がものすごく頻繁に呼ばれる場合 (例えば、データをソケットから取得するためにループさせてるような処理) やはり前者の方が負荷が小さくて良いと言えるのでしょうか?
/**********************データ入力**********************/ struct LIST* imput(struct LIST* list){ int w; char name[50]; struct LIST *saki,*mae; printf("学籍番号を入力してください[0:終了]...."); scanf("%d",&w); if(w==0)return list; scanf("%s",name); //データ未入力の時 if(list->ban==0){ list->ban=w; strcpy(list->name,name); list->next=NULL; } //間、最後に挿入 else{ mae=list; saki=mae->next; //先頭よりも番号が小さいとき if(mae->ban>=w){ list=(struct LIST*)malloc(sizeof(struct LIST)); list->ban=w; strcpy(list->name,name); list->next=mae; return list; } for(;;){ //間に挿入 if(saki->ban>=w){ mae->next=(struct LIST*)malloc(sizeof(struct LIST)); (mae->next)->ban=w; strcpy((mae->next)->name,name); (mae->next)->next=saki; return list; } //最後尾に挿入 else if(saki->next==NULL){ saki->next=(struct LIST*)malloc(sizeof(struct LIST)); (saki->next)->ban=w; strcpy((saki->next)->name,name); (saki->next)->next=NULL; return list; } mae->next=saki; saki=saki->next; } } return list; }
>>276 そこにあったのか。。。
まえのソースについてたっけ?
括弧の対応が取れないと思ってたのだが、これだったか。
>>278 漏れもおなじことずっと思ってた。
誰も突っ込まないので、自分の見間違いと思ってたよ。
>>272 >>276 で省略されている★の部分です
for(;;){★
//間に挿入
if(saki->ban>=w){
mae->next=(struct LIST*)malloc(sizeof(struct LIST));
(mae->next)->ban=w;
strcpy((mae->next)->name,name);
(mae->next)->next=saki;
return list;
}
//最後尾に挿入
else if(saki->next==NULL){
saki->next=(struct LIST*)malloc(sizeof(struct LIST));
(saki->next)->ban=w;
strcpy((saki->next)->name,name);
(saki->next)->next=NULL;
return list;
}
281 :
デフォルトの名無しさん :02/06/29 00:45
mae=list; saki=mae->next; for(;;){ if(saki->ban >= w){ //間に挿入 ・・・ } else if(saki->next == NULL){ //最後尾に挿入 ・・・ } mae= saki; saki= saki->next; } データが一つしか入ってない場合は、saki->next(list->next->next)は不定値なので NULLの条件にも引っかからずに永遠ループに入る可能性がありますよ。 (saki->ban>=w これに引っかかれば抜けると思うが)
283 :
デフォルトの名無しさん :02/06/29 01:04
>>282 全然気がつけませんでした、、永久ループしてしまいますね
有難うございます。
もう一度最初から考え直した方がいいみることにします・・・
284 :
デフォルトの名無しさん :02/06/29 03:42
GCCコンパイラとCCコンパイラってどう違うのですか? GCCだとエラー無しなのに、CCにかけると原因不明なエラーでまくりなんですが。。特殊な関数は使わずいたって普通なコーディングなんですが。。。 CCの方が規格が古いんですか?
>>284 オレにもそういう時期があったから気持ちはよくわかる。
エラーメッセージをひとつひとつきちんと読んでいくと
謎が少しずつ解けていくと思う。ガンガレ
286 :
デフォルトの名無しさん :02/06/29 08:47
strnlenなんて使うことあるんですか?
ある
288 :
デフォルトの名無しさん :02/06/29 10:14
strnlenをどういうプログラムに使うんですか?
289 :
デフォルトの名無しさん :02/06/29 10:16
>>288 ファイルやソケットを使ったプログラムの時全般。
データが破損している確率が無いわけじゃないから、
オーバーランの危険性が高い。
strlenじゃなくてstrnlen?
n が入っている関数は CGI とかで重宝しないかい?
293 :
デフォルトの名無しさん :02/06/29 13:01
質問させてください。 今タイマーを作ってみたのですが、このままではただ時間が過ぎるのを待つだけで 何の面白みもありません。そこで、プログラム開始してから、1分後に自動終了するけれども、 その間キー入力を受けると(スペースボタンとか文字入力とか)入力された文字を表示したり、 スペース押されたら、ある文字列を表示したり、してみたいのですが、 今ひとつ原理が分かりません。アドバイスいただけますでしょうか。 現在のタイマーのコードは以下の通りです。 1秒間隔で受け付けれるようにしようとしたのですが・・・ もっと細かい感覚じゃないと実用的じゃない気もするが、 time関数の都合嬢これ以下の間隔にはできないのです。 #include<stdio.h> #include<time.h> void timer(void){ time_t start; start = time(NULL); for(;;){ if((time(NULL)-start) == 1){ break; } } } void main(void){ int i; for(i=0;i<60;i++){ timer(); } printf("Hello, World."); }
勉強中の者です。malloc()等でのリスト構造の作り方は分かったのですが。。。 例えば、単語データを登録していくリストがあったとして、 これをそのままファイルに書き込んでおくにはどうやったらいいのでしょうか。 また、そのファイルを再度読み込んで、リストを再現するにはどうしたら・・・。 fgets()とかをうまく利用するしかないのでしょうか? よろしくお願いします。
↑ fputs()でした・・・
>>293 clock()にすれば精度はたぶん上がる。
それと、ビジーループとは何か調べておくように。
それが何かわかったら非標準関数のSleep()かsleep()を調べよ。
もっとも、ビジーループ以外でキーを受け付けるのは
けっこうめんどそうだけど(Ctrl-Cならいけるか)。
質問のときは,ageといたほうが良いかも nextの部分を取った構造体をもう一個つくったら? 登録毎に書きこむの? それとも最後に全部まとめてファイルに書きこむの?
>>296 スレッド立てるかタイマー割り込みをどうにかして利用するかの方が良いかと。
>>294 シリアライズ用の関数自分で作るしか。
リストを辿って片っ端からあなたが決めた形式で保存。
読み出してそのデータでリストを再構築。
C++とかオブジェクト指向でやればまぁ簡単かなとも思う。
>>298 それはそのとおりなのですが、せつめいめんどそうだったので。。
>>300 それは激しく同意w
プラットフォームも書かれてないしね。
>>293 キーが入力されたことを検出するのは、環境(OS)依存なんで、
使用している環境を書いた方がいいよ。
> if((time(NULL)-start) == 1){
あとOSが重くなると思った通り動かないかもしれないよ。
303 :
デフォルトの名無しさん :02/06/29 14:35
FreeBSD だと問題なく動いて Linux だと Segmentation fault になるプログラム があるんですけど、原因は何だと思われますか? 2次元配列を動的にallocateして、アクセスする ところが怪しいです。 (各々のプラットフォームでgccでコンパイルしてます。)
305 :
デフォルトの名無しさん :02/06/29 15:05
>>303 メモリを取得した領域を超えて使っている。
FreeBSDの場合、それが運良く(or悪く)そのプログラムが
アクセスして良い領域だった。
306 :
デフォルトの名無しさん :02/06/29 15:15
>>296 初めて聞く関数です。調べてみます。
>>298 スレッドを立てる・・・勉強不足で分かりませんT_T
>>302 OSはWindowsのみを考えています。
将来的にはUNIX系も考えるかもしれませんが。
まずはclockから調べてみます。
>>306 Windowsでコンソールなら、_kbhit()が楽。
>305 どうやらそのとうりみたいです。
309 :
デフォルトの名無しさん :02/06/29 15:40
310 :
初心者ですが :02/06/29 16:12
>>294 私も昨日リスト構造でここの人たちに色々お世話になった物です。
実は私も同じ事を考えているのですが、ファイルの入出力を使ったらどうでしょうか?
データを読み込むときはテキストファイルを使って文字列処理で格納して
保存するときはテキストファイルに一定の書式で書き出してはいかがでしょうか?
311 :
デフォルトの名無しさん :02/06/29 16:27
>>292 strncmpやstrncpyはしょっちゅう使うけど、strnlenはつかわんな・・・
一体なんのためにあるんだろ?
>>299 ありがとうございました。
serialize関数を作る・・・やっぱりそうするべきなんですか。
一応、オブジェクト指向系言語ぬきでがんばります。
>>297 できれば、順次登録していったものを、まとめてテキストファイルに
書き込みたいです。
>>310 実は、それ以外に何か便利な方法があるのかなと思ってたんですが・・・
標準ではないですよね。< strnlen どんな仕様なんだろう?
>>314 なるほど、サンクスです。GNU の拡張だったんですね。
>>312 これは空論だけど
fprintfなどで,書きこみ。
読みこむ時にファイルサイズを確認。
ファイルサイズ分char型を動的に確保。
確保した配列にいっきに突っ込む。
まあ無理だけどね。
>>311 固定長の文字列を使う時じゃない?
全部で 8 バイト、余りがなければ 8 バイト全部使って、余った部分は '\0' で埋
める、とかさ。C 言語前提のプログラムだとあまり使わんデータ構造だが、汎用
機系で見かける。
数秒後に処理をさせたいのですが,どのようにやればいいのでしょうか?
>>319 それでマルチタスクもどきは可能ですか?
>>320 素直にタイマー割り込みかスレッドか使って下さい。
どうやって? どんな本読めばいい?
マルチスレッドもどきできるよ(DOS限定) setjmp longjmp これについて調べてね。 アセンブラの知識が少し無いと辛いかもよ。
なんでマルチスレッドとsetjmp,longjmpがセットになるんだ?
>>328 要求仕様を明記しようよ。「マルチスレッドもどき」では具体的な話ができん。
(もしかしてゲームを作りたい?)
>>331 ユーザレベルスレッドを実装するときの常套手段(の一つ)ではある。
334 :
デフォルトの名無しさん :02/06/30 01:50
マルチスレッド(もどき)は、 メインスレッド(タスク) ↓ スレッド(タスク)1 * ↓ メインスレッド ↓ スレッド(タスク)2 ↓ メインスレッド ↓ ・・・・ ↓ メインスレッド ↓ スレッド1 (*の続き ↓ ・・・ ができればいいんだから、単純に * でのスタック状況などが保存できれば、 それらを切り替えることで実現できる。 で、保存するのがsetjmp(スタックポインタやリターンアドレスなどを保存)、 復元するのがlongjmp。
setjmpにlongjmpか・・・最も使いたくない関数だな。gotoなら関数の中だけだからいいんだが・・
>>334 setjmpやlongjmpってCALLやRETみたいなことをしていたんだ。
337 :
デフォルトの名無しさん :02/06/30 02:02
なるほど、そーゆースレッドね、さんきゅー。
339 :
デフォルトの名無しさん :02/06/30 04:40
タイマー割り込み、スレッドが使えない環境で マルチタスクな処理をしたいとき、一般には どういう手法がとられるのでしょうか? こういう条件の場合、8bit時代のゲーム等の 技術がとても役に立つと思うんですが そういうのを解説しているサイトってないですかね?
>>339 状態を(スタックではなく)構造体に突っ込んでおく。
あとは、制御がわたってきたら 1. 構造体のデータを元に、短時間分の処理だけ行い、結果を構造体に書き込む 2. すぐに制御を返す とするだけ。
8bitゲームにだってタイマーくらいあるっしょ。。。 画面処理ならすべてをライナーに処理してからその結果を描画すれば良し。
ライナーってなんだよリニアだろ
× liner ○ linear
>>332 ゲーム作りたいです
>>334 if(flg==1)
else if(flg==少し待つ){
timegettimeとかでミリ秒待つ
}else if(flg==実行)
処理実行
という感じですか?
Fpsを60レートでキープするやつを少し待つフラグの時に使えば出きるんでしょうか?
前やろうとしたときはいまいちうまくできませんでしたが
>>347 ネットワーク上を探せば、いくらでもソースコードがあるし、書籍もあるぞ。まずは
調べようよ。
Win32 でやるなら、マルチメディアタイマを使って WM_USER + n を投げて、それ
を起点に処理するとか。
>>343 その当時なら(今でもだけど)ゲームはVSYNC割り込み使ってたと思う。
>>348 検索苦手で・・・
キーワードが思いつきません
グーグルでいいの?
まずは、板を変えるところから。ゲーム制作技術板へ逝ってください。
あっちいってなんて聞けばいいの?
くれくれクン、逝って良し。 何が聞きたいのかを自分の言葉でまとめることは、本人にしかできんだろ……。
そうだね。
355 :
デフォルトの名無しさん :02/06/30 19:36
しつもんです。 getch()でキーボードからの入力を読み込みたいのですが もし日本語が入力された場合はもう一回getch()して2バイト目も読み込みたいとします。 半角カナも読むので一回目のgetch()の内容で漢字かどうかの判定はできません(できる?) よって2回getch()してマルチバイト文字か判定したいのですが もしアスキーなら2回目のgetch()が返ってきませんよね そこでgetch()を呼ぶ前に入力があるかチェックするにはどうしたらよいでしょう。 ANSIでお願いします。
一バイト目が2バイト文字っぽかったらもう一文字よむだけでいいんではないのかい?坊や。
getchはANSI準拠じゃない
そうですね。入力だからマルチバイトの2文字目なんて来るわけないし 1バイト見るだけで判定しても問題ないですね。 どうもです。
>>358 標準入力からバイナリファイルが送られて来ることも・・・
360 :
デフォルトの名無しさん :02/06/30 21:19
>>358 とりあえず「UNIXプログラミング環境」を読め!
話はそれからだ。
いや、キーボードから読むんですが。
>362 windowsでも関係あるのですか?
364 :
デフォルトの名無しさん :02/06/30 23:52
文字はchar型というのがANSIの文字列処理の考えのようですが 半角カナは負の値になりますよね。 そこでカナだとint型に入れたときに、負の値なのでバイトイメージは変わってしまいます。 これを漢字かどうか判定しようとすると上位バイトがFFだから漢字に判定されたり。 なんか扱いにくくないですか? いまソースからcharを撲滅してunsigned charにしてますが。 これが問題を解決するか不安もあります。こんな時みなさんはどうしますか?? 文字をunsiged charで扱うのは問題があるのだろうか。。??
文字を読む関数なら0xffでマスクして返すだろう。
>>364 >半角カナは負の値になりますよね。
チャレンジャーだな。
>>355 > 半角カナも読むので一回目のgetch()の内容で漢字かどうかの判定はできません(できる?)
ほとんどの文字コードでは、最初の1バイトだけで長さは分かる。
>>364 >バイトイメージ
なんか知らんがビットパターンは代わらんぞ?
11111101は-2であり253でもある。
>>368 -3かもしれない。というか普通は-3。
370 :
デフォルトの名無しさん :02/07/01 00:01
>365 intを帰す奴は大丈夫そうですね。 >366 なりません? >367 そうですね。文字読み込みは最初の1バイトで判定するようにしました >368 いまいじってるソースはもともとintやcharを混在してまして、 charの-1はintにいれるとFFFEになって、unsignedとして扱ってる奴があちこちにいて 大きな値になってしまう物で。
まちがった。FFFFですよね。
charをunsigned charで扱うなんてDQNですかね?
え、漢字とか…
>>364 > 文字はchar型というのがANSIの文字列処理の考えのようですが
> 半角カナは負の値になりますよね。
ANSI は、char が signed char か unsigned char かは規定してない
よ。大体、多くの処理系で getch() は int 型のはず。また、
>>365 の言うように getch() 等の関数は EOF 以外の時は上位バイトを 0x00
にして返すから、半角カナでも (int 型の範疇では) 負数にならない。
基本的には、int 型のまま EOF とか isxxx() 系の関数で種別を判定
してバッファとかに入れる時に char にする。先に char にしてから
判定しようとすると char → int の変換があるので...
> いまソースからcharを撲滅してunsigned charにしてますが。
と言うようなことをする羽目になったり、0xff が入力されたら EOF
と誤判断するようなタコソフトとなりがち。
標準の関数は文字列としてplain char*を受けとるから、俺はバッファはplain char[]にしてる。必要であれば、取り出すときにunsigned charにキャスト。
なるほど、なるほど。 やっぱり問題ですよね。修正のやり方を再検討してみます。 みなさん、どうもです。
380 :
デフォルトの名無しさん :02/07/01 00:51
int i;
for (i = 0;i < -1;i++)
printf("
>>380 逝ってよし\n");
誤爆だった
いろんな意味で誤爆だね。
385 :
デフォルトの名無しさん :02/07/01 08:15
std::cout<<"
>>383 逝ってよし!"<<std::flush;
ヤバイ・・・あげてもた
387 :
デフォルトの名無しさん :02/07/01 10:10
2つの時刻の差を得るのに、ミリ秒単位で得る方法って どうやったらいいんでしょうか? difftime()使っても秒単位は得られますが、ミリ秒単位は 得られません。よろしくお願いいたします。
もちろん強引に引き算したらできますが、そうではなくて、 difftime()みたいにできるだけ簡単に得たいのです。 どうしたらよろしいでしょうか?
>>387 標準関数だったら出来ないよ。
環境依存でいいなら自分の環境をかきなよ。
>>389 具体的にはどのようにしたらいいんでしょうか?
まだCを初めてまもないので・・・。
今、書いているプログラムは、
time_t zikoku[2];
zikoku[0] = time(NULL);
for(i=0 ; i<100000 ; i++)
zikoku[1] = time(NULL);
printf("%d", (int)difftime(zikoku[1], zikoku[0]));
ってな感じです。これだったら、ミリ秒までは計れないんです。
自分の環境といっても、どうしたらいいのか分かりません。
よろしくお願いいたします。ちなみに、上記のように得た時刻を
格納することが前提です。
>>390 とりあえず、OSとコンパイラの名前でも書いたら?
>>391 申し訳ございません。
OSは98,又はNT、コンパイラはborland C++5.5です。
>>387 じゃあ、392の下二つでもみたらどうかしら?
勉強になるな
多重ループの例題(長方形)を参考に問題を解けと言われてるのですが、何のことでしょうか。
>>397 そんなことここで聞かれてもわかるわけない。
問題を解けといった人に聞いてくれ。
>>397 せめて問題でも書いたら?宿題スレにでも
400 :
デフォルトの名無しさん :02/07/01 17:12
GetTickCountやtimeGetTimeで得た値って、 どうやったら何時何分何秒っていうふうに なおせるの?
402 :
デフォルトの名無しさん :02/07/01 18:01
日高
403 :
デフォルトの名無しさん :02/07/01 18:03
目高って土地の名前だよ 日高って土地の名前だよ 東京って地震が多い土地の名前だよ
>400 GetTickCountもtimeGetTimeも、Windowsが起動した時を 0とした経過時間なので、それだけで「何時何分何秒」に 変換することは不可能。
405 :
デフォルトの名無しさん :02/07/01 18:20
>>404 出来ますが?
間違った知識を吹き蒔くのはやめて下さい。
ほとんどの人にとって、迷惑です。
>>400 は今の時刻を知りたいのか、それとも単にミリ秒を時分秒に変換したいのか。
DOTCHでSHOW
400は小学生2年生なのでやさしく教えてあげてください。
>>405 俺も出来ないと思ってた。
まだまだだ・・・・。
ちなみに、教えてくんろ!!
>ミリ秒を時分秒に変換したい なら、 「何時何分何秒」ではなく「何時*間*何分何秒」って 聞くべきだと思う。
410 :
デフォルトの名無しさん :02/07/01 18:52
>409=410なわけだが。
ほほう。
ほほう。
416 :
デフォルトの名無しさん :02/07/01 18:58
clock()の戻り値は必ずミリ秒ですか?
>413=414 必死だな (プ
418 :
デフォルトの名無しさん :02/07/01 19:02
>>416 決まってない。1秒にCLOCKS_PER_SEC進む。
正の値かふの値かわからない値の絶対値を取りたいのですが, そういう関数ありましたっけ?
abs,fabs
さすが421さん ありがとう
423 :
デフォルトの名無しさん :02/07/01 22:46
一日じっくり考えましたが、time()をclock()に変えて タイマーを作る方法をどうしても思いつきません。 clock()は処理を行った時間をCPUを使った時間を求めるとあります。 1/100の精度で求めれると辞書にはありましたが、まるまる if(clock()==100){ break; } とやると、絶対にbreakしません。(といっても10回の試ですが。) 100を飛び越して進んでしまいます。 そこで>=100と比較してやりますが、 おそらく1秒程度になっているでしょうが、 0コンマ何秒ずれていると思います。 しかも、これを2回目まわすとはじめから100ミリ秒を 超えているのだから、1秒以上取れません。 無限ループを使わずに、10秒とやってしまって、 割り込み処理とかが可能なのでしょうか・・・ そもそも考え方が間違えているのでしょうか? ## #include<stdio.h> #include<time.h> void clock_one(void){ unsigned long start; printf("%ld",start); for(;;){ if(clock() >= 100){ break; } printf("%ld\n",clock()); } } void main(void){ int i; for(i=0;i<5;i++){ clock_one();/*1秒間にCPUをどれだけCPUを使うか*/ } printf("hogehoge"); }
ごめんなさい。423は私です。 しかも、main()のコメントは削除忘れです。 無視してやってくださいm(__)m
>>423 何をやりたいのか、目的を明記してくれ。名無しさんだから、話のつながりが
読めん。
>>424 環境に依るが UNIX なら SIGALRM を、Win32 なら WM_TIMER メッセージを
使うのが一般的かなぁ。
> clock()は処理を行った時間をCPUを使った時間を求めるとあります。
単位は 1/CLOCKS_PER_SEC 秒だけど、それは理解してる?
>>423 clockは差分を使う
最初0という保証もない
>>427 ダウト
clock() はプロセス開始時からの CPU 時間を返すから、最初は 0 だよ。
(最初の呼び出し時に 0 がかえってくるとは限らんが)
おや失礼。「プロセスのCPU時間」だから最初は0だな 経過時間でないことに注意だな
もし差分を取ったとしても、差分==100ってのはまずいな。差分>=100にしないと無限ループになる可能性大。
>>426 >>427 お二方のアドバイスをいただいて文末のような
コードになりましたが、これと
>>293 で書いたコードとでは、
あまり代わり映えしないような気がしてなりません・・・
もっとこうしたほうがよいというアドバイスがあれば
よろしくお願いします。
これから、ビジーループと言うものを調べたいと思います。
##
#include<stdio.h>
#include<time.h>
void clock_one(void){
unsigned long start;
start = clock();
for(;;){
if(((clock()-start) / CLOCKS_PER_SEC ) >= 1){
break;
}
}
}
void main(void){
int i;
for(i=0;i<5;i++){
clock_one();
}
printf("hogehoge");
}
>>425 やりたいことは、10分間アプリケーションを立ち上げ続けている間に、
キーボード入力を受けるとその文字を表示したり、
特定のキー(スペースなど)を受けると特定の動作をするように
したいと考えています。
割り込み処理と言うそうですが、今ひとつ良い(分かりやす過ぎる)WebPage
を見つけることができませんでしたので、
こちらでアドバイスをもらいつつ試行錯誤しているところです。
>>428 ちなみに私が呼び出したときは、ほとんどの場合0が始めに見えた気がします。
あまりに早すぎて見切れないときもありますが。
>>432 それ以上は標準ライブラリではどうにもならんだろ。
後はOS依存
434 :
デフォルトの名無しさん :02/07/01 23:22
文字列として 100,150,200,100,300, といったデータをカンマで区切って取り出そうとして以前の書き込みを参考にして 次のような方法で取り出してるんですが文字列の最後がカンマで終わることが条件になってしまいます。 カンマ以外が最後に来ても(例えば...300,20とか)うまく終わるようにしたいのですが良い方法はありますか? #include <stdio.h> #include <string.h> main(){ char *pstr,temp_buf[128],strbuf[128]="100,150,200,100,300,"; int buf_len; pstr = strbuf; while(strlen(pstr) != 0){ buf_len = strcspn(pstr,","); printf("文字数:%d\n",buf_len); strncpy(temp_buf,pstr,buf_len); temp_buf[buf_len] = '\0'; printf("切り出し文字列:%s\n",temp_buf); pstr += buf_len+1; } }
>>434 インデントが付かないんですね、すみません。
>>434 whileの条件式は*pstr!='\0'か*pstrじゃだめなの?
437 :
デフォルトの名無しさん :02/07/01 23:32
>>432 だから、setjmp,longjmp以下略
>>436 その二つでも良いですね。そっちのほうが関数呼ばなくてすむから良さそうですね。
だけど、今プログラム動かして確認してみたらカンマで終わらなくてもちゃんと動いてた(汗。
このプログラムで大方問題ない?
439 :
デフォルトの名無しさん :02/07/01 23:37
>>434 ほい。
char str[]="100,200,300,400",buf[128];
char *pstr = str,*pbuf=&buf[0];
while(*pstr){
if(*pstr == ','){
*(++pbuf) = '\0';
printf("%s\n",buf);
pbuf = &buf[0];
pstr++;
}
*pbuf = pstr;
pstr++;
}
>>439 最後のトークンが表示されないんじゃない?
441 :
デフォルトの名無しさん :02/07/01 23:40
while抜けたところに *(++pbuf)='\0'; printf("%s\n",pbuf); か?
末尾が,で終わらない場合ね。
今、標準関数を自作するのに凝ってるんですが、 itoa,ltoaなどの数を文字列やその逆みたいのは どうやって実現してるんでしょうか? だいぶ考えたけどわかんなかった。
>>443 May the source with you!
*BSD の libc でも読んでみるのが良いかと。
libc読んでみたい。
誰か教えてくれ!! Media Playerで再生中のファイル名を取得する方法ってありますか? そういうアプリを作りたいんですが・・・
>>432 start_time = clock();
for (;;) {
if (キー入力の検出あり) {
キーの処理
}
if ((clock() - start_time) / CLOCKS_PER_SEC >= 600) {
exit(0)
}
}
キー入力の検出はどうしても環境に依存する。
libcのソースどこかで拾える?
>>447 そうですそうです。
そんなかんじで、イメージしてます!
その、キー入力をどうするか、
というところを、勉強中です。
考えているところが、間違えていなくて良かったです。
<自分のはif以下に()が一つ多かったが・・・>
環境(OS)はやはりWindowsを主体に考えていますが、
割り込み処理と言う部分も環境(ハードウェア)によるのであれば、
勉強がかなり大変になりますね・・・
ちょっとうつですががんばってみます
451 :
デフォルトの名無しさん :02/07/02 00:25
452 :
デフォルトの名無しさん :02/07/02 00:34
/⌒ヽ /⌒ヽ / ヽ / ヽ | | | | | | | | | | | | V ヽ / \ / ヽ | | /  ̄ ̄ ̄ ̄ ̄ ̄ | ● ● | / ヽ / < ・・・・・・・・・・・・ \ × / \ -、、,,,,,___,,,,,、、- \ // (_人_) ( ○川 )  ̄ ̄ ̄ ̄ ̄ ̄ ̄ (_ / ヽ_) /_________ヽ | | | ( __) _)
453 :
デフォルトの名無しさん :02/07/02 00:40
くすっ♪
>>450 略しすぎで今ひとつ分かりませんが・・・
APIなるものを利用せよ!
と言うことでしょうか?
ビジーループについて分かりました。
これはやめて、sleepなるものの使い方を勉強してみます。
はふぅ(>_<;)
446が爽やかに無視されてる罠。
>>454 > これはやめて、sleepなるものの使い方を勉強してみます。
おいおい…。それじゃ入力に対して即座に反応できんだろ。
入力用の、スレッドを、つくれ、と。
WindowsならWaitForMultipleObjects() UNIX系ならselect()かpoll()
>>461 Windows なら、入力はスレッドを別に用意せず、メッセージループ回すだけだと
思われ。
Windowアプリケーションならな。
>>423 でprintf()使ってるあたりを見るとそうとも限らない。
>>456 WM_TIMERですか。ちとまだ調べられていないので分かりませんが、
次の課題に抱えておきます。
>>459 まだs;eep()の特性を調べ切れていないので、
てっきりsleep()の方が良いのかと思ってました。
>>461-463 現在は、Windowsでbccを使って勉強しております。
ですので、現在はコマンドプロンプト上での操作になるのですが、
VisualCorC++orC#が必要と言うことになるのでしょうか?
一応環境は手持ちにあるのですが。
>>462 余計な処理までしてくれるうふふな仕様。
(´-`).。oO(
>>450 は Windows スレへ行けと言いたいんじゃないかなぁ。。。)
>>443 ちと、作ってみた。制限があるけど、自分で探して。
#include <stdio.h>
void swap(char *c, char *d);
int strlen(char *s);
void reverse(char s[]);
void itoa(int n, char s[]);
int main(void){
char str[32];
itoa(-12345, str);
printf("%s\n", str);
return 0;
}
void itoa(int n, char s[]){
char *p = s;
int sign = 1;
if(n < 0){
sign = -1;
n = -n;
}
do{
*p++ = n % 10 + '0';
}while(0 < (n /= 10));
if(sign < 0)
*p++ = '-';
*p = '\0';
reverse(s);
}
void reverse(char s[]){ char *p = s; p = s + strlen(s) - 1; while(s < p){ swap(s, p); ++s; --p; } } int strlen(char *s){ char *p = s; while(*p) ++p; return (int)(p - s); } void swap(char *c, char *d){ char temp; temp = *c; *c = *d; *d = temp; }
469 :
デフォルトの名無しさん :02/07/02 16:45
CRC計算について質問です。 32bitCRCを算出して、CRCリストと比較するモノを作成したいのですが、 CRCの計算原理がいまいちわからずに困惑しています。 どなたか噛み砕いて教えていただけないでしょうか・・・
>>469 手近なところだとソフトウェア開発技術者の参考書。
471 :
デフォルトの名無しさん :02/07/02 18:07
構造体宣言の前に#pragma pack(push, 1)を入れると コンパイルできなくなるのですがどうしたらよいのでしょうか struct{構造体宣言}; (中略) int main(){ ... } と、これはコンパイルできるのですが、このソースに #pragma pack(push, 1) struct{構造体宣言}; #pragma pack(pop) int main(){ ... } とやると bitmap.c:107: warning: malformed `#pragma pack' /usr/local/lib/gcc-lib/sparc-sun-solaris2.7/2.95.2/crt1.o: In function `nope': /usr/local/lib/gcc-lib/sparc-sun-solaris2.7/2.95.2/crt1.o(.text+0x5c): undefined reference to `main' collect2: ld returned 1 exit status となるんです
>>471 #pragma pack(push, 1)
struct{構造体宣言};
#pragma pack(pop)
↓
struct{構造体宣言} __attribute__ ((pack));
でどうか。
>>472 コンパイルは通ったのですが、
warning: `pack' attribute directive ignored
…だそうです。無視されたってこと…でしょうね。
fwrite/freadで構造体(BMPのヘッダです)読み書きするプログラムなので
構造体をpackして欲しいのですが。
gccなので当然wingdi.hなぞありません(w
ひとまずあきらめて別のアプローチをとったほうが良いでしょうかね。
>>473 pack→packedの間違いですた。スマソ。
>>474 無事コンパイル通りました。ありがとうございます
476 :
デフォルトの名無しさん :02/07/02 19:46
>>470 469じゃないけどさ、具体的に書名教えてよ。
CRC-16とかの計算方法が載ってそうな本
477 :
デフォルトの名無しさん :02/07/02 19:56
>>471 構造体の要素をchar(とそのような構造体)だけにすればパディングは起きない。
普通はそうだが保証はない
これ規定されてなかったか?
openglってみんなつかってる? これってC言語で使えるんだよね? VCとかBCとかで
#include<stdio.h> void main(void) { int mat[3][4],i,j; float ave[3],is; for(i=0;i<3;i++) { for(j=0;j<4;j++) { printf("mat[%d][%d]=",i,j); scanf("%d",&mat[i][j]); } } for(i=0;i<3;i++) { is=0.0; for(j=0;j<4;j++) { is=is+mat[i][j]; } ave[i]=is/4; } for(i=0;i<3;i++) { printf("%3d %3d %3d %3d %3.2f\n",mat[i][0],mat[i][1], mat[i][2],mat[i][3],ave[i]); } } これに各列の平均も出したいんですけどどうすればいいんですか? 誰か教えてください。
>>483 i と j を逆にしてループを回せばよい。
( ゚д゚)ポカーン
ループ (1) 輪。環。「―アンテナ」。ボタンを掛ける、ひもの輪。 (2) 「ループ線」の略。急勾配(こうばい)の地に鉄道を敷く時、線路を環状にして、登りやすくしたもの。 →loop
ループを回す? ↻ฺ↻ฺ
>>485 マジレスしてやる。
ここで聞く以前の問題だ。
俺の昔使った本(すぐわかるC/C++)には
前から73ページ目に乗ってるよ。
もう一度勉強しなおしなさい。。
ループ=繰り返し
誰か教えてくれよ〜 まじテストやばい・・・
これだけfor使ってループが分からないわけないと思った。
>>491 やばいだろうな。
人類のためにさっさと学校やめてくれ。
テストで悪い点を取れ。 んで、勉強せぇ
495 :
デフォルトの名無しさん :02/07/02 22:53
課題のプリント丸写しか、教材の丸写しか、 友達のソース丸・・・友達いないか
課題は友達のやつをコピらしもらってたからな・・・ 金曜日テストなのに間にあうと思います??
しるか
ところでさっきのやつなんだけど is=0.0 の意味を教えてもらえますか?
iのsumを0.0で初期化しているじゃないの?
構造体Oのメンバ変数Oの値を取り出してisに代入してるんだよ。
501 :
デフォルトの名無しさん :02/07/02 23:10
現在作成中のプログラムの中で 10個のデータg[10]のそれぞれを比較して最大値を出力したいのですが if文を大量に書くしかないのでしょうか? 10個ならまだいいですが100個とかになった場合恐ろしいので気になりました。 よろしくお願いします。 PS もしかしてとても初歩的な質問ですか?
列の平均だけなら出たけど行と列の平均を一緒に出すってどうやんの? なんかうまくいかないんだけど・・・
>>501 なんのなためにエディタのコピペがあるとおもってんの?
>>501 ループでまわして最大値をさがせばいいじゃん。
508 :
デフォルトの名無しさん :02/07/02 23:16
>>503 >>505 ループ使うってのは考えたのですが
いまいちどう書いていいものか・・・
3個のデータで例でソース書いていただけませんか?
よろしくお願いします。
>>504 コピペですか・・・
効率が悪いと思ったのでなるべく避けたいです。。。
わははは
int a[3]; int m = a[0]; for(int i = 1; i < 3; ++i) { if( m < a[i] ) m = a[i]; }
すみません。 少し考えてからわからなかったらまた聞きに来ます。 自分で考えずに人に聞くことばかりではダメですよね(汗)
もしかして、501は俺の書いたのを見ないで行ってしまわれましたか?
>512 いま全力で>510を思考中
誰か俺にも助言をくらはい
>>510 int m = a[0];
a[3]は初期化していないよね?実は広域変数とか?
>>510 レスありがとうございます。
質問の仕方が悪かったです
最大値を持っている要素と最大値を出力したいの間違いでした。
しかし、勉強になりました。
ちなみに自分がしたかったことは以下です(汗)
int k=0;
for(i=0;i<10;i++){
if(g[k] > g[i]);
else k=i;
}
printf("g[%d] = %1.2f\n",k,g[k]);
みなさん本当にありがとう御座いました。
ifとelseが微妙
>>510 ここはCスレです。C++スレではありません。
>>520 しょうがないなあ。ほれ、これでどうだ。
void main(void)
{
int mat[3][4],i,j;
float ave[4],is;
.........
for(j=0;j<4;j++)
{
is=0.0;
for(i=0;i<3;i++)
{
is=is+mat[i][j];
}
ave[j]=is/3;
}
見事できました〜〜ってできて当たり前か・・・
>>522 本当に i と j を入れ替えるだけだったろ?行と列を入れ替えただけだもん。
524 :
デフォルトの名無しさん :02/07/02 23:50
int x,yがあったとして、x<yなら-1を、x==yなら0を、x>yなら1を返すという処理を記述する際、上級者は if(x<y) return -1; if(x==y) return 0; if(x>y) return 1; と可読性をあげるために敢えてelseを使わないとある雑誌に書いてあったのですが本当ですか? 三項式の入れ子は可読性が低いというのは分かるんですが。
>>524 ・無駄
・意図した処理にならない場合も
よってダメ。
>>522 両方の平均を一緒に出すのがむずかったよ
>>525 ですよね。
まったくもう・・・>あの雑誌
なんて雑誌?
530 :
デフォルトの名無しさん :02/07/02 23:57
>>529 確かSoftwareDesignという雑誌だったと思います。
学校で少し見せてもらっただけなので間違っているかもしれませんが。
漏れなら、if等使わずに、 return ((x-y)/abs(x-y)); とするな。
等しいとき死なない?
533 :
デフォルトの名無しさん :02/07/02 23:58
>>531 おいおい、0による除算エラーがおきねーか?
めるらんにうそですとかいてあった(うつ
>534 ほんとだ(うつ
ホホホ
漏れならif等使わずに return (x-y)/((x-y) ? abs(x-y) : 1); とするな
#include<stdio.h> void main() { int n,n100; int y; n=0; n100=0; while(scanf("%d",&y),y>=0) { n=n+1; if(y>=100) { n100=n100+1; } } printf("全部で %d ,100以上は %d \n",n,n100 ); } 入力された数字すべての和、100以上の数字の和を求めるよう、改良しろって問題なんだけど どうやればいいの??さっぱり分からん
宿題か?
540 :
デフォルトの名無しさん :02/07/03 00:04
>>buy おまえはこの道はあきらめたほうがいいぞ。
while=forですか??
>>538 これより先は君の質問に限り、解答が有料になるがよろしいか?
ポカーソ
>538 改造前のコードが、何をやっているのかは分かるの?
>>538 線を2本書き足すだけだよ! 優しいな俺って。
>>buy おまえひょっとして、以下略
>>555 >>538 のプログラムが何をしているのか一行ずつ読みながらよく考えてみな。
Cの文法はわかっているんでしょ?
>>551 もうこれが最後だからな!1を足す代わりにyを足せ。
>>buy 生き別れになったお兄さんだろ!! こんなところで会えるなんて!!
n100ってなんですか?
>560 元のプログラムでは、100以上の数の個数
>>562 すいませんでした・・・
自分でやります
>543>545>547>549>552-554>557-559>561>562 に昼飯よろしく。
scanfの後の,y>=0て何? ||だろ?
>566 べつにいいんじゃない?
568 :
デフォルトの名無しさん :02/07/03 00:24
>>566 scanfでyに代入(?)したあとにyが0以上かどうか判断しているんだろ。
(俺は条件式でカンマ演算子なんか使いたくないな)
へー。カンマなんて使えるんだ。初めて知った。
570 :
名無しさん@カラアゲうまうま :02/07/03 00:26
どっちもよくねー。
>>566 >>557 while (scanf("%d", &f) == 1)
もしyが0以上という条件があるなら
while (scanf("%d", &f) == 1 && y >= 0)
ところで皆さんは学生さん?
>>570 勉強用プログラムでscanfの戻り値なんて確認しないだろ。
573 :
デフォルトの名無しさん :02/07/03 00:30
scanfの正常時の戻り値って1なの?
>>573 いや、実際に代入した個数。それを見てきちんと代入されたかどうか判断する。
scanf系の戻り値は氏んでも確認しろ(゚Д゚)ゴルァ
577 :
デフォルトの名無しさん :02/07/03 00:33
>574 scanfで複数個の代入なんて…
>>577 するだろ?少なくともsscanfでは。
579 :
デフォルトの名無しさん :02/07/03 00:36
>するだろ?少なくともsscanfでは。 ぷっ。
580 :
デフォルトの名無しさん :02/07/03 00:37
scanf系をしっかり理解してるのとしてないのとじゃ開きがあるが、 「使うな」といわれてそれっきりのやつも多いんだろうなあ。 子供のおもちゃにしては危険度の高い関数だが いい大人がなんで使っちゃいけなかったのか、 どう使うべきなのかを理解せずに未だに「いけないもの」 としてる香具師を期待したが、出てこないな、おい。
581 :
デフォルトの名無しさん :02/07/03 00:38
そんな香具師いるかよ。
582 :
デフォルトの名無しさん :02/07/03 00:40
scanfは大人のおもちゃ・・ハァハァ
商品じゃあるまいし個人的なものにscanfで何の問題もない
584 :
デフォルトの名無しさん :02/07/03 00:42
583に激しく胴囲
585 :
デフォルトの名無しさん :02/07/03 00:43
strtokは使うなというカキコは見たことがある。
586 :
デフォルトの名無しさん :02/07/03 00:51
/* * strtok scanf:どちらも仕事では、使ったこと梨。 * scanf :仕事でなければ結構使うかも。 */
587 :
デフォルトの名無しさん :02/07/03 00:55
scanf、、、実装は大変だろうにな・・・
scanfなんか10行プログラムしか出番なし。
getline(うぐぅっ)
590 :
デフォルトの名無しさん :02/07/03 00:58
>>586 strtokよりもscanfの方がよっぽど危険だと思うが?
strtokは素性さえ知ってれば仕事でも使えるだろ。
scanf()はFORTRANのREAD文と同じく、カードでデータを読みとっていた 頃の、過去の遺物。
そんな悩ましい関数はもう捨てよう。
593 :
デフォルトの名無しさん :02/07/03 00:59
scanfはナゼ入門書に必ずといっても良いほど取り上げられるのか? 俺のティムポが曲がっているのと同じくらい不思議。
>>593 ティムポが曲がるのは、同じ手でばかりオナーニしてるせいらしいぞ。右利きと左利き
のティムポは逆方向に曲がっているとか。
596 :
デフォルトの名無しさん :02/07/03 01:02
>>596 どうかな?ちなみに俺は両効きなので、ティムポはほぼまっすぐに
なっているぞ。ふふふ
>過去の遺物。 そうそう、こういうものは沢山残ってる(w
C自体が過去の遺物
600 :
デフォルトの名無しさん :02/07/03 01:07
>scanf()はFORTRANのREAD文と同じく、 >カードでデータを読みとっていた頃の、過去の遺物。 じゃあカードと紙テープ復活させる?
601 :
デフォルトの名無しさん :02/07/03 01:08
>599 じゃあ最新はどこら辺よ?
>>600 そこまでしなくても、エディタで入力ファイルを書式通り書いて
リダイレクトで読み込ませるだけで十分。
603 :
デフォルトの名無しさん :02/07/03 01:10
日本語でプログラミング」という 小学生が考えるようなプログラミング言語を作った 「ひまわり」の作者が「ひまわり.NET」を作成中との情報です。 同作者は「Web上でも動くんだよーチャキーン」と連呼し、各種掲示板サイトに 事実上荒らし行為とよばれる書き込みを多数している模様。 需要がろくにないくせに何を言ってるんだ!とあちこちで死ねコールが 発生。しかし韓国ではワールドカップの影響か「ひまわり」を愛用する 若者たちが最近多く見られるそうだ。彼らは「カムサハムニダチョムルキセヨーウォライケィ」 (ひまわりよ我らに讃えあれ)と意味不明の言葉を発しているとのこと。 ひまわりが韓日関係の向上に一役かってくれそうな状況だ。
>>601 最新は何かな?
ちなみにC++自体も中身は時代遅れと作者は言っていたようだし。
要するに何が問題かというと、CもC++も入出力機能は言語機能では
なくライブラリとして提供されている点が問題。
GUIのライブラリを入出力用に使えば機種依存は生じるが、最新の
機能を維持できる。それだけの話。
605 :
デフォルトの名無しさん :02/07/03 01:14
入出力機能を実装する言語に入出力機能は要らないだろ。
606 :
デフォルトの名無しさん :02/07/03 01:14
つーかCが時代おくれって言うよりは標準ライブラリが時代遅れなんじゃ?
新しくて良いものがあるのに使わないのは引退時だな。
608 :
デフォルトの名無しさん :02/07/03 01:15
>606 剥げどう。
ん?俺スーパーハカーだけど、Cしかしらないよ。
>604 って事はVC++って事? やっぱりMSかい。スモールサイズはアセンブラって事に落ち着くかい。
>>606 >>608 その通り。なぜこのような使い物にならないライブラリが添付されている
のか不思議。まあUNIXは未だにCUIも当たり前だから不思議でもないか
も。
612 :
デフォルトの名無しさん :02/07/03 01:22
>611 CUIであることと、古くさいライブラリが付いているのは別問題。
>>524 int foo(int x, int y)
{
if (x < y) return -1;
if (x == y) return 0;
if (x > y) return 1;
}
> cc -c -Wall t.c
t.c: In function `foo':
t.c:7: warning: control reaches end of non-void function
という具合にwarningがでる。それなんでこう書く。
if (x < y) return -1;
if (x > y) return 1;
return 0; /* x == y */
>>614 条件文無しの無条件returnが一つは必要って事かな?
単にコンパイラがreturnしないパスがあると思いこむだけ
素直にelse使ガホゲホゴホ
if (x < y) { return -1; } else if (x > y) { return 1; } else { /* x == y */ return 0; } こんな感じ?こだわりはなくて気分次第で使い分け。 でもelseを使うとなぜか{}を書きたくなる。
return -(x < y) + (x > y);
620 :
デフォルトの名無しさん :02/07/03 02:31
すいません 関数に配列を投げ込んで 配列内の最大値を返そうとしてるんですが うまくいきません > gcc test.c test.c: In function `MAXdt': test.c:32: arithmetic on pointer to an incomplete type test.c:33: arithmetic on pointer to an incomplete type たすけて…
>>620 コンパイラのエラーの意味はわかるのか?
>>621 なんか 変数型が ちがうんかなーと思ったりしたんですが
ぜんぶintだしうーん あんまりわかんないです すいません
よく分からんなら、ソース出せというに
#include<stdio.h> #include<stdlib.h> #define N 1 int MAXdt(int dt[][]); int main(void) { int i,j; int cmax; int org_dt[N][N];//オリジナルデータ org_dt[0][0]=3; //配列の最大値を探す cmax=MAXdt(org_dt); printf("%d",cmax); } int MAXdt(int dt[][]) { int cmax,i,j; cmax=0; for(i=0;i<N;i++) for(j=0;j<N;j++) if(dt[i][j]>cmax) cmax=dt[i][j]; return cmax; }
ここのぶぶんでエラーが if(dt[i][j]>cmax) cmax=dt[i][j]; でるみたいです
>>624 とりあえず、何を繰り返したいのか小一時間(以下略
>>624 > int MAXdt(int dt[][])
仮引数に配列を渡すときには、実際にはポインタに縮退しているのは理解してる?
(^^;;
630 :
デフォルトの名無しさん :02/07/03 02:55
>624 MAXdtの仮引数→dt[N][N]は?
>>628 あんまり良くわかんないですが
dt自体はポインタでしたっけ?
dt[i][j]はintの値かなーとおもっていたのでそのままcmax
にあげちゃったんですけども…
>>630 そう書いても良いけど、実際の内部処理を反映する形で宣言すると
int MAXdt(int (*dt)[N])
だよね。「int 型 N 個の配列へのポインタ」が引数として渡される。
あ、なるほど、省略しすぎだったのか…
ちゃんと、いくつかということを書かないといけないのですね…
>>630 >>633 どちらも試してみます
>>632 int dt[N][N]; と宣言してるから dt 自体は N * N の二次元配列。ただし dt を
右辺値として評価すると、それは N 要素の一次元配列へのポインタに縮退す
る。
二次元ではなく一次元でも同じなんだけど、一次元だと適当に理解していても
どうにかなる。二次以上は、ポインタと配列の区別を明確にしておかないとハマ
る。
>>635 その他多数のみなさん
ありがとうございました 動きました!!
なんかいまいちわかんないですが
dt[i]まではポインタで
[j]はそのポインタを格納している配列なのかな???
うーむ・・・
報告 (*dt)[N] 動作しました [N][N] エラーでとまりました
>>636 > [j]はそのポインタを格納している配列なのかな???
やっぱり分かってない。
何か・・・糞スレまっしぐらー Σ(゚д゚lll)ガーン 誰のせいかは名言しませぬが。。
640 :
デフォルトの名無しさん :02/07/03 08:30
C言語(応用)なら、俺に聞け!(宿題は宿題スレへ) 覗いてみたら消防の宿題ばっかしやし。
Sleep関数って使ってる? 使っても良いのかな? どのくらいの単位で指定できるんだっけ? 1/100秒くらい?
使ってもいいからあとは手持ちのヘルプ嫁。
643 :
デフォルトの名無しさん :02/07/03 09:20
int *a; main( ) { func( ); a[ 0 ] = ...; } void func( ) { a = ( int *)malloc( ... ); } みたいなことはできますか? なんか、配列が壊れてるみたいなんですが。
可能。省略したところがバグってると思われ。
>644 ありがとうございます。 よく分かりませんが malloc するサイズを 必要な分だけにしたらうまくいきました。
>>645 >malloc するサイズを必要な分だけにしたらうまくいきました。
いや、当たり前ですが。
まだmallockとかは早いと思われ。
ポインタの使ってる割にはグローバル変数で渡してみたり・・・。
>>646 > まだmallockとかは早いと思われ
mallockって何ですか?
多分、君もmallocを使うのは早いと思われる。
>>647 mallock知らんのか?
mallocを習得したものだけが使える究極の関数だ。
きっと君は100年経ってもmallockは使えんだろうね。
mallock の k は何の略なん?
>650 k=こんにちわ
653 :
デフォルトの名無しさん :02/07/03 14:41
#define mallock malloc
654 :
デフォルトの名無しさん :02/07/03 14:42
つまんね
658 :
デフォルトの名無しさん :02/07/03 15:28
callockはありますか?
>>524 その場合、戻り値の情報量を減らす理由があれば別として、
return x - y;
で十分のような。
660 :
デフォルトの名無しさん :02/07/03 15:38
>>658 勿論。callock 一度つかったら calloc なんて使ってられない。
>659 確かにその方が早い。 でも意味がちがってくる・・ つまりプログラムを読んだときに意図が見えにくくなる
>>659 のようなコードを書く人は
>>524 を読み間違えることはないけど、
逆は成り立たないということでよろしいですか?
マゾレス カーネルレベルのmallocがmallock。
>>663 printkってのもありましたな・・・
>>665 正解。
関数出た時点からその関数ローカルな変数の値は保証されない。
>>666 returnに自動変数使うのはまずくないんだよね。たとえば
int foo(void)
{
int i;
i = 10;
return i;
}
こんなの。
>>667 値渡しってわかるよね?
あれは引数だけでなく返値にも適応される。
だから戻り値にはその変数のコピーが渡される。
自動変数へのポインタをreturnしちゃいけないって事。
>665 >それとも、returnに自動変数を使用しちゃいけないってこと? とか言っておきながら>667は何だろう?
>>668 了解。サンクス。
リンク先の書き方がわかりにくいと思うのは俺だけかなぁ?
>>671 そう?リアルタイムで読んだけど、
「こんな奴おらへんわ〜往生しまっせ〜」
って感じで長し読みした。
スレッド共有オブジェクトをvolatile宣言しないってのは見る Windowsアプリのソースで以前あった。これってヤバイの?
>>673 つぅかそんなレベルで変数共有留守法が悪いと思われ。
定規にしるしをつける問題です。関数の中身は rule(int l, int r , int h){ int i,j,t; for(t=1,j=1;t<=h;j+=j,t++) for(i=0;l+j+i<=r;i+=j+j) mark(l+j+i,t) }このアルゴリズムの解説をお願いします。markは印をつける という意味です。
676 :
デフォルトの名無しさん :02/07/03 19:07
markへの2つの引数はそれぞれどういう意味?
#define HAIRETU_PLUS(kata,cnt,p,tempp) \ tempp)=(kata *)realloc((p),((cnt))*sizeof(kata));\
#define HAIRETU_PLUS(kata,cnt,p,tempp) \ (tempp)=(kata *)realloc((p),((cnt))*sizeof(kata));\ なんかエラーが出るんですけど,なぜ? kataが悪いようなんですが
679 :
デフォルトの名無しさん :02/07/03 20:02
>>678 最初の行の\の後ろにある文字を消してみては。
error C2440: '=' : 'struct tagPOINT *' から 'char *' に変換することはできません。 とでます
682 :
デフォルトの名無しさん :02/07/03 20:13
>>680 それはマクロじゃなくてマクロを展開した後の文に問題があるんだろ。
>>982 本当だ。
ありがとう。
3時間悩んだ俺は未熟者
これからは,前後の文もよーく見ます
国語が苦手だったのは,前後の文みなかったせいかな
684 :
デフォルトの名無しさん :02/07/03 20:55
>>680 どんなコンパイラを使っているの?
そういうものは普通はエラーじゃなくて警告がでるよね?構文上の誤りがあるわけじゃないんだから。
どうみてもVC++だな。 おかしいな、ポインタ同士なら警告になるはずだが・・・
実は.cppだという罠
>>686 俺もそれよくやった。
>>680 reinterpret_castを使えば警告は出ないよ。使うべきでないけどね。
普通にCのキャストで良い。どんどん使え
>>688 拡張子が".cpp"、つまりコンパイラにC++と認識されていると、C形式の
普通のキャストもエラーになる事がない?
C++で使うとは自動的にconst_cast static_cast、reinterpret_castが行われる。とっても便利 Cで通用するキャストは全部通るはず、と思う
>>690 本当だ。第3版のP927〜928に書いてある。知らなかった。使わなかった
もので。
signed int と unsigned int の算術演算の結果が unsigned int になるのやめてホスィ・・・
演算時に片方が unsigned int に格上げされるだけで結果は int に なるのではない?
694 :
デフォルトの名無しさん :02/07/03 22:37
>>692 unsigned の方が、ぱぅわが強いのです。ぱぅわが。
スマン。勘違いだ。
int value = -50; // 1つずつの値 size_t count = 10; // 個数 if ( value*count<100 ) puts("合計は100未満だよ"); ↓ (゜д゜)マズー
>>676 tは、印の高さで(l+j+i)は印をつける位置です。
698 :
デフォルトの名無しさん :02/07/03 23:50
「あいuえ5」みたいに2バイトと1バイト文字が含まれた文字列を 一文字ずつ分解する(分けて取り出す)プログラムを教えてほしいのですが。
>>698 文字コード書いてくれてないから何とも言えません・・・
701 :
デフォルトの名無しさん :02/07/03 23:57
>>698 mbstowcs()とかを使ったら?使えない処理系もあるけど…
>>700 1バイト読みとって最上位ビットが1だったら2バイト読んで、0だったら1バイト読むとか・・
でも
>>701 がよいとおもう。
>>701 特殊な感じがしますね。ある程度自作したいので(人に聞いてる時点で自作って言うのか・・・)。
704 :
デフォルトの名無しさん :02/07/04 00:04
>>702 それだけでは、いわゆる半角カナがあるとうまくいかない。
>>703 ShiftJISの文字コード表探してきて法則性見つけてみる?
勉強にはなると。
最初の1バイトを _ismbblead() でチェックして真なら 次の1バイトを _ismbbtrail() でチェック。これも真なら 2バイト文字として読み飛ばす。
#define is_kanji1st(c) ((unsigned int) (c ^ 0x20) - 0xa1 < 0x3c)
709 :
デフォルトの名無しさん :02/07/04 01:06
>>708 signed char だとまずくないですか?
710 :
デフォルトの名無しさん :02/07/04 01:21
EBCDIC って今でも現役バリバリなんだね。 銀行系とか遊戯系とか。 めちゃくちゃビックリした。
日系2世 恵比寿ディック
c^0x20じゃなくてcを直接キャスト。 つーか、cにカッコつけろや(゚Д゚)ゴルァ
reinterpret_castを使うべきではないというのはどういうことか
>>714 意味をもったキャストではなくて、そのまま生のバイトを再解釈して
型を変えるのでややアレ。
>>714 reinterpret_castなんてはじめから存在しないものと思っていいよ
intとポインタの変換とかで確実に必要になると思うが。 特にWindowsでプログラムする場合なんかは。
キャスト話はいい加減スレ違いだと思うけど・・・ あえて聞くと、画像処理で頻繁に LPBYTE <-> LPWORD なんかの変換を行うけど、 こんなのにもわざわざ C++ スタイルのキャストを行うの?
>>718 キャストの話ではないが、RISCとかに移植しようとしてSIGBUSを喰らう罠。
LPBYTE<>LPWORD変換なんてしないよ。 void*経由だろ、フツー
>>720 LPVOID <-> LPBYTE はC++スタイルのキャスト?
>>721 つぅか汎用ポインタはキャストしないと使えないしょ。
一つの式中にキャストが3つも4つも出てくるとstatic_castって書くのうざくないっすか? 可読性も落ちる気がするし。
うざいけど、Cスタイルのキャストは見つけづらいので リファクタリング時に泣くことになる。
書くときの大変さと保守するときの大変さのトレードオフ? 漏れも今度からstatic_cast使おうかな
>>726 書いてください。
漏れには正確に列挙する正規表現が思いつかないよ
>>727 書くとき大変なんて、誰も言ってないが?
そういうことにしたいのですね?(どこかで聞いたフレーズ)
typedefや[]、()のネストとかまで考えると、正規表現じゃ無理だろうな。
>>728 コンパイラと同じように、インクルード展開して、
型認識せよ
>>731 それならやっぱりC++スタイルキャストの方がいいやん
>>732 一回書けば、ずっと使えるぞ。学生なら勉強にもなるぞ。
リファクタリング時に、見づらいC++スタイルキャストで
ソースが難解になり、泣かずにすむぞ。
ソース解析ツールはコンパイラと同じように発展すべきだ。
>>733 C++スタイルキャストは冗長でうざいけど判断の妨げになることはない
grepだけで簡単に判断できるから、どの環境でも列挙できる強みもある。
736 :
デフォルトの名無しさん :02/07/04 10:36
>>735 >>C++スタイルキャストは冗長でうざいけど判断の妨げになることはない
ソースが見づらいのは、充分判断の妨げになる。
>>grepだけで簡単に判断できるから、どの環境でも列挙できる強みもある。
Cスタイルキャストがないとは判断できない。
結局、全てのキャスト部分を列挙するツールが必要。
>>736 冗長だとは書いてあるけど、見づらいとは書いてないじゃん
一時期 C++ スタイルキャスト使っていたけど Windows プログラム だと本当に可読性悪くなってしまう。結局 C スタイルキャストに 戻してしまった...。
ポインタからDWORDとか、構造体のポインタはCキャストで、 クラスオブジェクトのポインタはC++キャスト使ってるけど、 その住み分けにしばし迷ったりして、いっそのこと全部Cスタイルにしようかと。
740 :
デフォルトの名無しさん :02/07/04 13:05
標準ライブラリにある、atoiとかstrtoulとかは 入力文字列にEBCDICを使えるのでしょうか?
741 :
デフォルトの名無しさん :02/07/04 13:27
ここで紹介されている .net framework SDK には Cコンパイラ は入っていないんですけど どうして紹介されてるんですか? (入ってるのは、C# , JScript .NET , Visual Basic .NET コンパイラ だけなんですが)
cl.exe <- C/C++ Compiler
744 :
デフォルトの名無しさん :02/07/04 16:10
>>719 (unsigned)intにキャストして下位ビットを見て処理を分けるな。
x86でも高速化に有効。
if ((((unsigend)ptr)&(sizeof(xxx)-1))==0) {
xxx *ptr2 = (xxx*)ptr;
/* aligned code */
} else {
/* unaligned code */
}
745 :
デフォルトの名無しさん :02/07/04 16:24
アフォすぎヽ(´д`)ノ
746 :
デフォルトの名無しさん :02/07/04 16:49
∩ | | | | | | | | ∧_∧ | | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ( ´Д`)/./ < 先生!バカがいます / / \___________ / / __| | | __ \  ̄ ̄ ̄ ̄ ̄ \ ||\ \ ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄ || || ̄ ̄ ̄ ̄ ̄ ̄ ̄|| .|| ||
747 :
デフォルトの名無しさん :02/07/04 18:16
>>743 というか、普通に考えたらASCIIとEBCDICと同時に使えないような
気がするんだけど、文字コードがアスキーだというのは
いったい誰がどこで定義するんだ?
LANG=Cだとアスキーコードなの?
>>747 > というか、普通に考えたらASCIIとEBCDICと同時に使えないような
> 気がするんだけど、
誰がASCIIとEBCDICを同時に使おうとしてるの?
Cの仕様では文字コードはASCIIとは限定していないし、
某汎用機のCコンパイラはEBCDICコードに対応している。
しかしすげえな〜このスレは。 11日しか経って無いのにもうレス700・・・
>>748 > 某汎用機のCコンパイラはEBCDICコードに対応している。
昔から気になってるんだけど、その処理系のisascii()は何を返すんだろう。
751 :
デフォルトの名無しさん :02/07/04 20:44
>>749 初心者板に行ってみな。もっととんでもないスレがあるから・・
>>750 Cの標準関数にはisascii()などという関数は存在しません。
751も
> この関数はBSDやSVIDが拡張したものである。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
を無視して勝手な推測をするな。
>>753 あ、ごめん。下の準拠ってところにANSI-Cと書かれていたから準拠なんだと思った。
他の関数のことだね。というかそこにもBSDや・・・と書かれているし(鬱
質問です。 標準入力より入力された文字を見えなくして、取得するための関数はありますか? getc(stdin)やscanf系を試しましたが、いずれも入力した文字は目に見える形で 取得されているようです。ないと思いましたが不安になったもので。よろしくお願い します。
757 :
デフォルトの名無しさん :02/07/04 22:27
>>756 (゚Д゚)ハァ?
質問の意味がわかりません。
文字を見えなくして?(゚Д゚)ハァ?
getpass()みたいなやつのことだろ
ローカルエコーを抑制したいんだろ。suのパスワード入力の際みたいに。 簡単にやるなら、cursesでnoecho()呼べ。
>>758-759 俺だってそれくらいのことは想像がつく。
いいかたがわるかった。
ようは相手にわかるように質問する力をつけてほしいのだ。
761 :
デフォルトの名無しさん :02/07/04 22:39
へロンの公式のソースプログラムの書き方をC言語で教えて下さい。 超初心者な質問で申し訳ないですが、お願いします。
763 :
デフォルトの名無しさん :02/07/04 22:57
つまり、EBCDICだろーとACSIIだろーと atoiに放り込めば数値がゲットできるってーことか。 さっそく試してみるか。 できなかったらころす
ヘロンの公式をCで書く方法を教えろ。 教えなかったらころす。
>>761 double helon(double a,double b, double c){
double s = (a+b+c)/2 ;
return sqrt(s*(s-a)*(s-b)*(s-c)) ;
}
768 :
デフォルトの名無しさん :02/07/04 23:02
げげ、heronか
映画だとこういう場合767だけが殺られる罠。
>>767 のソースプログラムが正しいのでしょうか?
>>761 さんには宿題と見抜かれてしまいましたが、
マジでお願いします。
本当にすいません。
>>772 君はヘロンの公式が何かしらないのか?
宿題は宿題スレにいけ、殺すぞ!
>>767 のソースプログラムが正しいのか?
>>761 には不覚にも見抜かれてしまったが、
まあ教えてくれや。
教えなかったら頃すぞゴルァ!!
775 :
デフォルトの名無しさん :02/07/04 23:18
>>765 ちょっと待ってクダサーイ。
どうしてそこで笑うデスか?
理由をおしえないと ぶちますよ?
C言語使いは物騒デスネー
近似的には正しい。安心しろ ただへロンのスペリングは間違っている。
ネタで物騒な言葉を使ってもやっぱりウソはウソと見抜かれて しまう。このスレの住人はなかなか優秀じゃのう(w
atoi とは ASCII to Integer とかそんな感じの略だと思うんですが それにしたって 「アスキーじゃないとだめ」 なんてのは man見ても載ってないし。 そもそも文字コードの「前提」ってやつは 処理系のどこで どう定義されてるんですか ってのが 誰も応えられないのはいったいぜんたいどういうことなのか。 これがわからないと自分で変換プログラムを書かないとならないので 面倒くさいけど、てゆーか、もう書いちゃったんだけど、くやしくて 車輪の再開発って気に入らないってゆーか。 これから誰を信じていけばいいの? おしえて。
> 誰も応えられないのはいったいぜんたいどういうことなのか。 まともなプログラマは、みんな「答えられる」から。
char arr[] = ""; ... char arr[] = ""; or char arr[] = {'\0'}; で、空文字列を格納する配列を 宣言できるらしいですけど、 空文字列の使い道ってあるんですか? 実際宣言することなんてあるんでしょうか・・・・?
783 :
デフォルトの名無しさん :02/07/04 23:43
>>781 ロケールでEBCDICを使いたいときはどうすればいいの?
>>784 EBCDIC をサポートしている処理系を使う。
>>785 LinuxでEBCDICをサポートしてるディストリビューションってある?
787 :
デフォルトの名無しさん :02/07/05 00:04
>>787 じゃー どのみち もーだめじゃん
もう しぬしかない・・・
しぬなんてかんたんに口にしちゃいけない いきるのです
790 :
デフォルトの名無しさん :02/07/05 00:14
mallocで外部メモリから空きを得ることはできるのですか?(FDなどに)
正解標準のういんどうずがasciiなんだから、これからはasciiだろ
海栗コードは?
できない。ヒープ領域で無ければならない。
>>791 二次記憶(secondary memory)って知ってる?
796 :
デフォルトの名無しさん :02/07/05 00:36
C言語のプログラムをWindows上でPascalに変換するソフトはありませんか?
798 :
デフォルトの名無しさん :02/07/05 00:42
ごめんちゃい
800 :
デフォルトの名無しさん :02/07/05 00:43
>>797 そこの管理人は生意気だから嫌いだけど、それはワラタ
802 :
デフォルトの名無しさん :02/07/05 06:47
test
803 :
コンパイラさんへ /* とりあえずgccのみ */ :02/07/05 07:32
#define 初心者です。よろしくお願いします #define B.Kernighanマンセー #define D.Ritchieマンセー #define R.Stallmanは神! #define J.Gosling逝ってよし! #undefine<microsoft.h> #define …<stdio.h>??? /* 見えてねーよな?*/ main(コンパイルして下さい) /* ったくよー、めんどくせえなー */ { 表示してね("hello, world\n"); /* 分かんねーんだよ */ retune コンパイラさん、今日もいかしてますね(はぁと; }
これよりココは、
>>803 を焼き殺すスレに変わりますた。
806 :
デフォルトの名無しさん :02/07/05 13:32
void Func(LPSTR str); #defineA( str) Func( "str" ) A(hogee);と記入すると、Funcには"hogee"ではなく"str"が渡されてしまいます。 マクロで"hogee"を渡す方法ってありますか?
#define A(x) (Func(#x))
>>807 それだと、Func(hogee)になってコンパイルエラーになりませんか?
>>807 失礼しました。
勘違いしました。
早速試してみます。
うまくいきました。 ありがとうございました!
811 :
806 ◆GpSwX8mo :02/07/05 14:00
なんつー警告?
>>811 やっぱり警告が出るんですけど…?
おまえ失礼な奴だな
FuncをLPSTRじゃ無くてLPCSTRにしてホスィ・・・
ホスィのか
しろよ
817 :
新米 ◆jH.6d5ig :02/07/05 17:34
VC初心者です。 for(i=0;i<=100000;i++) { printf("%d",i); } ってやると100000が表示されるまで何にも受け付けてくれないのですが もしこの表示中にexitと入力してエンターすれば 表示がそこでとまる、というプログラムを作りたいときは どのようにすればいいのでしょうか? 処理をしながら別のところでは別処理をするプログラムを作りたいわけです。
>>818 即レスthx。
getchって入力待ちの時に使う奴ですよね・・
kbhit・・・? スレッド・・?2ch用語ですか?
新米獅子舞てんてこ舞い
どのスレでも「スレッド」って言うと2chの掲示板のスレと勘違いする人がいるよね・・・ 初心者の質問に答えてるとき、どうも話がかみ合わないなーと思ったら その勘違いをしながらずっと話を進めてたっていう・・・
(;´Д`)ハァハァ
googleで調べてみます・・・
825 :
デフォルトの名無しさん :02/07/05 17:58
f分布のパーセント点を(自由度1、自由度2、危険率)から求めるプログラムを教えてください。 この逆は奥村晴彦さんが書かれた「C言語によるアルゴリズム事典」から調べたんですけど… 思うように出力されないです(TT)
質問れふ C言語で大抵の事が出来ると聞いてるのですが、 テトリスあたりの簡易ゲームも作れる事が出来るのですか? それとC言語関連の資格試験があったら教えてください
>>757 スマソ、UNIXパスワードみたいに見えない形といったほうが分かりやすかったようです。
>>758-759 サンクス、ためになりました。
その後調べてみたのですが、_getch()で思うような操作ができるようになりました。
お騒がせしてしまってすみませんでした。(getche()が、scanf系やgetchar()と同じく
目に見える形になる)
828 :
デフォルトの名無しさん :02/07/06 00:44
830 :
デフォルトの名無しさん :02/07/06 06:20
すいません、質問です。 おとといくらいからC言語の勉強を始めたのですが、本を読んでる間 貧乏ゆすりが止まりません。どうしたらいいですか?
>>830 つま先ではなくかかとを付くようにして下さい
文法は超基礎はマスターしてますが、いままで100行程度のプログラムしか書いたことありません。 そんなどーしょうもない俺が1,000行、約2,000ステップのプログラムを1週間後までに修正できる実力をつけるためにはどうしたらいいでしょうか?
修正なら思ったほど難しくない。 でもなぁ、人様の書くソースはくせありまっせ。
>833 るーぷあんろーりんぐとコピペの練習(ワラ
>>835 「1,000行、約2,000ステップのプログラムを作れるようになりたい」と
勘違いしているヴァカ発見。
>>833 「1,000行、約2,000ステップ」ってどういうこっちゃ ?
>>836 妄想で補ってください。
できなければ右脳を鍛えてください。
まさか、 /* comment */ a=b; b=f(c) ; c=g(a); みたいなコードなのでわ……
for文で3600回まわして使っているんですけど, そのなかでif文を4つくらい使っているのですが, これをなくすためにgoto文を使おうと思うのですが, 他の方法(文が読みにくくなるけど,elseつかったりしてなんとかしる)を取った方が良いですかね?
goto文つかうとどうifが無くせるのでつか?
842 :
デフォルトの名無しさん :02/07/06 14:49
>>840 mono ni yoru
(gomen totsuzen IME ga sinda)
もしかして for(){ if(・・・) goto aaa; if(・・・) goto aaa; if(・・・) goto aaa; if(・・・) goto aaa; aaa: } とかやってんじゃ・・
data=tel(hairetu[i][j]); if(data==1) No=1; if(data==2) No=2; if(data==3){ if(-------){ if(-------){ if(-------) else if(------) }else{ } } switchつかったほうがいいのかな?
if(data==1){ No = 1; continue; } if(data==2){ ・ ・ ・ とか。
ごめん。if文の下で 表示関数(Src[No]); ってやってるの
do { if (xx) break; } while(0); を覚えなさい
やってくれる ってか for for do{ }while(0); にしている人どのくらいいる?
do{}while(0); 使うくらいなら goto つかう
do{}while(0); ???
do{}while(0)はマクロでよく使うなあ
>>852 マクロ内に複雑な文を入れたいとき do/while で囲むと吉
あーなるほどです。breakも使えるし、いいっすね。
hairetu[i][j]の内容ってNoとどんな関係なの? 配列の順番でNo決めるのか?
856 :
デフォルトの名無しさん :02/07/06 18:14
*( *(hairetu + i) + j ) = hairetu[i][j] だっけ?
*( *(hairetu + i) + j ) == hairetu[i][j]だな
>>856 オイオイ
*( *( hairetu + j ) + i ) == hairetu[i][j]
だろ
*( hairetu * i * j ) == hairetu[i][j] だろ?
もとい!! *( hairetu + i * j ) == hairetu[i][j]
お前ら・・・わざとだろ。
863 :
デフォルトの名無しさん :02/07/06 18:53
>855 Noって何だ.
864 :
デフォルトの名無しさん :02/07/06 18:54
メモリ上でどう格納されているか理解してれば間違いようが無いと思う今日この頃みなさまお元気ですか?
俺もう駄目かも。。。。
868 :
デフォルトの名無しさん :02/07/06 19:12
メモリ配置は理解出来るが式が思いつかなんだ。。。
大体、
>>844 の質問って何?
分岐をシンプルにしたいって事?
ループ以外でのi or jに加減算なければアホなレスもOKでは?
おいおい j[i[hairetu]] == hairetu[i][j] だがな
>>870 いや、ネタじゃないで。。。(本人。。)
ネストしたループしか考えてなかった。。。。
>>871 どこからjとiの配列が出て来るんや。。。。。。。
>>873 よく考えろ
"abcde"[i]とi["abcde"]は等価
はあ??ここは「数学スレ」か? 「C言語」のスレでは??
頃しますよ
>>874 って言うかそれ出来たら言語的にすごい気がする。
これ指向で誰か仕様考えない?
>>877 出来たらつか、出来るんだ。
x[y]の形式は x + yと等価だから、y[x]でも同じ事
言語的ってなんだ?
てか、何がすごいんだ?
885 :
デフォルトの名無しさん :02/07/06 20:05
マクロfoo #define foo(x) {\ /*ほげほげ*/ \ goto XXX; \ /* ふがふが */ \ XXX: \ } を複数回使ってもコンパイラに文句を言われないよう、XXXに __LINE__ か何かを くっつけたいんですが、どうやったらできますか? こんなマクロ駄目とかgoto使うなってのはナシで。
#define foo(x) do {\ break; } while(0)
#define foo(x) \ do {\ break; \ } while(0) \つけ忘れ。鬱だし脳
889 :
デフォルトの名無しさん :02/07/06 20:11
>>888 マクロの中のforの2重ループから抜けたいのよね…
>>885 マクロにラベル文字列を指定する引数を追加するってのはどうだ?
コンパイルは通ったぞ。望み通りの動きをするかどうかは知らん。
891 :
デフォルトの名無しさん :02/07/06 20:13
>>890 goto XXX##str;
XXX##str:
でいいっけ?
>>891 ええんちゃう?
ただ、strに渡す引数は手作業で指定してやらないといけないけど。
(__LINE__等が使えない)
引数を展開してからじゃないと逝けないから、こうだな。 #define CONCAT2(x,y) x##y #define CONCAT(x,y) CONCAT2(x,y) #define foo() { \ goto CONCAT(xxx_,__LINE__); \ CONCAT(xxx_,__LINE__):; \ }
つぅか普通に関数にしろと。
は・げ・ど・う
896 :
デフォルトの名無しさん :02/07/06 20:27
>>884 そうそう!良く考えたらそうなんだよね!
でもCのスレだからな。
ポインタに0入れてiもjも0なら「少し」は判るが・・・
(そりゃ無いけど)
> でもCのスレだからな。 とは?
898 :
デフォルトの名無しさん :02/07/06 20:30
文法とかコンパイラの勉強か? 勉強熱心で若者なら有意義な質問かもね。
>>898 よかったな。向上心無しの技術者定年間近のおっさんはお前だけだ。
>>855 for(i=0;i<100;i++)
for(j=0;j<100;j++)
No=tel(hairetu[i][j]);
#define tel(a) (a)&(1<<3)
ッてな感じです
901 :
デフォルトの名無しさん :02/07/06 20:34
>>898 こういうので遊べるってのもプログラマの素養の一つだろ。
902 :
デフォルトの名無しさん :02/07/06 20:41
>>897 ポインタに0が入るロジックあるのか??
いや、CでできることをCのスレで語ってるのに > でもCのスレだからな。 ってのは変だなと思って。
904 :
デフォルトの名無しさん :02/07/06 20:58
>>903 う〜ん。それ言われるとなーー
でも、それだと数学的になり過ぎて、
収集つかないような気がする・・・
>>904 なぜこの流れで数学なんて言葉が出てくるんだ?
906 :
デフォルトの名無しさん :02/07/06 21:14
int num;
num|=2<<20;
printf("num=%d\n",num
>>20 ); //2
printf("num=%d\n",(num&printf("num=%d\n",(num&2097151)
>>20 ); //2
のはずなんですが,最後の&したあとにシフトさせるのが,0になってしまいます。
上のプリント文は,2が出るのに,なんで下のプリント文では,2が出ないんでしょうか?
int num=0;
num|=2<<20;
printf("num=%d\n",num
>>20 ); //2
printf("num=%d\n",(num&printf("num=%d\n",(num&2097151)
>>20 ); //2
のはずなんですが,最後の&したあとにシフトさせるのが,0になってしまいます。
上のプリント文は,2が出るのに,なんで下のプリント文では,2が出ないんでしょうか?
int num=0;
num|=2<<20;
printf("num=%d\n",num
>>20 ); //2
printf("num=%d\n",(num&printf("num=%d\n",(num&2097151)
>>20 ); //2
のはずなんですが,最後の&したあとにシフトさせるのが,0になってしまいます。
上のプリント文は,2が出るのに,なんで下のプリント文では,2が出ないんでしょうか?
>>907 とりあえずnum&2097151==0だ。
何がやりたいのかよく分からんが
2097151==0x1fffff 2<<20==0x200000
2<<20 で21ビット目が埋まる?
22ビット目だろ
int num=0;
num|=2<<20;
printf("num=%d\n",num
>>20 ); //2
printf("num=%d\n",(num&printf("num=%d\n",(num&2097151)
>>20 ))))))))))))); //2
のはずなんですが,最後の&したあとにシフトさせるのが,0になってしまいます。
上のプリント文は,2が出るのに,なんで下のプリント文では,2が出ないんでしょうか?
足りなそうだったので付け加えてみますた。
ガクガクブルブル
関数の引数に kansuu'const char a) { return a+1; } のようにconstってよく付けますか? つける場合プロトタイプ宣言の方にも付けた方が良いでしょうか?
関数の引数に kansuu'const char a) { return a+1; } のようにconstってよく付けますか? つける場合プロトタイプ宣言の方にも付けた方が良いでしょうか?
>>918 関数の引数に'はつけたことがない
constもポインタ引数にはつけるが値渡しにはとくにつけない。
920 :
木村 キタキタマシーン :02/07/07 01:49
よくは付けません プロトタイプ宣言にも必要です
921 :
デフォルトの名無しさん :02/07/07 02:07
>>919-921 ありがとん
夜はいろいろな名前の人がいて楽しいのら(徹夜でおかしくなり気味)
923 :
デフォルトの名無しさん :02/07/07 02:24
いっぺんの長さを入力すると、その正方形の面積を返してくれる サーバーをプログラムしたのですが、どうやってそのサーバに 長さを送ったらいいのでしょうか? ちなみにそのプログラムは自分のPCの中においています。 telnetで送れるらしいのですが、いまいち分かりません。
924 :
デフォルトの名無しさん :02/07/07 02:25
925 :
デフォルトの名無しさん :02/07/07 02:27
926 :
デフォルトの名無しさん :02/07/07 02:53
AIBOはC++で動いているという話を聞きました。それで、これからの将来にドラえもんのようなロボットをつくりだすのもC++だということを聞いたのですが、それは実現可能なのでしょうか??
928 :
デフォルトの名無しさん :02/07/07 03:00
>>927 「C++の将来」スレでそういうネタがあったんだよ。
930 :
デフォルトの名無しさん :02/07/07 03:06
int型の整数を文字配列としてChar型の配列に入れたいときは どうしたらよろしいのでしょうか。
931 :
デフォルトの名無しさん :02/07/07 03:12
932 :
デフォルトの名無しさん :02/07/07 03:17
>>931 なるほど。ありがとうございます。
では、w型をCharにかえるにはどうすればよろしいのでしょうか。
何度もすいません。
>>931 itoa()は標準にはない。
sprintf(buf, "%d", i)
934 :
デフォルトの名無しさん :02/07/07 03:19
>>932 w型ってなんだ。あとCにCharというのはない。
936 :
デフォルトの名無しさん :02/07/07 03:28
938 :
デフォルトの名無しさん :02/07/07 06:15
サーバープログラミングなのですが、一人がコネクトした状態では 「待って」というメッセージを送って、2人コネクトして初めて メインの処理が始まるようにしたいんですが、どういう構成でいけばよろしいでしょうか?
>>938 一人がコネクトした状態では「待って」というメッセージを送って、
2人コネクトして初めてメインの処理が始まるような構成にしてはどうでしょう?
>>938 一人がコネクトした状態では「待って」というメッセージを送って、
2人コネクトして初めてメインの処理が始まるような構成にに僕も賛成です。
>>938 s = socket()
bind(s, addr_and_port)
listen(s,...)
s1 = accept(s)
send(s1, "待って", ...)
s2 = accept(s)
main(s1, s2)
ぐらいでいいと思うが。3人目来たらどうするかとかは知らんけどさ。
あと当然ながら、エラー処理は言うに及ばずクローズ処理や Windows
なら必要な WSA...() は書いてねーからそのつもりで。
s2をacceptした時点で、close(s)すればいいんでないかい?
>>942 3人目を受付ないならね。そう言う仕様かもしれないし、3〜4人目をセットにし
て同じような処理する仕様かもしれないしね。
要は、「そこの仕様が不明確だよ。」って言ってるだけ。
terminal の行数を得たい場合はどうしたらいいですか? % echo $LINES では行数を得られるのですが、環境変数ではないようで、 getenv("LINES") ではだめなんですが。
すみません、環境は Linux(Debian) です。
946 :
デフォルトの名無しさん :02/07/07 16:51
age
947 :
デフォルトの名無しさん :02/07/07 17:26
man 4 tty /TIOCGWINSZ
948 :
デフォルトの名無しさん :02/07/07 17:42
se/ dialogon/open. %1-dialogaaa
関数を作るときに if ( (fp = fopen ("omanko","w" ) )!=0 ) { printf("Can't open"); exit(1); } ↑の場合どうすればヨイのですか? FILE Fopen (*fp) { if ( (fp = fopen ("omanko","w" ) )!=0 ) { printf("Can't open"); exit(1); } } とかにすりゃいいんすかね?
とりあえず、コンパイルできないじゃん。
#include <stdio.h> #include <stdlib.h> void Fopen(FILE **fp); void Fopen(FILE **fp) { if((*fp = fopen("omanko","r"))==NULL){ printf("cant open"); exit(1); } } main() { FILE *fp; char buffer[255]; Fopen(&fp); while(fgets(buffer, 254, fp)) printf("%s\n",buffer); return 0; } こんなのとか。
>>949 そんな君に送る単発質問テンプレート
「何」を、
「こう」したいので、
「こう」書きましたが、
「こうなって」しまいました。
どうすればよいでしょうか?
鍵括弧の所を適宜書き直して使ってくれ。
>951 エラー時にFopenでexitするの?
>953 まあ、オリジナルに近い形でつくってみますた。
949を、 こうしたいので、 こう書きましたが、 こうなってしまいました。 どうすればよいでしょうか?
>>955 >949を、
>こうしたいので
ハァハァ
>>955 は漏れジャネーッス
fopenを関数にしたかったんすけど
void FileOpen (??????)
の?部分と
呼び出す際の
FileOpen(??????)
の?部分がわからなかったのです。
糞厨でスマソ
958 :
デフォルトの名無しさん :02/07/07 21:19
>>957 偉い。本当にテンプレートを使用してくるとは・・・
最近は、こういう書き方するとすぐ突っかかってくる奴等
ばかりだからな。感心感心(いや、マジで)。
まず、fopen 自体が関数だって事は理解してるよね。
で、それを使用してエラーをはじく機能を追加した
自作の fopen (=Fopen) を作りたい訳だ。
まあ、普通(あまり細かい事に気を遣わずに)に書くなら
FILE* Fopen(char *filename,char *mode)
{
FILE *fp;
if((fp=fopen(filename,mode))!=NULL){
printf("Can't open");
exit(1);
}
return fp;
}
int main(void)
{
fprintf(Fopen("omanko","w"),"hello world\n");
return 0;
}
で、いいんじゃない?
int main() { return EXIT_SUCCESS; //(゚ω゚=) }
>>958 まあ、言いたいことはわかるけど、何でプログラムの動作まで変えるん
だ ? こんな書き方すると...
while(fgets(buffer, 254, Fopen("omanko", "r")))
printf("%s\n",buffer);
とか書きかねないぞ。あと今回は固定文字列だからいいけど、
printf("helo world\n"); は、printf("%s", "hello word\n"); にし
た方がいいと何回も言われてるのに、学習能力の無いアフォですか ?
961 :
デフォルトの名無しさん :02/07/07 21:57
>960 何故にわざわざ「あまり細かい事に気を遣わずに」と 断り書きをいれたか分からんのか? 読解能力の無いアフォですか ?
In Article 960 (以下略) >> printf("helo world\n"); は、printf("%s", "hello word\n"); にした方がいい はつみみです。
963 :
デフォルトの名無しさん :02/07/07 22:03
>>960 とりあえず、教科書では
printf("%s", "hello world\n");
ではなく、
printf("hello world\n");
と書かれている理由をじっくり考えてみるヨロシ。
>>961 悪いけど、俺にとっても
> fprintf(Fopen("omanko","w"),"hello world\n");
はとても細かいこととは思えない・・・
ケソカハヤメテ!!
>>963 著者がそろいもそろってバカばっかだからだよ。
なるほどなるほど、例えばint nを表示したいときに printf("n=%d\n",n); ではなくて printf("%s%d%s","n=",n,"\n"); としたほうがいい訳だな バ カ ァ ?
>>961 ププ、簡単につれるねぇ。なんだあんたは、「細かいことに気を遣わないと」もと
のプログラムと動作が変わっちまうんのか ?
まあ、もともと「普通に書くなら」ああいうプログラムスタイルになる奴になに
言ったって無駄だけどな。
>>962 失礼、このスレじゃなかったかも知れん。「まあ、
printf("%%% hellow world %%%\n"); とかしたい時まずいだろ ?」って話だ。
フタリヲトメテ!
>>968 偽551ハケーン!!
確かに、普通に書いてあーなるのはちょとどこかおかしいかも・・・
>>971 結局、説明の力点を何処に置くかって事だろ。
説明したかったのは Fopen についてだけで
main はあくまでもオマケ。
コンパイルして実行してみたいだろうからね。
確かにちょっとおかしいと感じるのも分かるけど
動作に支障が無ければ短いほうがいいと考えただけ。
(結構 Lisper の血が流れているのかもしれん・・・)
ワタシノタメニアラソワナイデ!
>>974 キタ━━━━━━(゚∀゚)━━━━━━ !!!!!
callocうっとおしいので、削除しちゃっていいですか?
977 :
デフォルトの名無しさん :02/07/07 22:55
>>960 あんた、「どんな文字列が入っているのか分からないものをprintfのフォーマット文字列に指定してはならない。」ということと勘違いしていないか?
定数ならなんの問題もないだろ(第一、"%s"だって定数だし・・・)。
>>968 > とかしたい時まずいだろ ?」って話だ。
しねーよ馬鹿(ワラ
(;´Д`)/ < 先生! 危険なので
>>968 にはprintf/sprintf系関数禁止令を出して下さい!
⊂⊃ ∧∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ( xДx)< デブ川俣は昇天・・・ |⌒|U U \_______ 川 | | U U ∫
う
め
埋めー
985
(・∀・)ウメウメ
埋め血前!!!
(゚∀゚)ノ アヒャ
ヽ(゚∀゚)ノ アヒャヒャ
990!
9 さて、と…
8 埋めー
7 (・∀・)ニヤニヤ
6
5
4。。。 (・∀・)ニヤニヤ
3。
2。
1!!!!!!!!!
__ l⊆⊇`ヽ ≡ ヤホーイ (´D`Lノ ≡ m=○=mノ) ≡ _/_/(「_ノニコ ≡ ( (0)=(__)0) ≡(´⌒(´⌒;;
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。