1 :
v(^o^i)d :
04/07/15 12:59
3 :
デフォルトの名無しさん :04/07/15 13:03
scanfを使った書き方が分かりません。 教えてください。 ・数値を一つ入力してそれを表示する。書式は"n=数字\n" ・数値以外のものが入力された場合 ・"quit"が入力されたら終了する。 ・それ以外の文字列の場合はエラーとその文字列を表示する。 ・終了しなかった場合は最初に戻る。
4 :
推奨NGワード :04/07/15 13:04
第一群 「頭悪すぎ」「池沼」「バカ」「馬鹿」「ばか」「アホ」「あほ」「まぬけ」「間抜け」 「アフォ」「くず」「クズ」「アフォ」「キモイ」「低脳」「タコ」「クソ」「死ね」 「餓鬼」「バッカ」「香ばしい」「ゲラゲラ」「(プ」「プゲラッチョ」 「莫迦」「逝け」「キモい」「キモイ」「消えろ」「失せろ」「晒し上げ」 第二群 「函数」「scanf」「gets」「goto」「コーディングスタイル」 「コメント」「セキュア」「セキュリティ」 第三群 「空白あけろ」「空白あけるな」「空白のあけかた」「空白の空け方」「空白空けるな」 「空白入れろ」「空白入れない」 「ボ○ケ」「ぼけぇ」「ヴぉけ」「ぼけ」「ボケ」 第四群 「;-)」 「;)」「すぎー」「初歩的な質問」「初心者です」「初心者」 「;-;」「異端」「脳内変換」「UNIX厨」「M$」「初心者的な質問」「のー?」 「日下部陽一」「勝利」「敗北」「妄想」「素人」 第一群:言葉自体の有害度が大きい。 第二群:言葉自体は有害ではないものの、使う人の技量や目的によってはフレームの原因になる。 第三群:荒らしが好んで使う言葉。 第四群:その他。主観で分類してください。
>>3 こういう事をしたいのかな?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int i;
long num;
char buf[64];
for (i = 0; ; i++) {
scanf("%s", buf);
if (!strcmp("quit", buf))
break;
if ((num = strtol(buf, NULL, 0))
printf("%d=%ld\n", i, num);
else
printf("invalid input: %s\n", buf);
}
- if ((num = strtol(buf, NULL, 0)) + if ((num = strtol(buf, NULL, 10))
8 :
デフォルトの名無しさん :04/07/15 13:17
> scanf("%s", buf); バッファオーバーフロー キタ━━━━(゚∀゚)━━━━ッ!!
注文通りだろうが。それぐらいで騒ぐな知障
11 :
デフォルトの名無しさん :04/07/15 13:35
scanfを使うなって、HPとかが結構あるがなんでなんだ?
>>3 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char s[256], *pNotNum;
long int n = 0;
scanf("%256s", &s); //fgets(s, 256, stdin);と同じ
if (strcmp(s, "quit") == 0)
exit(0);
n = strtol(s, &pNotNum, 10);
if (pNotNum[0] != '\0')
printf("エラー:%s\n", s);
else
printf("n=%d\n", n);
main();
}
13 :
デフォルトの名無しさん :04/07/15 13:36
また同じ過ちを繰り返そうというのか
そうか、またscanfで荒らしたいのか。
>>11 よく昔の入門書に使うなって書いてあったから、その影響なんじゃね?
16 :
デフォルトの名無しさん :04/07/15 13:38
stdinって、なんですか?
もしもし?俺だけど。俺俺。 なんかscanf使ったらさあ、プログラムが変なんだよ。
>>17 お前の感じている感情は精神疾患の一種だ。俺が治せる俺に任せろ。
>>12 なぜ%dを使わないんだ。
scanfの特徴が台無しじゃないか。
>>19 %dで"quit"が入力されたらどうすんだ。ボケ。
とあえて釣られてみるテスト
scanfのげんかいですね
>>4 の第二群を設定しましょう。
まあ、きれい!
お前ら、その話はいいかげんにしろ。 ところで漏れは if (a == 0) って書くより if (0 == a) って書いたほうが良いと思あqwせdrftgうわ何をすa4u89
24 :
デフォルトの名無しさん :04/07/15 14:10
25 :
デフォルトの名無しさん :04/07/15 14:13
1次元配列、2次元配列のほかに3次元配列、4次元配列も存在するの?
26 :
デフォルトの名無しさん :04/07/15 14:14
>23 if (a = 0) の間違いを見つけてくれるコンパイラはないのか?
27 :
デフォルトの名無しさん :04/07/15 14:14
28 :
デフォルトの名無しさん :04/07/15 14:17
Cで食えるようになるにはどれくらいの腕が必要なの?
>>23 if (a == 0) って書くより
if(!a) って書いたほうが良いと思あqwせdrftgうわ何をすa4u89
>>28 少なくとも女よりも早くイッてしまわない耐性が必要だ。
31 :
デフォルトの名無しさん :04/07/15 14:22
VisualC++ TurboC++ 違いは何ですか
33 :
デフォルトの名無しさん :04/07/15 14:24
>31 メーカー
>31 と、違いはいくらでもある。
36 :
デフォルトの名無しさん :04/07/15 15:10
out of memory ってエラーについて詳しく教えてください。
>>25 Cには多次元配列など亜qwせdrftgyふじこlp;
語尾に 亜qwせdrftgyふじこlp; こんなのをつけて遊ぶスレはここでうわなにをするjhふぉh2うぁfhg
40 :
デフォルトの名無しさん :04/07/15 16:51
まぁ、皆さん楽しく遊んでください。
41 :
デフォルトの名無しさん :04/07/15 17:08
ええと、直接のCの質問ではないのですが、ちょっと困っています。 私はOSはXPでコンパイラに無償のBorland C++ 5.5を使っていて、それで出来たファイルを簡単に実行できる「C言語を始めよう!」ってフリーソフト を使っていろいろプログラムを作っています。 それで、実行時にDOS窓なるもの(バッチなんとか?)が出てきて結果が表示されるのですが、その内容がコピーできなくて困っています。 「すべて選択してctrl+C」でコピーが出来てないようです。 解決法を教えてください、お願いします。
>>42 マウスで右クリして選択してます
そのあとマウスのボタン押すと選択範囲が消えてしまいます
>>43 すべて選択のあとにEnterでクリップボードに入るよ。
ちなみに右クリした直後にはコピーが選択不可になっていて、 コピー(Y) Enter って書いてあるんです。意味はよくわかりません・・・
どうもすいません、みなさんありがとうございました
50 :
デフォルトの名無しさん :04/07/15 20:15
ナケキャラな人だったな。
前スレの880です。 いろいろ調べたんですが、またわからなくなりました。 typedef struct link{ struct link *next; struct link *prev; int i; }LINK; って構造体があって、mainとかで LINK *test=(LINK *)malloc(sizeof(LINK *)); testというのを作ったとして、 test->next=NULL; free(test); だとDAMAGE: after Normal 〜無しで test->prev=NULL; free(test); だとDAMAGE: after Normal 〜有りになります。 test->i=1; free(test); だとエラー無しでした。 LINK構造体の中でnext,prevのどちらが先に宣言されてるかで どちらがエラーになるか異なってるようですが・・・。 どういう事が起きているのでしょうか?
>>51 >>malloc(sizeof(LINK *));
malloc(sizeof(LINK));
>>52 できました。
何回も見直したつもりが
基本的なところ間違えてましたね。
本当にありがとうございました。
質問何ですが… この詐欺の匂いのするスレタイは何なんですか?
55 :
デフォルトの名無しさん :04/07/15 22:21
既出? main() { printf(&unix["\021%six\012\0"], (unix)["2ch"]+"fun"-0x62);
} 最後のブレースを忘れてますた。スマソ。
>>55 さてはお前、どっかのスレで
「エキスパートCプログラミングすげーいい!」
みたいなこと言ってたやつだな?
>>57 違うよ。でもあの本は評価されていいと思う。
60 :
デフォルトの名無しさん :04/07/15 23:00
61 :
デフォルトの名無しさん :04/07/15 23:02
ぐえ。まだこのスレつづけてんのかよ。 質問が糞なのはデフォだが、回答も相変わらず糞だな。
>>61 そうだな。お前のような口だけ野郎もいるし。
floatでもdoubleでもどっちでもいいって場合は どっち使えばいいの?
暑いときはフロートだな。 腹減ったときはダブルだ。
>>63 float使っとけ。
Cはなるべくコンパクトに書くのが良い。
67 :
デフォルトの名無しさん :04/07/15 23:15
プログラマって、楽で良いよね。 SEに言われたとおりに関数と変数を並べて、 プログラム(のようなもの)をでっち上げて金クレクレと。 それでちょっとでも仕様が変ると、「使えないSEだ、コリャ」とかファビョって、 ちょっとでも考えさせると、「それはボクの仕事じゃありません!」とかキレて。 もうね、アフォかと。 ドキュメントを書かせると、小学生の作文並みの代物を平気な顔して提出して、 「ホレ、漏れは仕事したぜ?」ときた。 もうね、幼稚園児かと。 徹夜、休日出勤がある? あっそ。 そりゃあんたらの仕事が、低技能で勤まる仕事だから、 給料を捻出するためにはそのくらいしなきゃならんのだよ。 漏れの子供には、プログラマーになってほしいね。 こんなに安全確実な仕事はそうそうない。 工場労働者なみの機械的作業で、工場ほどの危険さはまるでない。 マジでおすすめだわwww
70 :
デフォルトの名無しさん :04/07/15 23:21
何言ってるんだ?
>>70 頭悪いのがバレバレだよ
確かに。ということで次の話題へ↓
>>63 C言語の浮動小数点リテラル定数のデフォルトがdoubleだから、
特に理由がなければ、doubleにしておいたほうがプログラムがスッキリするよ。
73 :
デフォルトの名無しさん :04/07/15 23:35
質問1: strccpyは後ろに終端の'\0'をつけてくれますか?
75 :
デフォルトの名無しさん :04/07/15 23:36
まちがい... 質問1: strncpyは後ろに終端の'\0'をつけてくれますか?
76 :
デフォルトの名無しさん :04/07/15 23:36
質問2: strncatは後ろに終端の'\0'をつけてくれますか?
>>76 回答2:テストプログラムを作り、自分の目で確かめてください
78 :
デフォルトの名無しさん :04/07/15 23:38
それは「たまたまつけてくれた」だけかもしれなじじゃん
>>63 プロセッサによってはdoubleサイズのレジスタしかない場合がある。
その場合にはfloatで指定するとコンパイラがfloat→doubleの変換処理を挿入する。
変換処理の分だけ遅くなっていまうことになる。
上記は一般論ではないが、必ずしも小さい幅だから速いと言うわけではないということ。
速度が重要なら実測するのが確実。
速度がどうでもいいならどっちでもいい。
81 :
デフォルトの名無しさん :04/07/15 23:41
じゃあnに3を指定しても4バイト書いちゃうの?
82 :
デフォルトの名無しさん :04/07/15 23:42
>>63 どっちでもいいんじゃない?
floatのほうが取り回しやすいけど。
83 :
デフォルトの名無しさん :04/07/15 23:42
>>63 性能云々は処理系依存であり
こっちの環境での話が
おまいの環境で通用する保証がない
doubleの精度が必要なければfloat
開口一番にこれが出てこない
これがここの回答者のレベルだ
84 :
デフォルトの名無しさん :04/07/15 23:44
みなさん、realloc()は使ってますか?私、多用していたのですが、 同僚に使うなと言われました。禁じ手だったのですか?
85 :
デフォルトの名無しさん :04/07/15 23:44
> floatのほうが取り回しやすいけど。 なわけねーだろ ぼけ doubleのほうが取り回しが楽。 同様に整数はint使え。
BCC5.5を使っています。 以下のようなエラーが出るのはどうしてでしょうか? Error: 外部シンボル ’WinMain’ が未解決 (C:BORLAND\BCC55\LIB\COW32.OBJが参照) int WINAPI WinMain(){・・・・・・}の部分について、 エラーが出ないプログラムと比較してみたのですが、全く一緒です。
>>83 doubleの精度とfloatの精度が違うという保証はあるの?
89 :
デフォルトの名無しさん :04/07/15 23:45
91 :
デフォルトの名無しさん :04/07/15 23:46
>>87 型floatの値は、型doubleの値の集合の部分集合
>>86 コンパイルオプションとかチェックしてみそ
93 :
デフォルトの名無しさん :04/07/15 23:47
>>85 最近のプロセッサについて勉強しましょう。
94 :
デフォルトの名無しさん :04/07/15 23:47
>>93 最近のプロセッサという条件はいつついたんだ?
96 :
デフォルトの名無しさん :04/07/15 23:48
97 :
デフォルトの名無しさん :04/07/15 23:48
>>95 規格票にはっきり書いてあるぞ
そんくら調べてから来い ぼけ
99 :
デフォルトの名無しさん :04/07/15 23:49
>>98 もう一度言う
そんくらい調べてから来い ぼけ
>>88 板内検索してここが一番いいかと思ったんですけど。
>>92 ありがとうございます。
コンパイルオプションを見てみます。
見えないレスに対してレスがついてる
105 :
デフォルトの名無しさん :04/07/15 23:51
>>102 釣りではない
これはマジレスだ
規格票くらい調べてから聞け
float double 問答なんだけどさ、一度ワーニングレベルを最高にして強制エラーにしてみ float と double を混ぜると、どんなときにどんな自働キャストが行われてハマリが起こるかわかるから そうすりゃ特に事情がなけれぱ double でいいって分るよ。 ハードのサポートが float しかないマシンでプログラムした人間なら デフォルトでない面倒くささは身にしみるんだろうけれど、普通気づきにくいからね。
108 :
デフォルトの名無しさん :04/07/15 23:53
>>107 ほう、俺があんたにどの点で負けたと言う気だ?
109 :
デフォルトの名無しさん :04/07/15 23:53
いいえ。 たまたま規格票が手元にあるから言うけど、 そんなことは書いてないぞ > 型floatの値は、型doubleの値の集合の部分集合
110 :
デフォルトの名無しさん :04/07/15 23:54
>>109 s/型floatの値/型floatの値の集合/
111 :
デフォルトの名無しさん :04/07/15 23:55
やーい「わーにんぐ」 > 一度ワーニングレベルを最高にして
112 :
デフォルトの名無しさん :04/07/15 23:56
> ハードのサポートが float しかないマシンでプログラムした人間なら そんなものはない
113 :
デフォルトの名無しさん :04/07/15 23:57
114 :
デフォルトの名無しさん :04/07/15 23:57
うちの実家では南側にある部屋です > ぼとけの間に
>>112 有るよ、世の中に出回っているマシンでメジャーな奴の中にもな。
116 :
デフォルトの名無しさん :04/07/15 23:59
117 :
デフォルトの名無しさん :04/07/16 00:00
> 有るよ いいえ。ありません。
118 :
デフォルトの名無しさん :04/07/16 00:00
119 :
デフォルトの名無しさん :04/07/16 00:01
115は絶対マシン名を出せないな。 なんか「社外秘だから」とかいってごまかしそー
120 :
デフォルトの名無しさん :04/07/16 00:01
粘着を相手する粘着が巣くうスレだなおい。
定番荒らしにいつまでも乗るなよ。もう少し大人になれお前ら。
123 :
デフォルトの名無しさん :04/07/16 00:02
ないものにソースはない。 あるというやつがソースをしめせぼけ
類は友を呼ぶ
125 :
デフォルトの名無しさん :04/07/16 00:02
>>123 >ソースはない。
ここだけでいいよ、飾りはつけなくてもw
実際は粘着の自作自演な訳だが。
127 :
デフォルトの名無しさん :04/07/16 00:03
ソースをしめせない以上「ない」のだ。
まあな。
129 :
デフォルトの名無しさん :04/07/16 00:03
あるというならソースを示せ ぼけ
130 :
デフォルトの名無しさん :04/07/16 00:03
>>119 プレステ2がそれだよ、PS2-Linux入手してみな
132 :
デフォルトの名無しさん :04/07/16 00:03
>>127 ないという事実を裏付けるソースをお前がないと言った
133 :
デフォルトの名無しさん :04/07/16 00:04
ほら、やっぱり ない。
134 :
デフォルトの名無しさん :04/07/16 00:04
135 :
デフォルトの名無しさん :04/07/16 00:04
プレステ2はdoubleつかえるじゃん。
ちょっと目を放した隙にこのスレらしくなってた
推奨NGワード: double, float, ソース
138 :
デフォルトの名無しさん :04/07/16 00:05
>>135 ねぇよ、ソフトエミュレートだ、エミュライブラリが無いとエラーになる。
140 :
デフォルトの名無しさん :04/07/16 00:06
とっとと示せ、時間が無いから早くしろ。
141 :
デフォルトの名無しさん :04/07/16 00:06
プレステ2もdreamcastもdouble使えるぞ。
142 :
デフォルトの名無しさん :04/07/16 00:07
X boxもな
doubleがエミュレートされてたのは初代PSじゃなかったかね
別にハードで対応してなくても問題無いような気がするが?
145 :
デフォルトの名無しさん :04/07/16 00:07
すくなくともPS2はきれいにdouble使える。
PS2でdoubleは非常に遅いから使うと問題になるよ。
3D描画とかはハードのサポートがないと厳しいな。
話が標準Cから逸れて行く
149 :
デフォルトの名無しさん :04/07/16 00:09
151 :
デフォルトの名無しさん :04/07/16 00:09
154 :
デフォルトの名無しさん :04/07/16 00:10
たとえば、その昔の8086なPCで、8087は高くてつけてなかった(ソケットだけ)なやつは 多かったが、8087にfloatやdoubleを計算させないで、8086で計算するLIBRARYを呼ぶ かどうかを切り替えていたのだが(初期のは8087があったらそっちを呼ぶという仕掛けが かなりいいかげんだったので(存在チェックがたまにしっぱいする)、コンパイルし分けが 主流だったが、そういう環境のPCでも「このハードウェアはdouble使えない」とはいわない。
155 :
デフォルトの名無しさん :04/07/16 00:10
MVP! >112 名前:デフォルトの名無しさん[] 投稿日:04/07/15(木) 23:56 > ハードのサポートが float しかないマシンでプログラムした人間なら > >そんなものはない
158 :
デフォルトの名無しさん :04/07/16 00:12
> PS2でdoubleは非常に遅いから使うと問題になるよ。 実際、自社のゲームで使っている。 速度的に問題もない。
159 :
デフォルトの名無しさん :04/07/16 00:12
>>154 だれも
「このハードウェアはdouble使えない」
などということは問題にしていない。
>>147 3Dでなくてもハードサポートの無い浮動小数点は実用にならないよぉ
161 :
デフォルトの名無しさん :04/07/16 00:13
> 問題にしていない してます。
おめーら、1レスに対して1レスつけずにまとめてレスつけろよ 無駄にスレ流すな。
163 :
デフォルトの名無しさん :04/07/16 00:13
>>157 暴れたわりに収穫ゼロで帰って逝ったなw
165 :
デフォルトの名無しさん :04/07/16 00:14
>>158 マジで?
float<->doubleの変換はすごく遅くなります、
とちゃんと書かれているのに使ってるの?なんで?
167 :
デフォルトの名無しさん :04/07/16 00:16
> 3Dでなくてもハードサポートの無い浮動小数点は実用にならないよぉ そうでもない。 うちでは、1つのソフトの中で、 ハード任せの浮動小数点と ソフトでやる精度は低いが特殊で早い浮動小数点と ある部分で使うとにかく早い固定小数点を 使い分けている。(gameじゃなくて、cadの周辺ソフトだが) 別の部署で造っている会計ソフトでBCDの小数使うやつがあるが、 とても遅い。あれこそハードでやってほしい。
168 :
デフォルトの名無しさん :04/07/16 00:17
> float<->doubleの変換はすごく遅くなります、 なんでfloatに変換なんかするんだ? ぼけ その昔のCで一般的だったフォーマットだったらそこそこdouble<->floatの変換は軽いが、 いまどきIEEE形式がふつうだから精度変換は処理が重いぞ! (ハードでやっても相対的に)
169 :
デフォルトの名無しさん :04/07/16 00:18
そりゃ、固定だったらいいけど。
170 :
デフォルトの名無しさん :04/07/16 00:19
小数のことだったらオレに聴け!
171 :
デフォルトの名無しさん :04/07/16 00:19
172 :
デフォルトの名無しさん :04/07/16 00:19
> その先に渡したいからじゃ なんでその先がfloatなんだ? doubleの先は整数(bitmapディスプレイ)
173 :
デフォルトの名無しさん :04/07/16 00:19
>>168 計算量と処理時間が比例すると思てけつかるなこの坊や (ケケケ
>>168 VU0とか使わないの?もう意味わかんないよ。
175 :
デフォルトの名無しさん :04/07/16 00:20
> 計算量と処理時間が比例すると思てけつかるな こいつ、自分で何言ってるのかわかってなさそー
>>167 ほいじゃ全部FPUに任せてやりなよ、「精度は低いが特殊で早い浮動小数点」より速くていいから。
最近のFPUは整数ユニットより計算能力は高いからね。
自作自演はそろそろやめてくれ。
178 :
デフォルトの名無しさん :04/07/16 00:21
ちなみに某NEC製のミサイルのあたまについてる浮動小数点演算ルーチンは ほとんどおれが書いてる
180 :
デフォルトの名無しさん :04/07/16 00:22
> 「精度は低いが特殊で早い浮動小数点」より速くていいから。 こいつ「早」そうな男だ ;-) (計算速度は「速」い)
181 :
デフォルトの名無しさん :04/07/16 00:23
>>175 通訳すると、何言われたかわからないだな
182 :
デフォルトの名無しさん :04/07/16 00:23
> 残りは俺だけどな だからその分命中率がおちるんだな。
183 :
デフォルトの名無しさん :04/07/16 00:24
>こいつ、自分で何言ってるのかわかってなさそー つーかよ、お前が一番理解してなさそーなのが痛すぎるな
184 :
デフォルトの名無しさん :04/07/16 00:24
目標とすれちがうときに自爆するのだが、 その時間的精度が0.01秒だ。 遅い計算ではまにあわん。
185 :
デフォルトの名無しさん :04/07/16 00:26
こんな連中がプログラム書いてるワケだからなあ 海外に仕事を持っていかれても仕方が無いよな
>>172 bitmapディスプレイでググったら 68K-Mac のしかヒットしないんですけど。
釣りはもうけっこうですんで。
>>184 どっちみち、火薬系の反応速度が、そんなに速くないんじゃないのか?
189 :
デフォルトの名無しさん :04/07/16 00:27
っていうか、海外で仕事してるわけだが。(発注主は日本の会社)
190 :
デフォルトの名無しさん :04/07/16 00:28
> どっちみち、火薬系の反応速度が、そんなに速くないんじゃないのか? もちろん1秒後の相対位置も「予測」するルーチンもはいってるわけ
191 :
デフォルトの名無しさん :04/07/16 00:29
68Kはfloatがオプション扱いだったもんな。 68040くらいから統合されたんだっけ。
192 :
デフォルトの名無しさん :04/07/16 00:29
> bitmapディスプレイでググったら っていうか、なんでそんなもん検索するのよ?
>>180-184 →英語→日本語に自動翻訳してみました。
180 名前:デフォルト無名貢献日:04/07/16 00:22
>それが特別と初期の浮動十進小数点より迅速かもしれないので、「正確さは低い」が。
これ「――既に――"――それはその右を持った人です
;―("速"計算速度あること)
04/07/16 00:23>残りは私です――であるが、181の名前:デフォルト無名貢献日:
それが00:23を解釈する場合、04/07/16>175、
それは理解しません、何の中で、言われた--だな
182名:デフォルト無名貢献日:
したがって、部分打撃の割合は下がります。
183 名前:デフォルト無名貢献デイ:04/07/16 00:24
>それは理解します、何の中で、単独で言ってる、またなさそである―。
[これ、そして]つ(それ、あまり痛くない、大部分を理解します、
また、それはなさそである)
184名:デフォルト無名貢献日:04/07/16、であるが、それ、00:24
目標を見逃す場合、自己突風、時間精度は0.01秒です。
まは遅い計算の中で適しませんでした。
194 :
デフォルトの名無しさん :04/07/16 00:30
> 68Kはfloatがオプション扱いだったもんな。 なわけない。
195 :
デフォルトの名無しさん :04/07/16 00:30
おれに68881のコードかかせたらたぶん日本で1番
196 :
デフォルトの名無しさん :04/07/16 00:31
下手
おれにCのコードかかせたらたぶん家族で1番 すごいだろ
俺なんて家族で3番だよ
200 :
デフォルトの名無しさん :04/07/16 00:32
Intel系のはかくきにならんな。
半角の?と常にメール欄は空、口癖は ぼけ、ぼけの手前には半角で空白を入れてる 2chのC系のスレで毎日他人煽っているキチガイ。
202 :
デフォルトの名無しさん :04/07/16 00:32
> 下手 舞台に向かって右側ですね。
>>197 →英語→日本語
197の名前:デフォルト無名[賢人]貢献日:04/07/16破損00:31
--似ている--Cのコード、あるいはかせた、
多くの家族--1番の異様なだろ--
どっちでもいいっていってんのにどうしてそう盛り上がれるんだお前らは
205 :
デフォルトの名無しさん :04/07/16 00:33
> 口癖は ぼけ 日本語でいうと「ぼぉけぃ」ぐらいの発音?
207 :
デフォルトの名無しさん :04/07/16 00:34
> 2chのC系のスレ って、たとえばどこだろう?
208 :
デフォルトの名無しさん :04/07/16 00:34
209 :
デフォルトの名無しさん :04/07/16 00:34
210 :
デフォルトの名無しさん :04/07/16 00:35
unsigned long long intみたいに、 でっかい浮動小数点数型はないんですか?
>>210 doubleの時点で unsigned long long intよりデカイ数を扱えるよ。
213 :
デフォルトの名無しさん :04/07/16 00:37
unshined wrong wrong doubt
214 :
デフォルトの名無しさん :04/07/16 00:38
>>211 ー は★に頼んで来い
〜 は自分でやれ
>>211 まあ、いちいち反応する厨が居る限りこの状況は続くんだよな。
217 :
デフォルトの名無しさん :04/07/16 00:39
Single a; // シングル Double a; // ダブル Short a; // ショート Tall a; // トール Grande a; // グランデ Extra foam a; // フォームたっぷり
218 :
デフォルトの名無しさん :04/07/16 00:39
219 :
デフォルトの名無しさん :04/07/16 00:39
221 :
デフォルトの名無しさん :04/07/16 00:41
で、コードサイズが小さくなるのはどっちなんだよ。
224 :
デフォルトの名無しさん :04/07/16 00:42
> そろばんエミュレータ作ればいい うちに江戸時代のそろばんがあるんだけど、 玉が8つずつのやつ。 上の1つが8の玉で、下の7つで合計、1桁0〜fまで。 桁数の多くなる掛け算も、ふつうのそろばんより少ない桁でできて便利。
16bit、または8bitの浮動少数点数作るとしたら 符号部、指数部、仮数部はどんな割りあいがよいだろうか?
226 :
デフォルトの名無しさん :04/07/16 00:42
> 引用 空行 一行レス
229 :
デフォルトの名無しさん :04/07/16 00:44
> 一行レス 2行だったとしても 「1行れす!」 「わたしのなまえは山田れす!」
230 :
デフォルトの名無しさん :04/07/16 00:45
> 符号部、指数部、仮数部はどんな割りあいがよいだろうか? 符号「部」ってなんだよ「部」って。 符号に3bitとか使うフォーマットあったりするのか?
231 :
デフォルトの名無しさん :04/07/16 00:45
>>223 データサイズはdouble以下だろう。
232 :
デフォルトの名無しさん :04/07/16 00:45
ぼけくんはきっと寂しがりやなんだね。おーよちよち。
234 :
デフォルトの名無しさん :04/07/16 00:46
>>230 正でも負でもない値であることを表すことができるんだろ、きっとw
235 :
デフォルトの名無しさん :04/07/16 00:46
double double a; とかできないのかなあ。 fortranは「4倍精度」ふつうなのに。
236 :
デフォルトの名無しさん :04/07/16 00:47
>>232 じゃあお前が模範解答してみせてくれよ。ばーか
238 :
デフォルトの名無しさん :04/07/16 00:47
long double使え
239 :
デフォルトの名無しさん :04/07/16 00:47
240 :
デフォルトの名無しさん :04/07/16 00:48
うちのコンパイラーは、long doubleは使えることは使えるんだけど、 doubleと同じ精度だ OTL
241 :
デフォルトの名無しさん :04/07/16 00:48
242 :
デフォルトの名無しさん :04/07/16 00:49
long long doubleとかないかなあ。 中途半端なところでtripleとかでもいいぞ
Delphiでは実数を扱うのにRealを使う。 そしてRealは実際はDoubleである。 ゆえにdouble使えよぼけ。
244 :
デフォルトの名無しさん :04/07/16 00:49
> fortran使えば もうこの世から消滅したので使えません。
245 :
デフォルトの名無しさん :04/07/16 00:49
>>242 long long long long long long long long long long long long long long long long long long long double
246 :
デフォルトの名無しさん :04/07/16 00:49
> Delphiでは実数を扱うのにRealを使う。 ださ...
247 :
デフォルトの名無しさん :04/07/16 00:50
249 :
デフォルトの名無しさん :04/07/16 00:52
> Delphiでは ださ...
250 :
デフォルトの名無しさん :04/07/16 00:54
> DISCONしたのか 10 CONTINUE
251 :
デフォルトの名無しさん :04/07/16 01:02
あびゃびゃ > long long long long long long long long long long long long long long long long long long long double やってらんねぇ
NGExでどうにか消えた。目出度い
254 :
デフォルトの名無しさん :04/07/16 01:52
やけにスレがのびているな
256 :
デフォルトの名無しさん :04/07/16 02:59
>>55 がコンパイルに通りますた。実行しちゃって平気なのかな?
typedefの使いどころが解らない。 解説よろ。
PS2はIEEE準拠していない。HWサポートはfloatのみ。
>>256 unixと表示されるだけ。
>>257 いちいちstructと書きたくない場合。
それ以外には使うな。
259 :
デフォルトの名無しさん :04/07/16 03:55
>>257 なるべく環境に依存しないようにしたい時。
なんであかんの? char str[80],*p,*st = "kisimoto"; char *mystrcpy(char *,char *); int main() { p = mystrcpy(str,st); puts(p); return 0; } char *mystrcpy(char *s,char *s2) { while(*s2)*s++ = *s2++; return s; }
sを返してるから。
何を返せばうまくいきますかね?
++する前のs
ああそうか、もう最後まで行っちゃってるんですね。 これって最初に戻すいい方法ありますか?
これでうまくいきましたがなんかショボイですね。 char *mystrcpy(char *s,char *s2) { int num = strlen(s2); while(*s2)*s++ = *s2++; for(;num>0;num--)s--; return s; }
これがいいみたいですね。ありがとうございました。 char *mystrcpy(char *s,char *s2) { char *s3 = s; while(*s2)*s++ = *s2++; ;return s3; }
>>260 こう定義されてることが前提
#define unix 1
その他ヒント
a[i] == *(a + i) == *(i + a) == i[a]
"abce"[1] == 'b'
'a' = 0x61, 'a' + 1 = 'b'
269 :
デフォルトの名無しさん :04/07/16 06:38
公差2の等差数列の第k項までの和を出力するプログラムで func1(int k){ int i,j; j=0; if(k<=0) printf("計算できません"); else{ for(i=2; i<=2k; i=i+2){ j=j+i; } return(j); } printf("第%d項までの和は%d",k,j); } とやってコンパイルすると、 エラー E2378 basic2_2.c 17: For文に ; がない(関数 func1 ) エラー E2379 basic2_2.c 17: ステートメントにセミコロン(;)がない(関数 func1 ) とでます。意味がわかりません。教えてください。
2k
271 :
デフォルトの名無しさん :04/07/16 06:40
ああ 2*kですね_| ̄|○ すいません、ありがとうございmす
272 :
デフォルトの名無しさん :04/07/16 08:32
> とでます。意味がわかりません。教えてください。 空白あいてないからいけない。 正しくはこう。 main() { if (k <= 0) printf("計算できません\n"); else printf("第%d項までの和は%d\n", k, func1(k)); } int func1(int k) { int i, j; if (k <= 0) return 0; else { j = 0; for (i = 2; i <= k * 2; i += 2) j += i; return j; } }
>>267 forを使うと短く収まる
だからどうしたといわれるとどうもしないのだが。
char *mystrcpy(char *s,char *s2) { for(char *s3=s; *s2; *s3++ = *s2++); return s; }
274 :
デフォルトの名無しさん :04/07/16 09:26
void sound(unsigned frequency)を使ってピープ音で音楽を作りたいのですが、 数値の音階が分からないので作れないんです; 検索もしたんですが、それ関係が書いてあるページが見つからなくて困ってます。 どなたか教えていただけませんでしょうか? よろしくお願いいたします。
周波数 音階でググったらすぐ出てきたぞ。 平均率ならexcelに計算させると簡単。
276 :
デフォルトの名無しさん :04/07/16 10:06
>>272 ありがとうございます、いいプログラム書けるようにがんばります。
もうひとつ初歩的な質問ですが、平方根をとる関数 sqrt の宣言は int でも doubleでもよいのでしょうか?
つまり
int sqrt( int ) も double sqrt( double)
もOKなのかと。
Cで他プロセス(ゲームなど)の特定メモリアドレスの内容を読み取って編集するような プログラムを書いてみたいのですが、どうすればいいのでしょうか?いろいろググってみたのですが、 ページングとかよけいなものばかりひっかかってしまうのでおしえてください
278 :
デフォルトの名無しさん :04/07/16 10:16
>>272 追加でもうひとつ
>>272 にある
else
printf("第%d項までの和は%d\n", k, func1(k));
でいきなりfunc1が出てきますが、その前にfunc1を書かなくてもよいのでしょうか?
else
func1(k);
printf("第%d項までの和は%d\n", k, func1(k));
のように。
実行結果はかわらないのは確かめましたが、書かないほうが負担が少ないということでいいのでしょうか?
279 :
デフォルトの名無しさん :04/07/16 10:18
>>278 それどころか別のファイルに書いてもいい。
だがどちらにしろプロトタイプ宣言はすべきだ。
280 :
デフォルトの名無しさん :04/07/16 10:22
しかし、C99ってスゲーな Cに出来てC++に出来ないことがあると なんかムカツク
>>267 きみの mystrcpyには最後に '\0' がつかないがいいのか?
で、そのまま s を帰すんなら strcpy でいいんじゃねのか?
>>282 do{}whileの方を使えば簡単だね。
>>277 環境依存。メモリ管理が甘いOSならどこでも自由にアクセスできるし、
Win32ならReadProcessMemoryVlmとかあたり。
285 :
デフォルトの名無しさん :04/07/16 11:10
ポインタを使って変数aに100を、変数bに50をキーボードから入力後、 a+bの値をポインタによって求めて表示するプログラムを作成せよ。 ビギナーです。
>>282 そういわれればヌル入れてませんね。いれなくてもちゃんと表示されたんで
忘れてました。なんでヌルなしでできたんだろう・・・
それからこれは自作のstrcpyを作るのが目的だったンどす。
>>285 int a, b, c;
int *pa, *pb;
pa = &a; pb= &b;
scanf("%d %d",pa, pb);
c = *pa + *pb;
printf("a+b= %d", c);
>>284 あ、APIを使うのか。
分かりました。ありがとうございます
>>277 ソースに(Cで)知りたいアドレス(変数等)を表示する関数を追加する。
後はデバッグ中にその関数を呼び出す。如何?
290 :
デフォルトの名無しさん :04/07/16 16:16
char buf[10][12] = { "鈴木一郎:46", "田中一郎:33", "佐藤一郎:21" }; printf("%s\n",buf[1]); printf("%s\n",&buf[1]); ↑ どうしてこの二つが同じ結果になるのですか?
コマンドラインでmkdirでディレクトリ作成できるけど、 Cプログラム上では、どうやればいいの? 環境はredhat9 検索かけたけど、うまく見つからないよ
>>290 そうなっているからとしか言えない。
配列は式の中ではポインタに変換されるけど、明示的にアドレス演算子をつけてもいいことになっている。
295 :
デフォルトの名無しさん :04/07/16 19:54
buf[1] で配列bufの二番目のアドレスを表し、それに&をつけた &buf[1] もやっぱり配列bufの二番目のアドレスを表す、と こんなかんじですけーね?
buf[1] -> &buf[1][0] &buf[1] -> buf[1]のアドレス
おみゃ〜らよ、おみゃ〜らさーん♪
おりはよ、「Slim de Can」を使ってあるボタンをクリックしたらある処理を行わせ、別のボタンをクリッしたら別の処理をおこなわせるプログラムの作成についに成功したよ。
つまり「Slim de Can」はすでにイブントドリブンプログラムがつくれる環境になっているということを自ら証明したという次第よ。
おい、「Slim de Can」はすでに簡単なゲームくらいはころっとつくれるぞ。誰かつくらんか?
「Slim de Can」ってすげ〜な〜。
おりはもう神だね♪どうよ?
http://hp.vector.co.jp/authors/VA015412/
レスありがとうです 何となく分かった気がします!
300 :
デフォルトの名無しさん :04/07/16 21:47
配列の配列だからbuf[x][0]のアドレスとbuf[x]のアドレスは同じになるということだよな。
>>300 何を言っている?
char buf[256];
(buf == &buf)だぞ。
キモい仕様だよな。
何でエラーにしてくれなかったんだ。
302 :
デフォルトの名無しさん :04/07/16 23:45
キモいついでに(?) char buf[6][16]; の時、 buf[1] = 12FE00 buf[1]+1 = 12FE01 &buf[1]+1 = 12FE10 でした。 296さんの説明を見て、なるほどな。 と思いましたです。
296さんが間違いっていう訳じゃないんですが、 297さんの buf[1] -> &buf[1][0] &buf[1] -> buf[1]のアドレス の説明を見て・・・でした。スイマセン・・・汗;
305 :
デフォルトの名無しさん :04/07/17 00:07
値さえ同じなら型はどうでもええちゅー香具師らはBでも使ってろ
306 :
デフォルトの名無しさん :04/07/17 00:16
307 :
デフォルトの名無しさん :04/07/17 00:20
>>306 おまえ本当にちょっと精神科で診てもらえ
308 :
デフォルトの名無しさん :04/07/17 00:22
309 :
デフォルトの名無しさん :04/07/17 00:23
>>307 おまえ本当に精神科に入院したほうがいいぞ
ぬっ転ばす
312 :
デフォルトの名無しさん :04/07/17 00:26
クリストファー・コロンバス
クリ………をぶちころがす。
>>313 あぁっ、らめっ!そんなに激しくされたあ 尻穴ちんぽ逝っちゃううふうふぁsづうううう!!!
バカ!バカ!まんこ!!
char a[1]; a = &a マジで何でこんな仕様になってんの? &要らないじゃんか。
316 :
デフォルトの名無しさん :04/07/17 01:38
>>315 いるよ。アドレスは同じでも型は違うから。
317 :
デフォルトの名無しさん :04/07/17 01:46
int a=6582087; printf("%s",&a);
319 :
デフォルトの名無しさん :04/07/17 02:35
効率を削減してどうするよ
>>319 まずはその腐ったJavaScriptをやめろ。リンク反応せずに帰る奴が続出するぞ。
322 :
デフォルトの名無しさん :04/07/17 08:04
|| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|| || ○荒らしは放置が一番キライ。荒らしは常に誰かの反応を待っています。 || ○重複スレには誘導リンクを貼って放置。ウザイと思ったらそのまま放置。 || ○放置された荒らしは煽りや自作自演であなたのレスを誘います。 || ノセられてレスしたらその時点であなたの負け。 || ○反撃は荒らしの滋養にして栄養であり最も喜ぶことです。荒らしにエサを || 与えないで下さい。 Λ_Λ || ○枯死するまで孤独に暴れさせておいて \ (゚ー゚*) キホン。 || ゴミが溜まったら削除が一番です。 ⊂⊂ | ||___ ∧ ∧__∧ ∧__ ∧ ∧_ | ̄ ̄ ̄ ̄| ( ∧ ∧__ ( ∧ ∧__( ∧ ∧  ̄ ̄ ̄ 〜(_( ∧ ∧_ ( ∧ ∧_ ( ∧ ∧ は〜い、先生。 〜(_( ,,)〜(_( ,,)〜(_( ,,) 〜(___ノ 〜(___ノ 〜(___ノ
323 :
質問です… :04/07/17 08:21
プログラムを作ったときの拡張子*.cと*.cppの違いって何でしょうか? 教えてください。お願いします。
Cでコンパイルするか、C++でコンパイルするか
テキストファイルを読み込んで、 例えば「そのファイルの3行目だけを出力する」のって、 どうすればいいか、教えてください。
326 :
デフォルトの名無しさん :04/07/17 09:43
ageます。
>>325 テキストファイルを読み込んで3行目だけ出力すればOK
>>325 一個、二個、三個と数えていって3個目で出力。
レスどうもです。 もうちょっと具体的に質問できる状態になってから、 また来ます。
int a[10]; 1: a 2: &a 3: &a[0] 4: (&a)[0] 5: &(a[0]) この五つの違いについて解りやすく 解説できる方はいらっしゃいますか? 示す値は全部同じですよね。
>>325 int i;
char buf[65536];
FILE*fp;
for(i=0; fgets(buf,sizeof(buf),fp); i++)
{
if(i==3)fputs(buf,stdout);
}
333 :
デフォルトの名無しさん :04/07/17 10:36
微笑ましい初心者のプログラムを添削するスレはここですか?
みんな生まれて初めてプログラム組んだ日には、この手の間違いをしたよね? 二日目以降はさすがにやらないけどw
>>330 型の違いを考えれば難しくないはず、、、だったらいいな.
以下は今適当に書いたものだから、あまり正しくない可能性あり。すまそ。
1: aの値は最初の要素へのポインタとなり型はpointer to int。
aの型はarray 10 of int。
2: &aは配列aへのポインタとなって型はpointer to array 10 of int。
3: a[0]は配列aの最初の要素だから&a[0]は配列の最初の要素を指すポインタで
aと書くのと値は等しい。ただし、aとは異なり&a[0]の型はpointer to int。
4: &aは2で書いた通り。(&a)[0]は&aの指す先の配列となるためaと等しい。
5: 冗長な括弧があるだけで3と同じ。
はい、間違い
340 :
デフォルトの名無しさん :04/07/17 11:12
自分が惨めになるだからやめとけって
>>330 濃い質問だね、ポイントは
int a;
double b ;
b = a ;
で int から double に自動的にキャストされるのと同じで
int a[10] ;
int * b ;
b = a ;
とすると int [10] から int * にキャストされることに注意。
この微妙な違いを知りたかったら、sizeof( 各種ポインタ ) としてみるといいですよ。
sizeof(a)=40
sizeof(&a)=40
sizeof(&a[0])=4
sizeof((&a)[0])=40
sizeof(&(a[0]))=4
どれが配列型で、どれがポインタ型がこれで一目瞭然です。
344 :
デフォルトの名無しさん :04/07/17 11:46
あげ
345 :
デフォルトの名無しさん :04/07/17 11:52
>>342 ネタにマジレスのマジレスのアフォw
ちなみに俺は331じゃないぞ。
346 :
デフォルトの名無しさん :04/07/17 11:59
sageている奴は自作自演?
347 :
デフォルトの名無しさん :04/07/17 12:24
int a[8]={0,1,2,3}; a と &a が同じなら、 a[2] も (&a)[2] も 同じように 2 になるんだよね?
348 :
デフォルトの名無しさん :04/07/17 13:27
>>330 型が違う
1: int *
2: int (*)[10]
3: int *
4: int [10]
5: int *
>>343 代入のためにキャストされているんじゃなくて、式中の配列は
先頭要素のポインタを示すからじゃないっけ。
sizeof演算子での配列は、その例外で配列そのもののサイズが
得られるけど。
>>347 なりますん
>>348 4: int [10] -> int * じゃないの?
自作自演だっていいじゃない 人間だもの
ネタだったことにすれば少しでも気が楽なんだろうよ・・・察してやれよ。
354 :
デフォルトの名無しさん :04/07/17 13:55
>>348 じゃあやっぱり
(&a)[0]
は、配列の最初の要素を指すよね?
>>345 恥の上塗りの上塗りの上塗りのアフォw
ちなみに俺は332じゃないぞ。
>>348 >代入のためにキャストされているんじゃなくて、式中の配列は
>先頭要素のポインタを示すからじゃないっけ。
そうですね、確かに。
>sizeof演算子での配列は、その例外で配列そのもののサイズが
sizeof(式) | sizeof(型)
じゃなかったっけ、といいつつちょっと心配になってきた
sizeof(式) | sizeof(型) | sizeof(配列?)
なのかな、ちょっと確認しておいたほうが安全かな・・・
358 :
デフォルトの名無しさん :04/07/17 15:55
>>348 例外じゃねえよ
左辺値のときは &[0] がつかねえ原則に従ってるだけだ
>>357 sizeof(配列?)なんて構文はねえよ
sizeof a は sizeof 式 なだけだ
>>358 Cは左辺値も右辺値も区別はないよ、全部式です。
361 :
デフォルトの名無しさん :04/07/17 15:58
例外と言えば sizeof &a がおかしな値になることくらいか
switchもしくはelse ifで 文字列を条件にする方法を教えてください
>>362 switch はムリ(実は独自拡張で通るコンパイラとかあんるですがね)
if 文中なら strcmp 等を調べよう。
文字列テーブルを用意しておいて case (gettablenum(str)): というのは出来るのかな?
>>361 配列ののポインタはCの型として未保障と聞いたことがある(未確認)
borland Cコンパイラ使ってるんですが、 自作関数をmain()の前に記述しないとエラーが出るのは何ででしょうか? どこに書いてもいいはずですよね?
>>367 プロトタイプ宣言を先に書いてる な ら ば どこに書いてもいいよ
>>367 ワーニングをエラーにするオプションが入っているか、C++としてコンパイルされているんだと思う。
今後のことも考えてプロトタイプをmainの前に宣言しておくのが吉。
void hoge( int a ) ; // これを書く
void main()
{
hoge( a ) ;
}
void hoge( int a )
{
...
}
日本の夏、void mainの夏
心当たりがありました。 ありがとうございます。
ああっ、最近C#ばっかりやってたら、すっかり忘れていた・・・void main()
エラーとヲーニンの区別が付かないヤツウザイ。
374 :
デフォルトの名無しさん :04/07/17 17:24
質問です。 4:宣言の構文エラーがですんですが、 4行目をみると、 int main(void) って書いてあります。 どういうエラーなのか分かりません。 どうやったらこのエラーを消せるのでしょうか? 教えてください。
>>374 もっと詳しく説明してもらえれば答えられるかもしれない・・・
376 :
デフォルトの名無しさん :04/07/17 17:31
自分で書いたのはこんな感じです。 #include<stdio.h> int GCD( int x, int y) int main(void) { int a, b, m; printf("ユークリッドの互除法により最大公約数の計算をします。\n"); printf("一つ目の値を入力してください。---\n"); scanf("%d", &a); printf("二つ目の値を入力してください。---\n"); scanf("%d",&b); if(a==b){ m = a; } else if(a>b){ m = GCD( a, b); } else{ m = GCD( b, a); } printf("最大公約数は、%dです。\n", m); } ・・・続く
>>376 int GCD( int x, int y)
この行にセミコロン ';' が抜けています。
>>376 >int GCD( int x, int y)
セミコロンつけろ
>>376 2行目の
int GCD( int x, int y)
の後ろにセミコロン;
380 :
デフォルトの名無しさん :04/07/17 17:35
const char *buf = "hogehoge\r\n"; char *p = strstr(buf, "\r\n"); printf("%d\n", p - buf); で 8 と出力されるのは規格で保障されてましたっけ?
382 :
デフォルトの名無しさん :04/07/17 17:48
This is a pen. He has little money. I am ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... このような英文が english.txtというファイルに存在する場合、 XとYの値を入力したときにX行目のY番目の単語を 表示するC++プログラムは何ですか。 また、この英文中でよく使われている単語ベスト5と その回数を表示するC++プログラムは何ですか。
385 :
デフォルトの名無しさん :04/07/17 17:57
>383 どうも。なんか、妙に自信がなかったもので…
>>387 答えたおれも自信ない(藁
まぁ、これが動かなかったら、この世の殆どのライブラリーがアウトな事は間違いないけど。
>>381 同じ型のポインタ同士の引き算なら問題ない。
結果は要素数の差になるようになっているはず。
390 :
デフォルトの名無しさん :04/07/17 18:29
>>389 同じ配列上の要素を指すポインタ同士なら問題ない。
同じ型では不十分。
392 :
デフォルトの名無しさん :04/07/17 18:58
ファイル読み込みでfgetsを使ってるんですが、ほかに使い勝手のいいものはありますか?
@hoge = <FILE>;
fread
>>392 stdio.h 等を開いて中にある関数でそれっぽいものを片っ端から man で調べるべし。
397 :
デフォルトの名無しさん :04/07/17 19:25
普段ヘッダって読むか?
399 :
デフォルトの名無しさん :04/07/17 19:30
400イラネ
初心者は読んでも理解するのは難しいだろう。 他ファイルのインクルードや条件コンパイルの嵐だったりするし。
>>402 昔は機能別リファレンスやクイックリファレンスの類が沢山あったけど
最近、とりわけオープンソースが流行り始めてから、「なんでもかんでもソース嫁」の風潮が出てきて
良い書籍が全滅してるから良い方法がないんだよ。
404 :
デフォルトの名無しさん :04/07/17 19:40
>>402 紙に印刷して赤ペンでチェックすると
今までモニタだけで味わってた絶望感は
何だったのかという、すごいショックを味わえる
要は本腰入れりゃちょろいものを
それをしないことの結果が無慈悲な差となっていた
それだけのことだよ
>>404 つか、プリプロセッサの出力を整形しろ。
>>358 C99の6.3.2.1の3を訳すとこう書いてあるよ
sizeof演算子や単項&演算子のオペランド、配列初期化のための
文字列リテラルである場合を除いて「〜型の配列」という型を持つ式は
「〜型のポインタ」という型を持つ式に変換される。そのポインタは
配列の先頭オブジェクトを指し、得られた式は左辺値ではない。
配列がレジスタ記憶クラスを持つ場合、未定義の動作となる。
407 :
デフォルトの名無しさん :04/07/17 22:01
>>406 a = 0;
これがエラーになる理由は調べたか?
408 :
デフォルトの名無しさん :04/07/17 22:08
保守(-o-)
すいません ESCキーで終了させるようなプログラムを書きたいのですが どのように書けばいいのでしょうか?
410 :
デフォルトの名無しさん :04/07/17 22:24
>>409 #include <stdlib.h>
#include <signal.h>
void f(int n);
{
exit(0);
}
int main()
{
signal(SIGESC,f);
while(1);
}
411 :
デフォルトの名無しさん :04/07/17 22:24
>>409 printf(" %02x", hoge() );
こーゆーのやってみたか?
hoge に get〜 みたいな関数あてはめて
>>407 >得られた式は左辺値ではない。
の部分でいいんだよね?
>>358 にあるように左辺値のときは変換されないじゃなくて、
変換されたときは左辺値じゃなくなるという方が正確だと思う。
int kazu=0; if(int i=1;i<10;i++){ kazu++; } ならkazuの値は1,2,3,4,5,6,7,8,9という順に変わっていきますが、 これを1,9,2,8,3,7,4,6,5という順に値を変えていくにはどうしたらいいですか?
414 :
デフォルトの名無しさん :04/07/17 22:48
↑ifじゃなかった、for文です。
416 :
デフォルトの名無しさん :04/07/17 22:53
>>412 >左辺値のときは変換されないじゃなくて、
じゃ、左辺値のときに&[0]がつく例でも示したらどうだ?
>>413 for(int i=1;i<10;i++){
data[kazu]=ごにょごにょ・・・
}
という風にしたいので、[]の中に入る数字が
>>413 で示した順番で変わるのなら何でも構いません。
ちなみに最大幅が9と決まってるわけでは無いのであらかじめ配列に数字を用意しておく手は使えません。
>>416 素で言っているのかなあ。
変換される(&[0]がつく)なら左辺値じゃなくなるって言っているんだから、
左辺値でありながら変換されている状態が存在しないって言っているのに
何で存在を示させようとしてるの?
変換されない根拠を「左辺値だから」と言っている
>>358 は
因果関係理解してないよね?とずっと言っているのだけど
あなたも理解していないですか。そうですか。
420 :
デフォルトの名無しさん :04/07/17 23:05
>>419 規格に書いてあるのは結論だけなんだよ
そこに至る過程を知らない香具師にいくら説明しても
意味ねーって逃げるだけでつまらんから言わないのさ
>>417 #include<stdio.h>
#define N 10
int main(){
int i, kazu=N;
for(i=1; i<N; i++){
kazu=(i%2==0)? kazu+N-i: kazu-N+i;
printf("%d\n", kazu);
}
return 0;
}
>>406 その文書に BNF とか yacc lex 文法での定義が付いてない?
想像だけれど、訳された部分は厳密な定義の部分じゃなくて解説部分だと思うんで
その部分がもしあれば、ここに書き込んでもらえると謎の例外現象もはっきりすると思う。
式としての評価
sizeof の右側での評価
関数に渡すときの評価
typedef されたときの評価
キャストするときの(hogehoge)の評価
この辺りの取り扱いが微妙な可能性があるのではとは思ってるんですが・・・
すみません、教えてください。 CSVファイルなどで、 県名,市町村名,人口 という項目を持ったファイルがあるとします。 このファイルから県別の人口を出したいときに、 C言語では一般にどのようなコーディングを、 されるのでしょうか? 私はCOBOLなどでよく使うコントロールブレイク処理を、 コーディングいたしますが、C言語的にはおかしいのでしょうか?
425 :
デフォルトの名無しさん :04/07/18 00:07
426 :
デフォルトの名無しさん :04/07/18 00:07
>>424 「一般に」の定義がものすごくあいまい
まず fscanf でも検討してみて、マズいのがあれば
どうなってればいいのかはっきりさせて
そういう関数を作ればいい
~~~~~~~
↑
ぐたぐた書いたが言いたいことはこの1点のみ
COBOL屋ならローカル変数が第1ハードル
>>424 参考までにですが、自分の好みだと・・・
char data[] = "abc,def,ghi" ;
というのがあったら
頭から ',' を探していって、その場所のポインタをどこかに保存して
そこに 0 をいれて、また次を探して、以下同様。
データへのアクセスは、保存しておいたポインタの文字列って感じかな。
この種の処理はCOBOLの方が圧倒的に楽そうですね。
適当なDBにでも食わせて、SQL叩いた方がよくないかね?
429 :
デフォルトの名無しさん :04/07/18 00:15
そういうことに関しては Perl>>>>>>>>>COBOL>>>>>>>>>(越えられない壁)>>>>>C
>>425 >>428 参考にさせていただき、
今回のプログラムではコントロールブレイクで、
コーディングしようと思います。
>>426 >>427 すみません、私の説明不足でした。
いわゆる小計を出したいのです。
>>429 C言語のソースは本当に簡潔できれいですね。
そこにコントロールブレイク処理を書くと、
違和感がありましたので、質問させていただきました。
みまさま、ありがとうございました
431 :
デフォルトの名無しさん :04/07/18 00:37
>>430 前回のキーと今回のキーが
違ったら抜けろ
同じである間つづけろ
基本は同じだよ?
432 :
デフォルトの名無しさん :04/07/18 00:38
こんとろーるぶれーくって何? 和製英語ってやつ?
コントロールブレイク処理ってなにか知らないけど… 「都道府県」なら全部で47しかないから、都道府県名から0〜46の値を返す 関数をつくって、int count[47] に加算していくだけでは。 だけどもし「市町村」でも同じようなことをしたい場合同じやりかたでは おばかさんなので、ハッシュをつくるですよ。 ハッシュについてはデータ構造の本に載ってます。
434 :
デフォルトの名無しさん :04/07/18 00:44
435 :
デフォルトの名無しさん :04/07/18 02:08
>>331 そんなことしなくても、
fgets(buf, sizeof(buf), fp);
fgets(buf, sizeof(buf), fp);
fgets(buf, sizeof(buf), fp);
fputs(buf, stdout);
と4行書けばすむ
436 :
デフォルトの名無しさん :04/07/18 02:14
>>382 tr -cs a-zA-Z < english.txt | sort | uniq -c | sort -nr | head -5
試験によくでる熟語だ。
(sortを2回使うのがコツ)
>>436 なんか間違ってるし、大体それはC++じゃないな。
system()使えってか?
>>420 左辺値の配列が右辺値のポインタに変換されることを例外とするか、
sizeofのオペランドで左辺値のまま変換されないことを例外とするかの
視点の違いかな。そもそもは。
変換されるのが普通だけどsizeofは特別って説明したほうが
俺は好きってだけの話で。
>>423 付録のlexical grammarに文法があるけど、その意味については
訳したような文章でしか定義されていないぽ。
JISCでJIS X 3010を検索して見てもらえばわかるかと。
http://www.jisc.go.jp/index.html
439 :
デフォルトの名無しさん :04/07/18 04:35
構造体を定義するとき、 struct hoge { ... }; と書くのと typedef struct { ... } hoge; では何が違うんでしょうか。
使うときにstruct hogeで使うか、hogeで使うかだね
定義される領域が違う typedef struct hoge{...}hoge; みたいに同じ名前でもかぶらない
struct {...} fuga; struct fuga {...} fuga; は先の3つとは違うから注意
445 :
デフォルトの名無しさん :04/07/18 12:11
gcc/linux で使える、メモリ管理上のバグを検出するツール を探しています。今組んでいるプログラムで、何も効果がな いはずのコード(同じ初期化処理を何度も繰り返すコード等) を挿入すると、結果が変わるというバグが取れなくて困って います。一応ネット上で調べて、memwatchというのを使って チェックしてみたところ、メモリリークは検出できて、debugし たのですが、最初の問題は解決しません。memwatchの開 発者も、全ての問題が検出出来るわけでは無いと書いてい ます。どなたか、この種の問題をdebugするのに良いツール をご存知でしたら、お教えください。 (ちなみに、最適化オプションによって現象が出たり出なかっ たりします。debugモードでコンパイルすると出なくなるので、 gdbでトレースすることもできそうにありません。)
447 :
デフォルトの名無しさん :04/07/18 12:17
> なんか間違ってるし、大体それはC++じゃないな。 こいつぼけ
>>445 ツールは知らないけれど、バグの症状からして初期化していない自働変数を使ったとか
自働変数へのポインタを関数から返したとか、scanf等で型の違う引数を渡したとか
その種のバグっぽい気がする
449 :
デフォルトの名無しさん :04/07/18 12:46
>>448 どうもです。コンパイル時、ワーニングレベルを最高にして、
"自動変数が初期化せずに使われる可能性"のメッセージ
が出る個所は全て直しました。自動変数へのポインタを
関数から返したというのは、スコープの外で参照したという
ようなことですよね。その辺が怪しいと思います。何度か
見直したんですが、まだ見落としがあるのかもしれません。
チェックするツールがあると良いのですが。
すみません。私のイメージしているコントロールブレイク処理とは、 長崎 佐世保 30 長崎 佐世保 50 埼玉 大宮 30 埼玉 川口 10 このようなソート済みファイルから、県別、市別の小計を出そうとすると void main(void){ int flg,jinko,sumken,sumsi; char ken[32],preken[32],si[32],presi[32]; if (scanf("%s %s %d",ken,si,&jinko)==EOF) flg=1; else flg=0; while (flg!=1) { sumken = 0; strcpy(preken,ken); while (flg!=1 && strcmp(ken,preken)==0) { sumsi = 0; strcpy(presi,si); while (flg!=1 && strcmp(si,presi)==0 && strcmp(ken,preken)==0) { sumsi += jinko; sumken += jinko; if (scanf("%s %s %d",ken,si,&jinko)==EOF) { flg=1; } } printf("市合計 %s,%d\n",presi, sumsi); } printf("県合計 %s,%d\n",preken, sumken); } } このようなコーディングになるというものです。 小さいグループの小計を出そうすると、多重ループが深くなるというものです。 みなさんのイメージしたものと、同じでしょうか?
>>433 さん
参考になります。
小計するグループ数が少ないときには、
このようにコーディングしたいと思います。
ありがとうございました。
だから放置しないとまた来ちゃうって・・・
454 :
デフォルトの名無しさん :04/07/18 13:25
>>450 そういうテキスト処理はCでやるよりawkやperlを使うのが楽。なんでSQLで全部
やっちゃわないのか知れないけど。
ちなみにawkならこんな感じ。Cよりperlとかawkとかrubyとかそういうスクリプト
お勉強した方がイイ。
$1 != prevKen {
printShi(); printKen();
}
$1 == prevKen && $2 != prevShi {
printShi();
}
{ prevKen = $1; prevShi = $2; sumShi += $3; sumKen += $3; }
END { printShi(); printKen(); }
func printKen() {
if (prevKen) {
printf("県合計 %s %d\n", prevKen, sumKen);
}
sumKen = 0;
}
func printShi() {
if (prevShi) {
printf("市合計 %s= %d\n", prevShi, sumShi);
}
sumShi = 0;
}
>>410 ,411さんありがとうございます
でもどうもわからないです
#include <stdio.h>
main()
{
int c;
while((c = getchar()) !=EOF)
printf("%c",c);
}
これをESCキーで終了させたいのですが
良ければ教えてくれないでしょうか?
458 :
デフォルトの名無しさん :04/07/18 16:06
>>456 その辺りは環境依存。
NT系のウィンドウズなら、
キーボードからの入力をstdioで扱うと、
DOSKEY による入力バッファの編集・履歴呼び出し機能が使われる。
そうすると、その場合の ESC キーの役割は
入力行の破棄・キャンセルとなっている。
つまり(ry
459 :
デフォルトの名無しさん :04/07/18 17:32
ネットに落ちてた万年カレンダーを参考にif文でグレゴリウス暦でなかった場合と 10000年を超える場合は再入力を求めるプログラムを作ったんですが これで一度条件分岐してしまうとたとえも一度条件に合ってなくても先に進んでしまいます。 条件が合うまで何度もif文を参照させるにはどうしたらいいんでしょうか? プログラムの1部です。 scanf("%d",&year); if (year<1582) { printf("1582年以前は太陰暦です。\n"); printf("1582年以降で入力してください\n"); printf("西暦を4桁で入力してください。−> "); scanf("%d",&y);} if (year>9999) { printf("10000年以上は計算できません\n"); printf("9999までの数値で入力してください\n"); printf("西暦を4桁で入力してください。−> "); scanf("%d",&y);} printf("何月ですか? --> ");
for(;;){ scanf("%d", &year); if(year<1582){ ... } else if(year>9999){ ... } else break; }
>>456 もれの環境では、termiosをいじらないと
改行待ちになるので、cursesをつかうといいようだ
#include <stdio.h>
#include <curses.h>
#include <stdlib.h>
#include <time.h>
int myrand(int min, int max) {
return (min +(int)(rand() * (max - min + 1.0) / (1.0 + RAND_MAX)));
}
int main(void) {
int c;
WINDOW *win, *win2;
srand(time(NULL));
initscr(); cbreak(); noecho();
win = newwin(20, 40, 10, 30);
box(win, '|', '-');
wrefresh(win);
win2 = newwin(1, 17, 31, 53);
waddstr(win2, "Press ESC to exit");
wrefresh(win2);
while ((c = wgetch(win)) != 0x1b) {
wmove(win, myrand(1, 18), myrand(1, 38));
waddch(win, (chtype)c);
wrefresh(win);
}
endwin();
return (0);
}
462 :
デフォルトの名無しさん :04/07/18 17:53
あんまり環境依存の質問に答えてると、いっぱい来るぞ…
>>456 getche() って関数を調べるよろし。
c = getche();
if (c == 0x00 || c == 0xE0)
c = c << 8 || getche();
こんな感じで出来てた夜泣きガス。
getch();をやったら rewind(stdin); やらんと大変な事なるからきちんと入れるように
>>459 どうでもいいけど、グレゴリウス暦の採用年は国によって違うよ。
468 :
デフォルトの名無しさん :04/07/18 19:52
> どうもです。コンパイル時、ワーニングレベルを最高にして、 やーい > わーにんぐ
>>467 にとって、本スレとはどこなの?
2chは全部隔離所とでも言い出しそうな感じがするんだけど。
470 :
デフォルトの名無しさん :04/07/18 19:53
>2chは全部隔離所とでも言い出しそうな感じがするんだけど。 まさしく、そのとおりだ
少なくとも、このスレのレベルが他に比べて異常に低いのは確かだな。
そうか?どこも一緒だと思うがw レベルが普通以上のスレってどこだ?
Part86まで続いていると言うことは、厨を引き寄せる何かがあるということだろうな。
名前がそれっぽい
>>472 ここが低いおかげでほかが下がらないんだろ。
ゴキブリホイホイだ。
> 【Cのみ限定】★やってきたものすごいマジレス!★ > 【冬厨】Cの文句は俺に言えぇ!part1【歓迎】 これがある意味レベル高そう
はい答えられないと分かってる質問をしない。
>>455 ありがとうございました。
参考にいたします。
482 :
デフォルトの名無しさん :04/07/18 22:31
関数を作ったりとかしすぎるとオーバーヘッドがでてくると参考書に書いておりましたが google検索でも探してみたのですがまだ理解できません。 どなたか助けてください。
483 :
デフォルトの名無しさん :04/07/18 22:33
>>482 参考書の具体的な書名がわからんが
そーゆーことが書いてある部分の論旨をよく読め
関数化を徹底しろと言ってない本は捨てろ
関数呼び出しとは、レジスタをいくつかスタックに退避した上で関数のアドレスをcallすることで実現されている。 それにより、関数の細分化を進めるとスタック退避/復帰やジャンプのオーバーヘッドが増えてくる、というのが その参考書の主張だろう。つーかそんなことも説明してないくせにオーバーヘッド云々書いてる参考書なんて さっさと金星で焼いてしまえ。 一応言っておくと、余程プアな環境でもない限り無視して良い程度のオーバーヘッド増加だ。
タイトなループ内では関数を避けることもあるけどな。
486 :
デフォルトの名無しさん :04/07/18 23:00
普段 C99 が云々とさんざん言いながら、ご都合で C90 に戻るのな、こいつら (ペッ
487 :
デフォルトの名無しさん :04/07/18 23:03
つまりあまり意識するほどの事ではないけど 意識しなさすぎはよくない程度ですかね
C99を云々言う馬鹿は君の脳内にしか居ないと思うよ (ペッ
本当に厨房の溜まり場になるから罵倒はやめろ
なにをいまさら
みなさんすいません 同じC言語でも環境依存があるなんて知りませんでした 私のはリナックスのなのでgetcheというのは使えないようです
環境依存は専用スレへどうぞ。
char loadfile[20]; FILE *fp; printf("load file: "); scanf("%s",loadfile); if((fp = fopen(loadfile,"r")) == NULL){ printf("そんなファイルねーからその名前でファイル作るぜ.\n"); fp = fopen(loadfile,"w"); } これ動かそうとするとエラー終了するんですがどう直せばいいですか?
> if((fp = fopen(loadfile,"r")) == NULL){ > printf("そんなファイルねーからその名前でファイル作るぜ.\n"); > fp = fopen(loadfile,"w"); > } if((fp = fopen(loadfile,"r")) == NULL){ printf("そんなファイルねーからその名前でファイル作るぜ.\n"); fp = freopen(loadfile,"w", fp); } ただし未確認だが
で、そのエラーの内容を書かないというのは何か理由があってのことか?
セグメンテーション失敗、とだけなのでどうにも・・ 多分他でつまずいてるっぽいので見直してみます、失礼しました
"a+" でいいじゃん。
500 :
デフォルトの名無しさん :04/07/19 02:27
ふつうインライン関数。 うちではつかいまくり
501 :
デフォルトの名無しさん :04/07/19 02:29
> これ動かそうとするとエラー終了するんですが scanf使っているから
>>494 おそらく最終的なfpがNULLになっていると思われ
取り敢えず>495は全くの見当違いだな。
>>494 そこに問題があることは確認済みなのか?
作れないファイル名を入力されてないか?
改行文字では?
stdio.hとか読むの結構面白いな。
506 :
デフォルトの名無しさん :04/07/19 14:14
> これ動かそうとするとエラー終了するんですがどう直せばいいですか? 空白あいてないからいけない。あけたらふつうにうごいたぜ。 #include <stdio.h> main() { char *loadfile; FILE *fp; loadfile = "hoge"; if ((fp = fopen(loadfile,"r")) == NULL) { fprintf(stderr, "%sなんてファイルねーからその名前でファイル作るぜ\n", loadfile); if ((fp = fopen(loadfile, "w")) == NULL) fprintf(stderr, "だめだった。すまんOTL\n"); } fclose(fp); }
char *loadfile; ... loadfile = "hoge"; キモチワルイ
…あぁ、loadfile が const char * じゃないと、って事?
>>508-509 そういう意味じゃなくて
ファイル名を「任意で打ち込む」んだからポインタでなくて配列で用意しとこうって事でしょ
char loadfile[64];
strcpy (loadfile, "hoge");
とぐらいやろうぜ
凄い逸材が現れたなm
>>511 誰のどこを云ってるのか解らないからきちんと云おうぜ
プログラム作る上でうやむやなコードとか書かないでしょ?
514 :
デフォルトの名無しさん :04/07/19 14:52
> strcpy (loadfile, "hoge"); > とぐらいやろうぜ 空白あけるなよ ぼけ
>>514 strcpy と (loadfile, "hoge");
の間の事?
Cの仕様では空けても問題は無いはずですけど
>>513 夏だし、ねぇ・・・
素直になって欲しいですね、みんな
>>515 いつものアホだから放置していいよ。でもまあ空白空けないほうが好き。
printf(
"hogeeee"
"h%soo"
, bar)
;
とはやらないでしょ?
>>515 そうだけどそんなとこ空ける奴なんていない
>>518 仕様に沿ってるしいいんじゃないの?
もし気に食わないようなら間の空白は脳内削除しておいてください
いや、中が長くなってくるとそういう分割する奴いるよ。 Win32APIを呼び出す時とか。
>>520 さすがに>517ほどじゃないけど
"*****.***\0"
"*****.***\0"
"*****.***\0\0"
とか使う場合は確かにある
>517の云うように意味のない改行は無いけどね
>>514 >空白あけるなよ ぼけ
strcpy がマクロではなく、関数である事を
明示しているんですが、何か?
>>522 今度は無意味な騙りまで出てくるし
本当にこのスレどうかしちゃってるのかな・・・
このスレはこれで良いと思う。ウザいのなら見なければ済むのだし。
だから、どこがまともなのか
>>478 のリストから挙げてよ
>>524 \0\0と二つ並べたのはとあるAPIを使う時の話なのでスレ違いも甚だしくてすみません。
何で使うかは
OPENFILENAME構造体などで調べてみてください
ファイルオープン用のフィルタだっけ
文字列は最後に\0がつくから \0を2つ書かなくても良いってことだろう
>>530 "fsa" "fasdi"
は、コンパイル時に
fsafasdi\0
と連結される
つーか、考えてもみろよ。 勝手に\0補完されたら strcpy(buf, "abyabya" "uhyahyahya"); とやってもabyabyaしかコピーされないだろ。
考えが足りないのは俺のほうだったわはー
ここのラベルは相当なモノですね
>>522 マクロだって括弧空けてても平気だけど?
>>536 騙り釣りに反応しないようにしてください
アヒャヒャプゥゥゥ
C使いのレベル 初心: 参考書の通り打ち込む。参考書のソースにやけに空白があいていると、それも律儀に打ち込む 初級: 空白なんてあけない 中級: どこかしこ構わず空白をあけてみる 上級: 適切な場所に空白をあける 神: プログラミングなんてもうとっくにやめた
空白に拘るのは、クズの証拠だからほっとけ。 後でいくらでも好きなように修正できることに対してゴタゴタぬかすな。
チーム開発に向かないな、お前。
ずっと引き篭ってて下さい
ネットだしチームでは無いんじゃないかな >540もチームで開発すればきちんと守るタイプだろうし
チームならルールを決めるでしょ。 ルールもないのに自分の好みを無意味に主張する奴は、 チームで決められたルールにも延々と文句を言い続けることが容易に想像できる。
ぼ けに釣られてる奴全員氏んでこい。
互換性を考えたら空白なんか論外だろ
>>539 仙人: 他人のコードは気にせず読むし、自身は適切に空ける。必要ならフィルタを通すから一々文句言わない。
test
550 :
デフォルトの名無しさん :04/07/19 16:35
> strcpy(buf, "abyabya" "uhyahyahya"); > とやってもabyabyaしかコピーされないだろ。 こいつぼけ。 "foo" "bar"は "foobar"と同じだから、そのあとに f o o b a r \0 になるんだよ ぼけ それぐらいおぼとけ
>>550 > それぐらいおぼとけ
ホントに日本が不自由な方のようでw
空白あけすぎ
>>554 >ホントに日本が不自由な方のようでw
ホントに日本語が不自由な方のようでw
勘違いに勘違いなレスを勘違いしてるから とりあえず、いままでの話は水に流そう 別に質問は無いみたいだし
このスレ名物の"ぼ け"君は空気どころか1レスすらロクに読みこなせないのが分かったところで次の質問ドゾー
よりにもよってこの流れをラウンコに張られて笑われてますよ
スレどこ?
いや待て。 「日本が不自由」って、どっかのスレで見たぞ。 もしかすっと流行ってんのかも試練。
228 名前:デフォルトの名無しさん[sage] 投稿日:04/07/19(月) 12:35
>>224 の直後に
>>225 がきたんでネタかと思ったら、マジみたいね。
ホントに日本が不自由な方のようでw
229 名前:デフォルトの名無しさん[sage] 投稿日:04/07/19(月) 12:38
日本が不自由
230 名前:デフォルトの名無しさん[sage] 投稿日:04/07/19(月) 13:22
流れにワラタ
231 名前:デフォルトの名無しさん[sage] 投稿日:04/07/19(月) 14:38
>日本が不自由
うんうん日本って不自由だよね!
って… んっ?
232 名前:デフォルトの名無しさん[sage] 投稿日:04/07/19(月) 16:32
>>228 あんた最高だよ。
ラウンコってどこ?
>>556 の釣られっぷりでも笑われてるの?
ラウンコ=ラウンジ
今度から荒れたらラウンジに報告するようにしますね(藁
Cとは無縁の奴が入り込んでくるだけだからやめとけ
早速来たか
(・∀・)ニヤニヤ
俺たちはラウンジャー以下かよ(藁
そりゃあ(ry
ラウンジャはさっさと帰れよ
ラウンコ>(超えられない壁)>C厨
>>575 ラウンジャなんて一人も来てないと思うぞ
きてても一言も書いてないと思われ
なら、厨房臭い奴が住み着いてるだけか。
ひさしぶりにCスレにきたらとんでもないクソスレになってる・・
人 (__) \(__)/ ウンコー! ( ・∀・ )  ̄ ̄ ̄
581 :
デフォルトの名無しさん :04/07/19 20:19
>>579 目下、歴だけ長くて精神のついてきてない「ベテラン」が狡猾に荒らしているところだ
こんなのを見習って荒らしが育って欲しくはないが、おそらくそうなるだろう
自分にとって面白くないことがあると暴れる、つまり根はガキんちょのまんま
こーゆーオトナを見て育った子供がいま社会を脅かしているわけだ
. ∧_∧すいませんすぐに片付けますんで・・・ (;´Д`) -=≡ / ヽ . /| | |. | .人 -=≡ /. \ヽ/\\ (__) / ヽ⌒)==ヽ_)= .\(__)/ ウンコー! -= / /⌒\.\ || || ( ・∀・ ) / / > )| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| / / / / .|______________| し' (_つ  ̄(_)) ̄ (.)) ̄ ̄ ̄ ̄ (_)) ̄(.)) ̄
おい、ラウンコのどのスレだよ。 気にになるじゃねーか!
相互ウンコしてるだろ
20くらい前のレスも目に入らんのか・・
586 :
デフォルトの名無しさん :04/07/19 21:28
.libというファイルをa.objとb.objから作りたいのですが コマンドが調べてもわかりません。 誰か助けて。 普段コンパイルはlcc a.cで通ってます
cat a.obj b.obj > .lib
double a; scanf( "%f", &a ); では何故 a に正しく代入できないのでしょうか? 素人考えには「大は小を兼ねる」って感じで正しく代入できてもおかしくはないと思うのですが…
>>589 %fとパラメータを渡されているために、scanfが&aをfloat型のアドレスであると
解釈してメモリアクセスするから。
>>589 float や double がどういうデータ形式か学んでください。
>>591 ていうことは *(float*)&a ってするとちゃんと取り出せるですかね?
とりあえず型が違うから本質的にムリ、程度に考えておきまつ
"%lf"を使おうね
他スレを見ていて思ったんですが
http://www.cmagazine.jp/src/kinjite/c/variable.html#index16 =引用=
たとえば,List 17のようなプログラムは問題をかかえています。というのも,配列aは4バイトのサイズしか用意されていないのに,
そこに5バイトのデータをセットしようとしているからです。文字列は"ABCD"だから4バイトだろうというのは大間違いで,実際には
文末コード(つまり'\0')もあるので,合計で5バイトぶん用意しないとまずいのです。
List 17
--------------------------------------------------------------------------------
void f()
{
char a[4];
strcpy(a,"ABCD");
}
=引用ここまで=
とありますが、これはおかしくありませんか?char a[4]の時点でaにはchar型4個分+NULL文字用の1byteの合計
5byteが割り当てられていて、strcpyで4+1=5byteコピーしても問題無いように思います。
char a[4]で確保されるのは4byteです。 NULL文字用のバイトなど確保されません。
>char a[4]の時点でaにはchar型4個分+NULL文字用の1byteの合計5byteが割り当てられていて 誰にそう言われたのかは知らないが誤り。 4バイトしか確保されない
>>596 char a[4]というのはchar 4個分てことよ。
釣りか?
601 :
デフォルトの名無しさん :04/07/19 22:37
typedef struct HOGE HOGE; HOGE add(HOGE a, HOGE b); void add(HOGE *ans, HOGE *a, HOGE *b); どっちがいいですか?
const をつけろ。話はそれからだ
>>601 戻り値が値渡しだから、構造体が巨大な場合は前者はやめたほうがいい。
あとは、使いやすいほうで。
>>601 int add(HOGE *ans, HOGE *a, HOGE *b);
/* 戻り値 0:成功, -1:オーバーフロー, ... */
constが妥当かどうかの検討からだな。
add(a, a, a) で問題なければどちらでも。
そもそも const が何であるかの検討からだな。
char moji[20]; scanf("%s",moji); みたいにしたときに、半角スペースを含む文字列を入れると 半角スペース以前の部分しか代入されません。 スペースとその前後の文字列を代入させるにはどうすればいいでしょうか?
fgetsを使う
また、scanfか!
121011 122241 021231 上の用な数列が書いてあるファイルから a[0][0]=1 a[0][1]=2 のような感じで読み込むにはどうしたらいいでしょうか? ちなみち桁数は毎回ちがいますが 一回の読み込みのなかでは各桁ともに同じです
613 :
デフォルトの名無しさん :04/07/19 23:06
vb6のc++で一応本で調べたけどサパーリ。頼みます 五人分の得点ファイルを読み込んだとして その最高得点を表示させたいんだけどどんな方法があるの? 取り敢えず関数作って五個の中から最大を選ぶていう関数を使おうとしたんだけど whileでループして読み込み表示する方法だから得点が全部同じアドレスになっちゃって 折角の比較関数使えないんだよね どうすりゃいいの 教えて偉い人
int *(k[6]); ...(桁数を取得してnとする) k = (int**)calloc(sizeof (int)*6, n); とやりましょう 次に、読み込む時は 読み込む時の桁 x=0 (k+x)[0] = 1, (k+x)[1]=2 とやれば>612と同じような結果になります
1行目を読む ↓ 長さを見て動的に配列を確保 ↓ a[行カウンタ][列カウンタ] = 変数[列] - '0'; ↓ 最終列まで(ry
>>613 一応翻訳しておきますね。
VS6をVB6と間違えるぐらい動転してますし。
VS6のVisualC++6.0を使って、一応C++の本を読んで見たけど解りません。
五人分の得点ファイルを読み込んだとします。
その五人分の得点を比較して、最高得点のみを表示したい。
// 五つの中から最大値を選ぶ関数を作ろうとしたけど全ての得点が同じになってしまいます。
*ファイルから読み込む時にwhileループを使ってるけど、そこで失敗してしまったので何とかしてください。
どうすりゃいいの 教えてえらい人
>>597-599 そうだったんですか・・・。変な覚えかたしてたようです。ありがとうございます。
& とか | のビット演算のオペランドは unsigned じゃないとダメだと聞いたのですが本当でしょうか? ググっても全然出てこないので…
>>621 俺に云わんでくれw
>613に云ってくれよ
>613読んだだけだと問題の部分が最大値を選ぶ関数なのか
ファイルを読み込むところなのか一瞬迷う
問題はファイルを読み込む部分なんで>613はwhileループを張れ
warata
>>622 signedは最上位ビットで+か-を判断してます
unsignedにすると最上位ビットも数値の為のビットとなるので全て+になります
なのでどちらも同じビット数なので気にする程ではありません
余談:
unsignedがsignedの2倍の数値を扱えるのは最上位ビットで符号を扱わなくてすむので
一ビットあいて、一ビット開けば数値は2倍に増えるからです
テンパってた。ごめん ありがたいことに619が訳してくれたことが当に聞きたいことです。619どうも。 >617 違うアドに読み込むなんてできるもんなの? >618 str挑戦してみるわ とにかく不可解な質問してすみませんでした。もう一回挑戦してきます。では
>>627 挑戦するまえにwhileループの部分を張ってくれないか?
>>627 #include <stdio.h>
main()
{
#define N 5
int i, max = 0, score[N];
for (i = 0; i < N; i++) {
scanf("%d", &score[i]);
if (score[i] > max)
max = score[i];
}
printf("max= %d\n", max);
}
>>623 , 626
ありがとうございます!
なんかググってみても、
unsigned long dwMask = 0x80;
みたいに unsigned つけてるものが多いから危うく騙されるとこでした
bitMaskつかうときは符号なしにしたほうが無難。
何故?
>>631 コンパイラによっては
longは32ビットなので
10000000000000000000000000000000(←を二進数で)
を代入させようと
long dwMask = 0x80000000;
などのように代入するとエラーを返すコンパイラもあるようです。
BorlandC++で確認しましたが平気でした
>>633 ビットマスクだからであって
ビットマスクにマイナスの符号は要らないので
ややこしくならないように符号なしにするのは自分に親切だと思います
signedの>><<って仕様どうなってんだっけ。負の時も定義されてんだっけ。
算術シフトと論理シフトに気ぃつけやー。
ビットダンプするとき int main(){ unsigned char m; char data = 1; for(m = 1 << CHAR_BIT - 1; m; m >>= 1) putchar(m & data ? '1' : '0'); return 0; } これを こうすると、無限ループになる。 int main(){ char m; char data = 1; for(m = 1 << CHAR_BIT - 1; m; m >>= 1) putchar(m & data ? '1' : '0'); return 0; }
>>638 本当だ。
signed の場合定数値が切り捨てられたって警告が出た。
char m = 1 << 7
ってやると
m = 10000000(2)
ってちゃんとなるのに
m >>= 1
ってやると
m = 1100000000(2)
ってなった。
これが
>>636 さんのいう定義されてないってこと?
640 :
デフォルトの名無しさん :04/07/20 00:03
セキュリティの問題で、 printfの書式指定で%nを使うのは危険 とどこかで読んだんですが、理由を教えてください
641 :
デフォルトの名無しさん :04/07/20 00:11
>>640 別に使うことは危険じゃない。
危険なのはフォーマット文字列(printfの第一引数)を悪意のあるユーザーに入力させて、その中に%nがあった場合だ。
%nはprintfの変換指定子の中で唯一引数の先にあるものに書き込む。
>>639 挙動を実際に見てないから推測だけど
> signed の場合定数値が切り捨てられたって警告が出た。
> char m = 1 << 7
これはコンパイラが左辺型を見て定数値1をsigned charと解釈し、signedの範囲(下位7bit)で
ビットシフトを行おうとするために発生するんだろうね。
>>641 なるほど。
外部から入力されたものをまんま
printf(buf);
とかやるのはマズーなんですね
ありがとうです
でも%nはどういう用途で使うんだろ・・
すげえ今更だしもう628は寝てるかもだけど まだできないんで貼らせてもらいます。 while(fp,"%d%d%d%d",&[0],&[1],&[2],&[3]!=EOF){ printf("%6d%6d%6d%6d\n",x[0],x[1],x[2],x[3]); } てのです 今挑戦したのは最大値を求めるためx[m][i]にして多次元配列で求めようとしたんだけど何故か巧くできず、orz ほんとはソース全部貼りたいとこだけど携帯からなんできついっす
>644 そのwhileは全く意味がないぞ、ゴミだ。
いや、むしろ凄いな。カンマ演算を使いまくった挙句に結局やってることは while (&[3] != EOF) { ... } だ。ここまで行くと賞賛に値すると思う。
それは釣りじゃn(ry
>646 >&[3] != EOF プ
100["hoge"]とhoge[100]が等価っていう原則から行くと &[3]ってのは&(int*)3[0]と等価?よく分からないけど
えっとですね。四教科の表示のためのwhile文なんですよ。 んで六人の得点をそれぞれ入れて、各科目毎の最高点を求めるってやつなのであのwhileを入れつつしないと不味い気が それともあの部分は削って一から考えた方がいいんですかね?
100[hoge]とhoge[100]だっけ、そのへんうろ覚え
エラー
while() の条件は 式が成り立つ間繰り返しますよ条件に汁!
>五人分の得点ファイルを読み込んだとして まず、ここはどうやったんだ?
>653 できた。ありがとう どうもお騒がせしてすいませんでした
工エエェェ(´д`)ェェエエ工
ファイルが5個あるんじゃないですかね?
>>644 案の定もう寝てた
というか、質問しに来たなら問題のソースぐらい張らないと誰にも理解できない事は解った?
逆に言えば問題のソースさえ掲示すれば解決できる可能性がかなり上がるとな
でも解決してよかたな
きっともうこのスレ見に来ないよ
>>643 そこまで何バイト出力したかを知りたい場合に使うこともある。
まぁ、sprintf()で使うわけだが。
>>649 "hoge"[3] は、'e' になる。中身と外見を入れ替えると、
3["hoge"]と書いても同じ。
#勿論 hoge[3]と"hoge"[3]が同じわけはない。
663 :
デフォルトの名無しさん :04/07/20 09:08
わたしの使ってる環境だと、charは8bitでunsigned charは9bitなんですけどー (intとunsigned intはどちらも32bit)
664 :
デフォルトの名無しさん :04/07/20 09:32
> bitMaskつかうときは符号なしにしたほうが無難。 これデマ
>>664 if(val & 0x8000){
ってやったときに
if(val & 0x00008000){
と
if(val & 0xFFFF8000){
のどっちで評価されるかを確実にする
っていうかコンパイラにウォーニング吐かせるため?
666 :
デフォルトの名無しさん :04/07/20 10:34
空白あけろ ぼけ
667 :
デフォルトの名無しさん :04/07/20 10:34
やーい > ウォーニング
668 :
please! :04/07/20 10:38
GTK+でプログラムをかいてるんですが、以下のような警告がでてしまうのです この警告はどうすればなくなるか教えていただきたいです。↓ 警告: 互換性のないポインタ型からの引数 1 個の `gtk_text_view_set_buffer' を渡しますです
該当個所のソース載せろよ
警告なら無視しとけ。
その翻訳ダサダサだな 英文のままの方が意味がよく分かる
NULL × ヌル -> ○ ナル Warning × ワーニング -> ○ ウォーニング
673 :
デフォルトの名無しさん :04/07/20 11:15
質問 数以外の文字を入れた場合エラーを表示したいプログラムつくりたいん だけど、(if文で・・・) やり方がわからない・・・だれか教えてくだされ〜〜〜orz
>>672 NULL
× ヌル (・∀・)イイ!!
↓
○ ナル (・ω・)キモイ...
Warning
× ワーニング (・∀・)イイ!!
↓
○ ウォーニング ( ゚Д゚ )ハァ?
675 :
デフォルトの名無しさん :04/07/20 11:28
if (!isdigit(c)) error("hoge");
676 :
please! :04/07/20 11:34
GtkTextBuffer *buffer; char buf[10000]; FILE *inputfile; char ch; int i=0; buffer = gtk_text_buffer_new(NULL); inputfile = fopen("interface.c", "r"); if(inputfile==NULL){ printf("can not open!"); exit(1); } while(1){ ch = fgetc(inputfile); if(ch==EOF){ break; } buf[i] = ch; i++; } gtk_text_buffer_set_text(buffer, buf, strlen(buf)); gtk_text_view_set_buffer(textview1, buffer); ↑ここでエラーがでてます。 よろしくお願いします。
677 :
おしえてぇー :04/07/20 11:36
getuid()の返り値をchar型の配列にいれたいのですが, できますでしょうか
>>677 やろうと思えば出来るだろうが、止めた方がいい
GTK_TEXT_VIEW
GTK_TEXT_VIEW
>>674 スターウォーズ → スターワーズ
オンウォード → オンワード
ウォーキング → ワーキング
ワーキング → ワーキング
グノーム オグレ スウォード
夏休み恒例、ワーニング祭
warning とかけばおk
まったりしてますね
ていうか、取り敢えず統一しておこうよ。 warning → ヲーニン while → ファイォ true → トゥウー main → メインヌ
footwork → フッワーク
英国風に「ゥヲルネン」かな。 >warnig
warnig の検索結果のうち 日本語のページ 約 598 件中 1 - 50 件目 (0.32 秒)
690 :
デフォルトの名無しさん :04/07/20 12:31
ifよりも
warning → ゥヲァナン
692 :
おしえてぇー :04/07/20 12:43
あっ!できました。
693 :
デフォルトの名無しさん :04/07/20 14:36
うぐ・・・・質問します。 以下のソースを実行し、数字以外の文字などを入れると、 数字を入れてくださいとエラーが出るはずなのですが そのエラーが2つ出てしまいます。1つだけ表示させるようなことできないでしょうか? 多分、while文の ()のなかがおかしいと思いますが・・・ 処理方法が思いつかないので・・・・ よろしくお願いいたします。 #include <stdio.h> #include <ctype.h> void main() { char n1; printf("数を入力してください\n"); while(!isdigit(n1)) { scanf("%c", &n1); if(!isdigit(n1)) { printf("数字を入れてください\n"); } } }
変数は初期化して使いなさいっていう基本
scanf(" %c", &n1);
do while 使った方がもっとすっきりすると思うが・・・ #include <stdio.h> #include <ctype.h> #define MAXBUF 256 void main() { char buf[MAXBUF]; char n1; printf("数を入力してください\n"); while(!isdigit(n1)) { fgets(buf, MAXBUF, stdio); sscanf(buf, "%c", &n1); if(!isdigit(n1)) { printf("数字を入れてください\n"); } } }
正 誤 stdio -> stdin
698 :
デフォルトの名無しさん :04/07/20 15:03
>>694-696 さま
ありがとうございます、
どうもscanf()がだめぽだったようです・・・・
ありがとうございました〜〜感謝です。
なんだと
機種依存コードっ!!(@u@ .:;)ノシ
今時機種依存って言葉自体がダサいね。結局大半の環境でうまく動作するからいいじゃん。 極端に高い移植性を求めない限り。
なんだと
OS依存コードっ!!(@u@ .:;)ノシ
705 :
デフォルトの名無しさん :04/07/20 17:30
MainとSubというふうに、別に作ってをつなげる場合 どうすればいいんでしょうか?
#defineのような文字列置き換えを 前処理で行わないで文字列置換を行う方法はないでしょうか? プログラム実行中で置き換えたいのですが。
>>707 変数・関数ポインタ・ifなどなどで対処できるはずだが。
実際には下の様な処理を行いたいのです。(x,yはint型変数) if(turnDirection==TURN_RIGHT){ #define DIST_X (4-y) #define DIST_Y (x) }else if(turnDirection==TURN_LEFT){ #define DIST_X (x) #define DIST_Y (4-y) } これでは再定義が行われるのですが、 具体的には直せばいいのでしょうか
そういうのは関数ポインタを使えよ
int dist_x, dist_y; if(turnDirection==TURN_RIGHT){ dist_x = (4-y); dist_y = (x); }else if(turnDirection==TURN_LEFT){ dist_x = (x); dist_y = (4-y); } ではいかんのか int dist_x_right(int x,int y){ return 4-y; } int dist_x_left(int x,int y){ return x; } int (*dist_x)(int , int ); if(turnDirection==TURN_RIGHT){ dist_x = dist_x_right; }else if(turnDirection==TURN_LEFT){ dist_x = dist_x_left; } ではいかんのか。
関数ポインタの使い方がよく分からない奴はひとまず適当なApacheモジュール(asisとか)を 読んでみろ。よく分かるぞ。
defineがプリプロセッサで処理されることも知らないのに、 Apache読んでもチンポコマンポコだと思うが。
と思たがら、前処理で行うってのは一応市ってるのね。 スマンカッタ。
>>715 でも、変数の概念を理解してないみたいだから。。
説明不足でした。申し訳ないです。 if文内で、値を代入したく無かったんです。 for文内でgField[x][y]という風に変数x,yを使ってます。 x,yは値が常に変わります。 #define DIST_X(A) (((A)==TURN_RIGHT)? (4-y):(y)) #define DIST_Y(A) (((A)==TURN_RIGHT)? (x):(4-x)) で解決しました。本当は引数無しにしたかったけど。 ありがとうございました。
なんかすごいのが現れてたのね。 規制されてたからお話できなかった。
720 :
デフォルトの名無しさん :04/07/20 20:44
> 表示させるようなことできないでしょうか? > 多分、while文の ()のなかがおかしいと思いますが・・・ > 処理方法が思いつかないので・・・・ 答え: scanf使っているから
721 :
デフォルトの名無しさん :04/07/20 20:44
> if文内で、値を代入したく無かったんです しろよ
まあ、向いてない人間はとことん向いてないわけで、何を言っても同じ
>>721 全くもって同意
こういう香具師はD言語やってもversionとかdebugについていけなそうだな
724 :
デフォルトの名無しさん :04/07/20 23:05
初心者本で勉強してます。 なんで本などではshort intを使ってないんですか? 1000とかならintを使わなくていいと思うんですが?
725 :
デフォルトの名無しさん :04/07/20 23:06
整数の基本はintだから
726 :
デフォルトの名無しさん :04/07/20 23:10
初心者本で勉強してます。 なんで本などではcharを使ってないんですか? 100とかならintを使わなくていいと思うんですが?
>>726 うっさいなあ。intはCPUやコンパイラに速度等に都合のいい型という事になってんだよ
#include <stdio.h> int main(void) { float gal; char sel; do { printf("ガロン:"); scanf("%f", &gal); printf("%fリットルです\n", gal * 3.7854); printf("まだ計算しますか\?(y/n)"); scanf("%c", &sel); } while(sel != 'n'); return 0; } というただこれだけのプログラムなんですが、実行すると ガロン:4 <-4を入力 15.141600リットルです まだ計算しますか?(y/n)ガロン:n <-nを入力、この時点で何故かガロン:が出力されている 15.141600リットルです <-終了しない まだ計算しますか?(y/n)n <-2回目のn となってやっと終了します。デバッガで追ってみると15行目のscanfで入力をする前にwhileで真偽の判定がされているようです。 このプログラムのどこが問題なんでしょうか? 環境はGentoo Linux、GCC 3.4.1-r1です。(3.3.4でも同じでした)
scanfだから。バッファに改行が残ってます
charは文字型だから 文字以外を格納すると 「ソースを読んでる人が迷う」からです 別に規制は無いので数字が低い時はshortを使ってもいいですけど 今はほぼ死語(と云ったら怒られるけど)みたいな感じでほぼlongを使うべきでしょう。 会社やチームで組むときはもちろんshortは使います。 個人でやる分にはlong使っておけばいいでしょうと言う意味なのでそこを受け取り間違えないでください。 まとめると ・数字入力なのにcharを使うとソースを読んでて迷う(可読性を無視) ・使いたければshortでもいいし、使うなとは云わないので使うかは個人の自由 以上です
731 :
デフォルトの名無しさん :04/07/20 23:22
>>728 while(sel != '\n');にすると無条件に終了するか?
>>728 #include <stdio.h>
int main(void)
{
float gal;
char sel;
do {
printf("ガロン:");
scanf("%f", &gal);
rewind(stdin);//←これ
printf("%fリットルです\n", gal * 3.7854);
printf("まだ計算しますか\?(y/n)");
scanf("%c", &sel);
rewind(stdin);//←追加
} while(sel != 'n');
return 0;
}
>>730 いくらなんでも,そりゃないんじゃないか?
>>733 文字だって数字だとかですか?
文字は数字だけど故人が文字と取り扱った方が扱いやすいと思ったから文字型が生まれたんだと思う
その通りにしてみるのも一理あると思う
fflush( stdin ) じゃダメポ?
736 :
デフォルトの名無しさん :04/07/20 23:25
737 :
デフォルトの名無しさん :04/07/20 23:28
>>730 >charは文字型だから
プッ バカジャネーノ?
return 0 を付ける理由ってなんですか? 無くても動くと思うのですが…
739 :
デフォルトの名無しさん :04/07/20 23:29
741 :
デフォルトの名無しさん :04/07/20 23:29
>>734 お前がそう思ってるだけならそれでいい。
だが、その腐ったゴミを撒き散らすな。
皆さん、ありがとうございます。
よくデバッガでselを監視していたら\nが残ったままでした。
これが問題なんですね。
ただ残念なことに
>>732 さんのコードをコピペして試したのですが状況は変わりませんでした。。。
>>738 どこの話だか解らんので
どういうところでのreturn 0;なのか書いてくれ
たぶんmainの戻り値のことだとは思うが
747 :
デフォルトの名無しさん :04/07/20 23:31
>>745 分かっているくせにぃ プニ(AA省略)
>>744 デバックライトやってみれ
所々で変数の値を表示したり、ここまでプログラムが動いてるよって確認表示な
#include <stdio.h>
int main(void)
{
float gal;
char sel;
do {
printf("ガロン:");
scanf("%f", &gal);
printf("%fリットルです\n", gal * 3.7854);
printf("まだ計算しますか\?(y/n)");
scanf("%c", &sel);
printf ("%c", sel);// selの中身がどうなってるか確認してみる
} while(sel != 'n');
return 0;
}
デバックライトを行えば更に対策が出来るわけだ
>>744 scanf("%c", &sel); //空読み
printf("まだ計算しますか\?(y/n)");
scanf("%c", &sel);
>>746 UNIX系を使わないんであればmainの戻り値は気にする必要は無いですよね。
Windowsとかでは専ら
#include <stdio.h>
void main()
{
...
return;
}
とかだしね。
>>747 えへぇーバレちゃったぁー仕返しえぃ プニィ(AA略)
752 :
デフォルトの名無しさん :04/07/20 23:39
>>751 マ、マジっすか!?
コンパイラはGCC 3.4.1/3.3.4の両方でやっても駄目です。
ちょっと後でWindowsのほうにBCCいれて
>>732 さんのコード試してみようと思います。
#GCCのバグ??仕様??
要するに stdin に対しては rewind も fflush も未定義ということか…
>>752 GetExitCodeProcessも
>>760 この後に及んで何が分からないというんだ?
scanf("%*s"); じゃあこれは?
#include <stdio.h> #define MAXBUF 256 int main(void) { char buf[MAXBUF]; float gal; char sel; do { printf("ガロン:"); fgets(buf, MAXBUF, stdin); sscanf(buf, "%f", &gal); printf("%fリットルです\n", gal * 3.7854); printf("まだ計算しますか\?(y/n)"); fgets(buf, MAXBUF, stdin); sscanf(buf, "%c", &sel); } while(sel != 'n'); return 0; }
sizeof(buf)使えよぼけ
765 :
デフォルトの名無しさん :04/07/21 01:12
この書き方ならあえてsizeof使わないほうがいい。
766 :
デフォルトの名無しさん :04/07/21 01:12
だけど空白はあけろ ぼけ > while(sel != 'n');
767 :
デフォルトの名無しさん :04/07/21 01:14
> float gal; ここはdoubleにするべきだな。 また、y/nのほうはsscanfしないほうがいい。
>>767 double にしたら printf 中の %f も %lf に直す必要がある
んなこたーねーべ
771 :
デフォルトの名無しさん :04/07/21 01:34
> IRCではn03021とかのHNも使ってます。 そりゃあたりまえだろ ぼけ
772 :
デフォルトの名無しさん :04/07/21 01:34
> 要するに stdin に対しては rewind も fflush も未定義ということか… いや、定義はされてる。
773 :
デフォルトの名無しさん :04/07/21 01:35
> デバックライトやってみれ ク...
774 :
デフォルトの名無しさん :04/07/21 01:35
> この後に及んで何が分からないというんだ? 後... おまえら知能程度低すぎ...
775 :
デフォルトの名無しさん :04/07/21 01:36
> 持っている本(独習C)にfgets()の記述が もっとましな本読め。 あの本はウソが多すぎ
>>774 お前のようにいちいち変換結果を精査してるほど時間を持て余してないんだ。
>>775 まずはましな本の例を挙げろ
今だ!777ゲットォォォォ!!  ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ (´´ ∧∧ ) (´⌒(´ ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡  ̄ ̄ (´⌒(´⌒;; ズザーーーーーッ
7^(7^7) の下一桁の数字を求めなさい
情報不足。板違いかもね
780 :
デフォルトの名無しさん :04/07/21 01:50
> まずはましな本の例を挙げろ 逆だろ。だめな本を先にあげろ
781 :
デフォルトの名無しさん :04/07/21 01:50
> 変換結果を精査 「精査」の使い方がまちがってる。 職場ではじめて知った言葉をよろこんで何にでも使うバカっているのよねー ;-)
>>780 K&Rの邦訳は誤訳だらけでだめだな。
さて、ましな本は?
だから相手にするなって言ってるのに・・・
>>781 また批判だけか?間違ってると主張するならどう間違ってるかを指摘しなければ
ただのキチガイ野郎としか思われないぞ。
>>784 ○ ナル <-> × ヌル
○ ウォーニング <-> × ワーニング
>785 どうせ日本語の範疇では正確に発音出来ないんだから細かく拘る奴はただの馬鹿。
みなさんは馬鹿と阿呆どっちが好きですか?
アホ(<-なぜか変換できない)を好む大阪人は馬鹿
「あほう」 で変換出来るはず
ほんといつ見てもここは荒れてるな
>>788 「莫迦」という表記を好んで使っています。
>>790 なるほど。 でもアホとあほうだと、ふいんき(今度はこっちが変換できない)がちょっと違うね。
さすがマ板だ、今更なネタにも突っ込みが入ってる
もういいよ阿呆
extern struct Thre *Cnaraore[][1002]; extern void format(void *, int flags) if (Cnaraore[86][796]->脳味噌.親切.読み == Cnaraore[86][796]->脳味噌.しせんつ) format(&Cnaraore[86][796]->脳味噌, ALL_CLEAR);
799 :
デフォルトの名無しさん :04/07/21 10:53
> void main() するなよ ぼけ
800 :
デフォルトの名無しさん :04/07/21 10:54
○ ナル <-> × ヌル ○ ウォーニング <-> × ワーニング ヌルはドイツ語だ!といえば通らなくないもないが、 ワーニングはまぬけすぎー
801 :
デフォルトの名無しさん :04/07/21 10:54
> K&Rの邦訳は誤訳だらけでだめだな。 > さて、ましな本は? K&R
802 :
デフォルトの名無しさん :04/07/21 10:55
ましな本 == 例題にscanfが出てこない本 だろ?
803 :
デフォルトの名無しさん :04/07/21 10:57
K&Rならscanf出てこないね
804 :
デフォルトの名無しさん :04/07/21 10:58
たしかに「例題にscanfなんか出てくる本」==「だめな本」なのはわかるが、 K&R以外にないのか? > ましな本
てか出てくるが・・・。
807 :
デフォルトの名無しさん :04/07/21 11:20
void型のfunctionなんて作ったことないよ。 何も返す必要なくてもとりあえずint型にしちゃうよ。
結局のところ、scanfって言語仕様のバグな訳ですか?
809 :
デフォルトの名無しさん :04/07/21 11:21
> 間違ってると主張するならどう間違ってるかを指摘しなければ 翻訳すると「え? 違ってる? どういえばいい?? おしえてー」だろうな ;-) そこで教えるのはぼけ
810 :
デフォルトの名無しさん :04/07/21 11:22
> 結局のところ、scanfって言語仕様のバグな訳ですか? システムコールのcreatと同じ程度です。
811 :
デフォルトの名無しさん :04/07/21 11:22
> てか出てくるが・・・。 いえ、K&Rは出てきませんよ
#include <stdio.h> void test1(void) { _asm { MOV EAX, 11}; } int test2(void) { test1(); return; } void main(void) { printf("void = %08X\n", test2()); }
>>811 第2版にはあるんだが初版にはないのかね。
中級者ですが質問です。 C言語を使ってアスベスト志向プログラムミングをすることはできますか?
817 :
デフォルトの名無しさん :04/07/21 13:55
>>816 まずはそのアスベクト志向プログラムミングについて教えてください。
818 :
デフォルトの名無しさん :04/07/21 14:00
typedef enum { FACE_BUSU=1 , FACE_KAWAII , FACE_BIJIN } FACE_E; 最後のFACE_Eは小文字のほうがいいのかな
BUSU は 0 にしないと if( FACE_E ) って出来ないよぉ〜
>>819 FACE_BUSU でも一応需要はあるので・・・
face_e face;
FACE_E face;
どっちがいいのかなー
多言語対応というのは、次のような風にしてやればいいんでしょうか? なんかツールがありそうな気がしないでも無いんですが・・・ #ifdef JP #define STR0 "あああいいい\0" #else #define STR0 "aaaiii\0" #endif
tecnec
823 :
デフォルトの名無しさん :04/07/21 14:17
>>821 環境に依存しない方法ならその方法がいいかも。
メッセージをテキストファイルにして実行時に読み込む方法もある。
環境依存だからスレ違いだけど、Winなら「リソース」、Unix系なら「gettext」とか
調べてみると良いかもね。
再コンパイルが必要な方法はあんまよろしくないんでは
>>818 いちいち typedef すんな ぽけ。
BUSU だけど KAWAII 娘もいるよね。
BUSU_SHOJO >>>>>> KAWAII_HISHOJO
>>821 他にも多言語対応==Unicode対応の意味で使われることもあるからそれも注意。
これはtchar.hをincludeして全ての文字列を_T("hoge")のように_Tマクロで囲い、charの変わりに_TCHARにするか、
winodws.hをincludeしているならTEXT("hoge")とTCHAR(や(L)P(C)TSTRなんか)の組み合わせにすればいい。
>821 実行時に言語選べないと意味無いし
ポインタを返すライブラリを使用する時、実体のないポインタで 受けているプログラムをよく見かけるんだけど、これって どうなんでしょうか? 例えばこんなの↓ ----------------------- struct tm *tm; time_t now; now=time(NULL); tm=localtime(&now); ----------------------- *tmはまだ実際の領域は割り付けられていないからセグっても おかしくないはずなのだが、実際に走らせてみるとそんなことはまずない。 本来ならこう↓書くべきだと思うんだが、動きさえすれば↑の書き方でも 良いものなんだろうか ----------------------- sturct tm tm; struct tm *tmptr; tmptr=&tm; now=time(NULL); tmptr=localtime(&now); ----------------------- ファイル処理でも似たようなもので FILE *fp; だけ宣言して、あとはいきなり fp=fopen("hoge","r"); とかやってるのも多々あるし…
あなたはバカですか?
>>832 俺もしばらく前までそのへんの理解があいまいだった。
ポインタと、ポインタのポインタについてもう一度丁寧に調べるといいよ。
>>832 char *p = (char*)malloc(7743);
...
free(p);
の意味するところを再考しる
> ポインタを返すライブラリを使用する時、実体のないポインタで > 受けているプログラムをよく見かけるんだけど、これって メモリ割り付けたポインタ変数に代入したら代入前のメモリ解放できないジャン。 そもそもお前の書くべきソースでも >tmptr=&tm; ここで初期化されてないポインタ変数に代入してるジャン。 お前の理論ならセグっても(プ 不思議じゃないジャン。
>>832 int global_val;
int* func(){
return &global_val;
}
int* func2(){
int* p;
p = malloc(sizeof(int));
return p;
}
>>832 struct tm **tm;
time_t now;
now=time(NULL);
*tm=localtime(&now);
とすればせぐふぉ起きるはず(環境によっては起きない?)。
tmptr=&tm; tmptr=localtime(&now); そのまま書き換えて何がしたいんですか?
向いてない人間は何をやってもダメ
C++ かもしれないし。 でも C++ なら統一して new 使うか
>>844 俺は
>>838 じゃないが、関数の冒頭では
int* func(char *foo) {
というようにやる。このほうがintへのポインタを返す関数というのが分かりやすいと思うんだけど
普通はしないの?普通の宣言は
char *bar;
というようにやるけど。
>>846 結局、int* func(...)とint *func(...)のどっちを使う人が多いと思う?
LPINT func(...);
849 :
デフォルトの名無しさん :04/07/21 16:16
int *func 63% int* func 25% int * func 8% int*func 4%
結合規則で結合する方に*を付けておくのが見通しが良いと思う int *a ; int* func() { ... } 結合の仕方はそれぞれ int (*a); (int*) func() { ... } です
ループネタビームっ!!(@u@ .:;)ノシ
>>850 int (*func()) { ... } だと信じて俺はint *func()にする
int a; /* (a)が int型 */ int *a; /* (*a)が int型 */ int func(); /* (func())が int型 */ int *func(); /* (*func())が int型 */ わかりやすい。
int *func()と書くと、関数ポインタと紛らわしいと思うが、経験不足なだけかも。
>>853 君、よく人から「変わってる」って言われない?
int (* *Hoge [ ])()
>>855 ,856
判りやすいよ。
複雑になっても一発でわかる。
860 :
デフォルトの名無しさん :04/07/21 18:13
"visual c++"のプログラミングがわかりません。問題が、<入力された3値を辺に持つ三角形の種類、及びその面積を表示するプログラムを作成せよ。 ただし、「ポインタ変数を引数に持つ関数を作成、使用すること」>というものなんですが、初心者で基本的なこともわからないので、お手数ですがこれ をプログラムしてもらえませんか?ホントわからないので、省略なしに全てお願いします。
>>860 環境依存スレへ
>>859 これは、見る度にぞっとするね。俺でも間違わないような異常な誤訳が満載の本が何万部も出回り
Cのバイブルとして読まれてるんだから。
演算子の優先順位と結合規則が 1 ( ) 2 関数の() 3 配列の[] 4 ポインタの * のようであるからして、 char (*hoge())[] のとき hoge is a function returning pointer to array of char ということで実験したところ、 char (*baz(char (*foo)[]))[] { strcpy(*foo, "abc"); return foo; } main() { char (*foo)[4] = calloc(1, sizeof(char (*)[4])); puts(*baz(foo)); } のようなものは通った。 しかし、"配列を返す関数 (function returning array of...)" というものはつくれない模様。
まちがえました - char (*foo)[4] = callocうんぬん + char (*foo)[] = malloc(4);
配列を返す関数が無いなら char (*foo)[4] = calloc(1, sizeof(char (*)[4])); これはなんで動くか説明してくれ
あぁ、はいはい すみませんでした ポインタ返してるんね 配列じゃありませんでしたね
ポインタ = 配列
871 :
デフォルトの名無しさん :04/07/22 01:43
ソンソンソ〜ン♪ ソンソンソンソン