C言語なら俺に聞け( ..
237:デフォルトの名無しさん
07/12/27 08:38:22
>>210
main()
これでCマガジンに連載できるなんて…。・゚・(ノД`)・゚・。
休刊もやんぬるかな。
238:デフォルトの名無しさん
07/12/27 09:29:02
>>237
省略した場合はintって決まりなかった?
だから一応正しいんじゃない?
239:デフォルトの名無しさん
07/12/27 09:31:09
>>234
scanfの戻り値を利用する
scanfはスキャンに成功した数を返すから、
今回のケースで文字を入力されたら0が返る
240:デフォルトの名無しさん
07/12/27 09:35:56
>>232
>scanf("%d", &date[i]);
241:デフォルトの名無しさん
07/12/27 09:43:47
途中でエンター押しちゃったw
>>232
>scanf("%d", &date[i]);
こういう取り方は文字/数字チェックそのものに意味が無いのでやめ
普通はバッファの文字列変数を用意させて、そこに入力させる。
それをisdigit()に通してクリアしたら、その時点でdate[i]に代入するようにすればいい。
242:デフォルトの名無しさん
07/12/27 11:13:33
たぁすけてぇぇぇ!
結果がへんになる!!!
#include<stdio.h>
int main (void)
{
int a,c;
float b,d;
b=1,d=1;
scanf("%d",c);
for(a=1;a<=1000;a++){
b=b+d;
if(b*b==c){
break;
}
if(b*b<=c)
d=d*0.1;
}
printf(" %d の平方根は= %f ",c,b);
return 0;
}
243:デフォルトの名無しさん
07/12/27 11:21:53
>scanf("%d",c);
244:デフォルトの名無しさん
07/12/27 11:27:04
真に申し訳ございません。どうゆうこと?
245:デフォルトの名無しさん
07/12/27 11:30:23
あああああああああああああああ
すいませんすいませんすいません!
もうしませんもうしませんもうしません!
246:デフォルトの名無しさん
07/12/27 14:22:54
辞書検索の2分探索を下みたいに書いたんですけど、
????のところ(該当しなかった場合)が思いつきません。
助けてくださいです…
char a[20];
char b[20];
int hi,lo,i;
略
hi=i;
i=i/2;
lo=0;
while(1){
if(strcmp(b,a) < 0){
hi=i;
i=i-(hi-lo)/2;
}else if(strcmp(b,a) > 0){
lo=i;
i=i+(hi-lo)/2;
}else if(strcmp(b,a) == 0){
printf("あった");
break;
}else if( ???? ){
printf("そんなものなかった");
break;
}
}
247:デフォルトの名無しさん
07/12/27 14:30:21
>>246
そこは if (lo > hi) を入れたいんだと思うが、
突っ込みどころが多すぎるからもうちょっと練り直して来い。
248:デフォルトの名無しさん
07/12/27 14:34:43
せっかくなので1つ突っ込んでくだしあ
249:デフォルトの名無しさん
07/12/27 14:45:05
if文の比較で最初の3通りのどれかに必ず含まれるから最後のelseは
絶対通過しない、まあelse外せばいいけど。
で、1ループでstrcmpは1回呼べばいいべ。
あと文字列が終わったのをチェックしないとね。
略の部分を略さないでテスト用に値設定したやつさらしてみてね。
250:246と248
07/12/27 14:55:46
あ、ほんとだ。
ちょとまってください。
251:デフォルトの名無しさん
07/12/27 15:10:06
#include <stdio.h>
int main(){
int i,j;
for(i=1;i<=9;++i)
printf("%2d ",i);
printf("\n--------------------------\n");
for(i=1;i<=9;++i){
for(j=1;j<=9;++j)
printf("%2d ",i*j);
printf("\n");
}
return 0;
for文の練習で書いた上の九九を表示するプログラムをwhile文だけで書けないかなぁと思って
252:デフォルトの名無しさん
07/12/27 15:10:38
>>251の続き
#include <stdio.h>
int main(){
int i=1;
while(i<=9){
printf("%2d ",i);
i++;
}
printf("\n--------------------------\n");
i=1;
int j=1;
while(i<=9){
while(j<=9){
printf("%2d ",i*j);
j++;
}
printf("\n");
i++;
}
return 0;
}
このように書いてみたのですが1の段以降改行だけでプログラムが終了してしまいます
どうやったら上手く動かせるでしょうか
253:デフォルトの名無しさん
07/12/27 15:13:52
>>252
jの値がどういう風に変化するか追ってみよう。
254:デフォルトの名無しさん
07/12/27 15:13:58
>>252
while (j<=9) のループ抜けたらj を1に戻さないと。
255:デフォルトの名無しさん
07/12/27 15:20:50
あーjが9のままだから次以降のループはスキップされちゃうのか
ヒントありがとうございました
256:246他
07/12/27 15:54:11
せっかくレスくれたのに放置ですみません。
またあとで伺いにきます。
かしこ
257:デフォルトの名無しさん
07/12/27 16:38:48
大学が決まって4月がで暇なのでC言語を勉強しようと思っているのですが
苦しんで覚えるC言語
URLリンク(homepage3.nifty.com)
というサイトを見つけたのですがこのサイトはどうでしょうか?
初心者にいいサイトや本を教えてください
258:デフォルトの名無しさん
07/12/27 16:56:00
それでいいよ
259:デフォルトの名無しさん
07/12/27 17:31:45
>>257
おk
260:デフォルトの名無しさん
07/12/27 17:37:17
いいのかよw
261:デフォルトの名無しさん
07/12/27 18:13:44
>>257
そのサイトはダメ出しされているよ。
262:デフォルトの名無しさん
07/12/27 18:33:23
ダメ出しすれば著者を超えた気分になれるよね
263:デフォルトの名無しさん
07/12/27 18:40:27
あんたは小石を跨いでも小石を超えた気分になれるのか?
264:デフォルトの名無しさん
07/12/27 18:54:03
aho
265:デフォルトの名無しさん
07/12/27 18:57:48
>>257
そのサイトで勉強すると、>19や>205みたいなことを書くようなお馬鹿になっちゃうよ。
266:デフォルトの名無しさん
07/12/27 19:03:50
>>257
参考になるけど、やっぱり本がいいよ。
独習Cとか、やさしいCね。
267:デフォルトの名無しさん
07/12/27 19:04:05
どうなろうと後で矯正するからいいよ。
268:デフォルトの名無しさん
07/12/27 19:05:44
まあ初心者はどのサイトから始めてもいいと思うけど、
そこに留まらずいくつかのサイトを回った方がいいよ
そして宿題スレで宿題を解く
ついでに簡単なデータ構造、アルゴリズムも学ぶ
こんな感じで基礎はおk
269:デフォルトの名無しさん
07/12/27 19:09:25
他のサイトを見るたびに、こんなやり方があったのか!
ってなって悲しくなるぞ。
270:デフォルトの名無しさん
07/12/27 19:37:32
他のサイトを見るたびに、こんなやり方があったのか!
ってなって嬉しくなるぞ.
271:デフォルトの名無しさん
07/12/27 19:50:21
特定のサイトにいついたことはないなあ
適当に検索して、
その日見つけたサイトをぱらぱらと読む
サイト規模にもよるけど1日ありゃ十二分に読み終われるとこばっかだし
272:デフォルトの名無しさん
07/12/27 20:08:52
おれのお勧め、更新は止まってるけど・・・
URLリンク(mikata.curiocube.com)
273:デフォルトの名無しさん
07/12/27 20:10:38
WisdumSoftでC言語の基礎文法を覚えて
(例文の内容にアニメ好きがかもしだされているが)
Programing Placeでデータ構造とかその他の
知識を学ぶ。
で理解できない所(ポインタとかかな)を重点的に
載せてる本でさらに学ぶ。
あとは、経験値をつけていくだけだ。
274:273
07/12/27 20:11:47
間違えたWisdomSoftだ
275:デフォルトの名無しさん
07/12/27 21:02:21
変数宣言と代入ってつなげられるんですか?
276:デフォルトの名無しさん
07/12/27 21:05:44
>>275
いいえ、それは初期化です
277:デフォルトの名無しさん
07/12/27 21:10:49
苦しんでわけわかめ
違うサイトで勉強するわ
お勧め教えてくだしあ
278:デフォルトの名無しさん
07/12/27 21:17:21
猫でも解るって、ぶっちゃけどう?
携帯からサーセソw
279:デフォルトの名無しさん
07/12/27 21:21:20
>>275
int i;
i = 0;
を指してるなら可能だし
int i=0;
なら>>276の言うとおり「初期化」という。
280:デフォルトの名無しさん
07/12/27 21:33:14
初期化と代入はどう違うんですか?
281:デフォルトの名無しさん
07/12/27 21:36:05
初期値を指定するのが初期化。
初期化と代入ではできることが違う場合がある。
配列は一気に全要素を初期化できるけど、
一気に全要素に代入することはできず、
1要素ずつしか代入できない、とか。
282:デフォルトの名無しさん
07/12/27 21:36:06
const int x;
x = 1; //Error
//代入できNEeeee!!!
const int x = 1; //OK
//Yeah! 初期化最高!!
283:デフォルトの名無しさん
07/12/27 21:36:51
>>280
ぜんぜん違う。初期化される前の値が何であるかは神のみぞ知る。
284:デフォルトの名無しさん
07/12/27 21:39:47
以下の二つのコードで、
仮に最適化されないとするなら、
生成される機械語コードは同じですか?
それとも違う?
(1)
int array[2] = {1,2};
(2)
int array[2];
array[0] = 1;
array[1] = 2;
285:デフォルトの名無しさん
07/12/27 21:40:47
コンパイラ次第
286:284
07/12/27 21:41:47
すいません、ちょっと質問が悪いかも
初期化と代入は内部的に全く異なる処理をやっているんですか?
それともただ確保後に代入してるだけですか?内部的に。
287:デフォルトの名無しさん
07/12/27 21:43:53
コンパイラ次第
288:デフォルトの名無しさん
07/12/27 21:44:59
手元の環境で機械語コード生成してみればいいじゃん
289:デフォルトの名無しさん
07/12/27 21:48:46
rep movsd 使って初期化してるかもしれないし、
mov で初期化してるかもしれないし。
そのあたりはコンパイラ次第としか言いようが無い。
290:デフォルトの名無しさん
07/12/27 22:22:17
>>284
多分,全然違うコードになってる。
291:デフォルトの名無しさん
07/12/27 22:42:54
>>284
>仮に最適化されないとするなら、
これが殆ど意味がないのでなんとも言えない。
292:デフォルトの名無しさん
07/12/27 23:45:59
ってかマシン語レベルでの差なんて最適化どうこう言う前にコードが変われば変わる可能性はある。
空行(セミコロンのみの行)に対してNOPを吐くか消されるかだってコンパイラしだい。
予想でいいのならいくらでも応えられるけどな。
>>284のコードなら最適化関係なく同じコードが吐かれるかもね。
293:デフォルトの名無しさん
07/12/27 23:55:28
そんな事、気にしてたら禿げるぞ
294:デフォルトの名無しさん
07/12/27 23:58:41
これ以上禿げたら腋毛が無くなる
びっくりするほどなくなる
295:デフォルトの名無しさん
07/12/28 00:17:48
機械語レベルを気にする必要があるくらい禿てたら手段くらい知ってるだろ
296:デフォルトの名無しさん
07/12/28 01:40:46
代入と初期化の違いは配列やれば判るよ
配列の初期化はOKだけど配列全体の代入はNG
なんでえ〜?ってのはポインタやると判る
297:デフォルトの名無しさん
07/12/28 02:13:30
Java厨です。
プロトタイプ宣言ってなんですか?
C言語ってなんで関数を使う前に宣言しとく必要があるんですか?
昔ながらの慣習みたいなものですか?
宣言無くてもコンパイル通るなら、
コンパイラの手抜きと違うんですか?
関数宣言がないときと宣言も定義もないときと
ちゃんとコンパイラは違うエラー出しますよね?
298:デフォルトの名無しさん
07/12/28 02:26:15
適度に手抜きしてくれないとコンパイルに時間がかかってしょうがないじゃないか
299:デフォルトの名無しさん
07/12/28 02:41:53
分割コンパイルしないなら無くても良いんじゃない?
300:デフォルトの名無しさん
07/12/28 02:49:42
C始めて3日くらいです
fopenとfcloseの使い方がようやく分かって、ポインタについては良くわかりません(変数の代わりなのかな?くらい
そこであるテキストファイルを開いて、その中にある文字列(英数字)からある文字列(setofなど)を探したいです
最終的にはある文字列が見つかる→その後ろ〜〜バイト(もしくは〜〜行)をコピーして、別のファイルにペースト というところまでやりたいのですが
検索しようとしている時点で詰まっています。ソースコードは以下です
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define BUFFER_SIZE 200
main(){
char buffer[BUFFER_SIZE],name[BUFFER_SIZE];
FILE *fp;
printf_s("test.txtを開こうとしました\n\n\n\n");
fp = fopen("test.txt", "r");
printf_s("検索文字列を代入してください\n");
scanf_s("%s",&name);
printf_s("%sを検索しています\n",name);
if ( !fp ){
printf("ファイルオープンエラー\n");
return 0;
}
while( fgets(buffer, BUFFER_SIZE, fp) ){
if(!strcmp(name,buffer)){
printf_s("%sが見つかりました!\n",name);
break;
}
}
fclose(fp);
}
301:デフォルトの名無しさん
07/12/28 02:54:03
以上のソースに対して、テキストファイルを用意します
『aaxaa ←改行
bbxb ←改行
cxc【EOF】』
すると、cxcを入力しても反応してくれず、strcmpのところでcxc\nに変更すると、ifの見つかりました文が出ます
コレに対する問題点としては
1.改行まできっちり一致しなければ見つからないことになる
2.bbxbで完全一致であるが、bxbでも部分一致で見つかったことにしたい
しかし、今では1行読み込みのために不可能(BUFFER_SIZEを実数にしても無理)
というところです
〜〜の関数使ったほうがいいよ、とか、こういうルーチンで考えるとできるよ、っていうのがあればお願いします
わかりにくい質問で申し訳ありませんが、宜しくお願いします
302:デフォルトの名無しさん
07/12/28 02:55:05
>>300-301
strstr()
303:デフォルトの名無しさん
07/12/28 03:02:33
>>302
ありがとうございます。今色々なページを見てきたのですが…
返り値としてポインタとして返すんですね。ポインタと見た瞬間に顔が引きつったのですが…
void TestStrStr(void)
{
char *s1 = "abcdef";
char *s2 = "de";
char *cp;
cp = StrStr(s1, s2);
printf("'%s'の中に現れる'%s'という文字列は%d文字目にある.\n", s1, s2, cp - s1 + 1);
}
このようなソースを見つけました。printfの一番後ろにあるcp-s1+1はおそらく何文字目にあるか指定してくれてるようなのですが
ポインタ同士を引き算しているこのような場合、実数として計算をしているのでしょうか?
304:デフォルトの名無しさん
07/12/28 03:13:28
>>303
メモリアドレスを計算している。s1が100番地に格納されているとすると、メモリ上は
100 101 102 103 104 105 106 (メモリアドレス)
a b c d e f \0
のようなイメージ。
strstr()は、見つかった部分のポインタを返すから、"de"を見つけたならアドレス103を返し、それをcpに代入している。
printf()の最後の引数はcp - s1 + 1、つまり103 - 100 + 1で4を返す。
305:デフォルトの名無しさん
07/12/28 03:23:02
>>304
なるほど。だからポインタは便利だって言われてるんですね…メモリ上の一番基礎になる数字を返すから…
ありがとうございます
もうちょっとポインタのこと勉強してからやってみます。とりあえず今日は寝ます
ありがとうございました
306:デフォルトの名無しさん
07/12/28 03:26:31
>>305
すまん、ちゃんと質問読んでなかったw
ポインタは「アドレスという数字」を格納する変数。
アドレスと聞くと拒否反応が出るかもしれないが、メモリ上の位置を表す何の変哲も無いただの数字。
ただし、四則演算のうち可能なのは加算減算だけで乗除は出来ない。やっても意味のある数字が得られないから。
正しくはインクリメント、デクリメントだけど、これについての詳細はググってくれ。
307:デフォルトの名無しさん
07/12/28 04:18:50
ポインタやる時はメモリマップ作って見ると良いよ
スタック、データ、コードのそれぞれのセグメントがどんな配置か判っているとポインタの理解が早くなる
308:デフォルトの名無しさん
07/12/28 07:55:49
>>306
ちょっとだけ語弊がありそうなので補足。
・ポインタ+整数 → n 要素だけすすめたポインタを算出
・ポインタ−整数 → n 要素前のポインタを算出
これは可能。ただし配列とか malloc で用意してある範囲を逸脱しないように注意。
・ポインタ−ポインタ → 2つの要素の差を整数で算出
なんだけど、この場合2つのポインタは同じ範囲を指すもの
(304みたいに同じ文字列内の違う位置を指すように)
でないといけないから注意。
309:デフォルトの名無しさん
07/12/28 08:31:18
アドレスは「符号なし整数には似ているけど、全く違う種類のデータ」だと考えた方がいい。
整数なら四則演算が定義できるが、アドレスの場合は>>308の言う通り。
そしてインクレメント/デクレメントなんかは「アドレスと整数の混合演算」だと思えばいい。
C言語ではデータの種類によって専用の型を用意するから、整数はintやlong、アドレスは
ポインタを使うと思っておけばいい。
310:Google先生
07/12/28 10:17:12
インクレメント に一致する日本語のページ 約 1,940 件中 1 - 10 件目 (0.20 秒)
もしかして: インクリメント
311:デフォルトの名無しさん
07/12/28 11:01:26
インクリメント デクリメント の検索結果 約 20,700 件中 1 - 10 件目 (0.05 秒)
URLリンク(www.google.co.jp)
インクレメント デクレメント の検索結果 約 544 件中 1 - 10 件目 (0.34 秒)
URLリンク(www.google.co.jp)
検索結果を見ると、インクレメント/デクレメントと読む人もいるようだ。
312:デフォルトの名無しさん
07/12/28 12:52:57
まったく…
K&Rに何と書いてあるか読んでから出直して来い。
313:デフォルトの名無しさん
07/12/28 14:10:56
英語で書いてあるな
314:デフォルトの名無しさん
07/12/28 20:14:54
英語のカタカナ表記を議論することほど無意味なものはない。
ただ、そのあたりを議論したくてしょうがない馬鹿よけ対策として、
市民権のある表現を使うに越したことはない。
315:デフォルトの名無しさん
07/12/28 20:26:25
D→デー
T→テー
と発音するベテラン技術者に食って掛かる新米社員を思い出したw
316:デフォルトの名無しさん
07/12/28 22:39:56
>>299
相互再帰する必要がある時はないと困る。
317:デフォルトの名無しさん
07/12/28 22:42:44
>C言語(シー言語)は、1972年にAT&Tベル研究所のデニス・リッチー (Dennis M. Ritchie) が主体となって作ったプログラミング言語である。
1972当時のマシンでJava並みのコンパイラやアプリなんて起動すらしねぇw
318:デフォルトの名無しさん
07/12/28 22:48:55
おまえは何を
319:デフォルトの名無しさん
07/12/29 16:41:33
テキストエディタ(メモ帳)で、ソースファイルを作ったのですが、
どこのファイルに保存すればいいのか、全く分かりません
どなたか宜しくお願いします
320:デフォルトの名無しさん
07/12/29 16:43:14
自分で決めた場所に自分でフォルダ作って保存しとけ
321:デフォルトの名無しさん
07/12/29 16:44:42
.|
.|
∩___∩ |
| ノ\ ,_ ヽ .|
/ ●゛ ● | .J
| ∪ ( _●_) ミ
彡、 |∪| |
/ ∩ノ ⊃ ヽ
( \ / _ノ | |
\ " / | |
\ / ̄ ̄ ̄ /
 ̄ ̄ ̄ ̄
322:デフォルトの名無しさん
07/12/29 16:44:53
マイドキュメントとかに置くとスペースがどーたらではまるから
c:\homeとかc:\srcとかってディレクトリを作ってそこに置け。
コマンドプロンプトを起動したら
cd /d c:\home
と打ってそこに移動してコンパイルしろ。
323:デフォルトの名無しさん
07/12/29 16:58:31
なんか、自分の手違いがあるらしく、「:や¥は、ファイル名には使えません」
と出てしまいます・・・
どういうことなのでしょうか・・
324:デフォルトの名無しさん
07/12/29 17:00:48
プログラム以前の問題。
Windows のことをもうちょっと勉強しる。
325:デフォルトの名無しさん
07/12/29 17:01:43
:や¥はファイル名に使えるがなんて冗談は置いといて
>>322のはディレクトリ(フォルダ)名
326:デフォルトの名無しさん
07/12/29 17:08:10
Windowsキー+Rでcmdを起動
以下を入力
mkdir c:\home
cd /d c:\home
explorer /n,/e,c:\home
notepad hello.c
gcc hello.c && a.exe
327:デフォルトの名無しさん
07/12/29 17:11:14
beginthreadexに複数の値を渡すコードがわからないのですが、
教えて下さい。
328:デフォルトの名無しさん
07/12/29 17:12:12
>>327
URLリンク(msdn.microsoft.com)
329:デフォルトの名無しさん
07/12/29 17:41:23
何日くらいでマスターできますか?
330:デフォルトの名無しさん
07/12/29 17:44:59
>>329
何を?C?
あんたの今のCの習熟度、他言語について、PCに関する一般知識がどの程度のものか
331:デフォルトの名無しさん
07/12/29 17:48:06
>>330
Cですね
今日はじめた。他言語まったくしらない。PC知識まぁまぁ。
332:デフォルトの名無しさん
07/12/29 17:49:42
1000日くらいがんばれ
333:デフォルトの名無しさん
07/12/29 17:50:13
どの程度を「マスター」と言うのか分からんが、
一通りどんな感じなのか知るのに2ヶ月、
それなりに使えだすのに半年、
十分使えるまでには1〜2年くらいじゃね。
334:デフォルトの名無しさん
07/12/29 17:52:24
がんばるよ
335:デフォルトの名無しさん
07/12/29 17:59:35
C言語の「マスター」と言うと、
・ANSI前(K&R?)の仕様とC89、C99の規格に精通している
・代表的なコンパイラのオプションと処理系定義の仕様が概ね分かる
・上記コンパイラの最適化の仕様がある程度分かる(要アセンブラ?)
代表的なコンパイラ:gcc、VC、BCCぐらい?組込みだとその他もか
辺りだと思うんだがどーか。
336:デフォルトの名無しさん
07/12/29 18:00:37
Linuxカーネルをビルドできたらスーパーハカーです
337:デフォルトの名無しさん
07/12/29 18:04:53
>>335
実務的な知識がなさすぎるだろう
338:デフォルトの名無しさん
07/12/29 18:05:49
コンパイラマスターだな
339:デフォルトの名無しさん
07/12/29 18:17:55
とりあえず正月つぎ込んで入門書読破すりゃマスターしたってことでいいよ。
340:デフォルトの名無しさん
07/12/29 18:25:23
>>335
・Cコンパイラ書いた事がある。
341:323
07/12/29 18:55:56
なんとか意味を理解したつもりで、プログラムの実行段階まで来たのですが
#include <stodio.h>
int main()
{
printf("Hello World!\n");
return 0;
}
のようなソースファイルを実行したらエラーがでました・・・
どこがまずいのでしょうか
342:デフォルトの名無しさん
07/12/29 18:58:03
stodio.h
エラーメッセージ嫁
343:デフォルトの名無しさん
07/12/29 19:01:51
stodio.h
344:323
07/12/29 19:03:08
>>342
どうもすみません
なんとか成功しました! やはり実践しなければ分かりませんね
345:デフォルトの名無しさん
07/12/29 19:26:08
このすっとこどっこいアイオー
346:デフォルトの名無しさん
07/12/29 19:30:49
>>341
ごめん、僕も極最近始めたものだけど、stodioには吹いたw
一緒に頑張ろう!
347:デフォルトの名無しさん
07/12/29 19:37:51
studio とかはたまに見かけるな。
348:デフォルトの名無しさん
07/12/29 19:56:49
stdioも見るな
349:デフォルトの名無しさん
07/12/29 20:04:24
cstdioも見る。
350:デフォルトの名無しさん
07/12/29 20:58:54
>>345
お茶吹いたw
351:デフォルトの名無しさん
07/12/29 22:25:47
みんなどのくらいの年齢でC言語始めるんだろうか
もしかして今の商業高校とかでは教えられているのか?
352:デフォルトの名無しさん
07/12/29 22:40:37
>>351
商業の基本は情報処理だが、
俺のとこじゃ国家試験の勉強が中心
だが、商業でVBをやるところもあったし、JAVAをやるところもある。
353:デフォルトの名無しさん
07/12/29 23:19:04
URLリンク(oshiete1.goo.ne.jp)
この中の
lpPARAM lpParam = (lpPARAM)lpx;
はどのような意味を持っているのですか?
354:デフォルトの名無しさん
07/12/29 23:26:40
>>353
元の関数仕様が void* だから
渡す側が lpPARAM をvoid*にいれて
とりだす側がキャストで戻してる
355:デフォルトの名無しさん
07/12/30 00:05:56
C言語ってポインタとか使うメリットあんの?って感じだけど
難しいから使わなくても大丈夫かな?
356:デフォルトの名無しさん
07/12/30 00:08:16
>>355
その内必要になる時がくる
357:デフォルトの名無しさん
07/12/30 00:15:13
>>355
ポインタのメリットをすぐに理解する必要はないが,必要になったときにすぐに(少し調べて)使える程度に覚えとけ
358:デフォルトの名無しさん
07/12/30 00:17:59
ok
いま独習Cでポインタやってるんだが、まぁある程度理解してるんだが
少し、上に行くと難しいんだよな。
char *bokki ="ちんこが立つ";
printf(bokki);
って場所やってるぜ、こういうのってプロでも使うのか?
359:デフォルトの名無しさん
07/12/30 00:19:36
>>255
使うメリットが無い内は使わなくていいと思うよ
便利だから使うのであって、かつC言語をやっていればそのうち「これはポインタを使った方が楽だ」って状況が出てくる
その時に使えばいいだけの話
まあC++ならまだしも、C言語だと関数との配列の受け渡しとかで
すぐにポインタが必要な状況になるよ
360:デフォルトの名無しさん
07/12/30 00:20:34
>>355
同じアドレスを共有したいときがあるのさ
夫婦だって別々のベッドじゃいやだろ?
361:デフォルトの名無しさん
07/12/30 00:22:17
>>358
まぁリテラル文字列はstaticでconstで領域もconstしちゃうけど
362:デフォルトの名無しさん
07/12/30 00:22:19
Cは難しいなポインタが
もしかして359と360はバリバリ使えるんすか?
363:デフォルトの名無しさん
07/12/30 00:23:39
>>358
const char * str = "俺童貞";
printf("%s", str);
まあdefineの代わりにconstポインタを使うことはあるかもね
defineの代わりとしては
const char* const str = "ヤリてー";
の方がいいかね
364:デフォルトの名無しさん
07/12/30 00:25:40
すごいっすねみなさん
この頭の良さを駆使して、みなさんが作ったプログラムはどんなのありますか?
実用的で使えそうなやつっすよタブを消したり入力した文字をソートしてなんたらしたり
365:デフォルトの名無しさん
07/12/30 00:26:20
>>358
表示したい文字列に%があると見落とすかもよw
366:デフォルトの名無しさん
07/12/30 00:28:41
宇宙に浮かんでるアレの制御プログラム、を作るための支援ツールとか監視システムとか
367:デフォルトの名無しさん
07/12/30 00:29:31
ちなみに私が作ったのは
1,暗号化 2,解読 3,Quit
というやつでシーザー暗号に似た奴ですね。
まだまだへたれですよ
368:デフォルトの名無しさん
07/12/30 00:29:59
文字列のポインタは文字列の実装上使わざるを得ないのでメリットが分かりにくいと思う
369:デフォルトの名無しさん
07/12/30 00:30:44
>>366
本気で言ってるんすか?
知人の凄い人でもATMなのに人工衛星とかの制御プログラムとか次元が違いすぎる
370:デフォルトの名無しさん
07/12/30 00:32:40
最近、どっかの団体のコーディングルールとか見ると、ポインタの演算禁止とか、
ポインタのポインタらしい使いかたはしないって流れになってきてるな。
じゃPascalでも使ってればいいのにって気がするけど。
371:デフォルトの名無しさん
07/12/30 00:32:54
ポインタがどうでも良くなってきたんで。
早くファイル操作などの場所をやりたいんですが、ページを飛ばすと複雑な気持ちになるので
ポインタのページと関数のページを仕方なくやりますか
372:デフォルトの名無しさん
07/12/30 00:33:22
>>369
よく嫁
支援ツールだ
つまりだたの社内ツール
373:デフォルトの名無しさん
07/12/30 00:34:43
実用的なのは作ったこと無いな、所詮娯楽用品止まり。
374:デフォルトの名無しさん
07/12/30 00:35:23
私の書いたコードなら、世に出回っているフラッシュメモリのシェアの多くを生み出す装置の検査に使われているぜw
375:デフォルトの名無しさん
07/12/30 00:35:35
まぁ日曜プログラマならそれでいいんじゃね?
自分の腕を仕事に活かしたいと思ったら、それはそれで地獄をみることになるし
376:デフォルトの名無しさん
07/12/30 00:35:54
>>372
でもすごいっすよ
C言語を始める時期が悪かったですかね
ガキの頃に手をつけとけば良かったと後悔しますよ
Cをマスターしたら次はperlかjavaやろうかと思ってるんすよ
377:374
07/12/30 00:36:39
もっと身近なところでは、某駅ビルの駐車券発行機に使われているとか(ぉぃ
378:デフォルトの名無しさん
07/12/30 00:40:35
去年一年くらいCの仕事をやって、医療関係のシステムだったけど、ありえないくらいコードの質が
低かったから、そのシステムを導入してる病院には行かないことにしてる。怖い。
379:デフォルトの名無しさん
07/12/30 00:40:58
>>376
始めるのに早いも遅いもない
逆にガキのころはガキのころにすべき勉強なり体験なりをしなくちゃいけない
Cなんてただの道具にすぎんのですよ、偉い人にはそれがわからんのです
380:デフォルトの名無しさん
07/12/30 00:41:44
>>374
まじすか?
凄過ぎますよ、是非そういう人に基礎から教えてもらいたいんですが
まぁ無理なんでしょう、自力でやらないと意味がないし
そういうコードを書くにはCを学んでいたときに1日どのくらい書いてましたか?
あとは1日3個適当にプログラムを作るとかそういう目標とかってありましたか?
>>2373
私もそんな感じっすよ
暗号化できたーやーいって(自己満)すよね
>>375
プログラマーになったら大変そうすよね
それで食ってくのは難しいすよね
381:デフォルトの名無しさん
07/12/30 00:44:56
プログラミングの仕事は中国やらインド勢力に取られていくし、
自動生成の流れが盛んになってきているから、
プログラミングの仕事はどんどん減っていくだろうね
現に、カードにパンチしていた時代はコーディングが開発工程の8割を占めていたのに、今では2割程度
382:374
07/12/30 00:46:50
そう言えば某社のFAXに……あれはアセンブラだったな。
某社の検査装置に使われているのは……basicか。
てな具合にいろんな時期にいろんなことをやっていたから「Cを学んでいた(だけの)とき」なんてないよ。
383:デフォルトの名無しさん
07/12/30 00:47:00
娯楽用品って言っても仕事なんだけどな (´・ω・`)
384:デフォルトの名無しさん
07/12/30 00:48:11
>>381
今の日本は開発よりかも指示とかプロジェクトの提案とかそんな感じすかね?
たしかにインドとか中国はすごいっすよね。
ロシアは凄いらしいですがどうなんでしょう。
生まれる場所を間違えたな・・・
385:374
07/12/30 00:48:52
>>381
あー確かに、カードパンチの時代は「完全なる机上コーディング」をしたものを「パンチするだけ」だったな。
# 流石に学校で体験しただけだが
386:デフォルトの名無しさん
07/12/30 00:50:47
NHKのワーキングプアの番組でやってたな。
アメリカで銀行のシステムをやって年収1000万のIT技術者が、インドに仕事とられてファーストフードの店でアルバイト。
387:デフォルトの名無しさん
07/12/30 00:53:08
別にインドや中国が凄いってわけじゃなくて、単価が安いからそっちに簡単な仕事まわしてるだけだよ
難しい仕事は単価の高い日本で集中的にやる
388:デフォルトの名無しさん
07/12/30 00:53:59
やっぱ裕福な国は、それ以上求める物が無くて開発するレベルが低いんですか?
日曜プログラマが良いかな、本職は他ので。
パソコン詳しいねすごいねおっちゃんって言われればそれでいいかな
389:デフォルトの名無しさん
07/12/30 00:57:27
>>387
これからはインド人や中国人の10倍の価値のある技術がないときびしいだろうね。
390:デフォルトの名無しさん
07/12/30 01:01:40
>>388
日本を舐めすぎw
おまい、マスコミに変に影響されてるな
プログラミング力のあるなし以前に、視野の狭さが心配だよ
コーディングっていうのは単純作業なんだよ、単純作業
町工場で働く工員と同じ
指示されたものを淡々と作るだけ
じゃあ、それ以前に何をどう作るか、ってのを考えなきゃいけないよね
それを考えるのが日本の仕事
もちろん、今後すぐにプログラミングの仕事が無くなるわけじゃない
やっぱり言語や文化の壁があって、オフショア開発の管理って難しいくて、
リスクを極力避けるために、
現状は、仕様変更の激しい部分とか、重要な部分ってのは日本でコーディングしてる
391:デフォルトの名無しさん
07/12/30 01:03:10
C/C++でポインタを使わないプログラミングが想像できない
>>380
1日3個も作れるならそいつは天才か、作ったものがゴミ箱行きのカスか
392:デフォルトの名無しさん
07/12/30 01:06:13
とりあえずLinux上の適当なコマンドのソースでも読んでろ
393:デフォルトの名無しさん
07/12/30 01:08:05
UNIXコマンドのソースは俺も読んだなあ。
394:デフォルトの名無しさん
07/12/30 01:10:12
おまいはいいよ
395:デフォルトの名無しさん
07/12/30 01:14:42
ライブラリの○○.aっていうファイルから
収録してある関数名を取り出すことって可能ですかね?
あったら教えてください
396:デフォルトの名無しさん
07/12/30 01:22:21
>>395
nmコマンドでぐぐれ
397:デフォルトの名無しさん
07/12/30 02:32:38
>>391
C++ならiteratorは別とすればポインタつかわないこと多くね?
398:デフォルトの名無しさん
07/12/30 04:17:57
Java厨です。
Include文とかヘッダファイルの自動生成って出来ないもの?
399:デフォルトの名無しさん
07/12/30 05:06:09
条件にもよるが不可能では無い
頑張って作ってみれば?
400:デフォルトの名無しさん
07/12/30 07:46:20
>>396
どうもありがとうございました。
401:デフォルトの名無しさん
07/12/30 08:24:40
#define DATA "data"
と、例えば定義してexeを作ったときバイナリエディタでみても"data"を文字列として見つけられません
これはどういう形で格納されていのでしようか?
402:デフォルトの名無しさん
07/12/30 08:26:04
たとえば、
#define SRAM_A (volatile unsigned char *)0x200000
こんなのもポインタを使っているといっていいですか?
SRAM.Hの中身は、こんなのだらけなんですけど。
403:デフォルトの名無しさん
07/12/30 08:33:50
>>401
DATAを作っていなければコンパイラはobjに"data"を出力しない。
当然、出力されるEXEにも存在しない。
404:デフォルトの名無しさん
07/12/30 08:54:40
>>402
それだと「アドレス」と言いたくなるけど、まぁポインタだね。
405:デフォルトの名無しさん
07/12/30 08:58:09
>>402
組み込みなら普通は #pragma で section 名指定して、
リンカーで配置する。処理系によって違うけど
似たようなコードがあるはず。
絶対アドレスにポインタ使う必要なし。
406:デフォルトの名無しさん
07/12/30 13:24:24
趣味でGBAやったときも402みたいなことばかりやったな。
407:デフォルトの名無しさん
07/12/30 14:42:25
こんなマクロ定義してたな俺。
#define Acc08(Adr) (*(volatile unsigned char *)Adr)
#define Acc16(Adr) (*(volatile unsigned short *)Adr)
#define Acc32(Adr) (*(volatile unsigned int *)Adr)
408:デフォルトの名無しさん
07/12/30 14:50:02
DOS 時代も VRAM 使う時にそういう事してたな。
409:デフォルトの名無しさん
07/12/30 17:04:38
>>401
そもそも使ってなければプリプロセッサはコンパイラに"data"を出力しない
410:デフォルトの名無しさん
07/12/30 21:17:27
void *myMalloc(int size)
{
void *p;
p = malloc(sizeof(double) * size);
if (p == NULL) ...エラー処理;
return p;
}
と言うような関数を作ったのですが、
これに、double **a の奴と、 double *b に
a = (double **)myMalloc(size);
b = (double *)myMalloc(size);
と、つなぎ合わせる事をするのですが、
特にこれで問題は起こらないものでしょうか?
411:デフォルトの名無しさん
07/12/30 21:32:56
>>410
何かメモリがもったいないな
412:デフォルトの名無しさん
07/12/30 21:48:21
a = (double **)myMalloc(size);
のあとは、for文回して
a[i] = (double *)myMalloc(size);
と言うふうに、2次元配列を作る予定なんですが・・・
413:デフォルトの名無しさん
07/12/30 21:51:23
すみません、質問させてください。
テキストファイルを作ると同時にそのファイルから文字を読み込んで出力する・・というのをやりたいのですが、なぜか開こうとしてもすぐ画面が消えます。なにがいけないんでしょうか?
別に読み込むだけでもいいのでアドバイスお願いします。コンパイラは「Bloodshed Deb-C++」です。
414:デフォルトの名無しさん
07/12/30 21:52:39
改行が多すぎると言われたのでいくつかに分けて書きます。
#include <stdio.h>
#include <stdlib.h>
void kaku(int,int*,char*);
int main(int argc, char *argv[])
{
int ten=0;
char kekka[]="NG";
kaku(1,NULL,NULL);
kaku(2,&ten,kekka);
kaku(3,NULL,NULL);
415:デフォルトの名無しさん
07/12/30 21:53:27
FILE *fp;
char data[256];
fp=fopen("test,txt","r");
fscanf(fp,"%s",data);
fclose(fp);
printf("%s\n",data);
system("PAUSE");
return 0;
}
void kaku(int fg,int *ten,char *kekka)
{
static FILE*f;
switch(fg){
case 1:
f=fopen("test.txt","w");
break;
case 2:
fprintf(f,"%d点,",*ten);
fprintf(f,"%s\n",kekka);
break;
case 3:
fclose(f);
break;
}
}
です。長々とすみません
416:デフォルトの名無しさん
07/12/30 21:59:38
>>412
pointer to pointerを作るなら
a = (double**)malloc(size*sizeof(double*));
じゃないの?
まあ、メモリは余分に確保されてるからコーディング間違えなければちゃんと動くだろうけど。
>>413
意味が分からない
417:416
07/12/30 22:01:23
ああ、>>413は>>414-415か
418:デフォルトの名無しさん
07/12/30 22:06:43
>>416
printf("%d\n", sizeof(double));
printf("%d\n", sizeof(double *));
で確認した所、 double型が8で、double *型が4でした。
ポインタだと値が違うんですね。 始めて知りましたorz
通りで動かなかったのかと・・・
ありがとうございました。 頑張ってみます
419:デフォルトの名無しさん
07/12/30 22:16:23
>>413-415
13行目はtest,txtじゃなくてtest.txtだろう。
fopenしたならfpがNULLかどうか必ず確認すべきだ。
system("PAUSE")というのは俺の環境にはなかったから外したら多分期待通り動いた。
420:デフォルトの名無しさん
07/12/30 22:37:38
>>419
できました!ありがとうございます!!
421:デフォルトの名無しさん
07/12/31 01:54:34
>>418
ついでにcharとchar *、shortとshort *とかもsizeofして見比べて見ると良いよ
ポインタがちょっと見えて来る
422:デフォルトの名無しさん
07/12/31 01:55:08
テキストファイルからある文字列を検索し、ヒットした文字列の直後にある数値を抜き出すコードを考えています
例えば
X= 630.20 Y= 220.20
Z= 33.25 A= 30.25
のような感じです。このうちプログラム内で定数として用いたいのが630.20や220.20、33.25に30.25です
まず1行目をfgets()でポインタ*fpに読み込んで、"X="をstrstr()で探します
その辺りまでしかぱっと思いつきません
ここから630.20を読み込もうと思うと、どのような方法があるでしょうか
宜しくお願いします
423:デフォルトの名無しさん
07/12/31 01:56:18
scanf
424:デフォルトの名無しさん
07/12/31 02:01:46
>>423
ありがとうございます
ですが、scanfはキーボードから入力したデータを読み込む奴ですよね?
テキストファイルに書いてあるものを読み込みたいのですが…
425:デフォルトの名無しさん
07/12/31 02:15:45
isdigit() 一文字ずつで調べて配列に格納して、atof() とか
トークンがスペースなら、そこまで読み込むようにして、 atof() とか
トークンをもう少し考えなおすのがいいかも、セミコロン、カンマとかにする。
strtokn()とかあった気がするが、それは調べてくれ。
426:デフォルトの名無しさん
07/12/31 02:22:41
>>424
fscanf
427:デフォルトの名無しさん
07/12/31 02:24:37
>>425
変なこと教えるなよ。
atofは数字以外に当たったら解析を終了するから、
> 一文字ずつで調べて
とかは不必要だろ。
428:デフォルトの名無しさん
07/12/31 02:29:10
>>425
ありがとうございます。isdigitでチェックして配列に格納が簡単そうですね
strtokn()もありますけど、元ファイルを変換する(というより、別ファイルを作ってそこに数値同士をカンマ等で区切るようにする?)ので、あまり使いたくないところです
最悪、strtokn()で別ファイルを一時ファイルとして作成してやるという方法がありますが…
ちょっと考えてみます。ありがとうございました
>>426
fscanfにそんな機能があったのですか、もう一回調べてきます
ありがとうございました
429:デフォルトの名無しさん
07/12/31 02:54:39
>>428
scanfはfscanfのラッパー関数みたいなもん。
scanf内でfscanfをstdinに対して処理している。
scanfでもstdinをfreopenすればファイルからの入力にできる。
430:デフォルトの名無しさん
07/12/31 09:13:36
普通strtol(), strtod()
431:デフォルトの名無しさん
07/12/31 09:43:21
#include<stdio.h>
int main ()
{
int a,b,c,i,f,d[50];
scanf("%d %d",&a,b);
switch(a*b){
case 0:
return 0;
defalt:
c=a/b;
printf("%d",c); /*19*/
break;
}
i=1;
while(i<=50){
c=a%b;
d[i]=c/b;
c=c%b;
printf("%d",d[i]);
if(d[i]==0)
f++;
else
f=0;
if(f>=2)
break;
i++;
}
return 0;
}
スミマセン!なんでコレダメなのデスカ?オシエテクダサイ!!!
432:デフォルトの名無しさん
07/12/31 09:45:12
>>431
scanf("%d %d",&a,&b);
反射神経が書いてるので違うかもシレン。
433:デフォルトの名無しさん
07/12/31 10:26:48
>>431
defalt:
↑これがだめだ。
ラベルとして認識しているはず。
default: な。
434:デフォルトの名無しさん
07/12/31 10:28:32
>>431
ちょっとずれるが、
switch(a*b){
case 0:
↑0かどうか判断したいだけなら、if文を使うべきだ。
switchにする必要なし。
435:デフォルトの名無しさん
07/12/31 12:42:18
スミマセンちなみにエラーの内容ハ”Ifに(がナイ”デス。
修正しまシタがダメデス。
書き方ノドンクササとかよりそっち教えてホシイデス。
436:デフォルトの名無しさん
07/12/31 13:03:01
>>431に「エラー」は見当たらないような・・・
437:デフォルトの名無しさん
07/12/31 13:18:59
>>435
もう一回、ifの入ってるバージョンのソース見せてくれたらなにかコメントできるかも
438:デフォルトの名無しさん
07/12/31 13:22:45
>>431
>d[50];
>i=1;
>while(i<=50){
これも駄目だな
439:デフォルトの名無しさん
07/12/31 14:25:34
437
このトウリデス
ナオラネエ!ウガァァァァァ
440:デフォルトの名無しさん
07/12/31 17:09:50
#include <stdio.h>
void test(int i);
itn main(void)
{
test(0);
return 0;
}
void test(int i)
{
if(i<10){
test(i+1);
printf("%d",i);
}
}
再帰なんですが
これ難しくて理解できないんすよ。
みなさん詳しく説明してくださいお願いします。
441:デフォルトの名無しさん
07/12/31 17:41:00
test関数は引数が10未満ならもう一度test関数を引数+1の値を使って呼び出したあと引数を出力する。
出力は「9876543210」ってなるだけかな?
10を3とかにして流れをゆっくり追って行けばわかるよ。
442:デフォルトの名無しさん
07/12/31 17:42:04
itnってなんだろうってのは置いといて、
test(0)は0+1でtest(1)を呼ぶ
test(1)は1+1でtest(2)を呼ぶ
最終的にtest(9)が9+1でtest(10)を呼ぶが、i<10じゃなくなるので何もしない
その後printfで9が印字され、8が印字され・・・最初の0が印字されて終了と
処理が戻っていく感じだな
443:440
07/12/31 18:03:00
>>441 >>442
やっぱ再帰できたほうがいいすか?
ポインタよりも再帰の方が難しい・・・
444:デフォルトの名無しさん
07/12/31 18:04:52
何が難しいのかさっぱり理解できない
445:440
07/12/31 18:11:48
何故、0123456789じゃなくて
逆になるのかが、難しい
446:デフォルトの名無しさん
07/12/31 18:13:21
>>443
感覚的に理解できないだけだと思うけど、
デバッガでステップ実行して追っていけばわかると思うよ。
ちなみに、再帰はめったに使わない。
11年ぐらい仕事でCプログラミングやってるが、
再帰を使ったのは1,2回。
447:デフォルトの名無しさん
07/12/31 18:23:52
>>445
printfを実行するのはtestを実行した後だから
ディレクトリの走査とかそれに類似したものは再帰使うなぁ
定番というか
448:デフォルトの名無しさん
07/12/31 18:30:32
デバッグ中に無限に再帰してスタック食いつぶしてデバッガがフリーズするのも良い思い出。
449:440
07/12/31 18:56:37
再帰なんて深く理解しなくていいすか?
適当にながしちまえば?
450:デフォルトの名無しさん
07/12/31 19:01:59
じゃあこれでどうだ
int sum(int n)
{
int ret;
printf("enter sum(%d)\n", n);
if(n == 1)
ret = 1;
else
ret = n + sum(n - 1);
printf("leave sum(%d)=%d\n", n, ret);
return ret;
}
int main()
{
printf("sum(5)=%d\n", sum(5)); // print 1+2+3+4+5
return 0;
}
enter sum(5)
enter sum(4)
enter sum(3)
enter sum(2)
enter sum(1)
leave sum(1)=1
leave sum(2)=3
leave sum(3)=6
leave sum(4)=10
leave sum(5)=15
sum(5)=15
451:デフォルトの名無しさん
07/12/31 19:04:18
>>449
何を目的で勉強してるかによるんじゃないかな
単位のためとかであれば流しちゃっていいと思う
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5373日前に更新/237 KB
担当:undef