C言語なら俺に聞け( ..
159:デフォルトの名無しさん
09/11/02 17:32:32
>>158
言えてる。
とくにそれが配列だったりしたらそうするかもしれないね。
160:デフォルトの名無しさん
09/11/02 17:39:12
>>158-159
領域の使いまわしが発生しているとすると、削除には該当しないんだよねー
(スコープ脱出後もメモリ上は存在している という意で)
なおさら
「関数内で定義した変数は削除しないとスタックオーバーフローとかいうのになる」
の意図が見えないな
161:デフォルトの名無しさん
09/11/02 18:00:11
そんな意味不明なフレーズには、本人に聞けとしか言えんだろう
162:デフォルトの名無しさん
09/11/02 18:01:39
前にもそんなこと言って人の言うこと聞かなかった奴がいたな。
163:デフォルトの名無しさん
09/11/02 20:51:28
陰極管だと Cathod Tube だよなぁ
CRT なら陰極線管と翻訳すべきだった
164:デフォルトの名無しさん
09/11/02 21:03:19
エロい話かと思った
165:デフォルトの名無しさん
09/11/03 07:10:51
関数内でmallocした領域はfreeしないとメモリリークする
ってことでは
166:デフォルトの名無しさん
09/11/03 11:29:36
>>165
スタックオーバーフローにはならんのでは
167:デフォルトの名無しさん
09/11/03 12:29:47
ランレングス符号化のプログラムです
このプログラムだと最初の文字が評価されなくて困っています。
アドバイスをお願いします。
#include <stdio.h>
int runlength(int length, char *str_org, char* str_enc){
int i,j = 0;
char *RLE = str_enc;
while(length--){
if(str_org[i] == str_org[i + 1]){
i++;
j++;
}
else{
*str_enc++ = str_org[i];
*str_enc++ = '1' + j;
i++;
j = 0;
}
if(str_org[i] == 0)
break;
}
str_enc = 0;
return(*RLE);
}
168:続きです。
09/11/03 12:30:32
int main(void){
char buf_r[1024] = {0};
char buf_w[1024] = {0};
int length;
printf("文字列の入力\n");
scanf("%s",buf_r);
runlength(1024,buf_r,buf_w);
printf("[ランレングス符号化]\n%s\n",buf_w);
return(0);
}
169:デフォルトの名無しさん
09/11/03 12:37:24
ワロタ
170:デフォルトの名無しさん
09/11/03 12:37:57
int i = 0,j = 0;
とか?
171:デフォルトの名無しさん
09/11/03 12:44:55
C言語でポインタというのがありますが、
ゲームではどういうところで使われてるんですか?
具体例を教えてください。
172:デフォルトの名無しさん
09/11/03 12:45:45
メッセージの出力とか。
173:デフォルトの名無しさん
09/11/03 12:47:46
ファイルの読み書き
174:デフォルトの名無しさん
09/11/03 12:49:09
スタートアップ直後 DirectXの初期化で とか
175:デフォルトの名無しさん
09/11/03 13:07:36
>>167
>>116 を参考にしてみて
同じ学校なのかな?
176:デフォルトの名無しさん
09/11/03 13:37:00
最近は義務教育でC言語まで教えてるのか
177:デフォルトの名無しさん
09/11/03 13:47:39
>>167
暇だからやってみた。参考になれば
URLリンク(0x72.net)
178:デフォルトの名無しさん
09/11/03 16:06:44
最近のコンパイラってブロックの先頭じゃなくても変数の宣言できるの?
179:デフォルトの名無しさん
09/11/03 16:10:33
C99なら可
180:デフォルトの名無しさん
09/11/03 17:16:24
(int *)
↑*って何
181:デフォルトの名無しさん
09/11/03 17:17:05
asterisk だよ。
182:デフォルトの名無しさん
09/11/03 17:22:06
ポインタ型
183:デフォルトの名無しさん
09/11/03 17:36:07
(insert -> *)
184:デフォルトの名無しさん
09/11/03 17:48:51
ポインタ型ってなんだよ
185:デフォルトの名無しさん
09/11/03 17:58:05
(int *) = * を付けたら int 型
186:デフォルトの名無しさん
09/11/03 19:37:46
* = ア○ル
187:デフォルトの名無しさん
09/11/03 20:19:45
× アナル
○ アヌス
「アナル」は形容詞形。
「アナル○○○」と後ろに続く場合の活用形。
単体で名詞として使うなら「アヌス」とするべき。
188:デフォルトの名無しさん
09/11/03 20:24:04
あーネイティブの発音知らないわけねw
英語弱者って電子土方やってても辛そう
189:デフォルトの名無しさん
09/11/03 20:28:35
日本語表記においてはネイティヴの発音にいちいちあわせる必要はないだろw
190:デフォルトの名無しさん
09/11/03 21:12:34
>電子土方やってても辛そう
最近の2chって>>188みたいに無意味に突っ掛かってくるヤシが多いよな。
氏ねばいいのに。
191:デフォルトの名無しさん
09/11/03 21:14:50
どうでもいいことで盛り上がるなよ
みんなタヒねばいいのに
くそが
192:デフォルトの名無しさん
09/11/03 21:15:23
劣等感ゆえの攻撃性だから、哀れみをもってスルーするのがいいよ。
193:デフォルトの名無しさん
09/11/03 21:16:11
つ スレリンク(classical板)
194:デフォルトの名無しさん
09/11/03 21:17:35
>>191
仕様書ある夫さんですか?
195:仕様書ある夫さん
09/11/03 21:23:19
仕様書ある尾です
196:デフォルトの名無しさん
09/11/04 14:32:31
int Func(void* buf)
{
SOCKET SOCK = (SOCKET)buf;
voidポインタで渡された値をソケット型にキャストしたいんだけど
これだとうまくいかない
197:デフォルトの名無しさん
09/11/04 14:38:19
ヘッダファイル読め
SOCKETって構造体か何かじゃねーの?
198:デフォルトの名無しさん
09/11/04 14:38:41
SOCKET sock = ...... ;
Func( (void*) sock );
呼ぶ側はもちろんこうだよな?
199:デフォルトの名無しさん
09/11/04 14:39:29
SOCKETが何なのかわからんが、voidポインタの引数はキャスト不要じゃない?
200:デフォルトの名無しさん
09/11/04 14:46:16
ポインタ以外の何かなら必要じゃないか?w
201:デフォルトの名無しさん
09/11/04 14:51:26
初期化に定数以外って使えるの?
202:デフォルトの名無しさん
09/11/04 15:14:08
今の普通のCなら使える。
203:デフォルトの名無しさん
09/11/04 15:52:19
>>201
C FAQでも読んどけ
204:デフォルトの名無しさん
09/11/04 15:55:48
>>203
C FAQのどれ?項番教えて
205:デフォルトの名無しさん
09/11/04 16:12:13
int f(int a){return a+1;}
int main(){
int i = f(1); /* できるの? */
return 0;
}
206:デフォルトの名無しさん
09/11/04 16:16:25
>>201
少なくともGNU CとC++では使える。
207:デフォルトの名無しさん
09/11/04 16:17:41
BCC55でも使える
208:デフォルトの名無しさん
09/11/04 16:20:19
初期値だったら定数じゃないと無理だろうけど、
自動変数の初期化なんてのは所詮は普通に代入してるだけだからな。
209:デフォルトの名無しさん
09/11/04 18:43:10
初期化と代入は本来違うものであってしかるべきなんですが、まあ時代もかわりましたね。
210:デフォルトの名無しさん
09/11/04 18:56:02
>>205
できない、と思っているなら
なぜそう思うのかを開陳すべき
211:デフォルトの名無しさん
09/11/04 19:27:24
ヽ('A`)ノ カイチン!
( )
ノω|
__[警]
( ) ('A`)
( )Vノ )
| | | |
212:デフォルトの名無しさん
09/11/04 19:54:14
while((*p++ = *q++) != 0 )
;
このコードの意味を説明してもらえませんか?
自己解釈
1 qの値をpに代入する
2 その値が0でなければwhileループ内を実行する
3 p及びqのアドレスを1インクリメントする
こういう意味ですか?
213:デフォルトの名無しさん
09/11/04 20:05:34
1. *qの値を*pに代入する
2. p及びqのアドレスを1インクリメントする
3. 1の値が0でなければwhileループ内を実行する
インクリメントは*qの値が0であってもそうでなくても行われる
whileループ内の文が実行されるのはインクリメントが行われた後
214:デフォルトの名無しさん
09/11/04 20:14:06
>>213
thx
215:デフォルトの名無しさん
09/11/04 20:51:17
>>212
そういうトリッキーなコードを書いてウケたのは1980年代
なんでw
30年前は兎も角現在そういうコードを書いてもプロセッサ
までその努力が全く届かないので
do{ *p=*q; p++,q++ }while(*q!='¥0');
とかの演算子の優先順位を記憶していない人でも読めるコード
で書くのが吉
216:デフォルトの名無しさん
09/11/04 20:53:53
>>215
うっせはげ
うっせはげ
うっせはげ
217:デフォルトの名無しさん
09/11/04 20:54:01
上のコードは等価じゃなかったw
for(;;){ *q=*p;p++,q++; if(*p=='¥0')break; }
218:デフォルトの名無しさん
09/11/04 20:56:03
なにそのトリッキーなコード。
219:デフォルトの名無しさん
09/11/04 21:02:01
よーし、>>218がもっと簡単なの書くぞ〜
220:デフォルトの名無しさん
09/11/04 21:02:42
>>215
あの程度をトリッキーという技量で論じた結果がそれ
演算子の優先順位くらい理解していないから間違えた
a = 1 + 2 * 3; の優先順位くらい頼むから理解してくれ
というのと五十歩百歩の域を出ない
221:デフォルトの名無しさん
09/11/04 21:05:12
>>217も間違っているしな
222:デフォルトの名無しさん
09/11/04 21:15:33
strcpy(p,q);
223:デフォルトの名無しさん
09/11/04 21:21:01
>>212
while(*p++ = *q++);
これで必要かつ充分
224:デフォルトの名無しさん
09/11/04 21:24:29
あれがトリッキーに見えるって他言語からCに入った人?
225:デフォルトの名無しさん
09/11/04 21:26:45
うちの職場じゃ見かけないねえ
226:デフォルトの名無しさん
09/11/04 21:29:33
>>221
ワロタ
本当だw
227:デフォルトの名無しさん
09/11/04 21:35:02
間違ってるとかワロタとかいいからちゃんと指摘してくれ
いえ、お願いします
228:デフォルトの名無しさん
09/11/04 21:36:33
>>227
自分で書いたんだろう
動作テストしてみな
ちゃんと動くかどうか
229:デフォルトの名無しさん
09/11/04 21:53:35
do{*p=*q;++p;++q;}while(*(p-1));
分解するとこんな感じか
普通に>>212のままの方がいいな
230:デフォルトの名無しさん
09/11/04 22:35:12
>>223
冥途の土産に持っていけ
231:デフォルトの名無しさん
09/11/04 22:53:13
要するにただの stos だろ
232:デフォルトの名無しさん
09/11/04 23:24:49
Q . . . . . . .
. . . . Q . . .
. . . . . . . Q
. . . . . Q . .
. . Q . . . . .
. . . . . . Q .
. Q . . . . . .
. . . Q . . . .
記念
233:デフォルトの名無しさん
09/11/05 01:03:15
>>232
わかる
234:デフォルトの名無しさん
09/11/05 02:52:31
8Queensか
235:デフォルトの名無しさん
09/11/05 04:33:07
pとqがchar *型なのであればstrcpyが一番。
そうでなく、int *などなら>>223で充分。イディオムとして成立している書き方が読めないのは単に経験不足。
それでもトリッキーだというのなら、
while(*p++ = *q++) {
; /* 空 */
}
とでもしておけばいい。
236:デフォルトの名無しさん
09/11/05 05:07:39
ポインタを使えばアドレスを操作できるみたいだけどC言語ってアセンブリみたいに直接アドレスを指定して変えれる?
アドレス12345678の値をFBにせよ
みたいな。
こういうこと難しい?
237:デフォルトの名無しさん
09/11/05 05:42:28
>>236
簡単にできる。
238:デフォルトの名無しさん
09/11/05 10:18:25
*(char *)12345678 = 0xFB;
でいいのだろうか
239:デフォルトの名無しさん
09/11/05 10:24:45
>>236
* (char *) 0x12345678 = 0xfb;
240:デフォルトの名無しさん
09/11/05 10:26:05
あぁ
241:デフォルトの名無しさん
09/11/05 10:45:49
16進とは書いてないだろ。
242:デフォルトの名無しさん
09/11/05 10:50:58
アドレスって書いてあれば16進だと思うの普通じゃね?
243:デフォルトの名無しさん
09/11/05 11:09:29
プレフィックスもサフィックスもなく、[0-9] だけで構成された数字を見たら
16進ではない、と思うのが自然な飢餓する。
244:デフォルトの名無しさん
09/11/05 12:11:12
>>227
>>217の糞コードじゃ0がコピーされないだろ
245:デフォルトの名無しさん
09/11/05 14:08:28
for(;;) { *q=*p; if(*p=='¥0') break; p++,q++; }
246:デフォルトの名無しさん
09/11/05 14:17:46
アドレスを10進数で表記するような文献は見たことない
247:デフォルトの名無しさん
09/11/05 15:14:38
>>245
それだと最終的なp, qの値が違う
for(;;) {
*q=*p;
if(*p=='\0') {
p++;
q++;
break;
}
p++,q++;
}
248:デフォルトの名無しさん
09/11/05 15:55:24
>>246
つ情報処理技術者試験
249:デフォルトの名無しさん
09/11/05 16:18:28
URLリンク(www.dotup.org)
この課題の『Aについて』でいきなり詰まってしまいました。
少しずつ理解しながらやりたいので、だれか協力お願いします。
なんどかこのスレで質問することになると思います。
250:デフォルトの名無しさん
09/11/05 16:27:24
整数乱数ってなんですか? とか、そういう感じの具体的な質問をお願いします
協力お願いしますでは何を答えていいのかわかりませんので
251:249
09/11/05 16:33:13
自己解決しました。
252:デフォルトの名無しさん
09/11/05 16:42:03
自己発電しました
253:249
09/11/05 16:56:59
>>249です
整数乱数とはなんですか?
Aについてですが、今までは
int kansuu(int x)
{
return x*x;
}
のように数式を作るような使い方しかして来ませんでした
問題文にあるように関数の中で、min,maxを定義できるんですか?
254:デフォルトの名無しさん
09/11/05 17:03:30
#include <stdlib.h>
int randomNumber (int min, int max) {
return rand() % (max - min + 1) + min;
}
255:デフォルトの名無しさん
09/11/05 17:17:48
>>254
剰余を使うな。
256:デフォルトの名無しさん
09/11/05 17:18:54
int randomNumber(int min, int max)
{
return (int)(rand() / (RAND_MAX + 1.0) * (max - min + 1)) + min;
}
257:デフォルトの名無しさん
09/11/05 17:20:40
>>255
今更気にする必要なし。
258:デフォルトの名無しさん
09/11/05 18:00:43
2の累乗以外の乱数を出す場合は、
振り直し法を使わないと均等にはならないよ。
例えば RAND_MAX が 7 として、
それで 1〜6 の乱数を求めたら
1/8 の確率のものと 2/8 の確率のものが混ざってしまうだろ。
これは RAND_MAX を大きくしても解決しない問題だろ。
259:デフォルトの名無しさん
09/11/05 18:09:31
>>257
それはない。rand() の線形合同法では mod を使うのはご法度。
260:デフォルトの名無しさん
09/11/05 18:16:04
別にいいよ
261:デフォルトの名無しさん
09/11/05 18:51:49
>>256
実数を使っても無駄だよ。
int randomNumber(int min, int max)
{
return rand() / (RAND_MAX / (max-min+1)) + min;
}
整数でも変わらん。
どうしても均等にしたければ振り直し法を使うしかない。
262:デフォルトの名無しさん
09/11/05 18:54:31
整数オーバーフローは起きないの?
263:デフォルトの名無しさん
09/11/05 19:02:14
>>261
奥山晴彦氏の乱数の改良でも使えばいいだろ
URLリンク(www.vector.co.jp)
264:デフォルトの名無しさん
09/11/05 19:09:44
9桁以下の正の整数か否かを判別したいのですが
if(m>0 && n>0 && m<=999999999 && n<=999999999)
これでいいんでしょうか?
もっとスマートになりそうな気が…
265:デフォルトの名無しさん
09/11/05 19:15:07
m の判定と n の判定がごちゃ混ぜになっているのが「スマートではない」な
266:264
09/11/05 19:20:53
>>265
えっとつまり
if(m>0 && m<=999999999 && n>0 && n<=999999999)
ってことですか?
個人的に「999999999なんて入力しないんじゃなかろうか」と思ったのですが…
267:デフォルトの名無しさん
09/11/05 19:24:43
m と n のどっちが外れているかの判別ができないけどいいの?
268:デフォルトの名無しさん
09/11/05 19:34:10
>>266
とりあえずはね
ただし >>267 が言っているような問題がまだ残っているし
入力は屈指のこわーい所で、範囲チェックだけで済むかどうかも怪しいぞ
269:264
09/11/05 19:45:26
>>267-268
急いでソース全部打ってきました
/* 9桁以下の2つの正の整数m,nを入力して、m/nの小数部分 */
/* を四捨五入して得られる整数値を出力するプログラム */
#include <stdio.h>
int main(void)
{
int m,n,quotient;
printf("\n9桁以下の正の整数を2つ入力して下さい\n");
scanf("%d%d",&m,&n);
if(m>0 && n>0 && m<=999999999 && n<=999999999){
quotient = (m+n/2)/n;
printf("\n%d/%dの小数部分を四捨五入して得られる整数値は、%dです。\n\n",m,n,quotient);
}else{
printf("\n入力する値は9桁以下の正の整数にして下さい。\n"
"プログラムを終了します。\n\n");
}
return 0;
}
コメント内のプログラムを作成するのが課題なのですが、ループ処理はまだ習っていないので終了という形にしてみました。
mとn分けたほうがいいでしょうか?
270:デフォルトの名無しさん
09/11/05 19:51:44
ループがまだってことは、関数もまだか
今んとこそこまでかな
271:264
09/11/05 19:59:39
>>270
そうですか
ありがとうございました
とりあえずif文の中を整理して提出してみます
272:デフォルトの名無しさん
09/11/05 20:49:54
>>269
11桁とかの数入力されときどうなるんだっけ?
273:デフォルトの名無しさん
09/11/05 21:18:59
scanf関数を用いて入力された3桁の整数に対して、
10の位および1の位を四捨五入することによって得られる2つの整数を表示するプログラムを作成せよ。
例)『425』を入力した場合、『400, 430』が画面に表示される。
宿題でこんなのが出たのですがどうしても出来ません!!
どなたか教えてください!!
274:デフォルトの名無しさん
09/11/05 21:19:58
ちなみにこんな感じでやってみたけどダメでした
#include<stdio.h>
#include<math.h>
int main(void){
int x,a,b;
scanf("%d",&x);
a=(x/100)+0.5;
a=((int)a)*100;
b=(x/10)+0.5;
b=((int)b)*10;
printf("10の位を四捨五入して整数で表します.\n");
printf("結果=%d\n",a);
printf("1の位を四捨五入して整数で表します.\n");
printf("結果=%d\n",b);
return 0;
}
275:デフォルトの名無しさん
09/11/05 21:25:03
>>274
惜しい!
276:デフォルトの名無しさん
09/11/05 21:34:03
自販機のLEDあるじゃないですか
あれみたいに、
右から順にボタンLEDが点灯していき左端で停止
停止したら右からまたLEDが順に点灯していきスタック
スタックしたら右からまたLEDが・・・
ってのをやりたいのですが、「一行で」やるにはどうすればいいのですか。
ifを使うとビットシフトでできるのですが
「一行でやれよバカ」だそうです。
277:デフォルトの名無しさん
09/11/05 21:38:33
>>276
質問の内容が意味不明だが
改行しなきゃいいんじゃないかな?
278:デフォルトの名無しさん
09/11/05 21:39:59
1行って言われてもね……
279:デフォルトの名無しさん
09/11/05 21:42:06
>>276
日!本!語!で!お!k!
280:デフォルトの名無しさん
09/11/05 21:45:36
#define (コントローラのLEDアドレス) Fuckintosh
char LED = 0x01;
Fuckintosh = LED << 1;
で、左端のLEDまで点灯させます。 2進数で10000000です
じゃあ左端を点けたまま再度右から点灯させていくなら 10000001 -> 10000010とシフトしていけばいいのか、と
別に変数を用意し、+ したのですが
なぜかこれだと 二個同時に点いたります。
ifで分けてやると思い通りの点灯パターンを行うのですが
「(ifとか使わず)一行でやれよバカ」だそうです。
281:デフォルトの名無しさん
09/11/05 21:47:09
二個同時と言うのは左端を含めずに二個です
シフトしていくLEDと隣り合ったLEDが点いて消えたり点いたり、
一緒にシフトして行ったり
shます
282:デフォルトの名無しさん
09/11/05 21:53:05
1行とか言ってるソイツがアホなだけだろ。
283:デフォルトの名無しさん
09/11/05 21:54:30
ほんと日本語へたくそだな
if使ったコード晒せよ
284:デフォルトの名無しさん
09/11/05 22:02:38
>>280
でけたwww
int i,j,hoge;for(i=0,LED=0;i<8;i++){hoge=LED;for(j=0;j<8-i;j++)(LED=hoge|(1<<j)),*p=LED;}
その説明では状況が分からん
285:デフォルトの名無しさん
09/11/05 22:03:19
00000000
00000001
00000010
00000100
00001000
00010000
00100000
01000000
10000000
10000001
10000010
10000100
10001000
10010000
10100000
11000000
11000001
11000010
11000100
11001000
11010000
11100000
こんな感じ?
286:デフォルトの名無しさん
09/11/05 22:06:50
そうです
LEDが16コあって、そのうちの8つがLEDコントローラA
残りの8つがBに繋がっちょります
が、8つ点ける時点でつまずきました
287:デフォルトの名無しさん
09/11/05 22:08:38
10000000
よしここから右端から点けよう
10000001 点いた
10000011 あれ?
10000110 あれ?
10000111 おや?
10001101 なんじゃ
なんてことになってます。
288:デフォルトの名無しさん
09/11/05 22:11:50
>>287
コードを晒すんだ!
そのほうが日本語より直接的で分かりやすいと思う
289:デフォルトの名無しさん
09/11/05 22:15:53
なので、
Fuckintosh = 10000000 + (FuckOSX << 1) とかしたらどうかな、と思ったのですが
上のようにワケのわからんパターンで点灯し
ならORで、とやってもだめでした
>>288
仕事場に置いてきてまってるもんで
自販機を思い浮かべてもらえれば。
あの多段ボタンLEDそのままなので。
そのLEDは2進数00000000に対応しており、点けたい部位のビットを1にすれば光ります
10000000なら左端、00001000なら右から4番目、というふうに
290:デフォルトの名無しさん
09/11/05 22:17:53
>>285 をテーブルに入れて垂れ流せばいいよ。
291:デフォルトの名無しさん
09/11/05 22:18:19
>>289
この時期まで研修とは…
大企業だな
裏山鹿
>>284 でおk
292:デフォルトの名無しさん
09/11/05 22:18:26
あー違った
Fuckintosh = 10000000 + (FuckOSX << 1)の 10000000 の部分は決め打ちではありません。
変数です。
if(FuckMac >= 10000000)
Fuckintosh = (FuckMac + (FuckOSX << 1));
という感じですかね
293:デフォルトの名無しさん
09/11/05 22:21:35
2進数10000000は、16進数で0x80,
左端と右端を点けるには10000001、つまり0x81
やはり左端の値を保持して、新たにシフトさせていく変数を用意し
左端の値と足していけば順次シフトできるんじゃなかろうか、
と思ったのです。
294:デフォルトの名無しさん
09/11/05 22:39:35
つーか、ビット操作なら unsigned でやれよ。
295:デフォルトの名無しさん
09/11/05 22:58:53
排他的論理の計算ってどんなときに使うんですか?
101100110
110011101
011111011
になるのはいいんですが、この計算はたとえばどんな時に使用されるの?
296:デフォルトの名無しさん
09/11/05 22:59:47
stdioはstandard input outputの略
ではprintfやsacanfとかって.....
語源とか気になる関数とか多いです
297:デフォルトの名無しさん
09/11/05 23:03:17
>>295
フラグの入れ替えとかハッシュ計算とか
298:264
09/11/05 23:07:50
>>272
11桁ですか?
おそらく弾かれて、プログラム終了となるんじゃないかと思うのですが…
299:デフォルトの名無しさん
09/11/05 23:09:48
>>295
特定のビットだけ反転させたいときだな。
あまり使う機会はない。
>>296
print や scan に format の f 付けただけ。
300:デフォルトの名無しさん
09/11/05 23:14:03
>>299
おお、こんなに早くお返事が!!!
サンクスです
検索かけても語源とかなかなか出てこなくって
「UNIXの古い資料調べれば全部分かる」
みたいな話はどこかに書いてありましたが
それもちょっとよく分からん話だったんで
301:デフォルトの名無しさん
09/11/05 23:27:38
1ビットずつフラグに使ってたら、反転させたいときもあるんだろうな
302:デフォルトの名無しさん
09/11/05 23:43:26
>>296
print formatted output
その他気になるのは↓で探すよろし
URLリンク(www.opengroup.org)
303:デフォルトの名無しさん
09/11/06 00:09:44
ボタンとかのオブジェクト配置するには?
画面の出し方は死ぬほどサンプルあるけれど
304:デフォルトの名無しさん
09/11/06 00:34:17
いきなりなんだよwww
windowclass にボタン指定しろよw
305:デフォルトの名無しさん
09/11/06 00:39:22
スレ違い
306:デフォルトの名無しさん
09/11/06 00:45:15
>>295
RAID5の計算とか
CRCとか
画像処理とか
A = 101100110
B = 110011101
A xor B = C
C = 011111011
C xor A = ...
C xor B = ...
307:デフォルトの名無しさん
09/11/06 02:55:03
>>302
リンク先までありがとうございます
正直、英語は読めないので何をどう見たらよいやら分かりませんが調べてみます
やはりプログラマーは英語必須なんでしょうなあ
308:デフォルトの名無しさん
09/11/06 02:59:12
英語読めなくてもプログラマやってる奴は結構いるよ
カスばっかだけど
309:デフォルトの名無しさん
09/11/06 03:03:42
プログラミングコンテストの問題が英語だから理解出来ないとかね
プログラミング以前の段階で淘汰されてて面白い
310:デフォルトの名無しさん
09/11/06 03:08:20
職業としてやるんじゃなかったら英語なんてたいして必要ない。
英検三級ありゃやっていける。
311:デフォルトの名無しさん
09/11/06 03:39:30
int main()
{
unsigned char LED = 0x01;
int i,j,n;
for (i = n = 0; i <= 36; n=++i)
{
LED = 0;
for (j = 8; j > 0; n-=j*(n>=j),j--)
{
LED |= (n>=j)<<(j-1);
}
for (j = 7; j >= 0; j--)
{
printf("%d", LED >> j & 1);
}
printf("\n");
}
return 0;
}
どうしてこうなった
312:デフォルトの名無しさん
09/11/06 04:21:24
unsigned char func(int n)
{
unsigned char LED = 0;
int i, stack = 0;
for (i = 8; n > i; n-=i--, stack++);
LED = ~0 << (8-stack) | !!n << (n-1);
return LED;
}
int main()
{
int i,j;
unsigned char LED;
for (i = 0; i <= 36; ++i)
{
LED = func(i);
for (j = 7; j >= 0; j--)
{
printf("%d", LED >> j & 1);
}
printf("\n");
}
return 0;
}
がんばってこれか
313:デフォルトの名無しさん
09/11/06 06:00:48
stackをループじゃなくて2次式を解くことでできそうな気がするけど、またあとで。
314:デフォルトの名無しさん
09/11/06 15:15:26
Cは無限ループifしなくても何かが起こったときに
関数に飛ぶことはできないの
315:デフォルトの名無しさん
09/11/06 15:16:46
日本語でおk
316:デフォルトの名無しさん
09/11/06 15:17:11
>>314
日本語でOK。
317:デフォルトの名無しさん
09/11/06 15:20:07
>>314
signal()
318:デフォルトの名無しさん
09/11/06 15:45:21
教えてやるから日本語で質問しろ。
319:デフォルトの名無しさん
09/11/06 16:01:10
馬鹿は回答するな
320:デフォルトの名無しさん
09/11/06 16:02:26
>>314
atexit()
321:デフォルトの名無しさん
09/11/06 16:12:23
>>314
標準Cには、そういう仕掛けはない。
Win32 API なり、Pthreads なりを使うわけだが
OS が特定できんことには。
322:デフォルトの名無しさん
09/11/06 17:15:23
signalは標準だろボケ
無知は黙ってろよカス
323:デフォルトの名無しさん
09/11/06 17:31:42
>>322
では一つ、signal()の標準的な使い方を教えてくだされ。
324:デフォルトの名無しさん
09/11/06 17:37:51
問題文を出力するなどのため、
引数の内容が長文化した場合、(継続文字?)について教えてください。
例えば、プリントエフ関数で、長文を表示させる場合、
printf("1行目から2行目\n3行目から4行目\n");
といったように書いていったのですが、
当然ながらだんだん見えなくなってくるので、
printf("・・・・3行目から4行目\n"
"5行目から6行目\n6行目から7行目\n・・・・");
と、表示していくことになりますが、
他によい方法はないのでしょうか。
こういう場合、どういう方法が一般的なのでしょうか。
プリントエフで一個ずつ表示するものなのでしょうか。
325:デフォルトの名無しさん
09/11/06 17:41:12
SIGABRT, SIGFPE, SIGILL, SIGINT, SIGSEGV, SIGTERM は標準のようだ
質問の「何か」っていうのが具体的に何かわからないと何ともいえないが
326:デフォルトの名無しさん
09/11/06 17:43:30
>>324
俺なら1行ごとに分ける
printf(
"1行目\n"
"2行目\n"
"3行目\n"
・・・・
"最終行\n");
それか、問題文を別ファイルから読み込む
327:デフォルトの名無しさん
09/11/06 17:52:34
>>326
なるほど1行ずつですか。
>>それか、問題文を別ファイルから読み込む
買ってきた本でもファイルの入出力を最後のほうで取り上げています。
なんとかそこまで早くたどり着きたいものです。
最終的にはプロンプトでサウンドノベルみたく動く文字出力を実現したいです。
あの、1文字、1文字、動いていく感じがたまらなくいいので。
たぶん繰り返し処理とか使うんだろうなあとは思っているのですが。
328:デフォルトの名無しさん
09/11/06 18:08:36
優れたプログラマ=論理演算多用 if少ない
if((A >> B) |= C) != ( ((D >> E) << F) &= (G | H)){
VAR = I >> (J |= (K + L));
}
329:デフォルトの名無しさん
09/11/06 18:10:13
>>328
馬鹿?
330:デフォルトの名無しさん
09/11/06 18:11:20
劣ったプログラマ=if多い
if()
if()
if()
if()
if()
else if()
if()
if()
else if()
ifを判定するだけで最低1クロック無駄にする
331:デフォルトの名無しさん
09/11/06 18:18:10
Cでどう短く書くかより、実際の効率で考えるべき
332:デフォルトの名無しさん
09/11/06 18:39:47
ものすごいアホがいる。
333:デフォルトの名無しさん
09/11/06 18:43:02
>>328
まだ減らせるぞw
((A >> B) |= C) != ( ((D >> E) << F) &= (G | H))&&(VAR = I >> (J |= (K + L)));
334:デフォルトの名無しさん
09/11/06 19:22:57
>>324
ふつーは
printf("一行目\n");
printf("二行目\n");
printf("三行目\n");
printf("四行目\n");
335:デフォルトの名無しさん
09/11/06 19:46:24
printf("四行目\n",printf("三行目\n",printf("二行目\n",printf("一行目\n"))));
336:デフォルトの名無しさん
09/11/06 20:05:35
>334,>335は関数呼び出しコストを度外視しているところが間抜け。
一回で済むことを4回もやるな。
337:デフォルトの名無しさん
09/11/06 20:15:43
それ以前に、ただの文字列出力にprintf使う奴はプログラマーに向いていない。
338:デフォルトの名無しさん
09/11/06 20:18:32
まあ普通は DrawText() 使うよな。
339:デフォルトの名無しさん
09/11/06 20:20:03
関数くらい人に教わる前に自分で習得しろって?
そりゃ俺も C 始める前にアセンブラで PRINT マクロ作ってたさ、そのアセンブラも自作でね
けど今どうなんだろう? C の printf には BASIC の PRINT コマンドほどの教育力あるんかね
俺個人としては、かえって饒舌すぎるところがあるように思えるんだが
340:デフォルトの名無しさん
09/11/06 20:24:32
まぁ、まともなコンパイラならprintf()の代わりにputs()を使うくらいのことはするからな。
341:デフォルトの名無しさん
09/11/06 20:50:57
それだと結果が変わってしまうな。
342:デフォルトの名無しさん
09/11/06 20:53:29
いまどきのコンパイラなら334も324も最適化で同じになるだろ。
343:デフォルトの名無しさん
09/11/06 21:11:57
結局どう表示したいのか一目でわかるのが>>326の良いところ
344:デフォルトの名無しさん
09/11/06 21:49:55
結局トレードオフなんあぢょ。
345:デフォルトの名無しさん
09/11/06 22:06:53
あるアドレスに名前を付ける時ってどうするの?
346:デフォルトの名無しさん
09/11/06 22:14:14
>>345
マクロとか変数名とか名前-アドレスマップとか
347:デフォルトの名無しさん
09/11/06 22:15:57
ポインタ
348:デフォルトの名無しさん
09/11/06 22:19:10
>>347
初心者は黙ってろ。
349:デフォルトの名無しさん
09/11/06 22:28:10
× DIV = (300 / 2);
○ DIV = (300 >> 1)
350:デフォルトの名無しさん
09/11/06 22:39:15
一番やりがち、真っ当なのはdefine
#define 90000000 adressV125
351:デフォルトの名無しさん
09/11/06 22:41:20
>>348
ぬるぽ
352:デフォルトの名無しさん
09/11/06 22:42:13
>>350
釣り針でかすぎw
353:デフォルトの名無しさん
09/11/06 22:47:28
コンパイラが対応していれば、#plasmaでもいい。
でもプラズマは本当に「そのプラットフォーム専用」でないと用意されていない。
354:デフォルトの名無しさん
09/11/06 22:53:32
本命は l だと思う。
355:デフォルトの名無しさん
09/11/06 22:59:59
#import
356:デフォルトの名無しさん
09/11/07 00:46:37
DXライブラリを使用して今までは正常にコンパイルできていたのですが、PCのフォルダなどを整理してから、
Fatal: ファイル VORBISFILE_STATIC.LIB が開けません
とメイク結果に表示されコンパイルできなくなってしまいました。
エディンタの再設定もしてあり、必要なファイルはあると思うんですが...
だれかアドバイスいただけないでしょうか。
357:デフォルトの名無しさん
09/11/07 00:55:41
ここはそんな質問する場じゃない
358:デフォルトの名無しさん
09/11/07 01:04:48
DBに接続するためのパスワード文字列をソースに埋め込もうと
考えたんですが、stringsコマンドでバレてしまいますよね。
通常は暗号化したパスワードを文字列として持たせるのがベターなんでしょうか?
359:デフォルトの名無しさん
09/11/07 01:39:49
>>357
すみません初心者用の本でライブラリを使いなさいと書いてあったんです...
本の通りにやり直してもできないんです
360:デフォルトの名無しさん
09/11/07 01:41:28
ここはそんな質問する場じゃない!
361:デフォルトの名無しさん
09/11/07 02:39:25
気合い入れてもう一回ググッてきます。がんばってきます
362:デフォルトの名無しさん
09/11/07 10:18:05
フォルダの整理って何したんだよ?
363:デフォルトの名無しさん
09/11/07 11:09:18
makeしたら負けだと思う。
364:デフォルトの名無しさん
09/11/07 11:46:42
>>363
自分で書いて面白いと思ってんの?
365:デフォルトの名無しさん
09/11/07 11:50:14
おつにゃん
366:デフォルトの名無しさん
09/11/07 13:17:46
printf("\
1行目\n\
2行目\n\
3行目\n\
・・・・
最終行\n\
");
367:デフォルトの名無しさん
09/11/07 13:20:21
それインデンツできないから×
368:デフォルトの名無しさん
09/11/07 14:31:46
printf(
"1行目\n"
"2行目\n"
"3行目\n"
・・・・
"最終行\n"
);
369:デフォルトの名無しさん
09/11/07 15:06:46
char *s="
#include "hoge.txt"
";
printf(s);
370:デフォルトの名無しさん
09/11/07 17:34:37
if(fgets(str, sizeof(str), stdin) == NULL)
が成り立つことってあるのでしょうか。
371:デフォルトの名無しさん
09/11/07 17:45:41
ファイル終端。
372:370
09/11/07 17:50:17
キーボードからの入力でファイル終端ってどういう場合なんでしょうか
373:デフォルトの名無しさん
09/11/07 17:54:11
>>372
Ctrl-Z とか Ctrl-D とか ファイルリダイレクト とか
374:デフォルトの名無しさん
09/11/07 17:54:12
>>372
Windows なら ctrl + z
*nix なら ctrl + d だっけか?
375:370
09/11/07 18:02:17
ありがとうございます
376:デフォルトの名無しさん
09/11/07 18:47:31
define BUF 1024
char buffA[BUF], buffB[BUF];
char** str;
int needss, i, j, x, y;
質問です。上記の変数を利用しプログラムを記述しました。
まったく問題なく実行でき、さらに処理を追加しようと新たに
char buffC[BUF]という配列を宣言すると、エラーを吐くようになりました。
どうも、char型の変数を増やすとbuffBに文字列が格納された瞬間にエラーがでます。
変数名を変えても改善しませんでした。
プログラム自体には問題なく、当然コンパイラーは警告すらでません。
何が問題なのかまったく分からず困惑しています。
変数名が悪いのか、配列の要素数が全体で見れば多すぎるのかと思いましたが、そんなことはないはずですよね・・。
環境はUbuntu9.04 コンパイラGCC エディタEmacsです。
エラーの考えられる原因はなんでしょうか。
377:デフォルトの名無しさん
09/11/07 18:50:07
object-CってC使いに易しいかな?
iMacポチって待機中なんだけど…
378:デフォルトの名無しさん
09/11/07 18:53:18
>>376
スタックオーバーフローか未初期化のポインタで何か操作しようとしてる可能性が高い
379:デフォルトの名無しさん
09/11/07 19:07:01
>>378
ポインタはmallocでメモリを確保しています。
というか、変数を追加しなくても、実行できなくなりました・・。
mallocで確保したメモリがfreeで解放できずスタックオーバーフローになっているという落ちとかでしょうか。。
380:デフォルトの名無しさん
09/11/07 19:13:01
malloc はスタック関係ねー
381:デフォルトの名無しさん
09/11/07 19:13:11
>>379
bufBに文字列が格納された時にエラーが発生という
場合、格納しようとしている文字列に問題があると
考えられる。多分読み出してはならない領域を
指すポインタだとか....
正確なことはソース見なければわからないんで
うpローダ使ってアげてみたら?
382:デフォルトの名無しさん
09/11/07 19:15:04
まあどうせ単なるショボバグだろうな。
383:デフォルトの名無しさん
09/11/07 19:18:20
コンパイラのせいにしたいのがみえみえ
384:デフォルトの名無しさん
09/11/07 19:19:29
>ポインタはmallocでメモリを確保しています。
というが、
>define BUF 1024
>char buffA[BUF], buffB[BUF];
>char** str;
>int needss, i, j, x, y;
の中にあるポインタはstrしかなく、
そこにmallocの戻り値を格納するとしたら、多分
(charの配列ではなく)char*の配列を確保しているわけで
何かもうそもそもソースがおもしろいことに?^^
385:376
09/11/07 19:22:31
ネタコメント削除してソースうpしますです。。
386:デフォルトの名無しさん
09/11/07 19:24:04
(* (char *) ABC_easy_as_a_123)(int);
これどういう意味ですか。
ポインタ型charにキャストするなら最初からそうやったらいかんのですか。
387:デフォルトの名無しさん
09/11/07 19:25:56
>>386
関数のポインタだろうけど、なんぞこれw
388:376
09/11/07 19:33:16
URLリンク(codepad.org)
うpしました。ダメ出しお願いします。
389:デフォルトの名無しさん
09/11/07 19:34:35
struct SomeStruct
{
// ・・・
};
と書けばいいのになんで
typedef struct
{
// ・・・
}
SomeStruct;
と書くのが巷で流行ってるの?
390:デフォルトの名無しさん
09/11/07 19:39:41
structをtypedefしないんだったらそいつへのポインタを
使うのはダサイかも
391:デフォルトの名無しさん
09/11/07 19:40:35
ヒント:構造体を使う時
392:デフォルトの名無しさん
09/11/07 19:42:56
構造体は、struct タグ名 で宣言するが
これで宣言したのはタグ付きの構造体の中身であって、
型として認められていない。
ここでtypedef を用いると、「SomeStruct型の構造体である」ことを認めさせることになる。
typedefを使わないと、
struct SomeStruct MyStruct;
と別に一行必要になり。これでようやくSomeStruct型の構造体と認められるわけだ
つまり、構造体の「型宣言」と同時に「構造体として使えるように名前もつけてしまおう」という横着した手法なだけだ。
構造体は、述べたように最初の段階では使用できる構造体として認められない。
必ず、「SomeStruct型の構造を持つ○○」という名前をつけてやらなければ使用できない。
だからtypedefで型と名前を同時に決めることもよくある話。
393:デフォルトの名無しさん
09/11/07 19:47:01
C++だと、これを勝手にやってくれちゃってんで面倒なことにもなりかねない。
Cの頃からtypedef structでやっていればC++って何て便利なんだ!と思うかもしれないが
あれは余計なお世話といってよい。
394:デフォルトの名無しさん
09/11/07 19:47:04
理屈っぽ
395:デフォルトの名無しさん
09/11/07 19:49:40
>>388
/*ここで必要な箱の数が分かったのでmallocで領域を確保*/
/*forで必要な行数回、1行の文字数のchar型の領域を作成*/
str = ( char ** )malloc( sizeof( char * ) * ( needBr + 1 ) );
for (i = 0; i <= needBr; i++){
str[i] = ( char * )malloc(oneLineLen * sizeof (char) + 1);
}
396:デフォルトの名無しさん
09/11/07 19:52:04
>>392
なんか勘違いしてるっぽいな。
397:デフォルトの名無しさん
09/11/07 19:53:53
strに実体がないような?
398:デフォルトの名無しさん
09/11/07 19:57:45
str = ( char ** )malloc( sizeof( char * ) * ( needBr + 1 ) );
↑
思いっきり書き忘れていました・・。
しかも括弧付けわすれで評価が意図しない形になる(はず)になっていました。
charが1バイトなので+1で大丈夫だっただけですよね・・。
399:デフォルトの名無しさん
09/11/07 20:01:04
?
400:デフォルトの名無しさん
09/11/07 20:03:02
!
401:376
09/11/07 20:11:20
9文字入力して4文字で改行で実行したりすると
*** glibc detected *** ./a.out: double free or corruption (out): 0x082b9018 ***
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6[0xb7dfc604]
/lib/tls/i686/cmov/libc.so.6(cfree+0x96)[0xb7dfe5b6]
./a.out[0x8048823]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe5)[0xb7da3775]
./a.out[0x8048521]
======= Memory map: ========
08048000-08049000 r-xp 00000000 08:08 69284 /home/mint/Desktop/Cprogram/pr4/a.out
08049000-0804a000 r--p 00000000 08:08 69284 /home/mint/Desktop/Cprogram/pr4/a.out
0804a000-0804b000 rw-p 00001000 08:08 69284 /home/mint/Desktop/Cprogram/pr4/a.out
082b9000-082da000 rw-p 082b9000 00:00 0 [heap]
b7c00000-b7c21000 rw-p b7c00000 00:00 0
b7c21000-b7d00000 ---p b7c21000 00:00 0
b7d8c000-b7d8d000 rw-p b7d8c000 00:00 0
b7d8d000-b7ee9000 r-xp 00000000 08:08 1864 /lib/tls/i686/cmov/libc-2.9.so
b7ee9000-b7eea000 ---p 0015c000 08:08 1864 /lib/tls/i686/cmov/libc-2.9.so
b7eea000-b7eec000 r--p 0015c000 08:08 1864 /lib/tls/i686/cmov/libc-2.9.so
b7eec000-b7eed000 rw-p 0015e000 08:08 1864 /lib/tls/i686/cmov/libc-2.9.so
b7eed000-b7ef0000 rw-p b7eed000 00:00 0
b7ef0000-b7efd000 r-xp 00000000 08:08 2779 /lib/libgcc_s.so.1
b7efd000-b7efe000 r--p 0000c000 08:08 2779 /lib/libgcc_s.so.1
b7efe000-b7eff000 rw-p 0000d000 08:08 2779 /lib/libgcc_s.so.1
b7eff000-b7f03000 rw-p b7eff000 00:00 0
b7f03000-b7f04000 r-xp b7f03000 00:00 0 [vdso]
b7f04000-b7f20000 r-xp 00000000 08:08 6255 /lib/ld-2.9.so
b7f20000-b7f21000 r--p 0001b000 08:08 6255 /lib/ld-2.9.so
b7f21000-b7f22000 rw-p 0001c000 08:08 6255 /lib/ld-2.9.so
bf80c000-bf821000 rw-p bffeb000 00:00 0 [stack]
Aborted
とかもうね・・・。
402:376
09/11/07 20:15:23
謎のエラーはmallocが1行抜けてたからのようです。。
395さんはじめありがとうございました・・。
403:デフォルトの名無しさん
09/11/07 20:34:31
この先、メモリが10GBとかになったらC言語じゃ対応できなくね?
CってポインターがINTで4294967295までしか設定できないよね
それ以上のアドレスは指定できないけどどうすんの?アドレスが5000000000とかの指定できなくね?おわた
404:デフォルトの名無しさん
09/11/07 20:41:56
はいはいワロス
405:デフォルトの名無しさん
09/11/07 20:44:30
ポインタがint値だなどと誰が決めたのだ。
ポインタはポインタであってポインタでしかない。
多くの実装でlong intに変換可能だというだけ。
なんだったら見たこともない宇宙文字列で実装してもいいのだ。
406:デフォルトの名無しさん
09/11/07 20:54:08
>>403
どれでもいいから 64bit 版のコンパイラで sizeof(void*) を表示してみそ
407:デフォルトの名無しさん
09/11/07 20:56:10
long long long long long long long long long long long long long long long long long long long long int
408:デフォルトの名無しさん
09/11/07 20:57:50
>403
メモリが10GB(仮想記憶含まず)ならCPUもそれを指定できないとダメ子さんになるから
(intは何ビットか計算するの面倒だからやらないまぁ、64bitで十分だろうけど)
CPUのbit数xが10G < pow(2, x)を満たす必要がある
intはpow(2, x)なるbit数であるのが一般的である
また、規格ではポインタがintに変換できるとは書かれていない
C99からintptr_tとか入った気もするけど、マジックリストにでも使うんですか
とか思って特に調べていない
409:デフォルトの名無しさん
09/11/07 21:02:02
某ランドのコンパイラとかがC99に対応していない
long longが使えない
410:デフォルトの名無しさん
09/11/07 21:04:17
C99 はロールバックしたうえで、C201x を練り直して欲しい
411:デフォルトの名無しさん
09/11/07 21:07:07
>>403
2038年までにはCは終わってる
412:デフォルトの名無しさん
09/11/07 21:09:47
>>409
long long 使えるよ
C99には対応してないけど
ECC6.1.0(Embarcadero C++ Compiler)な
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5399日前に更新/137 KB
担当:undef