1 :
デフォルトの名無しさん :
2010/12/18(土) 23:33:36 BE:255612839-S★(532000)
1乙
一乙
rerunに()がついてないのってどういう動作ですか return(0)とかreturn(1)とかはよく見るのですが
rerunってなに?
>>4 それは、参考にしている本があるとすればそれが古いのでは?
最近は return 0; と書くのが普通。
参考にしている書籍なりWebページなりを変えたほうがいいかもしれません。
typoすると関数に間違われるからね
10 :
デフォルトの名無しさん :2010/12/19(日) 08:06:13
if(ac==0) ↓ if(ac<=1)
> 参考書の丸写しなんですが文字が出力されないです なんでですか 文字を入力していない か 起動時に任意のファイルを指定してない
13 :
デフォルトの名無しさん :2010/12/19(日) 11:38:35
#include <stdio.h> void main(void) { char s[10]; int in; scanf("%d",&in); scanf("%c",&s[10]); printf("%d %c",in,s[10]); } うまくいきません。ご教授を
ジョジョ、配列の範囲をよく見るんだ
#include <stdio.h> void main(void) { char s[10]; int in; scanf("%d",&in); scanf("%s",s); printf("%d %s", in,s); }
16 :
デフォルトの名無しさん :2010/12/19(日) 11:47:23
15コピペしたらうまくいった。 scanf使うときは&つけなくていいのですか scanf("%s",s);があやしいです
>>16 ポインタの辺りまで勉強すると理解が可能になるからとりあえずはそういうもんだと暗記して先に進むといいよ
>>16 &をつけるならこう
scanf("%s",&s[0]);
標準入出力は隠蔽して、あるいは使わないで進めて 最後らへんで教えるようにしたほうがいいと思うんだがそんな参考書は存在しないのかね
過去ログでも読んでろ
21 :
デフォルトの名無しさん :2010/12/19(日) 12:11:58
勉強?になりました。 データの入力を文字列型で受け取るときは&使わない、もしくは&s[0]を使うんだ
>>19 やさしいCはそんな感じの教え方だったよ
あとで説明するからとりあえず形だけ知っとけみたいな
そうやって形だけ覚えるとあっという間に行き詰まるよ
>>23 あとでやるから問題ないだろ
最初に書いたときは
#includeもint main(void)もわからなかったが説明されてもわかる訳ないしとりあえず無視しないと話は先に進まん
25 :
デフォルトの名無しさん :2010/12/19(日) 14:12:45
>>19 同感
暗黙の副作用だの main に先立つ処理だのといった
汚いものは佳境に入ってからだよな
組み込みだとそういう流れになるし
当然のように甘っちょろい本は少ない
へっへっ
ひっひっ
28 :
デフォルトの名無しさん :2010/12/19(日) 16:18:32
いいかげん、Cの所要点を全部まとめた1冊の本を出してください。 色々、本が足りなさ過ぎて全部網羅するとなると、20冊くらい立ち読みしなきゃいけないので、 足が棒になります。このスレで本の作者の人、宜しく。
そんなバカな本はお前くらいしか読まないから書かない
アルゴリズム辞典みたいなのがいいんじゃね
規格書を印刷すればいいと思うぜ
本を買えば立ち読みせずにすむな
スレッドとかって入門書には書いてないよね
35 :
デフォルトの名無しさん :2010/12/19(日) 18:01:54
スレッドとかってC言語の規格書にも書いてないよ
>>28 Cリファレンスマニュアルが鉄板
それ以上はもう規格書をあたるしかない
>>28 はそんなことを聞いてるの?立ち読みした20冊を挙げてほしいわ
C++0xにスレッド関連のライブラリが追加されるっぽいが 果たしてどうなるか・・・ まあCには関係のない話だが
test
41 :
デフォルトの名無しさん :2010/12/19(日) 20:57:13
糞スレ
45 :
デフォルトの名無しさん :2010/12/19(日) 22:17:43
>>41 きっとスレの人たちがあなたに何かしたんですね?
それを怒ってるから粘着しつづけてるんですね?
わかります。
ごめんなさい。ゆるしてください。
ほら、みんなもあやまって!
48 :
デフォルトの名無しさん :2010/12/19(日) 22:30:02
「C言語を始めよう!」の最新バージョンだと左に行番号表示させることってできないんですか?
はい。まあメッセージの行番号をクリックすれば該当箇所に飛べたと思うけど
macで何かいいC言語のコンパイラってありますか?
とりあえずgccいいんじゃね? 命令一つでインストールできるし
53 :
デフォルトの名無しさん :2010/12/19(日) 22:45:31
llvm-gcc
ライセンスの関係でmacのgccはバージョンが古い
buf[i+off]=buf[i]; これの意味がわかんない どう代入するの?
56 :
デフォルトの名無しさん :2010/12/19(日) 23:20:52
右に移動
下とか上に移動かもしれん
もうちょっとわかりやすく教えてほしいです
ローテーション
AKB
61 :
デフォルトの名無しさん :2010/12/19(日) 23:29:05
Gnu Compiler Collection
>>58 単にバッファーのデータ位置をoffセット分ずらしただけでしょ。
コードそのままジャン
つけたくなければ消せば?
自然数を10個入力として受け付けて、それを配列に格納する。配列の各要素を調べて、奇数であれば1たした数でおきかえよ。0は偶数である。 この問題をやっています。 普通にコンパイルできるんですが、10個入力した後になんにもおきません。入力もできなくなります。なにかがちがうのでしょうか? コンパイラは学習用C言語開発環境というソフトを使っています。 #include<stdio.h> int main(void){ int data[10]; int i,tmp; for(i=0;i<10;i++){ scanf("%d",&data[i]); } for(i=1;i<10;i=i++){ if(data[i]%2==0){ data[i]=data[i]+1; } } for(i=0;i<10;i++){ printf("%d,",data[i]); } return(0); }
>for(i=1;i<10;i=i++) (・∀・)
例えば3333があったとして、これが3を何文字含む数字かをプログラムしたいとき どのようにすればいいですか?
>>66 i=i++
がよくなくて、無限ループになってる。
そこはi++だけでいい
>>68 その3333が文字列なのか数字なのかによるけれど、文字列にして数えれば楽なんでないかな
ふっひっ
>>68 カウントを0にします
1桁目が3か調べます
3だったらカウントを1つ増やします
10で割ります
1桁目が3か調べます
3だったらカウントを1つ増やします
10で割ります
1桁目が3か調べます
3だったらカウントを1つ増やします
10で割ります
…
おしまい(^ω^)
if文でのカウントの仕方が分かりません
ほっほっ
ふっほっ
Javaの質問でもいいですか?
はい
よくねーよカス
いやいいだろ C→Javaなんだから
アホかい。
アホかい。
どどど童貞ちゃうわー!
下半身のC言語はいいのでしょうか
ほっほっ
どぴゅっどぴゅっ
ぬりゅっぷぬりゅっぷ
ひっひっ
ふっふっ
アホかい。
こいつ毎日一人でこんな書き込みばかり繰り返して悲しくならないのかな
多分つられて同じようなことしてる人が何人か
ふっほっ
なにかの仕返し(?)か、プライド傷つけられた(?)か、何かの理由で荒らしてるんでしょうけど、 「ふっほっ」とかしか言わないから、なにを謝罪すればいいのか判らないです。 みんなは、あなたのお母さんじゃないので、あなたの気持ちをエスパーすることは難しいです。 あなたの不満の理由を教えてください。 具体的に、どうなってほしくて荒らしてるのか? 目的を教えてください。 改善できる事なら改善しますし、謝れることなら謝ります。
↑コピペ?
×エスパーする △ESPする ○推測する ◎当て推量する
98 :
デフォルトの名無しさん :2010/12/20(月) 18:37:30
糞スレ
longが最低でも32bitあるって本当ですか?
テキストをよく見るといいよ
>>103 おそらく写し間違いだと思うが、セミコロンが足りなかったり
スペースが足りなかったりしてる
106 :
デフォルトの名無しさん :2010/12/20(月) 19:14:42
1〜10までの自然数の和を求めるプログラムをかけ (ただしfor文を用いること) for文使えとか意味不明ですが 自分なりにfor文入れてみました。あってますか void main(void) { int i; int sum; sum = 0; for(i=0;i<10;i++){ sum = 10 * 11 / 2; } printf("sum = %d",sum); }
いいんじゃねw
>>104 間違ってないと思うんですがみおとしてるかもしれません
あとでスキャナで読み取ります;
10回同じ計算する必要はないだろw for(i = 0; i < 1; i++) で 十分
111 :
デフォルトの名無しさん :2010/12/20(月) 19:24:36
>>110 教授がfor(i=0;i<10;i++)使えいったからあえて使ってる
int o = 1; for ( ; o ; ) // // { puts("55"); o = 0; }
じゃ、for(i = 1; i <= 10; i++) sum += i; じゃダメなのかw
>>106 は釣りでした
みんな引っかかってくれてありがとう
このスレ自体が釣りなのになにいってんだこいつ
116 :
デフォルトの名無しさん :2010/12/20(月) 19:44:32
>>114 釣りじゃなかったらどうするつもりだったんだ
責任とれんのか
>>113 > 教授がfor(i=0;i<10;i++)使え
こうすればいいかな。
void main(void)
{
int i;
int sum;
sum = 0;
for(i=0;i<10;i++);
for(i = 1; i <= 10; i++) sum += i;
printf("sum = %d",sum);
}
118 :
デフォルトの名無しさん :2010/12/20(月) 19:56:20
void main(void) { int i; int sum; sum = 0; for(i=0;i<10;i++){ sum+=i; } sum+=i; printf("sum = %d",sum); }
>>118 0から10の整数を足しちゃってるから題意を完全には満たしていない
120 :
デフォルトの名無しさん :2010/12/20(月) 20:00:08
>>119 void main(void)
{
int i,j=1;
int sum;
sum = 0;
for(i=0;i<10;i++){
sum+=j;
j++
}
printf("sum = %d",sum);
}
ぐぬぬ
122 :
デフォルトの名無しさん :2010/12/20(月) 20:08:28
糞スレ
ぐふふ
124 :
101 :2010/12/20(月) 21:47:04
>>124 テキストが間違えてる。
文の最後にはセミコロンが必要なので足してください。
>>124 6行目: ステートメントにセミコロン(;)がない(関数 main )
→printf("キーボードから数字を2つ入力してください\n") の後にセミコロン付ける
11行目: 未定義のシンボル return0(関数 main )
→ returnと0の間に空白入れる。
ゼロサプレス、ゼロパディングを簡潔に書ける関数みたいなのって 標準で用意されてる?
そっちの0埋めじゃなくね?
でもできるでしょ
ゼロサプレスはふつーにsprintf("%8d", n)とかでいいよね。
08dだよね。
ごめん、まちがえた。
>>99 規格Cで保証されている
ちなみにcharは少なくとも8ビット、intは少なくとも16ビット
fgets(buf,MAX,fp)って 一回の動作でbufに格納する時、文字列の途中で\nが入っていた場合、MAXに達してなくても 途中で文字の受け渡しを終了するんですか?
はい
138 :
デフォルトの名無しさん :2010/12/21(火) 01:20:46
巷で見かける MAX のほとんどが動くけど間違ってるんだよな…
サプレス=抑止だから 0 つけちゃダメだおw
>>135 そういうのよくないとおもうが、まぁ、これも勉強と思えばいいのかね。
いや、C99しかみてないけど charが規格を満たすにはどうしたって8bit要ることないか?
いつものアレか? charは1byteであることが保証されているが1byteが8bitであるとの保証はない
CHAR_BITの話はさておいても、intもdoubleも規格ではサイズ決まってないというところ。 C99だとintは最低16bit doubleは最低32bitって決められてるのかな。
>>143 サイズは決まってないが
最低限表現可能でなければいけないな値は決められてるじゃないか
サイズが決まってないってことしか知らないのか?
7bitでもいけるじゃまいか?
K&Rにはlong最低32bitって書いてあるようだけど?
>>145 いや、足りないだろunsingned char で0-255が要求されてんだぞ
ほっほっ
149 :
デフォルトの名無しさん :2010/12/21(火) 10:11:52
K&R(笑)
K&R馬鹿にする奴で有能な奴を見たことがない
またカーニハン信者か。 プログラミング作法でも読んどけって感じだな
ANSIは型チェックちょっと厳密になった程度という認識なんだけど。 (・ε・) K&Rって、そんなにダメなん?
規格票 >> [超えられない壁] >> K&R
>>153 が真理だな。
規格レベルで話せない奴に限って「K&Rを馬鹿にする奴は…ブツブツ」とか言う
(・∀・)ニヤニヤ
規格厨 対 K&R厨の戦いか。 どっちも見苦しいな
脳内規格じゃないだけ随分とマシになったな
158 :
デフォルトの名無しさん :2010/12/21(火) 17:25:38
n=4のとき、 **** *** ** * このように表示するプログラムを書いているのですが、ここからどうしてもできません どなたか教えていただけないでしょうか #include<stdio.h> int main(void) {int n,i,j; printf("三角形の一辺の長さを入れなさい.\n"); scanf("%d",&n); for(i=1;i<=n;i++){ for(j=1;j<=i;j++)printf("*"); printf("\n"); } }
4桁の任意の数字があって、その中にある数字が含まれていることをif文であらわす にはどうすればいいですか? 例えば、5345の中には5が2つある。みたいなのです。
ふっふっ
>>158 for(i = n; i > 0; i--) {
for(j = 0; j < i; j++) printf("*");
printf("\n
>>159 sprintf()で文字列にして、文字として数える。
ほっほっ
もう一度紙に書いて良く考えてみよう
>>166 機能するかどうかは動かして試してみればいいじゃん。
ヒントを書いておくと、文字列の一致とは長さも一致している必要があるってこと。
breakに到達しなかった場合はどうやってfor文から抜けるのかな?かな?
171 :
デフォルトの名無しさん :2010/12/21(火) 19:35:19
一応
>>169 は別人です
i++でiが12になってからi < len + 1で比較され、12(i)<12(len+1)と条件を満たさなくなり
i=12の状態でfor文を抜けるということでいいんでしょうか?
条件満たすi=11の段階でfor文を抜けると思っていました
ふっほっ
ふっふっ
176 :
デフォルトの名無しさん :2010/12/21(火) 21:12:21
最近の学生は問題出されると すぐパソコンに向かってプログラミングしようとする 常識的に考えてフローチャートつくるのが先だろ。 話変わるがソースコードからフローチャートに変換できるツールってない? 自筆で図描くのめんどくさい
>>172 for (A; B; C)
ABCBCB…
179 :
デフォルトの名無しさん :2010/12/21(火) 22:51:13
>>152 K&R はダメだったけど
ANSI でもっとダメになった
C99 でさらに追い打ち
上のほうの人たちが C の何がいいのかをまるでわかっておらず
枝葉末節のために醍醐味をまき散らすように捨て続けてきた
スタック構造をダイレクトに書けるのはいいことで register 渡しまであったのはあれでよかったし
lint は lint で独自の差別化を競えたはずで芽を摘まれなければ今ごろ頼もしかっただろうし
const はせっかく新設までしといて逆がないから write only な論理をきれいに書けないままだし
void* も文法を汚してまで新設しといて予想外に使えないやつだった
long long は待望だったけど 0b や数値定数の空白継続は結局なし
auto 配列の初期化だの可変配列みたいないらんものを大量にマンダトリーにしちまいやがった
文字があってその中のある特定の文字の数を数えるには どのようにプログラムすればいいですか? プログラムの例を載せてもらえると助かります。
あとif文でお願いします
182 :
デフォルトの名無しさん :2010/12/21(火) 23:44:27
void main(void) { char moji[]="aiueoaiueoaiueo"; int i,count=0; for(i=0;moji[i]!='\0';i++){ if(moji[i]=='a'){ //aをカウント count++; } } printf("aは%d個でつ",count); } ばっちりでつ
>>180 int charCount(const char* s, char ch)
{
if (*s == '\0')
return 0;
return (*s == ch) + charCount(s + 1, ch);
}
int main()
{
const char* s = "qwertyanxa";
printf("%d\n", charCount(s, 'a'); /* 'a'の個数を数える */
printf("%d\n", charCount(s, 't'); /* 't'の個数を数える */
return 0;
}
ありがとうございます
185 :
デフォルトの名無しさん :2010/12/21(火) 23:55:36
>>183 すげぇな。再帰的にカウントしてるなんてとてもじゃないけど思いつかない
カウントする対象の文字が全角だったらどうなるの
文字コードが分かってるなら文字単位で再起処理すればいいだけじゃないかな。 スタックの心配はしなくていいか。
int charCountSub(int count, const char* s, char ch) { if (*s == 0) return 0; return charCountSub((*s == ch) + count, s + 1, ch); } int charCount(const char* s, char ch) { return charCountSub(0, s, ch); } スタックが心配なときは末尾再帰にすれば。
すげぇ 最近C言語とやらを勉強しだしておれにはこのスレ心強すぎる
>>187 !!(*s == ch)
こうしなくていいっけ
return 0じゃなくてreturn countかな。
なんでわざわざそんな分かりにくいコードを書くのかと小一時間
194 :
デフォルトの名無しさん :2010/12/22(水) 00:51:45
>>192 関数型言語を勉強するのにオススメは何?
Emacs Lisp以外で使われてる関数型言語とかあんの?
プロローグ
197 :
デフォルトの名無しさん :2010/12/22(水) 01:13:05
Common Lisp
198 :
デフォルトの名無しさん :2010/12/22(水) 07:12:50
186でいわれてるスタックの心配ってどういうこと。 スタック領域が飽和状態になって違う領域(ヒープ?)にはみ出てしまうという意味ですか。 初心者の俺には専門用語すぎてカオスすぎる
スタックオーバーフローでっgr
200 :
デフォルトの名無しさん :2010/12/22(水) 07:20:13
199 そのスタック領域をオーバーした先はヒープ領域で間違いないですか
かんきょうによる すたっくとひーぷのぽいんたがれんぞくしているとはかぎらない そもそもひーぷというものがないかもしれない
202 :
デフォルトの名無しさん :2010/12/22(水) 07:24:26
なるほどすっきり^q^
コンソールプログラムでメモリを動的確保した時に、 コンソール画面を右上の×で閉じてしまったらメモリって解放されないですよね? じゃあこの×を押したときに、解放するようにしたいのですが、 良い方法ないでしょうか? WINAPIを使ったウィンドウのプログラムなら余裕なんですが、コンソールプログラムだと 方法がわかりません。
ストリーム関数のエラーを拾って終了処理に移ればいいと思うよ。
>>204 自動的に解放されるのでしょうか?
>>205 つまり、scanfとかで停止させている場合、その関数のエラーを
ウィンドウを閉じたと判断して、終了処理させるということですか?
>>208 C言語なんてマイナー言語誰も使ってないよw
C言語はハッカー御用達
ハッカー御用達はPerlじゃないの?
if分が正常に行われなくて悩んでいます。 環境はVC++です。 { float length=100; float length2=200; float lenlen=length-length2; if(lenlen>=0){ return false; } return true; } なぜかfalseが帰ってきてしまいます。 0より小さいはずなのに ちなみにlenlen>0としたら正常に動きました。 よろしくお願いします。
>>211 どーせ書いた処理そのままのせてないんだろう
そんで実際の処理ではlenlenが0になってるんだろう
じっさいのコードでif分岐の直前にlenlenを出力してみたらどうだ?
>>211 別のところで未初期化のポインタ使って何か書き込んでないか?
>>211 馬鹿なんだから省略とかしちゃだめだよ
ちゃんと全部載せないと
たしかに馬鹿なことしてました。 正常に動作してたのに別のところで勘違いしてたみたいでした。 すいませんm(_ _)m
うむ、許してやろう
>>203 プロセスが終了したら動的にとってきたメモリも解放されると思うけど。
219 :
215 :2010/12/22(水) 15:17:27
>>218 どこの馬の骨とも分からないあんたにそんな事を言われる筋合いは
これっぽっちもないんですけど?
ほっほっ
ふほほほほほっほほほふfひいいひいいいいいいいいっじじじゃあああああ
222 :
215 :2010/12/22(水) 15:58:28
キチガイ共乙
ふっほっ
224 :
デフォルトの名無しさん :2010/12/22(水) 16:49:14
あずにゃんペロペロ
ヘッダファイルの存在価値が全然わからないんですが、何のために あるんでしょうか?わざわざ別に作る必要ないですよね。
ふっふっ
>>225 ひとつのプログラムを複数の c ファイルで構成するような場合に有用となります。
必要ないんだったら一つのファイルにコード書いとけ
231 :
デフォルトの名無しさん :2010/12/22(水) 19:23:52
K&R読んでからもう一回来い
>>229 意味がわかりません。
具体例を教えてください。
具体例のわかりやすさは異常。
必要ないよ
お前ら釣られすぎだろw
釣りでしたww みんな引っかかってくれてありがとうww
>>237 どこが釣りなのか教えてくれ
ヘッダファイルをどういうときに使うのか説明できないだろ
ふっほっ
まさに糞スレ
煽って出るものでもない
ほっほ
ふっほっ
どぴゅっどぴゅっ
245 :
デフォルトの名無しさん :2010/12/22(水) 23:50:58
質問だがたとえばchar s[1000000000000];と宣言すると その時点でスタック領域がオーバーして実行できなくなるが これを解消するにはメモリを増設することが考えられますが 他に手はないですか
247 :
デフォルトの名無しさん :2010/12/23(木) 00:05:04
違うのか汗
そのサイズを確保するのは難しいと思うけど、 スタック領域をオーバーするような大きな配列はstaticつけるといいかもね。
コンパイルオプションでスタックサイズを変更すればいいけど、その例は大きすぎてダメ。
ふっふっ
251 :
デフォルトの名無しさん :2010/12/23(木) 02:10:17
うちの研究所の共有メモリマシンを占有すれば、 ギリギリ取れるサイズだな。
ひゃっふっ
>>245 1.小さくする
2.ヒープにとる
3.あきらめる
スタックってヒープより容量少ないの?
普通はね
ちょっと気になったので教えてください int main(){ char a[2]={'1111','?0'}; return 0; } 単純にこれだけコンパイルしてみたんですが、'1111'の部分、何故かエラーを吐かずに正常終了しました。char型って1バイトですよね?入りきらないと思うんですが…
>>256 警告レベルを上げたらでるんじゃないかな警告
あふれちゃうような整数型の変換は普通に通る
規格上は未定義ではあり、値もおかしくなるが
Cでは文字定数はint型だからな もちろんcharには入りきらない 黙って切り捨てられる
259 :
デフォルトの名無しさん :2010/12/23(木) 12:09:35
>>256 1111って4bitしか使ってないじゃん。だからエラーにならないんだよ
お前の眼は節穴か?
char *hoge = "piyo" strcpy(hoge, "piyo"); これはダメな気がするんですが動きます どうしてでしょうか?
>>262 文字列のリテラルが書き込み可の領域に置かれてるんだろ。
264 :
デフォルトの名無しさん :2010/12/23(木) 12:57:38
>>262 char *hoge = "piyo" ここで指しているアドレスと
strcpyの第二引数に指定されている"piyo"が指しているアドレスが一緒だから
"piyo"じゃなくて"aaa"とかだとエラーがでるはず。
265 :
デフォルトの名無しさん :2010/12/23(木) 13:01:05
264だがエラーでなければ263の説が正しいです
>>263-264 ありがとうございます
たまたま書き込み可の領域に置かれていて、
これが動いてるのは環境依存だから良くないよって事でいいんでしょうか
ポインタの参照先がリテラル文字列かどうか判別するにはどうすればいいんですか?
ソース見ればわかる
>>268 どの環境でも使える方法はないよ。
const char* s = "aaaa";
みたいにconstを活用してそういうミスを防ぐくらい。
>>269 あなたが馬鹿だということはわかりました
しかしいまだポインタの参照先がリテラル文字列かどうかは判別できません
どうすればいいでしょうか
272 :
デフォルトの名無しさん :2010/12/23(木) 13:52:07
char ss[] = "aaaa"; char* sp = "aaaa"; printf("%p %p",ss,sp); printfでアドレス表示させれば文字列リテラルがどこらへんに格納されるか把握して if文でアドレスチェックすればいけなくないか
グローバルなハッシュにリテラル文字列のアドレスを格納しておく マクロを使ってポインタへの代入とアドレスの登録を同時に出来るようにすれば便利だね
275 :
デフォルトの名無しさん :2010/12/23(木) 14:29:42
>>271 「ポインタの参照先を判別」という発想がそもそも C ではサポートされない
RTTI 的なものが欲しければ自分でそういう仕掛けを作ることになる
ほっほっ
リテラルとRTTIにいったいどんな繋がりが有るというのだろう?
ポインタで配列渡したら要素数さえ分からないんだから贅沢言うな
ふっふっ
ポインタの参照先が何であるか... プログラマは自分でそれを知っているはずである 自分で書いたプログラムなのだから、そこに何が渡されてくるのか、わからないはずがない 従ってわざわざ判別する必要などないはずである
人の書いたプログラム使ったり使われたりするし
結論 Cは糞
>>280 頭悪すぎて哀れになってくるな
解ってたらポインタなんていらねーよ参照でおしまい
ポインタを使わなかったらどうだろうか
節子、それはCやない
ふっほっ
ひっひっ
ほっほっ
キチガイ共乙
ふっほっ
すぽっすぽっ
ほっほっ
ぶはっ!選ぶはっ!
糞スレ
ぽるっぽるっ
ぷっぷっ
Nakaso
Nakaso
Nakaso
糞スレ
↓サドルマン
荒らし報告しとくか
↑サドルマン
嵐豊国しました
C言語初心者なのですが、サドルマンとは何ですか?
IP抜くの楽しいお
ぼいんぼいん
push any keyはどうすればいいの?
system("pause");
printf("push any key");
>>313 は自分ではありません。
system関数を使わない方法を教えて。
system関数は嫌なのか? 何かの課題でsystem関数を使ってはいけないという縛りでもあるのか?
316 :
デフォルトの名無しさん :2010/12/23(木) 20:49:31
標準ライブラリのみという縛りだとしたら簡単には出来ないだろうな asmで割り込みいじる事になるのか?w
319 :
デフォルトの名無しさん :2010/12/23(木) 21:42:14
system関数って便利だなと思って自分の環境で動かしていたが 別の環境にもっていくとそれが使えなかったりするから正直微妙。
yahooの腐女子と801板の腐女子の違いって?
エキスパートCプログラミングってサンプルコードとかある?
wikiLeaksって何?
携帯電話のC言語って?
>>323 「王様の耳はロバの耳」と床屋が叫んだ穴
328 :
デフォルトの名無しさん :2010/12/23(木) 23:22:35
標準入力関数の中でsscanfを愛用してるんだがお前らもそうだろ。 scanfとかいうやつはジョークだ
環境変数が分からなさすぎる。 プログラム組んでソフト作っても、プログラムによって 環境変数を変えなきゃならんような事もしないといけないの?
sscanfもscanfもジョークだ
331 :
デフォルトの名無しさん :2010/12/23(木) 23:27:57
sscanfは入力した文字列を指定の書式に変換してくれる優れものだぞ。 scanfと一緒にすんなよ
333 :
デフォルトの名無しさん :2010/12/23(木) 23:29:55
>>329 環境変数を設定しなくてもいいようにプログラムに組んでおけばすむことでは
>>329 環境変数はOSの話だ。コンパイラの実行パスとかデバッグフラグとか。基本的にC自体とは関係ない。
例えば環境変数に作業用のパス情報があって、それをプログラム中で参照するとかで利用することが可能ってだけ。
プログラムが不要とするならば環境変数に意味はない。
>>334 このプログラムはWindows7では動作しないから、環境変数を変えないと
いけないみたいなのあるんかなぁ?
パソコンでyoutube見るのも、2ちゃんねるに書き込めるのも、ゲーム するのも環境変数のおかげだが?やっぱりC言語学ぶなら環境変数や シェルの知識は必須だよな。
UNIX前提かと思ったらwindowsかよ
>>335 Windowsに限って言えば、使用するWinAPI(.NET)によって動作可能なバージョンも決まる。
決まるんだが、C標準だけで組むようなコンソールプログラムレベルなら何も気にしないでいい。
OSに依存しないから。
>>339 誰が削除しろなんて言ってんだよ…
コンパイラをインストールしてあるなら後は気にすることないだろ。
コンパイラが環境変数満たしてればいいのか。
「fopen()したら忘れずにfclose()する。」、「malloc()したら忘れずにfree()する」っていうふうに 教わったんだけど、exit()で強制終了する時って、exit()する前に必要な分だけ fclose(またはfree)しなきゃだめなの?面倒じゃない?
344 :
デフォルトの名無しさん :2010/12/24(金) 00:07:34
環境変数を巧妙にいじって3Dアクセラレータと同様の機能を可能にする 事とかできますか?
exit(1)でもexit(0)でもプログラム上手くいってるわw 二つの違いが全然わからんw
>>345 echo ?
echo %errorlevel%
>>346 間違えた
echo $?
echo %errorlevel%
348 :
デフォルトの名無しさん :2010/12/24(金) 00:16:06
>>342 exitなどでプログラムが終了するときは、そのプロセスで使ったメモリはすべて解放されます。
なのでfreeでメモリを解放しなくても問題ないです。が、常駐するプログラムではそうはいかないので
クセをつけるという意味で使ったメモリは解放するという習慣を身につけたほうがいいでs。
メモリ何て開放する必要ないだろ、メモリ何て2ギガあれば 無限みたいなもんだし。
富豪的プログラミングと言っても、 Cなんてシビアな組み込みとかでしか使わないんじゃね
4メガしかない環境でやってるんで無理です
>>349 お前、話が理解できてないなら無理にレスしなくていいぞ
四則演算プログラムを作りました。 コマンドラインから 「"ファイル名" 4 + 5 - 7 * 8」 とすると計算がめちゃくちゃになります。 *(アスタリスク)を他のx(エックス)などにすると大丈夫。 質問はコマンドラインから *(アスタリスク)は認識にもともと難があるものですか。
>>354 認識に何があるというか ワイルドカードという役割がある
だから *だけじゃ *がそのまま argvに入ってこない
void remove(char *buf)//配列のアドレスを受け取る { int n; char *p; char *q; for(p=buf; ISBLANK(*p);p++) //#define ISBLANK(c) ((c)==' '||(c)=='\t') ; q=buf; n=strlen(p)+1; while(n--) *q++=*p++; } 渡される配列の一文字目が空白の場合、空白を取り除く処理をしている関数です whileで処理されているところがわからないので教えてください
>>357 最初に出現する空白文字を取り除いた後の文字数をnに代入し、
nが0になるまで(処理後の文字列の先頭にくるまで)巻き戻しながら*q(=buf)にコピーしている。
図々しいようですがブロックごとに説明をつけてくれませんか
死ね
>>358 間違ってるな
×処理後の文字列の先頭にくるまで巻き戻しながら
○処理後の文字数分だけ先頭から
362 :
354 :2010/12/24(金) 06:49:53
>>357 なんか色々バグってね?
void remove(char *buf)//配列のアドレスを受け取る
{
int n;
char *p;
char *q;
for(p=buf; ISBLANK(*p);p++) //#define ISBLANK(c) ((c)==' '||(c)=='\t')
;
q=p;
n=strlen(q)+1;
while(n--)
*p++=*q++;
}
だろ
>>363 間違った
void remove(char *buf)//配列のアドレスを受け取る
{
int n;
char *p;
char *q;
for(p=buf; ISBLANK(*p);p++) //#define ISBLANK(c) ((c)==' '||(c)=='\t')
q=p;
p=buf;
n=strlen(q)+1;
while(n--)
*p++=*q++;
}
なんでpとq無意味に入れ替えてんの?
while(*q++ = *p++);ならstrlen()とかいらないのに
368 :
デフォルトの名無しさん :2010/12/24(金) 08:12:10
ちゃんと書いてくれ!俺は真剣に悩んでいるんだ
369 :
755 :2010/12/24(金) 08:22:41
void aaa(char *a) { char* b = a; while (*a==' ' || *a=='\t') {a++;} while (*a!=0) {*b++ = *a++;} *b=0; } そんな難しいことかぁ〜〜??(w って思う。 なんかISBLANKとかマクロ作って、しかもそれをforの中に入れちゃって、 簡単な事をわざわざややこしくしてるだけでバカバカしいと思う。個人的に。 戻り値で何かするわけでも無いのに int main に絶対的に固執したり、mainの最後なのにわざわざ free したりとか、 forやwhileに{}を使わなかったりとか、 そういうバカバカしい「かっこつけ・ハッタリ」かますから、そういう小さい微妙な読みづらさが積み重なって、全体的にプログラムが意味不明になるってのにw たとえば、これみたいな「ど〜〜〜ってことない処理w」でも、364やら363やら357やらみたいに「あれ?あれ?」ってなっちゃってて、 ほんとバカバカしい文法だなぁ〜〜って思うw もっと普通に、素朴に書けば、な〜〜んてことない簡単なことなのにw わざわざ「通っぽい文法」で書いて、自分で自分を混乱させてるという… あ、あほや…w
>>357 はどう見ても自分で考えてない、どっかのコードの丸写しなのにw
>>369 コードを修正するなら挙動が異なる部分を言わないと。
>>357 はこの関数にバグがあると予測して調査をしていた可能性がある
>>368 最初の空白以外の文字を見つける
それ以降を前方に移動する
処理の内容はこの2つだけだ
オレだったらわかりやすく以下のようにする
while (!isgraph(*cp)) cp++;
memmove(cq, cp, strlen(cp)+1);
>>357 は参考書のサンプルにコメントで説明を補っただけです。
確かにこの参考書は他のものと比べてわかりづらい印象です。
参考書なのでバグがあることは想定外ですね
一回main()から書き出してデバッグしてみます
まぁどうせ写し間違いなんだろうけどね
ほっほっ
Ruby関連のスレ行ったら冷たくあしらわれた・・・orz C言語にかなうプログラミング言語ありませんよね?? ゲームを開発するのはほとんどCまたはC++ですよね?
全ての言語はC言語からインスピレーショ受けてるよ。 Cに勝る言語はない。ドラクエもFFもC言語のおかげなのかなぁ?
使いどころを選ぶ気がないのなら CもRubyもゴミにしかならん
アセンブリ最高
.NETは結構です
382 :
デフォルトの名無しさん :2010/12/24(金) 22:42:08
>>377 ゲームなんて言い出すと C でカバーできる範囲は狭っ苦しいぞ
遊びには必ずしも CPU やメモリが出てくるとは限らないからな
383 :
デフォルトの名無しさん :2010/12/24(金) 22:58:21
いるよなぁ、こういう奴
実数を指数と価数に分離する方法を教えてください。
Javaには抽象ウィンドウツールキットがあるが
CやC++はグラフィック関連の機能をまったくもっていない。
マルチスレッドへの配慮も足りていない。
科学技術計算ではFORTRANの方が速い場面も多い。
10進演算を必須とする世界ではCOBOLは今なお強力だ。
etc...
そんなわけで、
>>379 の言うとおりだと思う。
ubuntu10.10などのリナックスなら、
/dev ディレクトリにある fb0 ってファイルに画像を描くだけで、画面に絵を出せますよ。
printfくらい簡単に画面に点を打てます。
(特別なライブラリは必要ありません。)
http://codepad.org/jMUT3eG5 起動方法(ubuntu10.10の場合)
Ctrl + Alt + F1〜F6 を押して、tty表示にします。(フレームバッファでの描画は、xwindow上のコンソールでは動かない)
コンパイルしたプログラムをスーパーユーザー権限で起動します
sudo ./a
これだけでグラフィックを扱えます。
じつにシンプル。 printfよりシンプルかもしれません。
むかしのPC98のDOSよりシンプルかもしれません。
余談:カーネルのコンパイルオプションによっては、フレームバッファに対応してない場合もあります。
また、カラーも16bitや8bitかもしれません。 また、画面サイズも1920x1080じゃない環境の人もいるでしょう。
そういう何処でも動くコードを目指すなら、ライブラリを活用してもいいですが、単に個人用の動けばなんでもいいってコードなら、これで十分絵が描けます。
if(!isdigit(*s)) ↑ これどういう意味(書き方)か教えてください
if(isdigit(*s)==0)と同義
>>388 ポインタsが指し示すメモリ上の値を文字として評価した時に
数字ではない事を判定している
>>388 ! は否定(NOT)、真なら偽、偽なら真と評価する
isdigit()は数字ならば真を返す
つまりif文としては、
*sの指す文字が数字なら(isdigit()は真だがそれを否定するので)偽
*sの指す文字が数字以外なら(isdigit()は偽だがそれを否定するので)真
392 :
デフォルトの名無しさん :2010/12/25(土) 10:40:26
正直いって if(!isdigit(*s)) こういう書き方は見る人にとってはわかりづらい。
分かり辛いと思う人の頭が悪いだけだと思うよ
sの型は何だ? charならunsigned charにキャストしろよ
395 :
デフォルトの名無しさん :2010/12/25(土) 12:06:11
>>393 いろんな人がみるからそういう人のために配慮して書けといってるんだ
わかったか?
iと!が重言みたいな気持ち悪さを醸し出してる
いろんな人w
struct hoge { int data; struct hoge *next; } みたいな片方向リストで任意の要素nを削除するにはどうすればいいんですか 先頭から順にを探す ↓ 目的の要素nが見つかる ↓ ポインタを繋ぎかえようとするが、nの前にある要素へのポインタがないので???となっています
>>398 探す時に1つ前のポインタも残しておけば良い
401 :
デフォルトの名無しさん :2010/12/25(土) 12:43:20
>>399 可読性を向上させたいなら389の例がいいんじゃないかな。
きっとこう書けばいいに違いない #define not ! if (not isdigit(*s))
>>401 分かりにくくなる
色んな人が見るんだから配慮しろ
#define isnotdigit(x) (!isdigit(x))
真偽値を比較で判定とか可読性下げるだけ
406 :
デフォルトの名無しさん :2010/12/25(土) 12:52:24
! くらい慣れておけよ プログラマ失格だ
C++なら実はnotが使える
410 :
デフォルトの名無しさん :2010/12/25(土) 12:58:57
仕事先でソース書いた後にコーディング規約チェッカーツールとか使わないの? if(!isdigit(*s)) とか書いても可読性の観点から違反扱いされて 書き直されるよ。
どんな糞ツールだよ というか、真値が一意に定まらないCでは 真偽を比較で確かめる癖付けるのは危険なんだよ
偽との比較は全て動くが 真との比較が危険 if (isdigit('9') == 1) { printf("hoge\n"); } これは環境によっては動かない 当然これは != 0 にするのが正しい しかし果たしてこれは可読性が高いと言えるだろうか? 二重否定だし、それに真な時に != で比較して偽な時に == で比較する事になる
!=0なら書かなくて良いだろ
偽の時だけ == 0 と書くとか何それ気持ち悪い
特定の場合に0を返すように設計してるんだから、 それをif文の条件にしても可読性が低いってことにはならないと思うけど
>>415 それで可読性あると思う奴なら
if(!isdigit(*s))でも問題ないだろ
機械の可読性を言ってるんじゃないけどな
Windows プログラミングで == TRUE と書いてる奴をよく見る こういう奴はこのコードの危険性が何も分かってない API の仕様では BOOL で真を返す場合は「0 以外を返す」と書かれている 動いてるのはたまたまだ 比較方式はこういう奴を量産するだけ
!=0でも読みにくいつってんだろ
>>400 できました
前のポインタを保持しながらループ回せばいいんですね
ありがとうございました
比較する際に次のノードの要素と比較するという方法もある
新しいc規格とかはおいといて もともとc言語にbool型変数は無く,0を偽,非0を真と決めているだけ isdigitの戻り値を真偽値とみるか整数値とみるかなんだけど 関数名がis〜だから真偽値と見てもいいような気がする だがfopenおまえらはダメだ !=NULLを省略するんじゃねぇぇぇぇぇぇ
いいじゃん!fpしても
!=NULLは二重否定に見えるが !だとポインタなのに真偽値に見える どちらも微妙なのでどちらでもいいわって感じだが 真偽値にしか!を付けられない言語も多いし !=NULLで慣れた方が応用は効くのかなとは思う
0の否定は真になるけど、非0の否定が偽になるとは限らないのが ややこしいので、いつも == や != 使ってます><
!(非0) は常に偽だぞ・・・
え、そうなの?勉強になりました><;
比較はこういう奴を量産するだけだと証明されたな
!(非0)が0、!(0)が1に慣れちゃってるから C#とかやると少しイラっとするな
最近はCでも条件式を計算式に埋め込まなくなったな (三項演算子以外では)
比較はー比較はーって言ってる奴、頭悪そうに見えるんだが
C言語に興味あります。 勉強しようと思うのですが オススメの勉強用の本があれば 教えでいただけないでしょうか? よろしくお願いします。
K&R
明解C
>>435 ひとつの本だけで満足しない、と決心すればそれはもうどんな本でもいいから立ち読みしてよさそうな本を今日にでも買ってコンパイラはBorland C++ 5.5 でもすぐにインストールしてれっつごーです
思い立ったが吉日ですわからなかったらここできけばいいもうなにも躊躇することはありません
Borland C++ Compiler は使うの面倒臭くないか 製品版という事なら別だが、フリーのを意図してんでしょ? 今なら VC++ EE でいいかと
どの辺が面倒くさいんだろう
IDEがない まあその方が教育的という観点もあるかもしれないけど
>>435 >>439 ああコンパイラもういんどうずでうごくやつならなんでもいいやLSI-CはちょっとまずいかもしれないけどねそうだねVC++ExpressEditionでもいいやねもうなにも躊躇することはないいけいけどんどん
bccってデフォCなの?VC++はデフォC++だよね。
>>441 C言語を始めようとかCPadとか使えるだろ
それに最初は別にIDEなくても問題ないと思うけど、cygwinは勧めないな
仮想マシンにubuntu入れてgcc使った方がマシ
>>443 拡張子で区別されるがそういう意味ではなくて
(´・ω・`)C
書店寄っていくつか見てみます コンパイラっていうのも調べてみます。 ありがとうございました。
そしてドラゴンブックを買ってくる447であった
このご時世、本なんて不要だと思うけどな。標準ライブラリの使い方くらいネットにいくらでも転がってるし。 学習に足りないのはおそらく「お題」だろうが、それも簡単に見付かる。 自分が便利だなと思うものを真似すればいい。最初から全部ではなく部分的にな。
ググったソースをコピペして500円というビジネス。
>>451 なんで?小説みたいな創作物は読むけど。
大丈夫!Wikipediaの情報だよ!
小説だってネットにいくらでも転がってる
Cの勉強しようと思ってコンパイラを探しているのですが Borland C/C++ CompilerとVisual Studioだとどちらがオススメでしょう あとCygwinについても教えていただけたらありがたいです
>>455 悪いことは言わん。MinGWにしとけ。
gccの使い方は覚えておいて絶対に損しない。
Visual Studio はフリーでも統合開発環境(IDE)があるから楽 でも勉強のためコンパイラ直接扱いたいのなら Borland C/C++ Compiler か gcc (MinGW) を使うのもあり ただし、後々 C++ もやるなら Borland C/C++ Compiler は古いのでおすすめしない Cygwin は UNIX のシェルを Windows に移植した「ような雰囲気」の物 gcc もインストール選択したら使える UNIX/Linux 使った事あるなら薦められるけど 使った事無いならどうだろう? コンパイルするだけならいいのかな
C言語を学ぶついでにUNIX系のコマンドラインツールに触れておくのも悪いわけではないし別にいいんじゃない 俺はcygwinおすすめ
>>459 それだったら仮想でいいからLinux環境作ったほうがマシ。
Cygwinは
>>458 の言うとおりUNIXもどきでしかない。
Visual Studioでいい
>>456-461 ありがとうございます
MinGWかCygwinを使って見ようと思います
いえいえ
CygwinでMinGW使ってもいいんだぜ gcc -mno-cygwin でMinGWが使われる
Cコンパイラを探してるレベルの人間にCygwinを勧めんなカスどもが
カスとは失礼な 俺はgccとcygwinを一緒に使い始めたぞ ある程度の厳しい状況は作るべきだ そんな事してるから最初が簡単で軟弱なクレクレ君が出てくるんだ
お前みたいな奴が回答者として一番いらねーんだよ。質問スレで何してんだボケ
>>455 1.ubuntu10.10のisoをダウンロード
2.CD-Rなどに焼く
3.再起動してCDから起動
4.インストールを選択
5.windowsを残したままインストールする項目をマウスで選択。
6.適当にマウスでボタン押してって質問に答えてインストール開始。
7.再起動して起動メニューからubuntuを選択
8.スタートメニューから端末(コマンドプロンプトのこと)を選択
9.gcc(Cコンパイラーのこと) をインストール
sudo apt-get install gcc
10.kdevelop(エディタのこと)をインストール
sudo apt-get install kdevelop
適当にエディターでプログラムを書いて、適当な名前で保存( aaa.c など)
コンパイル方法
gcc -o aaa aaa.c
そのプログラムを実行する方法
./aaa
余談:ディレクトリの移動は cd ○○、DIRは ls、 ディレクトリの作成は mkdir ○○、 ファイルの削除は rm ○○、 ディレクトリの削除は suro rm ○○ -r
コピーは cp 元 先、 移動は mv 元 先、 名前の変更は mv 元 先、 math.h 入りソースのコンパイルは gcc -lm、 c++のソースのコンパイルは gcc -lstdc++
そもそも何を基準に勧めればいいのかわからん 規格に準拠してるかどうかか? C89でいいならVC, BCC, GCC全て準拠しているから導入のしやすさと好みでいいんじゃないの C99ならgccほぼ一択な気がする
C99で学習する奴なんているのかよ
>>467 質問スレだった
反省...
ただなんもググらずに聞いて口開けて待ってる奴もいることは分かってほしい
なんか一回ぐらい難しい解決の経験をしないといけないような気がする
ほっほっ
趣味であえて面倒くさい方を選ぶなんてアホ そういう意味では、Cという選択自体が微妙だが
cygwin使うぐらいならLinux使った方が今後共に楽だよな
>>475 まあ趣味でアセンブリやるよりはいんじゃねぇかw
ふっほっ
479 :
455 :2010/12/25(土) 21:41:19
今までは学校のCentOSで色々やってたんですが 年末年始は使えないんで家のPC(windows)でできたら便利だなと思ってたんですけど やっぱりLinux環境用意した方がいいんですかね
別に。Cの開発環境はWindowsで揃う あと性能が良いPCならVirtualBox+Ubuntuで何でも出来るよ ネットワークの設定は勝手にやってくれるし、ホストからのコピペとかフォルダの共有も出来る
c++とかc+1のようにインクリメントした値は変数に格納しなくても その値は保持されるんですか? 説明がわかりづらいですが解答よろしくおねがいします
c++はインクリメントした値を変数に格納しますよ c+1は格納しませんので保持されません
c++ は c+=1 のシンタックスシュガー c+=1 は c=c+1 のシンタックスシュガー c+1 は c+1 を計算してるだけで 変数c は上書きされない
>>483 x=c++;
x=(c+=1);
違うよね
なるほど! ありがと
++c
>>484 そうだったなと反省しつつ
c言語で前置と後置の評価順って決められていたっけ?
はい
c = 1; a = c++; これは aには1が入る c = 1; a = ++c; これは aには2が入る
〜はシンタックスシュガーとか言う奴に限って知識レベルが中途半端
なにか問題でも?
>>491 問題あるから言われてんだろ
中途半端な知識は人を惑わすから書くなカス
シンタックスシュガーなんて言い方したばっかりに、粘着の対象にされてるわろたwww
495 :
デフォルトの名無しさん :2010/12/26(日) 00:52:51
え?
496 :
デフォルトの名無しさん :2010/12/26(日) 00:57:50
シンタックスシュガーに噛み付く奴w
シンタックス・シュガー氏
K&Rは後置インクリメント/デクリメントの優先順位が間違っていて困るのは最新版で修正されたの?
c++は前置は+1されてから評価され後置は評価されてから+1されるけど c言語はそういう規定が無いから注意しろって言われた気がするんだがなぁ
んなわけあるかい^^ Cではただインクリメントを行うだけの時のコストが一緒という話じゃないのか? C++ではPOD型でないとき後置は前置よりもコストがかかる(ことがある)。
PODのコストってなんだよw
502 :
デフォルトの名無しさん :2010/12/26(日) 02:05:57
知識の最高到達点、ギリギリ知ってる語彙で戦うのが2ちゃんねる
Cで評価順が規定されてないってほんと?
504 :
500 :2010/12/26(日) 02:25:54
ありゃま。インクリメントのコストがわからない人がいたか。 C++ Coding Standards 第28章 参照ね^^
505 :
500 :2010/12/26(日) 02:32:06
>>503 Cで評価順が規定されないのは「演算子の非演算数に対する評価順序」。
>>499 の言ってることとは無関係。
506 :
デフォルトの名無しさん :2010/12/26(日) 02:41:31
馬鹿ばっか^^
ほんとばかばっか^^
俺以外全部馬鹿
バカ祭り^^
今夜も強烈なの
511 :
デフォルトの名無しさん :2010/12/26(日) 03:11:47
Cで2進数から16進数の変換をビット演算使ってやる方法教えてください。
質問者がバカなのはしょうがないけど 回答者もバカだからなぁ、ここ。
>>512 これであれば、がどこにかかるかわからないんだけど、ちゃんと自分が貼ってあるリンク先読んだ?
>>511 変換って何さ?16進数として表示したいってことか?
やりたいことが伝わらないから皆答えようがないんだよ。
断片でもいいからソースを示せ。
516 :
デフォルトの名無しさん :2010/12/26(日) 10:12:54
>>511 char bin[] = "011101101101"
unsigned int hex = 0;
for(char* p = bin; p; p++){
if(p == '0') hex = hex << 1;
else if(p == '1') hex = hex << 1 + 1;
else exit(0); // detect invalid character
}
printf("(bin)%s = 0x%x\n", bin, hex);
これって無限ループにならないんだな。ハマッたぜksg do{ puts("hello"); continue; } while(0);
518 :
デフォルトの名無しさん :2010/12/26(日) 12:57:05
while(1)に修正してみろ。コンパイラ持ってないが俺の脳内はコンパイラより賢い
ワロタ
continue; はループの先頭に戻るんじゃないと聞いて驚く奴は沢山見たが 実際にそれにはまったやつを見るのは初めてだ。
do〜whileをちゃんと使える男の人ってかっこいい
do while()とcontinueを組み合わせて使ったことがないんで、 いざ「どう動く?」とか言われても即答できない。
それcontinueを分かってないだけだろ。。
クスクス
>>525 もうそれは許してやれよ、あの子は声優じゃないから仕方ない
527 :
デフォルトの名無しさん :2010/12/26(日) 13:51:40
なにがおかしいんや!
俺もこれは知らなかった
もともと do{ }while() をほとんど使わないから。 どうでもいい気はする
空のループをどう書くべきかしばしば悩むことがあった。 文法的には for (〜; 〜; 〜); と書けばいいのだが、セミコロンを見逃しやすい。 for (〜; 〜; 〜) ; これもなんだか微妙。 しかし今さっき思いついた。こう書けばいいのではないか? for (〜; 〜; 〜) continue;
>>529 do{ }while(0)は結構見かけるよ
くだらん 空の波括弧を置くよりも下策ばかり並べて何を悩んでんだ
Cじゃないが空のブロックは警告されるんだ だからブロック化してもやっぱり中に何か書かなくちゃいけないんだ それで習慣になってCやるときも空のブロックはなんか気持ち悪くて避けてるんだ まぁ警告OFFにすればいいだけなんだけど警告は全部ONにするものっていう刷り込みがあって・・・
みんなセミコロンが空中に浮いててもあんまり違和感ないのか・・・なるほど、参考にする
>>533 何の言語か知らないけど、
ブロック中にコメント書いても警告されるの?
>>536 一番上の書き方されると、かなり紛らわしいから嫌だな
forの次行に空セミコロンは、一見してforで値を回しているんだなぁって思えるから
俺は別に違和感ないな
インクリメント部を外に出すとか
for (〜; 〜; 〜) { } 素朴に書けばいいじゃない
空ブロックは変だろ。
質問です Hoge(int (*dat)[][2]) { … } 上の関数をコールする場合のパラメーターってどう書くんですか? int *d[4][2]; Hoge(d); これではエラーになってしまう。ちなみにVSC++2008使用です。
void foo(){} for(;;){} 合わせたほうが好み
int d[4][2]; foo(&d); かな?
>>542 #include <stdio.h>
void f(int(*dat)[][2]){
}
int main() {
int array[3][2] = {
{1, 2}, {3, 4}, {5, 6}
};
f(&array);
return 0;
}
>>544 void Hoge(int (*dat)[][2])
{
(*dat)[0][1] = 1;
}
int _tmain(int argc, _TCHAR* argv[])
{
int d[4][2];
Hoge(&d);
return 0;
}
でエラー
.\test-090.cpp(13) : error C2664: 'Hoge' : 1 番目の引数を 'int (*)[4][2]' から 'int (*)[][2]' に
変換できません。(新しい機能 ; ヘルプを参照)
指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは
関数スタイルのキャストが必要です。
他にエラーはなし。
>>545 #include <stdio.h>
void Hoge(int (*dat)[][2])
{
(*dat)[0][1] = 1;
}
int main()
{
int array[3][2] = { {1, 2}, {3, 4}, {5, 6} };
Hoge(&array);
return 0;
}
でワーニングエラーでした。
.\test-090.c(12) : warning C4048: 'int (*)[][2]' と 'int (*)[3][2]' で配列の添字が異なります。
void Hoge(int (*dat)[][2]) を void Hoge(int (*dat)[3][2]) と入れれば、ワーニングも消えました。 上の書式は、ワーニングなしではいけない?
>>547 VC2010では
#include <stdio.h>
void Hoge(int (*dat)[4][2])
{
(*dat)[0][1] = 1;
}
int main(void)
{
int d[4][2];
Hoge(&d);
printf("%d", d[0][1]);
return 0;
}
としないと警告が出るな
>>549-550 そうすると、元々の例題ソースがgccだったんですね。たぶん。
ありがとうございました。勉強になりました。
>>548 多次元配列の次元指定のうち最大のものは、配列のアクセス場所を特定する演算では使用しなくても問題ないので、
void f(int (*a)[][3][4][5]);
はありだと思うのですが、msvc は丁寧に警告してくれるのですね。
警告が気になるのなら、プログラムと相談して、
void f(int (*a)[10][3][4][5]);
とするのもいいかと思います。
なお、gcc や borland c では警告はでませんでした。
void f(int a[][3][4][5]); void f(int (*a)[3][4][5]); それはこういうときだろ? void f(int (*a)[][3][4][5]); じゃ指定なしじゃどう考えてもまずいだろ なんで必要ないのかちゃんと考えろボケ
void Hoge(int (*a)[][3][4][5]) は通るけど void Hoge(int a[][][3][4][5]) は通らないんだな・・・興味深い
bccだと上も通らない
>>553 もうしわけない。
>void f(int (*a)[][3][4][5]);
>じゃ指定なしじゃどう考えてもまずいだろ
が理解できません。よろしければぜひ。
なお私の考えは
>>552 に示しました。
>>552 gcc -ansi -Wall
で警告が出ないなら問題ないよ
int型関数の場合main()に値を返すことができますよね main()をint型で作ってreturn(0),return(1),return(-1)を返すと どうなるんですか
>>558 プログラムそのものが返す、正常終了したかどうかの値として使われるという感じ
@int main(int argc, char *argv[]) Aint main(void) Bint main() Cvoid main(void) Dvoid main() ANSI C89として間違ってるやつを教えてください 出来れば理由も込みで…
C89なら処理系で定義されてればどんなのでも許される
>>560 C89は前のCの亜流を統一したような規格なので大抵の書き方は許してしまう
何でCだと空を意味するのをvoidにしたんだろ emptyじゃダメだったのけ?
雰囲気的には emptyは、何かあったものが空になったと言うイメージがある。 voidは、もともと空、もともと無いと言うイメージがある。 voidの方が合ってる気はする。
ω・`)ぷ〜
567 :
デフォルトの名無しさん :2010/12/26(日) 19:33:24
>>563 理想的には何も書かない無言であるべきだったが
それだと K&R と互換性が保てないのでやむを得ず新設したプレースホルダー
void main(int ac, char** av) 当方アマチュアなのでもっぱらこれか void main() これだわ。 ラクだし。
まぁいいんじゃない どうせ終了コードなんて滅多に使われない
>>569 タイプ量を数個減らすために警告出すほうが気持ち悪い。
>>533 gccでのコンパイルオプションになにを指定しているのか教えてほしいw
C#の質問はここでいいですよね?
シャラープ(#)
すいませんC言語以前の段階で詰まってるので助けてください
http://www.kazamiya.net/svm/svm-light_install.html ↑
上の手順でmakeをしてコンパイルしろという部分があるのですが、
'make' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
と出ます。色々と調べたら恐らくパスが通ってないってのが原因なのはわかるん
ですが、具体的にどこのパスを通せばいいのかがわかりません。
よろしくお願いします
576 :
575 :2010/12/26(日) 23:07:23
ちなみにvisual c++は入れてあるのですが、これを使ってコンパイルするやり方も よくわからなかったのでできれば教えていただけると嬉しいです
>>575 UNIX/Linux でやれとしか
Windows でどうしてもやりたいなら Cygwin をインストールしてそこでやるべし
579 :
575 :2010/12/26(日) 23:10:32
え、そうなんですか!? Cygwinも入ってるには入ってるんですが。 ちなみにどこを見てunixでやった方がいいと判断されたのですか?
Makefileって知ってる?
Cygwin外からも使えるようにしたければMinGW使ってコンパイルすればいい -mno-cygwinオプションつけてコンパイルすればMinGW使ってくれる
UbuntuとWindowsでデュアルブートする方法お願いします
ソフト自体はWindows版も提供されてるからその必要はないと思うけどな
586 :
575 :2010/12/26(日) 23:25:30
>>580 聞いたことはあるんですが設定の仕方とかわかりません
>>582 そうなんですか、今日一日windowsでやろうとしてたのにorz
>>583 makeのあとにそれをつけるんですか?
589 :
575 :2010/12/26(日) 23:34:24
>>588 おおおおおおおおお!!!!
ありがとうございます!多分それで解決したのかもしれません。
12時間ぐらいかかってたのですがようやく使えそうです。ありがとうございました
UbuntuとかGUIが充実し過ぎててわざわざ使う意味ないな。
あぁ〜、逆にね
たしかに、開発用途だとGUI関連はぽんぽんアンインストールしてるな。
あぁ〜、逆にね
だったらubuntuなんてハイカラなもん使わずに最初からFreeBSDで良くね^^;
595 :
デフォルトの名無しさん :2010/12/27(月) 00:06:18
Ubuntuはインストールの仕方がわからないからだめ 時代はCygwinだよ
CD-Rに入れるだけだろw
>>581 C99 での話です。
>>560 のBは、JIS X3010:2003 6.7.5.3 によれば、
関数定義の一部である関数宣言子で識別子並びが空の場合、関数が仮引数をもたないことを指定する
とあり、JIS X3010:2003 5.1.2.2.1
一、上に掲げた二つの方法のいずれかと等価な方法
に該当するので、Bは無条件に規格合致です。
>>575 VC++ Express Edition ならば、Visual Studio Tool のなかに、コマンドプロンプトがあり、
これを起動すれば nmake が使えます。make も使えますが、unix の make に近いのは nmake のほう。(昔からそうだった。)
このVC の設定をしたコマンドプロンプトは工夫すれば cygwin の bash を起動させることができ、便利に使えます。
>>595 cygwin勧めてるのがこんなレベルの人間だと思われたら困る
Unix,Linuxを使いこなしてる人間がcygwinを勧めてるはず
Windowsでフリーで“使える”コンパイラが無かった時代はcygwinを学校などで使う理由はあったが 今はいらない子だよ
今cygwinを使うとしたら Xサーバー として使うのが有力だろう
デカいIDEはいらないからVC++はオーバースペックすぎるし unixコマンド使いたいからcygwin+gcc入れて使ってます
603 :
575 :2010/12/27(月) 01:05:22
>>598 ありがとうございます。
わからないことだらけすぎて質問がし辛いのでもうちょっと勉強してから
また質問しに来させてください。
みなさん丁寧に教えていただいてありがとうございました。
cygwinのviがショボいんだが
禿同 どうにかならないもんかなぁ
初めてC言語をコンパイラすることを CEXの初体験と言うと聞いたのですが本当ですか? お前はまだCTだって言われたんですがどういう意味ですか?
今どんな気持ち?
viがうまく使いこなせない
ほっほっ
>>598 Windows版のバイナリ使うことで結論でてないか?
>>604-605 vim7.2 enhancedが提供されてそうに見えたけど、だめかい?
だめ!!!!!
そんな7.3すごいの?
モードを芯柱にしたUI設計なんて前世紀の遺物だし今更使い始めても慣れられないのも当たり前だよ
慣れてなさそうなのを明言しているのは
>>608 ぐらいだと思うけど、どうした
時代はCUI
scanfを使って数字を入力するとストリームに改行が残ってしまって次のfgetsで改行を食べてしまうのですが一般的に数字を入力する時はどのような関数を使っているんでしょうか?
年に何度も出る質問だね
fgets→sscanfが結構メジャーな流れです
620 :
デフォルトの名無しさん :2010/12/27(月) 20:25:39
>fgetsで改行を食べてしまうのですが fgetsは関数だ。改行は食い物じゃない。俺おかしなこといってるか?
621 :
デフォルトの名無しさん :2010/12/27(月) 20:27:10
とりあえずfflushでどこかに吐き出すといいよ
windowsでS-Jis(char)を、EUC-jp(wchar_t)に変換する方法ありますか。 EUCかつ一文字が2バイトにしたいです。扱いやすいため。
624 :
622 :2010/12/27(月) 20:35:39
age 正確に言うと、char文字列をwchar_t文字列にする事です。
ふっほっ
626 :
622 :2010/12/27(月) 20:38:47
Sjis(char)をメモリ上の配置気にせずEUC(wchar_t)へ変換したらいいですか。 Sjis(char)→EUC(char)変換→EUC(wchar_t)そのままコピーする。
627 :
617 :2010/12/27(月) 20:49:55
お礼の返事遅れましたが回答頂きありがとうございました! fgets,sscanfを使うようにします。
628 :
デフォルトの名無しさん :2010/12/27(月) 20:51:29
629 :
デフォルトの名無しさん :2010/12/27(月) 20:52:18
何かいてるのかさっぱりわからんがとりあえずここコピペすれば変換ばっちりでつ
どぴゅっどぴゅっ
なんか参考書が難しくてプログラムの動作に追いつけないんだけど ソース眺めてるだけでわかるもんなの なんかいい方法ないですか?
手を動かせ
633 :
デフォルトの名無しさん :2010/12/28(火) 01:24:01
制御・変数・関数について概念と構文を把握する 参考書を捨てて作りたいものを試行錯誤しながら作り上げる アルゴリズムを勉強して↑のコードを書き直す 参考書を買って読む
634 :
デフォルトの名無しさん :2010/12/28(火) 01:26:13
>>631 ソース眺めてるだけでもわかるけど、実際にソースを色々変えてコンパイルしたほうが理解は早いよ。
635 :
デフォルトの名無しさん :2010/12/28(火) 01:36:29
プログラマーって左利き多くね? 俺右利きおわた・・・
ちょっと確認いいですか #include<stdio.h> #include<stdlib.h> #include<string.h> main(int ac,char **av) { printf("%s\n",*av); while(--ac>0&&**++av=='-'){ return(1); } printf("%s\n",(*av)); printf("%s\n",(*(av++))); ←この部分 } ちょっと動作確認してたんですが 最後のprintfの出力はインクリ前の値が 出力されるみたいです。 これ他の関数の場合でも渡してからインクリするんですか
>>637 副作用完了点 でぐぐれ
av++;の副作用完了点は;の直前
つまりavの値を返してからセミコロンに行くまでの間のどこかでインクリメントされる
++av;だったらインクリメントした値を返す
副作用完了点 でぐぐるまでもない
640 :
デフォルトの名無しさん :2010/12/28(火) 04:20:32
>副作用完了点 教科書とかに頼らない独学だとこういった固有名詞を知らないことが多いよね
641 :
デフォルトの名無しさん :2010/12/28(火) 05:16:26
C言語でタブーサーチによる実装を心がけてるんですが、 どこかにソースとかってありませんか? よろしくお願いします
643 :
デフォルトの名無しさん :2010/12/28(火) 08:13:45
>>431 エディタをカスタマイズする。
強調キーワードとか色付けとか工夫しとけ
まさかメモ帳でやっとるわけないよなぁ
644 :
デフォルトの名無しさん :2010/12/28(火) 08:16:43
>>640 教科書三冊読んだけど初めて見ました^^
646 :
デフォルトの名無しさん :2010/12/28(火) 15:13:57
a[i++] = i; と あからさま な奴や a[i++] = *p; /* p = &i */ と ワンクッションかかってる奴 稀に古い書物で出てたりするから危ないんだよな…
______________________________________ | ノ´⌒ヽ,, | | γ⌒´ ヽ, | | 以下 // ""⌒⌒\ ) | | ミンシュトー創設者 i / \ / ヽ ) | | ルゥピー・ウェールズからの !゙ (・ )` ´( ・) i/ | | メッセージをお読みください | (__人_) | | | \ `ー' /. | | ハ',::ヽ ハ、. | | ,,、-'´ |\`ヾ::::::::::::ィ / | ``ヽ─-、. |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
やーだお(´・ω・`)
ちょいと疑問に思った事なんですが、 何でforのループとかって「i,j,k,l,m,n」辺りがよく使われるの? 「i」が「iterate」の頭から来てるのは何となく分かるんだけど、 その他って何か理由があったりするの?
関係ないよ(キリッ
653 :
デフォルトの名無しさん :2010/12/28(火) 18:51:10
関係ないよ(キリッ(キリッ
iterateなんてC++以前は全然使われてなかった k,n辺りは数学で使われてたΣとかで FORTRANの暗黙で整数型はintegerから来てるんじゃないかな
iはindexのiではないか?数学で、要素の一時的な添字は慣習的に、i,j,kなどを使うので それに倣ったんじゃないか。
すいません。 あるRGB値のテーブルが定義されていて、 0xffffff 0x888888 0x444444 0x123456 ある任意のRGB値が与えられた場合に、 テーブルの中から最も近い色のRGBを取り出す、 ということをやりたいのですが、どういう比較をすればいいでしょうか。
ググったら情報が出てきたわ。 (r1 - r2)^2 + (g1 - g2)^2 + (b1 - b2)^2 を比較すれば良さそうですね ありがとうございました
660 :
デフォルトの名無しさん :2010/12/28(火) 21:21:30
そうとは言えないだろ。色合いが近いって意味でしょ。 距離では人間のみためを正しい表さないとおもう。
おおう。どうすれば。。
減色するときに似たようなことやったけどね そのままじゃベタっとするから拡散すればいい
用途によるけど、別にRGB空間での距離でも問題ないと思うが。 HSVでもHLSでもLABでもYUVでも好きな色空間に変換してから距離を求めれば?
LAB 以外は投影モデルが円柱だったり円錐だったりするので ピュアに距離比較するなら 球に相当する LAB が良いかも?
665 :
デフォルトの名無しさん :2010/12/29(水) 01:16:04
最近質問の内容が難しすぎて本当にC言語初心者か?って疑いたくなる もっと簡単な質問にしてくれよ
わからないなら黙ってろ
for(i = 666; i < 668; i++){ printf(">>%d\nお前も分からないなら黙ってろクズ \n", i); }
i < 669 の間違いじゃねえの
>>665 C言語として難しいことは何もしていないからねぇ。
673 :
デフォルトの名無しさん :2010/12/29(水) 14:24:09
このスレ入門者のためのスレだろ。 中級、上級のためのスレってないの?不公平やないか
ほっほっ
Windowsのみなさんエディタなに使ってますか?
676 :
デフォルトの名無しさん :2010/12/29(水) 15:41:43
秀丸エディタ
秀丸ってコンパイル出来ないじゃん
678 :
デフォルトの名無しさん :2010/12/29(水) 15:45:41
エディタだからいいだろw
NetBeans
あぁん?ぷよぷよの悪口か?
681 :
デフォルトの名無しさん :2010/12/29(水) 16:08:08
HOLDの甘さ蜂蜜級
秀丸って拡張子.cのファイル作ってからじゃないとダメなの?
683 :
デフォルトの名無しさん :2010/12/29(水) 16:34:38
HOLDの甘さ砂糖級
最近は専らxyzzyかvimだな。
あれ?NetBeansだめなのか?
C言語を始めよう!
ロシヒカリってなんですか?
お米
ロシヒカリなんてあるのか
なんか力が抜ける響きだな
ロシヒカリw
cygwinのエラー張りたいんだけど ドラッグで範囲選択できない なんか方法ないですか?
パイプでもつかったら?
>>692 [編集]-[選択範囲]
マウスで範囲選択した後、Enterキーでクリップボードに入るはず
a.c:28: error: stray ‘\201’ in program a.c:28: error: stray ‘@’ in program a.c:28: error: stray ‘\201’ in program a.c:28: error: stray ‘@’ in program a.c:28: error: stray ‘\201’ in program a.c:28: error: stray ‘@’ in program エラーの一部です @も\201もコードに書いてないはずなんですが どういう意味のエラーですか
'\201'は8進数で201、つまり16進数で81 '@'は文字コードにして16進数で40 8140といえばSJISの全角空白
ありがとう 16進数ででるんですね でもシフトジスは関係ないですね 81と40はビンゴです、
何を言っているんだか。
コンパイラのエラーから察すると 0x81 0x40 という並び文字だ この並びで意味あるペアといえば SJIS で全角空白 ゆえに ソースは SJIS で開くと 28行目に 全角空白が 3発入っている箇所があるはずだ インデントの時に全角空白入れてしまった か "が漏れた か
>>699 のみて確認したら全角でした
81,40も#defineで使ってたんですが見当違いのようです。
驚嘆しました
よくあること。 >16進数ででるんですね これも見当違いであったことに気付いてほしい
コンパイルエラーを解説する本が出たら売れると思う
プログラム上でbmpファイルをひとつのフォルダにたくさん保存したいのですが、 例えばbmpファイルを image001.bmp image002.bmp image003.bmp ... というように順番に自動で保存していく方法を教えてください。 このときにフォルダ内に既にimage002.bmpがある場合はimage003.bmpという名前から保存し始めたいです。
704 :
デフォルトの名無しさん :2010/12/30(木) 07:55:13
ループの中で既にそのファイル名がある場合はcontinueすればいいんじゃない? 既にそのファイル名があるかどうかの確認はAPIつかってもいいし rモードでのfopenが成功するかどうかでもいいし
コイツラわざとやってるんだろうか?
$ gcc a.c /cygdrive/c/Users/mituru/AppData/Local/Temp/cckRIuT4.o:a.c:(.text+0x338): undefi ned reference to `_fpintf' collect2: ld returned 1 exit status なんじゃこりゃあ 解決方法おしえて
× fpintf ○ fprintf
英語も読めないのか……
俺はドイツ人だから英語はちょっと・・・
ドイツ人は英語できるよ
711 :
デフォルトの名無しさん :2010/12/30(木) 13:50:20
英語のできるドイツ人もいる。 英語のできる日本人もいる。
undefined reference to `_fpintf'を翻訳サイトにかけたら、 「_fpintfへの未定義の参照」とでた。つまり、 「'_fpint'という未定義な命令を参照しているから、定義を見直してください」 ということだろう。
713 :
デフォルトの名無しさん :2010/12/30(木) 14:08:14
714 :
デフォルトの名無しさん :2010/12/30(木) 14:32:15
そうだね。
715 :
デフォルトの名無しさん :2010/12/30(木) 15:00:10
バッファってC言語の世界では配列とか変数のことをさしてるんですか? 一時的にデータを記憶するものと認識してるんですが、、。 標準関数のリファレンスみてるとストリームやらバッファなど難しい言葉があってわからん
716 :
デフォルトの名無しさん :2010/12/30(木) 15:04:38
バッファは文字通り「緩衝」 AからBに何かを移すときに、その間に一時的に保持する緩衝領域。
>>703 話聞いてたら欲しくなったので自分用に書いた。エロ画像整理に便利かと思って。
標準入力のリストから、ファイルを連番でコピーする。
http://ideone.com/2CKH6 ls や find と組み合わせて使う前提。
テキストファイルでリストを作って
a.jpg
b.jpg
c.jpg
cat list.txt | ./renban newlist
とかでもいい。ようするにファイル名リストの文字列をパイプで流し込めれば、何でもいい。
718 :
デフォルトの名無しさん :2010/12/30(木) 15:15:48
>>716 その緩衝領域はプログラマが参照してはいけない領域なんですか。
モニタにどういう値が格納されているかモニタに表示させたい
長さx=1のベクトルを-90度回転させたところ xに1.2086-e008 yに0 zに-1 という数値がでて長さが変わってしまいました。 これは計算誤差という奴ですか? いちおうベクトルの長さを100倍して x,y,zそれぞれ100で割ってベクトルを正規化するという処理を行うことにしたのですが 普通はどうやるのでしょうか? ちなみに回転の計算はOpenGLでやりました。 よろしくお願いしますm(_ _)m
はい、計算誤差というやつです。 普通は無視します。 1 が 1.00000001 になっても大抵どうってことありません。
>>719 1.2086-e008 =0.000000012086
ですから、誤差でしょうね。
コンピュータのくせに計算誤差とか許せんな
そうだよな、許せんよな 窓から投げ捨てようぜ
俺の方がよっぽど正確に計算できる
俺だってできる 遅くてもいいなら
OpenGLということはfloatで計算しているのかな? floatなんて、10進数換算で高々7桁しか精度がないから1e-8なら量子化限界以下だ。 その新しいxに1を足してから1を引けば綺麗さっぱり0になるんじゃね?
double使いやがれ!
誤差がイヤならBCDライブラリでも作るといい。勉強にもなるし。
座標データは量が多くなりがちだからfloatにしてるんじゃないの?
730 :
デフォルトの名無しさん :2010/12/30(木) 19:00:52
>>728 アホ
BCD でも誤差はなくせん
数学の式をそのまま保持し続けなきゃ無理だよ
>>730 無限小数みたいな表現不可能な値はどんな方法使っても不可能だが、それ以外はBCDでカバーできる。
もちろん計算も自前で作るのが前提だから、その意味で「ライブラリ」と言っている。
有理数なら分数で扱えば?
二進化十億進有理数でよろ
735 :
デフォルトの名無しさん :2010/12/31(金) 17:32:18
動的メモリと静的メモリ領域って 動的→プログラム実行中に確保 静的→コンパイル時に確保 という違いですか? またfree()しなければいけないのはなぜ?
>>735 だいたい合ってる。
動的というのは、コンパイル時点でサイズが分からない(変動する)から確保しようがない、ということ。
free()は、長時間常駐するようなアプリじゃないとおそらく必要性が実感できないだろう。
人が少ないのは大晦日だからですか
>>735 > またfree()しなければいけないのはなぜ?
どんどんメモリを確保していったら、いずれメモリを使い尽くして空き領域が無くなってしまうから
使い終わった不要な領域はfreeで解放して空き領域に戻しておけば、また使える
freeしてもすぐに解放されてる訳じゃないけどな
こまけぇこたぁいいんだよ (AA略
メモリ消費を気にしないならfreeしたくなかったらしなくてもいい プログラムが終了すればOSが解放するから他への影響は無い OSが無かったりOSがメモリ管理する気がないやつだったら別だけど
int a=741; return a;
俺はお前ら底辺と違って富豪的プログラマーだから
744 :
【だん吉】 【1606円】 :2011/01/01(土) 00:07:11
!omikuji!dama
745 :
【豚】 【1171円】 :2011/01/01(土) 00:07:54
基本情報技術者試験に合格できますように。
>>745 豚終わったな。俺は基本は前回受かった。次は応用受ける
今年から本気出す
豚・・・
基本情報とかまだ大丈夫だろ
750 :
デフォルトの名無しさん :2011/01/01(土) 02:20:52
#include<stdio.h> #define MAX 256 main(){ int count[MAX]; int c; int i; for(i=0;i<MAX;i++) count[i]=0; while((c=getchar())!=EOF) count[c]++; for(i=0;i<MAX;i++) printf("%d:%d\n",i,count[i]); } コンパイルできません cygwinです comand not foundになります アドレスは指定したんですが
>>750 コンパイラをインストールしていないか
path の設定ができていない
752 :
デフォルトの名無しさん :2011/01/01(土) 02:32:02
具体的にどうすればいいですか><
>>752 1) cygwin のコマンドラインで which gcc とした結果を教えてください。
2) cygwin のコマンドラインで set とした結果を教えてください。
結果は
タイトルバーのところで右クリック->編集->範囲指定
マウスで範囲指定(左ドラッグ)
タイトルバーのところで右クリック->編集->コピー
でコピペできます。
ほっほっ
ふっほっ
756 :
デフォルトの名無しさん :2011/01/01(土) 03:39:10
>>750 cygwin をインスコしたときに setup.exe というファイルを実行したはず
(持っていなければ
http://www.cygwin.org からゲット)
そいつが表示するウイザードを [次へ>] で進めていくと8ページ目くらいで [Select Packages] というツリーが出る
[All]-[Devel] の中に [gcc-core: C compiler] があって、そこに [Skip] と表示されていたらそれが原因
[Skip] をクリックすると日付っぽい表示に変わる(クリックから表示までラグがある)
この状態にしてから [次へ>] で最後までインスコを済ませれば cc が使えるようになっている
757 :
756 :2011/01/01(土) 03:40:15
べっぽっ
どぴゅっどぴゅっ
初GUIでRPG作ろうと思ってある程度組めたんだけど素材集めで手が止まってしまった
スレ違い
すいまえんでした;;
ほっほっ
ぬりゅっぷぬりゅっぷ
ぬるぽっぬるぽっ
766 :
デフォルトの名無しさん :2011/01/01(土) 12:51:13
>>753 へwhich gccから
$ which gcc
which: no gcc in (/usr/local/bin:/usr/bin:/bin:/cygdrive/c/Program Files/Common
Files/Microsoft Shared/Windows Live:/cygdrive/c/Windows/system32:/cygdrive/c/Win
dows:/cygdrive/c/Windows/System32/Wbem:/cygdrive/c/Program Files/Softex/OmniPass
:/cygdrive/c/Program Files/pcdNavi/bin:/cygdrive/c/Program Files/Common Files/Ro
xio Shared/10.0/DLLShared/:/cygdrive/c/Program Files/Common Files/Roxio Shared/D
LLShared/:/cygdrive/c/Program Files/Common Files/Ulead Systems/MPEG:/cygdrive/c/
Program Files/Fujitsu/sadata:/cygdrive/c/Program Files/QuickTime/QTSystem/:/cygd
rive/c/Program Files/Windows Live/Shared:/cygdrive/c/Program Files/Microsoft SQL
Server/100/Tools/Binn/:/cygdrive/c/Program Files/Microsoft SQL Server/100/DTS/B
inn/:征/)
767 :
デフォルトの名無しさん :2011/01/01(土) 12:52:10
770 :
デフォルトの名無しさん :2011/01/01(土) 15:15:03
がめんなさい
771 :
デフォルトの名無しさん :2011/01/01(土) 15:20:13
しゅみません #define hoge hage とするとhogeをhageと定義するということになりますが、 #define hoge の一文しかない場合はどういう意味になるんでしょうか? よく #ifndef hage #define hage 〜処理〜 #endif というような流れでみます。
何も置換されない 文中にhogehogehogehogeとか書いてもプリプロセッサを通った後 コンパイラが処理する時には無くなっている 置換はしないが、プリプロセッサはhogeというシンボルがある事は記憶するので #ifdefや#ifndefで判断できる
#define DEBUG 〜処理〜 #ifdef DEBUG printf("何かしらの結果"); #endif
Eオプションで展開後のソースを確認してみるといいよ
775 :
771 :2011/01/01(土) 16:45:26
すみません。みなさん、おかげさまで大体のことはわかりました。
自分はオブジェクト指向系の言語からきてCにチャレンジしているので
まだまだ、わからないことばかりですが、がんばっていきます。
大体、のことは色々わかりましたので、Eオプションでやってみたり
して調べて見ます。
>>773 さんのは、デバッグのときに有効な手法なんですね。
色々ためしてやってみます。どうもありがとうございました。
ほっほっ
ふっほっ
ちょww >ミス日本の候補者は、さまざまな勉強会に参加しない面にも磨きをかけている。
べっぽっ
ほっほっ
781 :
770 :2011/01/02(日) 10:29:27
>>771 オブジェクト指向系の言語とは、例えばどんな?
782 :
770 :2011/01/02(日) 11:52:03
誤爆しました><
783 :
デフォルトの名無しさん :2011/01/02(日) 12:34:12
glibc-2.7のgettimeofday.cを見るとマイクロ秒が入る変数に0Lを 代入しています。 それなのになぜgettimeofday関数はマイクロ秒を取得出来るのでしょうか? 見ているソースコードは./glibc-2.7/sysdeps/posix/gettimeofday.cです。
そりゃお前(ry
マイクロ秒が入る変数に0Lを 代入していません。
たぶん実際に使う関数はそれじゃないんじゃないかな
787 :
デフォルトの名無しさん :2011/01/02(日) 14:40:14
>>787 ×*i++
○(*i)++
∵*i++ ≡ *(i++)
あとそのコードでは 16 個全部に値が入ったときに破綻するのでは?
789 :
デフォルトの名無しさん :2011/01/02(日) 14:57:23
>>788 ++のが*より早いと言うことですね
ありがとうございました。
そして data[*i]!=-1 && *i<16 と改善して16個入力しても上手く実行できるようにしました。
御指摘ありがとうございました。
え?
とあるサイトに「strはローカル宣言なので、この関数が終ると同時に開放されてしまいます したがってこのアドレスを戻った先で使おうとしても内容は保証されません」と書いていました char *func(val) int val; { char str[512]; sprintf(str,"val = %d",val); return(str); } そこで逆のパターンなのですが、アドレス渡しした変数iのデータは関数funcで確実に保証 されるのでしょうか? 結構使っていると思うのですが… void main(){ int i=100; func(&i); } void func(int *val){ printf("%d",*val); }
何が逆なんだw
i は main が終わるまでは活きている ただそんだけ
>>793 なるほど、ありがとうございます。
ではイベントからスレッドへのアドレス渡しの場合はどうなるとおもいますか
void OnButton(){
int i=100;
_beginthread(thread, 0, &i);
return;
}
void thread(void *data){
printf("%d",*(int*)data);
}
この場合、OnButtonイベントからすぐにリターンするので
スレッド内で引数 i は保証されないような気がしますが
(Windowsだとして) どうなるか不明だと思うよ OnButton から戻るのが先か _beginthread で新しく作られたスレッドが呼び出されて終わるのが先か 時間t → メインスレッド OnButton --- _beginthread --- OnButton からの戻り thread() ---- thread からの戻り thread() ---- thread からの戻り thread() ---- thread からの戻り 何時別スレッドへディスパッチかかるかはわっからん
てすお
797 :
795 :2011/01/02(日) 18:45:21
ちょっとずれたけど、意図は伝わるかな? マルチスレッド環境下で、そういう生命期間の怪しいものは、保障できないものとして考えると良いよ (だから別スレッドへ渡すものは、生命期間がスレッドよりも確実に長いものを渡す) スタック追跡したいとかの用途で あえて無茶な呼び出しも考えられるけど… そんなの特殊すぐる
798 :
794 :2011/01/02(日) 19:07:22
>>797 返答ありがとうございます。
意図は伝わりました。
今までの話はWindowsを前提にしているのですが
どうなるか不明ということは i は確実に保証されないということですね
いままで気づかなかったのですが、猫でもわかるのページでは
スレッドに値をアドレス渡しする場合にはstatic宣言していました。
今後はスレッドに値を渡すときはstatic宣言するように気をつけます
こうやって、グローバル変数が増えるのでつねw
マジ釣れたの? 暇人だな
>>799 VCの_beginthreadで作成したスレッドに確実に値を渡す方法は他にあるのですか?
>>802 まあ、mallocでヒープメモリー確保して渡す方法もある。
その他にもある。
>>803 なるほど、確かにmallocだと値は確実に保持されると思いますが
プログラムが遅くならないですか?
他にも方法があるなら教えて欲しいです
よくよく考えると今作っているプログラムのスレッドにstatic変数を渡すとまずいことが分かりました 今作っているプログラムはボタンを押すとダウンロードスレッドが立ち上がるようにしているのですが ダウンロードスレッドが一つの場合は問題ないですが、複数のスレッドの場合、static変数にすると 別のスレッドで値が書き換わるように思えてきました。
>>804 基本的にメモリー管理の問題だ。
メモリーには3つ有る、スタックエリアとグローバル(静的)メモリー、ヒープメモリー
スレッドを使う場合、スタックエリアをデーター渡しにするのはあまり良くない。
(と言うか俺は禁止するがな)
複数スレッドを起動したい場合、スタテックなラベルを使用すると大変だ。
(と言うか複数スレッドにデータ渡しでラベルは、俺なら禁止事項だ)
後は、メモリー管理処理を作って、複数のメモリーブロックを管理する。
その場合、グローバル領域に作ると個数制限が出る。
(最大個数が決まっていればそれでもいい)
ヒープで作れば、個数やメモリー制限が少ない。
メモリー確保は、管理処理から空いてるメモリーブロックを受けるだけなので、スピードは速い。
でもだ、これはあくまでも複数スレッドを管理するときだけで。
「単純スレッドなら、スタック以外何でもいい。」
余分な事だが、スレッド間通信を多用する場合。通信データーのメモリー管理を作ると
後々色々楽になる。
これはあくまでも俺の主観だ。
>>806 ご説明ありがとうございます。
結局はヒープを確保してスレッドに渡すしかないようですね
メモリー管理処理とは初めて聞いたのですが、JAVAなどのガベージ・コレクタと考えて宜しいのでしょうか
>>807 いや、単純に固定ブロックのメモリーを幾つかもって使用中や空きの管理。
とても高速に管理するだけ。
これの利点は色々ありすぎて説明が大変になってくるので、パスしたい…のでよろ。
809 :
デフォルトの名無しさん :2011/01/02(日) 22:01:45
>>786 ありがとうございます。
どこにあるか分かる方、いないでしょうか。
一応、glibc-2.7ディレクトリ内のgettimeofdayと名がつくファイルを検索したところ
上記の他に
./time/gettimeofday.c
./sysdeps/posix/gettimeofday.c
./sysdeps/unix/sysv/linux/x86_64/gettimeofday.S
./sysdeps/unix/sysv/linux/powerpc/gettimeofday.c
./sysdeps/unix/sysv/linux/alpha/gettimeofday.S
./sysdeps/mach/gettimeofday.c
と出ました。
intelの64ビットCPUを使っていて、OSは32ビットのもの、なおかつ一番上はエラーを返すだけなので
./sysdeps/posix/gettimeofday.c
./sysdeps/unix/sysv/linux/x86_64/gettimeofday.S
の2つに絞って読みましたが(OSは32ビットなのでx86_64はないと思いますが・・)
上記は先ほど説明したとおり、
下記は64ビット命令のため、知識がほとんどなく、調べても読むことが出来ませんでした。
またgrepでも検索をしましたがそれらしきものを見つけることは出来ませんでした。
us単位なんて出るわけないだろ 時間関係の関数は全てカーネルのタイマ割込み間隔に依存する 4msぐらいじゃなかったか
ほっほっ
ふっほっ
sysdeps/unix/syscalls.listから自動生成されるんじゃないかなぁ なんにせよカーネルのgettimeofdayを呼ぶだけだと思うよ
13 : ななしのよっしん :2010/05/11(火) 00:02:40 ID: c9tRC0XT4j
何お前ら佐倉紗織ディスってんのか
そんな空耳なんか書き込んで楽しいの?
そもそも椅子取りなんか聞こえないが
ファンとしてはマジイライラするわ
マジ氏ね
14 : ななしのよっしん :2010/05/11(火) 00:09:45 ID: NxfYIO7cl1
>>13 何
そ
そ
フ
マ
・・・?
16 : ななしのよっしん :2010/05/26(水) 16:22:10 ID: 2H5NgzDKW0
なんでもかんでも空耳つければおもしろいと思ってる人は何なの。
きしめんはまぁ良いとしても、無理矢理なの多すぎだろ。
17 : ななしのよっしん :2010/06/05(土) 22:05:30 ID: 6vZhnMoj4A
>>13 >>16 それが大多数にウケてる現実を見ようw
それでも嫌なら見ないほうがいいw
815 :
デフォルトの名無しさん :2011/01/03(月) 03:51:28
>>810 そうなんですか?検索して調べるとマイクロ秒の取得が出来ると書いてあったのですが・・
>>813 システムコールにgettimeofdayがあるんですね。
それならglibc内にないのも頷けます。
ちょっとカーネルのソースコードから探してみます。
ありがとうございました。
>771>775 今さら見ていないかもしれないけど。 >772さん自身はわかっていそうだけれど >何も置換されない 「何にも置換されない」のではなく「無に置換される。」 >文中にhogehogehogehogeとか書いてもプリプロセッサを通った後 >コンパイラが処理する時には無くなっている トークンとして"hoge"と"hogehogehogehoge"は別物なので #define hoge で"hogehogehoge"は無くなったりしない。
そんなこと分かってます。
818 :
794 :2011/01/03(月) 11:42:06
VCのプログラムでスレッドに安全に値を渡す方法についてですが 以下のような方法は問題ないのでしょうか。 struct DAT{ int a; char b[30]; }; char mem[100]; void OnButton(){ DAT d; d.a=100; strcpy(b,"AAA"); memcpy(mem,&d,sizeof(d)); _beginthread(thread, 0,NULL); } void thread(void *data){ DAT d2; memcpy(&d2,mem,sizeof(d2)); printf("%d %s",d2.a,d2.b); }
819 :
818 :2011/01/03(月) 11:44:22
書き忘れましたが、スレッドを使わない簡単なプログラムでは コンパイル、実行結果、問題なく動きました
そのボタンを目にも止まらぬ早さで2連打したら問題ありそうな予感 え、そんなこと無理? まぁそうかもしれない
>>820 すみません
簡単に書いたのですが、実際にはmemの開き領を調べて
空きがある場合にコピーして、ない場合にはエラーを返すように考えています。
あまり一般的な方法ではないような気がして質問しました
いいんじゃない 別に一般的な方法にこだわる必要はない 動けばいいのさ
DATをmallocして map<threadid,DAT*> threads のようなスレッド管理オブジェクトに詰め込むのが一般的じゃないかな DAT構造体にbool quit;みたいな終了フラグを入れとけば 外部スレッドから自殺を促せるし サブスレッドが走っているのにメインスレッドを終了する事もなくなるから。 終了時はどうでもいいってことなら スレッドに渡したパラメーターのコピーが終わるまで スレッド生成側がスコープを抜けないように イベントやセマフォ、スピンロックなどを使って同期を取ればいいと思う
あぁ、どうでもいいなら 同期取るよりmallocで渡してthread側でfreeしちゃうほうが楽だね
825 :
デフォルトの名無しさん :2011/01/03(月) 13:02:23
すみません。煽りとかじゃないんす。 ここで、よくmallocとかけっこうCの実践的な質問をみるんですが、 いまどき、Cで開発してるところって、真面目にあるんですか? 一度もみたことないんです。。
826 :
818 :2011/01/03(月) 13:13:07
>>823 確かにヒープが一般的だと思いました
ただ強制終了した場合にヒープだとメモリリークになるような気がしましたので
外部変数を考えました
組み込みではCが普通
組み込みではアセンブラを使ってマジックナンバーするのが普通
>>826 リークしないように管理すればいいじゃん
てか、サブスレッドを強制的に落とすのはOKでリークはNGな理由は何?
>>829 例えばサブスレッドではデータのアップ、ダウンロードを行うのですが
そのスレッドが強制終了などで中断されてもアップなら再アップロード
ダウンなら再ダウンロードを行えば問題ないと思います
メモリリークの場合は利用者が一日中パソコンを起動しているケースや
メモリが少ない場合はパソコンが不安定になるかもと考えたからです
動的にメモリを確保したままプログラムがなんらかのバグで
強制終了してもパソコンに全く影響がないのであればヒープを使います
用語が錯綜しとるな −スレッドの強制終了 ・(Win32)TerminateThread や 構造化例外を受けての脱出 ・ユーザーの入力による脱出の選択処理 前者は間接的にリークを起こす可能性を秘めてるんじゃ… (おおよそ、プロセス終了時に解放してくれるだろうけど)
>>824 VCの malloc/free (ついでに new/delete) はスレッドセーフだっけ? <malloc/free のスレッドが異なる
いつも同じスレッドで入れ子に取り扱ってることが多いから ふと疑問におもた
>>830 レジューム出来るようにすりゃいいじゃん
いっそのこと並列DL/ULに上限を設けて配列にしちまえ
>>831 分かりづらくてすまない
自殺or自然死以外という意味です
>>832 プロセス内で共有してるから開放できるよ
int x[MAX]; int top=0; int push(int n) { int (top>=MAX) return(ERROR);/*Overflow*/ x[top++]=n; return(n); } int pop(void) { if(top<=0) return(ERROR);*/Underflow*/ return(x[--top]); } スタックのコーディングです なにをやっているかまったくわからないんですが 教えてください
スタックだな
スレッドについてだが。 サンプルとか、本とかで簡単にスレッド実行ができるが。 サンプルスレッド(簡単)>>>>(技術的・設計的壁)>>>>実用的にスレッド使用 の隔たりがある。心にとどめておいてくれ。
そんなのスレッドに限ったことじゃないし。なんでドヤ顔してるの?
不等号の向きが気になる
840 :
837 :2011/01/03(月) 18:02:19
なんだ?俺が何か間違ったこと言ったか? お前らド低脳のために高脳の俺が助言してるんだが。 これくらい理解出来ないと技術者にはなれないぞ。
ファビョったw
842 :
デフォルトの名無しさん :2011/01/03(月) 19:50:25
C言語を勉強中のものです
6つの要素からなるベクトルの角度を求めるっていうプログラムを作ったのですが
http://codepad.org/l1zDb90Z にあるように、めっちゃエラーを吐いてしまって自分ではどうにも出来ない状態です。
だれか助けてくれませんでしょうか・・・
全角スペース
>>842 > /*ユーグリッド距離の計算*/
正しくは「ユークリッド」(Euclid)ね。
「マゼンタ」を「magenda」と綴ったりする間違いがあると、
ああ日本人が書いたんだなって予想がつくw
>>842 まずエラーメッセージを丸ごとぐぐってみなよ。ダメ元で。
"stray '\343' in program"
846 :
842 :2011/01/03(月) 21:00:03
849 :
842 :2011/01/03(月) 22:11:08
>>834 について少々調べたつもりですが結局last in first outは
どういうとこで役にたつの?
再帰とか?
rbuf[(head+count)%MAX]=c; この%ってなんですか
文字列テンプレートだよ
int* (***p[MNTS][STS])(int (***[MNTS][STS])()); ってどう読むんですか? 先輩に聞いたら、気にしなくてもいいよ なんていってたけど、気持ち悪いんで教えてください。
857 :
デフォルトの名無しさん :2011/01/04(火) 00:24:20
まったくのスレ違いであることを承知で尋ねることを、どうかお許しください! 中々答えが得られず非常に困っているのです。 ワープロのフロッピーをパソコンにデーター移行することができず、その際 のキーワードが『CSO』となっております。 カシオのワープロを5、6年前まで使っていました。ウィンドウズXPを使う ようになり、その際保存していた1部の2HDの内容をパソコンに移しました。 その時はテキスト形式で何の問題もなく移行できました。使用したUSBはLogi- tecという会社のドライバー器具です。 ところが先日別の2HDフロッピーで同作業を試みると、ファイル名やテキス トの拡張子(?)がCSOとなっていて、開くことができません。 これは自分の操作で解決できる類のものなのでしょうか。また、前回できた のに今回こういう風になったのは何故なのでしょうか。 どなたかスムーズにデータ移行できる方法をご伝授ください!
>>858 ワ
キ
の
し
た
と
で
こ
の
な
か
860 :
857 :2011/01/04(火) 05:57:41
>859は俺じゃないが礼を尽くした相手にこのざまとはな
なにこいつ
カシオに聞けとしか言いようが無い
863 :
デフォルトの名無しさん :2011/01/04(火) 07:10:41
csoファイルをバイナリエディタで開きます 元のデータを思い出しながらcso→元のデータに変換するプログラムを書きます 思い出した元のデータをそのままファイルに書き出します おわり
>>855 関数ポインタテーブルを受け取って処理し、
関数ポインタテーブルを返す関数、だな
状態遷移関数を実行するための関数とかか?
気になってしょうがありません。
867 :
デフォルトの名無しさん :2011/01/04(火) 10:40:47
int型を返す関数へのポインタへのポインタへのポインタの要素数STS個の配列の要素数MNTS個の配列を引数に取りint型へのポインタを返す関数へのポインタへのポインタへのポインタの要素数STS個の配列の要素数MNTS個の配列
868 :
デフォルトの名無しさん :2011/01/04(火) 10:46:17
伺いたいことがあるのですが、C言語で あるデータの情報を処理→その情報とデータベースにある不特定多数の情報と類似度計算→その類似度が高いヤツをピックアップして表示 って感じのプログラムを作らなきゃならなくなったんですが、そもそもデータベースをC言語使って操作とか計算とか出来るのでしょうか 助言をお願いします。。。
>>868 ライブラリがあればできる
詳しいことはデータベースの開発元に聞け
871 :
デフォルトの名無しさん :2011/01/04(火) 11:14:02
>>869 ありがとうございます!やってみます。ひとまずMYSQLのアクセスとかで調べてみます
あと出来ればこう言うのについて詳しく書かれてる場所があれば教えて欲しいのですが、どこかにあったりしますか?
さげ忘れました。すいません
873 :
デフォルトの名無しさん :2011/01/04(火) 11:18:25
そもそもsageる必要はない。
874 :
デフォルトの名無しさん :2011/01/04(火) 11:19:14
その通り。むしろこのスレはage推奨とされている。
>>871 "MySQL API C"でググればたくさん出てくる
>>855 こんなコードって多用されるの?
読める人は凄いな
多用はされないだろ。こんなの出てくるなら設計見直す。 出てくるとしてもtypedefする。
ポインタ完全制覇を読み終えたぐらいのレベルなんですがC言語のTCP/IPプログラミングを勉強するのに良い本またはサイトがあるでしょうか。
typedef でなんとかなるレベルじゃねーし関数ポインタの引数が出てくるまで煮詰めたコードを汚いからと作り直すバカは居ねえと思うがね
881 :
デフォルトの名無しさん :2011/01/04(火) 14:40:23
>>879 「ソケットプログラミング」でググッてみるとか。
>>880 >typedef でなんとかなるレベルじゃねーし
関数ポインタをtypedefしたことがないんですね。
>関数ポインタの引数が出てくるまで煮詰めたコードを汚いからと作り直すバカ
妄言過ぎて言葉も出ない
>>882 関数ポインタはtypedefできねーよ馬鹿
>>881 良いサイト見つけました。
どうもありがとう。
if、switch、for、while、配列、多次元配列などを勉強しました。 次は何を勉強すればいいですか?独学でやtってます
リスト
890 :
デフォルトの名無しさん :2011/01/04(火) 16:24:46
>>888 いままでのおさらいでマスターマインド作る
>>890 難しそうで避けて通っていましたがテキストも次が関数なので
やってみます><
テキスト通りにやれよw
#include <stdio.h> int Tashizan(int a, int b){ int c; c=a+b; printf("%d + %d = %d\n",a,b,c); } int Hikizan(int a,int b){ int c; c=a-b; printf("%d - %d = %d\n",a,b,c); } int main(void){ int a; int b; a=1; b=1; Tashizan(a,b); a=2; b=1; Hikizan(a,b); return 0; } ----------------------- 警告:関数は値を返すべき(関数 Tashizan) 警告:関数は値を返すべき(関数 Hikizan) とでるのですが、どうすればいいですか? 使っているコンパイラソフトは「C言語を始めよう!」というフリーソフトです。
returnすればいいです
>>896 Tasizan、Hikizanをそれぞれ「return 0;」で
値を返せばよかったのですね!解決しました!
#include <stdio.h>
int a,b,c;
int Tashizan(){
c=a+b;
printf("%d + %d = %d\n",a,b,c);
return 0;
}
int Hikizan(){
c=a-b;
printf("%d - %d = %d\n",a,b,c);
return 0;
}
int main(void){
a=1;
b=1;
Tashizan(a,b);
a=2;
b=1;
Hikizan(a,b);
return 0; }
--------------------------------
>>895 のint a,b,cをグローバル変数にしたところ
警告:プロトタイプ宣言のない関数(Tasizan,Hikizan)の呼び出し(main)
とでました。どういうことなのでしょうか?
900 :
デフォルトの名無しさん :2011/01/04(火) 21:34:25
>>898 引数が空括弧の関数定義は「プロトタイプ宣言」としての効果を持たない
> int Tashizan() {
↑
ここ
C++ と混同する者がよくいる要注意箇所である
C ではプロトタイプ宣言なしで呼び出した関数は引数の宣言がなく int を返すと仮定される
> Tashizan(a,b);
よって仮定された関数の型は合っていて
>>899 はウソ
正しくは
> int Tashizan()
を
int Tashizan(int a, int b)
とすれば「プロトタイプ宣言された」と見なされる
ちなみに、それはあくまで「警告」であってエラーではない
場合によっては無視する判断も必要になる部類のメッセージだ
>>899 >>900 ありがとうございます!解決しました!
つまり、関数の利点って、mainで指定した値をそれぞれの関数で別に使えるってことですよね?おそらく
呼び出し元を修正しろ
903 :
デフォルトの名無しさん :2011/01/04(火) 22:22:04
>>901 あせるな
作ろうとしているプログラムが複雑になるほど
複雑さをしまっておける収納箱のありがたみは
追わなくても向こうからついてくる
ついてくるね
ついてくるな
ついんてーる
関数ポインタをqsortでしか使ったことないんだけど 例えばどういった便利な利用方法があーる?
909 :
デフォルトの名無しさん :2011/01/05(水) 00:10:54
910 :
デフォルトの名無しさん :2011/01/05(水) 00:15:04
追っかけにくいから、関数ポインタが嫌いな人もいる。 場合分けがはっきりしてる時は、便利かも
g_state = TITLE; if(g_state == TITLE){ title_func(); } else if(g_state == PLAY){ play_func(); } が func_tbl[g_state](); になって嬉しく感じられる人がいる
g_state = TITLE; if(g_state == TITLE){ title_func(); } else if(g_state == PLAY){ play_func(); } なにこの糞コードw
915 :
デフォルトの名無しさん :2011/01/05(水) 06:35:21
>>914 バグらないだけこれよりマシなレベル
g_state = TITLE;
switch (g_state) {
case TITLE:
title_func();
case PLAY:
play_func();
}
switchなんてまず使わんから構文があってるかわからん
コードを書くうえで、常に神経質にならなければならない問題にに、ライセンスの問題があります。 ここはベテランコーダーが多そうなので、質問です。 ライセンスに関する質問です。(よくわからない人は無理して答えてくれなくて結構です) プロプライエタリなライブラリーであるadobe photoshop sdk = A ライブラリとしてAを使用する、プラグインプログラムのソースコード = S Sのa.out形式のバイナリ = B AとBをリンクしたdll形式のバイナリ = P Q1:S&Bのtar配布で、BSDライセンスとして配布することは、ライセンス的に可能でしょうか? また、これが可能なライセンスは何がありますか? Q2:Bのみの配布で、BSDライセンスとして配布することは、ライセンス的に可能でしょうか? また、これが可能なライセンスは何がありますか? Q3:Pのみの配布で、BSDライセンスとして配布することは、ライセンス的に可能でしょうか? また、これが可能なライセンスは何がありますか? Q4:GNU等フリーソフトとして配布可能な、移植されたAは存在しますか? Q5:上記の件について、どのような対処を行えばソースフォージの登録審査を通ると予想できますか?
「俺っち普段switchなんて使わんkらよぉwww間違ってても堪忍してちょwwwwwww」
rand()%Nやgetsで発狂しちゃうタイプなんでしょ
rand()%Nはともかく、gets()は発狂するしかないな
>>915 switchでbreakしてないところじゃね?
>>914-915 すいません、これってif文よりswitch文を使えってこと?
俺はどちらも結構使うんだけれど今後の参考のために
知りたいす。
ちなみに俺はif文とswitch文は前後のコードの見やすさで
使い分けてる感じ。
924 :
923 :2011/01/05(水) 12:39:40
>>921 本筋と関係の無い部分で揚げ足とってたら切り無いぞ
サンプルコードのお約束ってやつだ
>>922 それはないんじゃない?
フォールスルーのミスなんて自業自得なのに
責任転嫁の言語叩きは恥ずかしすぎでしょ
>責任転嫁の言語叩き えっ
埋め
埋め
胡桃沢梅
どんだけ気が早いんだよ せめて次スレが立ってから埋めろ 都合の悪いことを埋めたいならさっさと次スレ立ててしまえ
はいはい埋め埋め
梅梅
松竹梅
個人的には牛丼屋の中では松屋がウメーと思う
いやややいうや吉野家もうめーよ
SQLインジェクション
俺のちんぽをインジェクション
埋め
ポイズン
関数ポイズン
バッファオーバフロー
バッファロー
次スレもお世話になるか
糞スレ
エキスパートCプログラミングって結構分厚いんだな
946 :
デフォルトの名無しさん :2011/01/05(水) 19:07:02
C言語でコマンドプロンクトを介入して他のプログラムを起動して操作するって方法があるらしいのですが、情報があまりに足りなくて困ってます だれか詳しいやり方とか知ってる人がいたら教えてくれませんか
popenとかのこと?
>>945 いつまで売ってんだか
Cの古臭さが良く分かる本。
949 :
デフォルトの名無しさん :2011/01/05(水) 19:28:29
あれをけちょんけちょんに批判できる人が言う「古い」と イソップのキツネが言う「古い」は 重みが全然違う
950 :
デフォルトの名無しさん :2011/01/05(水) 19:34:19
>>947 ぐぐってみましたが、恐らくそのことだと思います。
これで操作とか出来ればいいのですが、後もう少し調べてみないと判断出来ないですね。。。
ひとまず、教えてくれてありがとうです
952 :
デフォルトの名無しさん :2011/01/05(水) 21:17:26
void main(void){ int i=0; int *p; i = &i; p = i; printf("%d",*p); } これいけるかと思ったら案の定だめでした。
そりゃキャストしないとダメだろ
まだやってんのかゴミ虫どもは
Perl最強だぜ!
C言語は糞
C言語にコンプレックスがありました。 皆さんすみませんでした。
おしっこもらしました。 皆さんすみませんでした。
ほっほっ
ふっほっ
どぴゅっどぴゅっ
ぶはっ!選ぶはっ!
キチガイ共乙
キキキキチガイ共乙えうえうえうえうえうえうえうえうえうフフフフフフフフフフフフフ
C言語とはなんだったのか
なんだもなにも只のプログラミング言語
未だに死なない、息の長い言語
C言語は何故大失敗したのか
scanfやgetsで信者とアンチを生み出したから
どう考えても、Cは大成功だろ
さっそく信者が釣れてるw
成功かどうかはわからないけど世界で一番普及してるのはC言語なんだっけ Perl()笑
974 :
デフォルトの名無しさん :2011/01/05(水) 23:20:16
クロスワードパズル作れ言われたらC言語でつくるんか? 違うだろ。Perlだろ
まぁCの信者って最近の言語を貶すことしかできないからねw
976 :
デフォルトの名無しさん :2011/01/05(水) 23:30:00
今の日本のようですねw
キモオタC言語信者がいたから顔面殴って蹴り落としてやったら意味不明なことを呟いていたなwwww
作ったプログラムを評価というか、こうした方がいいよってアドバイスして 欲しいんですがそういうことをする人たちが集まるサイト紹介してください。
979 :
デフォルトの名無しさん :2011/01/06(木) 00:18:16
Cさえマスターすれば他の言語で学ぶに時間かからないだろ。 文法とかスコープの概念なんかはすべて一緒だし。 逆にC言語は使えるけど他は分かりませんっていう人いる?いないだろ
↑C言語使いがみんなこういう奴だと思われたら嫌だな
文法だけならすぐ理解できるけどな、開発をやるってなると開発環境とかライブラリとか その他周辺知識の有無がかなり重要になってくるのな。 C言語で組み込みソフト作ってた奴がJavaで携帯アプリ作る仕事に転職できるかってできないのな。
>>979 みたいなのって文法脳だよね。
プログラミング言語使えるのなんて最低条件なのに「俺は多くの言語が書けます」とか言っちゃうタイプ。
で、開発能力は皆無。
984 :
デフォルトの名無しさん :2011/01/06(木) 00:29:23
>>982 開発能力ってなんやねん。言語扱えるなら開発もできるだろ。なめんな
>>983 あなたは答えなくていいです。
別の方、改めてサイト紹介してください。
984 :デフォルトの名無しさん:2011/01/06(木) 00:29:23
>>982 開発能力ってなんやねん。言語扱えるなら開発もできるだろ。なめんな
ほら、すぐにボロがでたw
馬鹿ってなんで反論すぐとき関西弁になるの?
991 :
978 :2011/01/06(木) 00:46:55
>>983 ありがとうございます
みてきます。 m(_ _)m
◆QZaw55cn4c こいつどうにかしてくれ
ずいぶん前からいる荒らし
糞
結局エキスパートCプログラミングは買って良いんだなお前ら!!
構造体
ほっほっ
糞スレ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。