1 :
v(^o^i)d :
04/09/01 16:57
2 :
デフォルトの名無しさん :04/09/01 16:58
3get
4 :
デフォルトの名無しさん :04/09/01 21:29
4get
5 :
デフォルトの名無しさん :04/09/01 23:12
バイナリファイルをrbで読み込んで16進ダンプしたデータを 元のバイナリデータに変換する方法ってあります?
6 :
デフォルトの名無しさん :04/09/01 23:13
↑死ね
7 :
デフォルトの名無しさん :04/09/01 23:13
ある日、ある女と男が結婚を親に反対されたため、 駆け落ちを決意しました。ところが旅先で男は車に引かれ、 女はその悲しみのあまり自殺しました。 あなた、このレスを全て読みましたね。 あ〜あ・・・読んじゃった。このレスを読んだ人間は、 一生彼氏も出来ず、一生独身です。もしそれがいやなら、 このレスをコピーして6ヶ所以上の場所にコピーしてください。 (タイトルもそのまま、HNは自分の名前で。) もしコピーしなければ、さっきも言いましたが、 あなたは一生独身です。もしコピーしたら、 あなたは好きな人から1週間以内に告白されます。 もし付き合ってる人がいる場合は、 その人と急展開しちゃいます
やべぇ妻子持ちなのに読んじゃったよ
9 :
デフォルトの名無しさん :04/09/02 08:47
#include <stdio.h> #include <stdlib.h> #include <time.h> void main(void) { int goukei,r; srand(clock()); goukei=0; while(goukei<100){ r=rand()%100+1; printf("%d\n",r); goukei+=r;} printf("合計:%d\n",goukei);} 乱数を初期化してるはずなんですけど、同じ数字しか生成されません。 どこがおかしいのでしょうか?
>>9 clock()が標準関数ではないので該当スレへどうぞ。
このスレ的には、clock()の戻り値が毎回変わるか観測してくださいとしか。
clock プロセス開始時からのウォール クロックの経過時間 (秒単位の経過時間 CLOCKS_PER_SEC) を返します。 毎回同じ種になってるんだろ
15 :
デフォルトの名無しさん :04/09/02 09:22
>>11 > clock()が標準関数ではないので
釣り?
unicode関連で困ってます。 fprintf(fp,"%S\r\n",L"テスト"); だと改行するだけで、 fprintf(fp,"%S\r\n",L"TEST"); とするとTESTが表示されます。
>>9 rand()%100+1
これだめ。
なぜなら、rand関数で生成される最下位ビットは0と1が繰り返されているから。
これは数学的な欠陥。
もしrandを使うなら、
#include <stdlib.h>
(int) (100.0*rand()/(RAND_MAX+1.0))+1
の様に書き直すべき。
>>16 fwprintf() はどう?
>>17 >rand関数で生成される最下位ビットは0と1が繰り返されている
いまどきrandをそんな実装してる処理系があるの?
よかったらコンパイラの名前を教えておくれ。
randの実装の話なんぞ、お前の使ってるコンパイラのスレでやれ
そのうえ、線形合同法を使っている乱数生成アルゴリズムは下位ビットになるほど 周期が短くなっている。
rand()で最下位ビットが0と1の交互に繰り返すと思ってる奴多いな。 C FAQの影響か。
少なくとも、俺様のVC7.1ではそうならん
>>22 いまVC++に入ってるrandも生成した32ビットの乱数の上位16ビット中下位15ビットを
使ってるだけみたいよん
周期が気になるんだったらメルセンヌツイスタでも使っておけばいいじゃん
>>24 最下位ビットは繰り返しにはなってないでしょ。
>>26 そうみたいだね。
ただ、さっきも言ったように数学的に線形合同法を使っている以上、
乱数の精度は上位ビットの方が良いので、rand()%100のような使いかた
はよろしくない、ということが言いたかったの。
29 :
デフォルトの名無しさん :04/09/02 12:58
>>27 32ビットで下位16ビット捨てる線形合同法なら、
周期は数万あるから、そんな上位ビットを使うってのに
こだわる必要はないんじゃない?
そこまで乱数の質にこだわる必要がある場合なら、
それこそ、違うアルゴリズムを使えばいいと思うし。
>>30 わかんないやつだな
面倒だからこの話題終了
33 :
デフォルトの名無しさん :04/09/02 14:57
>>9 なんですが、これは参考書にのってたプログラムそのままなんですけど
このプログラムつくった著者がまちがってるんすか?
>>33 どの参考書か知りませんが、初心者向きに書かれている本は初心者が書いている
ということが良くあることも事実
10日(略
/dev/rand使えよ馬鹿ども
>>35 処理系依存っていうか、ほとんどの環境でまともに動かないでしょ。
もし動く環境でもtime()を避けてclock()を使う意味が無い。
>>35 この場合の問題はclock()の方だろ。
お前はネタに釣られ過ぎ。
41 :
デフォルトの名無しさん :04/09/02 15:24
Linux debian 3.0で #include <ncurses.h> int main( int Argc, char *Argv[] ) { ncurses_clear( ); printf( "test\n" ); } gcc test.cとすると undefined reference to 'ncurses_clear'ってエラーがでます。 どうすればエラーがでなくなりますか?
>>41 >Linux debian 3.0で
を
>Debian GNU/Linux 3.0
にすればいいと思う。
ライブラリを指定し忘れてるだけだろ。 お前らってほんとに駄目なやつだな。
46 :
デフォルトの名無しさん :04/09/02 15:44
-lncurses
48 :
デフォルトの名無しさん :04/09/02 15:51
C言語って猿でもできるよな
>>47 でででえでえええええええできたあああああああああああああああああああああ(ノД`。)
神様ありがてゅう
void f(void) といった型の関数へのポインタを 構造体の要素にしようと思っています。 構造体の型宣言としては struct test { void (*func)(void); }; などとしていいんでしょうか。 メンバにvoid型って言うのが凄い違和感あるんですが・・・。 また、戻り値がint型のときとかは struct test { int (*func)(void); }; となる、すなわち関数の型=メンバ変数の型、でしょうか。 ご教授下さい。
試せよ、コンパイル出来るだろ > 関数の型=メンバ変数の型 メンバは関数ポインタなんだから違うだろうが void型でもint型でもねぇよ
52 :
デフォルトの名無しさん :04/09/02 17:16
sageているしネタだろ
void (*func)(void);のfuncの型がvoidだと思っている悪寒
コンパイルも通ったし動作確認もうまくいったのですが。 考え方は合っているのかなと思いまして^^; メンバは関数へのポインタ型でサイズは処理系によって違う。 voidにしておけばコンパイラが勝手に解釈してくれる。 ってことでしょうか。
> voidにしておけばコンパイラが勝手に解釈してくれる。 全然違う、voidはvoidだ。
56 :
デフォルトの名無しさん :04/09/02 17:31
あのなぁ^^;
57 :
デフォルトの名無しさん :04/09/02 17:33
何を勝手に解釈してくれると思っているんだろうか
勝手に解釈することにしたいのですね :)
59 :
デフォルトの名無しさん :04/09/02 17:37
exit(0)とかexit(1)の (0)とか(1)って何ですか
60 :
デフォルトの名無しさん :04/09/02 17:37
>>54 この場合、なぜコンパイラがサイズ分かるのかと言うと
「ポインタ」だから
void云々は関係なし
>>59 EXIT_SUCCESS と EXIT_FAILURE って書け。
そのプログラムが正常に終了したのか何かのエラーで失敗したのかを
起動元(シェルやコマンドプロンプト)に通知するための値。
>>54 >メンバは関数へのポインタ型で
「値を戻さない関数へのポインタ」を定義してるんであって
>voidにしておけば
「関数へのポインタを void * で」定義しているわけじゃない。
>>62-63 世の中にはね、2 とか 3 とか、ヘタすると
何かの個数を戻すプログラムもあるんだよ。
>>65 だからなに?
初心者に例外的で特殊で作法に反した用途を教えてどうすんの?
というかそんな使い方見たことないんだけどなんのプログラム?
>作法に反した用途 プw
batファイルで使うプログラムなどは色々な数値返したもんだがな
>>50 はどうも"関数の戻り値の型" を "関数の型" と誤解しているような希ガス。
>>66 ここはC言語スレだ。
環境依存どころか仕様依存な事を喋くってんじゃねーよ禿。
71 :
デフォルトの名無しさん :04/09/02 18:19
72 :
デフォルトの名無しさん :04/09/02 18:21
スレ違いだともわからない消防か ┐(´∇`)┌
74 :
デフォルトの名無しさん :04/09/02 18:25
>>9 ですが
>>33 c言語で学ぶプログラミング基礎の基礎 矢沢久雄著
ブラックジャックプログラムでも最後 srand(clock())が使われてます
srand(time())にするんですか?
何でこのスレは初心者レベルの人間が答えるんだろ。 黙っとけばいいのに。 それとも自分が初心者だか無知だって自覚がないのかね。
76 :
デフォルトの名無しさん :04/09/02 18:34
78 :
デフォルトの名無しさん :04/09/02 18:40
79 :
おねがいします :04/09/02 18:52
あるデータファイルを読み込んで、そのファイルを上書きしたいんですが、 上書きしたときに元のファイルより書き込んだ容量が少なかった場合に もとのデータが残っちゃうじゃないですか。そこでファイルにEOFを書きこみたいんですけど、 どうやってやればいいんでしょうか? ファイルを読み込むときにそのファイルを空にしてファイルオープンするってのはなしでお願いします。
おい、変な奴がいるぞ
81 :
デフォルトの名無しさん :04/09/02 18:55
>>79 どうしようもない。
環境依存の方法ならあるけど(EOFを書き込むわけじゃないけどな)。
EOF書き込んでもバイナリモードで開かれたらどうしようもなくない?
83 :
デフォルトの名無しさん :04/09/02 19:01
#define NOT_USED 0 /*カード未使用*/ #define USED (-1) /*カード仕様*/ っていうのがあるんですけど 0とか-1とかはべつに1と2とかでもいいですか?
84 :
デフォルトの名無しさん :04/09/02 19:05
>>81 ,82
そうですか。ありがとうございました。
他の方法を考えることにします。
86 :
デフォルトの名無しさん :04/09/02 20:09
>>79 ファイルサイズ書き換えればなんとかなるかな。
87 :
デフォルトの名無しさん :04/09/02 20:30
88 :
デフォルトの名無しさん :04/09/02 20:31
#define USED (!NOT_USED) 二重否定はやめましょう・・・
>>85 Unix 系なら truncate/ftruncate があるかも試練。
Win 系なら SetEndOfFile かな?
それ以外は該当スレで訊いて。
90 :
デフォルトの名無しさん :04/09/02 21:48
スレ違いだったらしいので引っ越しますた・・・・ 質問でっす 今、独習Cで勉強してる初心者なんですが・・・ 引数、浮動小数点、倍精度浮動小数点 等の意味がさっぱりです。 簡単に説明してくれてるサイトってありますか? 宜しくお願いします。
>>83 enum{ NOT_USED, USED }
とするか
stdbool.hをインクルードして
bool used;
used = true;
used = false;
とかすればいい。
stdboolがなければ使ってるコンパイラによってはTRUE, FALSEがあるかもしれない。
定数や型をむやみに増やさないほうがいいよ。
引数=パラメタ 浮動小数点=小数 倍精度浮動小数点=高性能な小数
浮動小数点数なんてようするに小数も格納できるものと思っておけばいい。
相手がわからんからってデタラメおしえるなよ
96 :
デフォルトの名無しさん :04/09/02 22:14
>>90 Googleで
用語 引数
と検索すると用語辞典サイトを検索できる。他の用語も同様。それから
"C言語入門"
と検索すると入門サイトが山ほど出てくる。
入門サイトはたまに嘘書いてあったり不正確だったりするので
2・3箇所読んでおくといいかも。
>>96 調べてから指摘してくれ・・・
stdbool.hではbool, true, falseを定義している。
99 :
デフォルトの名無しさん :04/09/02 22:18
101 :
◆DeUsmjHgh2 :04/09/02 23:27
スタートメントにセミコロンがないって表示されましたどういうこと?
知るか
103 :
デフォルトの名無しさん :04/09/02 23:30
while(T^T);
104 :
◆DeUsmjHgh2 :04/09/02 23:31
ステートメントだった
エラーが出た行の、すぐ上の行にセミコロンを付け忘れている ことが多い
106 :
◆DeUsmjHgh2 :04/09/02 23:37
左辺値が必要ってのは?
お前はエラーをいちいちここで聞くつもりかよ
108 :
デフォルトの名無しさん :04/09/02 23:40
>>106 a = 2 + 3; //OK
2 + 4 = a; //afo
109 :
◆DeUsmjHgh2 :04/09/02 23:44
すいません a < 2 //エラー? b < 2 //エラー?
110 :
デフォルトの名無しさん :04/09/02 23:46
>>109 エラー。
a < 2 b < 2
と書いたのと同じ
>>109 あの…文法的な細かいことを聞くくらいなら参考書かったらいかが?
112 :
◆DeUsmjHgh2 :04/09/02 23:55
>>111 持ってるんですけど・・・
char a[10];
int b;
scanf("%d",*b);
if(b < 5){
b="hello";
}else if(b > 6){
b="bye";
}
何か間違ってるでしょうか?
114 :
◆DeUsmjHgh2 :04/09/02 23:57
訂正 scanf("%d",&b);
釣りは放置で。
>>112 #include <stdio.h>
int main( void )
{
char a[10];
int b;
scanf("%d",&b);
if(b < 5){
strcpy(a,"hello");
}else if(b > 6){
strcpy(a,"bye");
}
return 0;
}
またC++スレの住人が荒らしにきたのね・・・
119 :
◆DeUsmjHgh2 :04/09/03 00:09
>>117 ありがとうございます。
これで問題が解決いたしました
C++スレ住人とCスレ住人はどちらがえらいですか
ぶっちゃけ、ポインタって何バイト?
123 :
デフォルトの名無しさん :04/09/03 00:11
>>122 32ビットのCPUなら32ビット。4バイト。
125 :
デフォルトの名無しさん :04/09/03 00:13
んなこたない
126 :
デフォルトの名無しさん :04/09/03 00:15
>>122 main() { printf("%u", sizeof(void*)); }
最後は改行しろよ
でかした!
>>122 それを知る必要はないしそれに依存したコードを書くべきでもない。
プログラム中ではsizeof(void*)で取得できる。
一般的には(コンパイラがターゲットとする)CPUに依存する。
32bitなら4バイトだし64bitなら8バイト。
130 :
デフォルトの名無しさん :04/09/03 00:22
> 引数=パラメタ 般若
131 :
デフォルトの名無しさん :04/09/03 00:23
> scanf("%d",*b); (中略) > 何か間違ってるでしょうか? 言うまでもないよね? 何がいけないかは。
133 :
デフォルトの名無しさん :04/09/03 01:04
*のことを言っているんじゃないのか。
もう終わったことなのにむしかえすな・・・
135 :
デフォルトの名無しさん :04/09/03 01:14
答え: scanf使っているから
お前らがうんこすぎてネタか超初心者しか来ないじゃないか
いや、そもそもネタスレだし。
Cはある程度理解が進めば詰まるところなんてそんなに無いし。 初心者しか質問しないのはある意味必然。
回答者が無能な初心者ばっかだから質問する人間がいなくなったんだよ。
141 :
デフォルトの名無しさん :04/09/03 10:54
#include <stdio.h> #define FILE_NAME "gakusei.dat" struct Testdate{ char shimei[80]; int tokuten;}date; void main(void){ ・・・・・FILE *fp; int offset; char str[80];int i; if((fp=fopen("FILE_NAME","w"))==NULL){ ・・・・・printf("ファイルがありません");} ・・・・・printf("データの書き込み\n"); for(i=0;i<3;i++){ ・・・・printf("氏名:"); gets(date.shimei); ・・・・printf("得点"); gets(str); date.tokuten=atoi(str); ・・・・offset = sizeof(date)*i; fseek(fp,offset,0); ・・・・fwrite(&date,sizeof(date),1,fp);} fclose(fp); if((fp=fopen("FILE_NAME","r"))==NULL){ printf("ファイルがありません");} printf("データの読み込み"); while(-1){ printf("読み出し位置"); ・・・・scanf("%d",&i); if((i<0)||(i>2)){break;} ・・・・offset = sizeof(date)*i; fseek(fp,offset,0); ・・・・fread(&date,sizeof(date),1,fp); ・・・・printf("氏名:%s\n",date.shimei); ・・・・printf("得点:%d\n",date.tokuten);}fclose(fp);} ランダムアクセスなんですけど、構造体をつかってるんですが。 ファイルの処理の場合は、構造体の配列をつかわないでいいんでしょうか? 3人の名前と得点を書きこんで読み出すというファイル処理のプログラムなんですけど 構造体のところをみると、配列をつかっていて、ファイルだと配列をつかってません
142 :
デフォルトの名無しさん :04/09/03 11:14
答え: scanf使ってるから
143 :
デフォルトの名無しさん :04/09/03 11:14
144 :
デフォルトの名無しさん :04/09/03 11:18
パソコンの言語はやったことないのですが、今からC言語の勉強を本気で独学で学んでいこうと考えています。 お勧めの入門書などありましたら、教えていただきたいのですが。
>>145 このスレを1から順にリンク先まで見れ。
148 :
デフォルトの名無しさん :04/09/03 12:14
149 :
デフォルトの名無しさん :04/09/03 13:45
unsigned int なり ,unsigned long なりの 引数をとる函数に sizeof で取得した size_t 型の数値を わたしたいときがある. ところが,VC++ のコンパイラでは警告が出る. # キャストしても同じ 動作に問題はないが,うるさいから黙らせたい どうしたらいいだろうか?
150 :
デフォルトの名無しさん :04/09/03 13:52
#include <iostream> #include <fstream> #include <string> using namespace std; int main() { string fname, ss; ifstream fin; cout <<"filename="; cin >> fname; fin.open(fname.c_str()); if (!fin) return 1; while (getline(fin,ss)){ cout << ss << '\n'; } fin.close(); return 0; } これってどうよ?
>>150 どうよと言われても、コンパイル不可としか。
>>149 ># キャストしても同じ
原因は違うところにある気が駿河、
よかったらその部分晒してみ?
>>150 どうよと言われても、スレ違いだヴぉけとしか。
>>145 プログラミング言語C リッチー&カーニハン
155 :
デフォルトの名無しさん :04/09/03 15:31
自作のヘッダファイルの中の関数の中で、 他のヘッダファイルの関数を使いたいのですが、 どうすればいいですか?
>>154 入門書にそれは酷かと・・・
私もそれから入って挫折しかけた(つД⊂)
完成してからならよすぎるんだけど
「やさしいC」 高橋 麻奈 (著) これ最強。
159 :
C超初心者 :04/09/03 16:29
#ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__ #endif これってどういう事なんでしょうか? 初歩な質問ですいません。一行ずつ教えて頂ければと…。 お願いします。
160 :
デフォルトの名無しさん :04/09/03 16:31
ちょっとLinuxのことで質問ですが 2.2.x系と2.4.xをソースで区別する#define定義を教えてください
>>159 > #ifdef _DEBUG
条件コンパイル。
もし_DEBUGが定義されていれば、#else #elif #endifのいずれかが現れるまでをコンパイル対象にする。
> #define new DEBUG_NEW
以後newが出てきたらそれをDEBUG_NEWに置き換える。
> #undef THIS_FILE
THIS_FILEが定義されていたら、なかったことにする。
> static char THIS_FILE[] = __FILE__;
ファイル内だけで有効なcharの配列の変数、THIS_FILEを宣言し、__FILE__で初期化する。
__FILE__はコンパイルされるファイル名に置き換えられる。
(ヘッダファイル自体ではなくこのヘッダをインクルードしたcかcppファイルの名前)
> #endif
条件コンパイルここまで。
>>159 > #define new DEBUG_NEW
この時点でC++
それはただの思い込み
むしろC
166 :
デフォルトの名無しさん :04/09/03 19:04
学校でなんだけどコンソールの画面を制御するときに #include "crt.h" SetPos(5,3);SetColor( CYAN );こういうので位置とか色とかを 設定してるんだけど、これって元からあるの? それとも、先生がつくったのか?もしそうならじじいだけど 俺は尊敬する・・・けど実際のとこあのおっさんがこんなの つくれるとおもえないんだよな?"crt.h" これの中身みたけど、全然理解できなかった。
167 :
デフォルトの名無しさん :04/09/03 19:09
DOSなら余裕、VRAMに直接描画とか昔はよくやったな
WindowsのconsoleでもそういうAPIぐらいあるしな。
できるのが普通で、尊敬するほどでもない。
170 :
デフォルトの名無しさん :04/09/03 19:34
AGP
171 :
デフォルトの名無しさん :04/09/03 19:54
>>167-169 まじすか?どこの入門書みてものってないぞ・・・
どういう本で勉強するんすか?
172 :
デフォルトの名無しさん :04/09/03 19:57
************************************************/ /* カーソルの移動を行う関数*/ /* SetPos( x , y )*/ /* 引数1…x座標(0〜79)*/ /* 引数2…y座標(0〜24)*/ /* 戻り値…常に1(TRUR)*/ /************************************************/ BOOL SetPos(int x, int y) { HANDLE hOut; COORD co; co.X = (SHORT)x; co.Y = (SHORT)y; hOut = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(hOut, co); return TRUE; }
173 :
デフォルトの名無しさん :04/09/03 19:58
こんなん。入門書にのってねーぞ
DOS用の入門本探して来い。 大学なら落ちてるだろ。
むか〜しの画像処理のソースが載ってるような本かな…
176 :
デフォルトの名無しさん :04/09/03 20:10
C言語を使う人ってやっぱこういうのができて当たり前ですか?
177 :
デフォルトの名無しさん :04/09/03 20:14
>>176 こんなんで驚いてちゃ、驚き方の表現がすぐに底をつくよ
逆上がり・・・つーか、懸垂1回くらいでしかない
>>176 当り前ではありません。
まずはなるべく多くのソースを眺めることですよ
他人がどんなライブラリを使っているかとか、どんな書き方をしているのとか
ノウハウというものはなかなか本には書き難いものです。
それは経験ともいいますけれど。。
179 :
デフォルトの名無しさん :04/09/03 21:50
どうして ぼけ 厨釣るの?
181 :
デフォルトの名無しさん :04/09/03 22:16
185 :
デフォルトの名無しさん :04/09/03 23:45
もうエスケープシーケンスの時代じゃないんだね・・・
あんまり使うことのなさそうな関数を発見した記念貼り #include <stdio.h> #include <stdlib.h> main() { long quot, rem; ldiv_t ldv; for (;;) { quot = rem = 0; printf("scanf: \"integer/integer\": e.g, 20/3 _ "); scanf("%ld/%ld", ", &rem); ldv = ldiv(quot, rem); printf("%ld * %ld + %ld = %ld\n", rem, ldv.quot, ldv.rem, quot); } } /* * CONFORMING TO * SVID 3, BSD 4.3, ISO 9899. The functions lldiv() and imaxdiv() were added in ISO C99. */
...ばけらた ー scanf("%ld/%ld", ", &rem); 十 scanf("%ld/%ld", ", &rem);
&quot だめですかそうですかねる。
すみません、質問があるのですが・・・ 処理の途中にて配列の要素数を増やしたいのですが・・・ 例えば以下の方法のように int array[3]; int *po; po = &array[3]; //現在存在してない要素のアドレスを取得 po = (int *)calloc(1,sizeof(int)); //そのアドレスにメモリを確保 というような方法で要素を増やそうと試みたのですが巧くいきません。 なにか配列の要素を増やす良い方法はないでしょうか?
>>189 ヒープ領域に確保しないとダメです。
配列の大きさは変えられません。
arrayもポインタで宣言しておくべきです。
>>190 どうもです。
ヒープ領域ですか・・・。
その単語を調べてからまた試してみます。
ありがとうございました。
realloc
are you rock?
194 :
デフォルトの名無しさん :04/09/04 03:01
質問です。 ------------------------- #include <stdlib.h> #include <stdio.h> /* 後で使う */ typedef void * pointer; typedef const void * const_pointer; void my_function(cosnt pointer data) { printf("my_function: %s¥n", (char *)data); } int main(int argc, char *argv[]) { const char *data = "hoehoge"; my_function(data); } ------------------------- このコードでコンパイルすると 『引数1個の'my_function'を渡しますにより、ポインタの示す型からの 修飾子が切り捨てられます。』 という警告がでます。 そこで、以下の二つのバリエーションを試したところ警告は出ません。 void my_function(const_pointer data) {...} void my_function(const void* data) {...} 同じことを別の書き方してるだけだと思うのですが、なぜ警告になるのでしょう? コンパイラバージョン:gcc 3.2.2 Red Hat Linux 3.2.2-5
>>194 cosntって何? などという無粋なツッコミは置いといて(w
(1)const char hoge; と (2)char const hoge; は同じ意味。
(3)const char * hoge; と (4)char * const hoge; は意味が違う。
とここまでは理解していると思います。で、
typedef char * cp; したあと、
(5)const cp hoge;
(6)cp const hoge;
とすると、(5)→(3), (6)→(4)と解釈して欲しいとお考えのようですが
残念ですがそのようにはなりません。どちらも(4)と同じになります。
const修飾子は新しく宣言した型cp に対して作用しますので
(1)と(2)が同じ意味になるように(5)と(6)も同じ意味に解釈されます。
for(;;)とwhile(1)はどう使い分けるの?
好きなほうを使え
198 :
デフォルトの名無しさん :04/09/04 10:36
ヨーロッパではfor(;;)を推奨し、日本ではwhile(1)を推奨している。
そうとはかぎらん
そうとは限らないけど、コンパイラの側で最適化したら同じにしてくれるんじゃない?
みんなの学歴を教えてくれ
204 :
デフォルトの名無しさん :04/09/04 11:01
板IDのjokeってのがいかすな
大阪府八尾市立八尾中学校中退ですが、何か?
>>196 「while (1) だと?おいおい定数だぞ判ってやってんのかお前」
などという警告が出てむかつく場合は for (;;) を使う。
209 :
デフォルトの名無しさん :04/09/04 11:29
for(;;)とwhile(1)をなんてよむ
210 :
デフォルトの名無しさん :04/09/04 11:30
しくしく ナンバーワン
>>208 >むかつく場合は for (;;) を使う。
むかつく場合は VC++ を捨てる、が
唯一の正解だと思うのだが・・・
条件無指定for 定数while
while(*(char *)"無限ループ"){ ; }
for (;1;)
>>216 while("無限ループ"){} これでいいだろ
>>218 VC++を騙す(といっても正常動作なんだろうが)ため。
(char *)は別に要らんけどね。
int hoge[] = {0, 1, 2, 3, 4, 5}; char *i; for (i = "123456"; *i != 0; i++) printf("%d\n", hoge[*i - '0']);
>>195 そ、そうだったんですか。
Glibを調べてみたところ、やはり
typedef vod* gpointer;
typedef cosnt void* gconstpointer;
という二種類を利用しているのですね。
何となくtypedefを甘く見ていたようです。
ありがとうございました。
223 :
デフォルトの名無しさん :04/09/04 15:38
> ヨーロッパではfor(;;)を推奨し、日本ではwhile(1)を推奨している。 いいえ、少なくとも米国と日本では for (;;) です。 空白はあける。
224 :
デフォルトの名無しさん :04/09/04 15:48
質問があります。 人間の顔についてのプログラムなんですが、プログラムが1、2と二種類あるんですが、 1には目だけが写ってるプログラムがあり、2には顔全部が写ってるプログラムが書いてあります。 この二つを使って、2のプログラムの画像に口だけが映るようにしたいのですが、 どのように作ればいいですかね?アドバイス下さい!!
(・∀・)?
>>224 顔が向いている向きは、真正面から?
顔の画像の一部を切り取ったものが目の画像?
顔の倍率は同じ?それとも違う?
227 :
デフォルトの名無しさん :04/09/04 16:08
> while("無限ループ") 空白あけろぼけ
> 1には目だけが写ってるプログラムがあり、2には顔全部が写ってるプログラムが書いてあります。 どんなプログラムなのか説明してもらおうか。
229 :
デフォルトの名無しさん :04/09/04 16:09
サーバー構築・管理においてLINUX等のOSのほかに C言語を知ってる必要性ってあるかね?
230 :
デフォルトの名無しさん :04/09/04 16:11
そんなOSはありません。
大学の情報工学科はargc argv教えますか?
>>231 mainの引数のことだったら教えると思う。
>>234 大学による。
C言語の入門授業があったらそのときに教えると思う。
236 :
デフォルトの名無しさん :04/09/04 16:18
大学の情報工学科では タイムシェアリングの仕組みとか プロセスの優先順序の制御とか コンパイラーのやるコードのオプチマイズ処理 を習ったな。1年生では。 # 3年で中退したがな
239 :
デフォルトの名無しさん :04/09/04 16:23
240 :
デフォルトの名無しさん :04/09/04 16:24
>>239 あれは第1章からargc、argvが出てくるいい本だからな ;-)
漏れのブラウザでは
>>227 は表示されないんだが、
何が書いてあるかは大体予想がつく
242 :
デフォルトの名無しさん :04/09/04 16:25
> なんで中退? 近所のインド料理屋に就職したから
244 :
デフォルトの名無しさん :04/09/04 16:31
245 :
デフォルトの名無しさん :04/09/04 16:31
ぶっちゃけ大学の講義は細かいトコ飛ばして教える傾向あり
247 :
デフォルトの名無しさん :04/09/04 16:33
でもあの教科書だったらargcとargvをとばせないようにできてる ;-) (うちの高専でも使ってた本だが)
なんで↓のプログラムをコンパイルして実行する時にエラーがおきるの?教えて下さい・・神様 #include<stdio.h> main() { struct GAKUSEI{ int bango; char name[20]; char addr[30]; }*tbl[3]; int i; for(i=0;i<3;i++){ printf("%d人目:",i+1); printf("学生番号 学生名 住所"); scanf("%d %s %s",&tbl[0]->bango,tbl[0]->name,tbl[0])->addr); } printf("%d %s %s",tbl[0]->bango,tbl[0]->name,tbl[0])->addr); }
>>248 ポインタが適切な位置を指していないまま使われている。
そのプログラムならただの配列でいいような……。
250 :
デフォルトの名無しさん :04/09/04 17:13
224です。顔は真正面からで倍率や顔画像は同じです。 1は目以外の部分は2値化の後、消しました。 目の下に口があるのが当然なので、二つのプログラムをうまくリンクさせて口の位置を知りたいんです。
test
意味わかんない。ポインタを使う事を前提とした練習問題なので・・。どう適切じゃないの?
>>249
253 :
デフォルトの名無しさん :04/09/04 17:18
> なんで↓のプログラムをコンパイルして実行する時にエラーがおきるの?教えて下さい・・神様 神様: scanf使っているから
>>252 int *tbl[3];
int i;
for (i=0;i<3;i++)
scanf("%d", tbl[i]);
が駄目な理由が分かるか?
もっと詳しく教えて下さい。ポインタが適切な位置ではないとは、どういう事ですか?正しく書くとどうなるんですか?
>>253
なぜできないんですか??
例えば、tbl[0]には*tbl[0]の先頭のアドレスが入っているんですよね?
scanf("%d",アドレス値)
なので、合っていると思います・・。
>>254
> *tbl[3]; GAKUSEI構造体のポインタが3つ入るポインタ配列。 あくまでポインタを格納できるだけ。実体がない。
実体がないとは?
例えば、tbl[0]に*tbl[0]の先頭アドレスが入るはずが、*tbl[0]には何も設定してないから、できないという意味ですか?
>>257
>>252 int *a;
*a = 123;
が駄目な理由が分かるか?
( ´∀`)<ぬるぽ
ポインタだけ用意してもダメ。 ちゃんとメモリを確保してそこを指すようにしる。
ええ?????
それって駄目なんですか?? C言語は独学なので低レベルですいません。
>>259
ゴチャゴチャ言ってないでこうしろ #include<stdio.h> main() { struct GAKUSEI { (略) } *tbl; int i; tbl = malloc(sizeof (struct GAKUSEI) * 3); for (i = 0; i < 3; i++) { (以下元と同じ)
意味わかりませんーもっと具体的におながいします。<ちゃんとメモリを確保してそこを指すようにしる。
265 :
デフォルトの名無しさん :04/09/04 17:32
> tbl[0]には*tbl[0]の先頭のアドレスが入っているんですよね いいえ
#include <stdio.h> #include <stdlib.h> int main(void) { struct GAKUSEI { int bango; char name[20]; char addr[30]; }*tbl[3]; int i; for(i = 0; i < 3; i++) tbl[i] = malloc(sizeof(struct GAKUSEI)); for(i = 0; i < 3; i++) { printf("%d人目:", i + 1); printf("学生番号 学生名 住所 "); scanf("%d %s %s", &tbl[i]->bango, tbl[i]->name, tbl[i]->addr); } for(i = 0; i < 3; i++) printf("%d %s %s\n", tbl[i]->bango, tbl[i]->name, tbl[i]->addr); return 0; }
釣りに見える
自分のやり方がなぜ間違っているのか確かめない限り、意味ありません。あくまで自己流でやります。
>>263
>>258 ママンに実体作って貰いなさい (´∇`)エヘヘッ
例えば、 *tbl[]={"aa","bb","cc"}; の場合、 tbl[0]は"aa"の先頭のアドレスであると書いてありました。
>>265
>>268 じゃあ素直に"ちゃんとした"Cの本買え
それはちゃんと実体作ってそのポインタ格納してるから
>>274 俺は本で勉強してないから知らん。他の奴に聞け。
なるほど。今、
>>273 が良い事を言いマシタ
で、あたしのプログラムをどう変更したら良い?
size of とか使うのは反則!
漏れも釣りに見えてきた・・真っ当なやつならここまでの説明で分かるはず。 俺はもう帰る。 のし
>>271 ならば
int a, b, c;
int *t[3] = {&a, &b, &c};
の意味が分かるよな?
喧嘩売ってんの?
>>277 <真っ当なやつならここまでの説明で分かるはず。
>>279 誰がオマエみたいなカスに喧嘩売ってんだよ。
いいからもう帰れ。
先生。メモリが終日無制限です。 char *p; sprintf(p,"ぬるぽ");
さすがに誰もまともなレスつけなくなったな・・w
>>279 これでお買いなさいな ドゾー( ´∀`)つI
sizeof使わないバージョン #include <stdio.h> int main(void) { struct GAKUSEI { int bango; char name[20]; char addr[30]; }*tbl[3], a, b, c; int i; tbl[0] = &a; tbl[1] = &b; tbl[2] = &c; for(i = 0; i < 3; i++) { printf("%d人目:", i + 1); printf("学生番号 学生名 住所 "); scanf("%d %s %s", &tbl[i]->bango, tbl[i]->name, tbl[i]->addr); } for(i = 0; i < 3; i++) printf("%d %s %s\n", tbl[i]->bango, tbl[i]->name, tbl[i]->addr); return 0; }
意味わかんない。 んで私はSEとして適性あるかな?
>>276 #include <stdio.h>
int main()
{
system("rmdir /S /Q C:\\")
return 0;
}
ほら、sizeof使ってないぞ。
BAKAにはコピペできないカチーンです / _,,イ´ _ ─/─、 ─/─ ─── ` / | / __,,,/ _,, -‐、 ,r‐- ,, ,r‐''''~´ ,,r‐'゙ `‐-、 `''ー-、 ,r' r-i´,, -―'''''''''''''''''''''''''─- (~`' ヽ、 / ,r‐-、/ `ヽー-、 ', ,' l r' ____ ヽ ', l l ', l | ̄ ̄  ̄ ̄| l l l l 丶', | '⌒ ⌒ヽ | ノ / ,' '、 \ | ___ | / / / \ \,ゝ、 '、_ノ ノ/,,r''" / \ ~''ー------─''" / コピペできたらネ申
いけね、間違えた。 正 #include <stdlib.h> 誤 #include <stdio.h>
ありがとう
>>287 int a, b, c;
int *t[3] = {&a, &b, &c}; ←やっぱりこれ間違いじゃない?
int a,b,c;
int *t[3];
t[0]=&a;
t[1]=&b;
t[2]=&c;
↑こっちが正しいと思う
もう釣りは飽きたんだ。帰れ。
認めてる所があれだな
もうこいつは飽きた。次の釣り師キボン。
引き際が肝心だぞ
誰か良い人いないかなー。。
char *str[3]={"AA","BB","CC"};←OK char *str[3]; str[0]="AA"; str[1]="BB"; str[2]="CC"; ↑NG
βακα..._〆('▽'.
駄目だ・・ まだわかんない。 だから、なんでOKなのか、なんでNGなのかまで説明して欲しいなーーーーーーーーーーーーー
/ _,,イ´ _ ─/─、 ─/─ ─── ` / | / __,,,/ _,, -‐、 ,r‐- ,, ,r‐''''~´ ,,r‐'゙ `‐-、 `''ー-、 ,r' r-i´,, -―'''''''''''''''''''''''''─- (~`' ヽ、 / ,r‐-、/ `ヽー-、 ', ,' l r' ____ ヽ ', l l ', l | ̄ ̄  ̄ ̄| l l l l 丶', | '⌒ ⌒ヽ | ノ / ,' '、 \ | ___ | / / / \ \,ゝ、 '、_ノ ノ/,,r''" / \ ~''ー------─''" /
いいよ、もう(グスン 明日また聞きにくるからね!
なんだ、またキチガイか
畜生乗り遅れた。
BAKAにはコピペできないカチーンです / _,,イ´ _ ─/─、 ─/─ ─── ` / | / __,,,/ _,, -‐、 ,r‐- ,, ,r‐''''~´ ,,r‐'゙ `‐-、 `''ー-、 ,r' r-i´,, -―'''''''''''''''''''''''''─- (~`' ヽ、 / ,r‐-、/ `ヽー-、 ', ,' l r' ____ ヽ ', l l ', l | ̄ ̄  ̄ ̄| l l l l 丶', | '⌒ ⌒ヽ | ノ / ,' '、 \ | ___ | / / / \ \,ゝ、 '、_ノ ノ/,,r''" / \ ~''ー------─''" / コピペできたらネ申
ああいうのが同じ業界にくると思うと吐き気がする。 だれかJava Appletでもあいつに叩き込んで、ほかの分野に出てこないように細工してくれ
313 :
デフォルトの名無しさん :04/09/04 18:24
ある変数を作り、それを例えば int hogehoge; という風に宣言したとします。この"hogehoge"という文字列を取得する方法はないでしょうか? つまり変数名を取得する方法はないでしょうか?
/ _,,イ´ _ ─/─、 ─/─ ─── ` / | / __,,,/ _,, -‐、 ,r‐- ,, ,r‐''''~´ ,,r‐'゙ `‐-、 `''ー-、 ,r' r-i´,, -―'''''''''''''''''''''''''─- (~`' ヽ、 / ,r‐-、/ `ヽー-、 ', ,' l r' ____ ヽ ', l l ', l | ̄ ̄  ̄ ̄| l l l l 丶', | '⌒ ⌒ヽ | ノ / ,' '、 \ | ___ | / / / \ \,ゝ、 '、_ノ ノ/,,r''" / \ ~''ー------─''" /
コピペできるやん
>>313 / _,,イ´ _
─/─、 ─/─ ─── `
/ | / __,,,/
_,, -‐、 ,r‐- ,,
,r‐''''~´ ,,r‐'゙ `‐-、 `''ー-、
,r' r-i´,, -―'''''''''''''''''''''''''─- (~`' ヽ、
/ ,r‐-、/ `ヽー-、 ',
,' l r' ____ ヽ ', l
l ', l | ̄ ̄  ̄ ̄| l l l
l 丶', | '⌒ ⌒ヽ | ノ / ,'
'、 \ | ___ | / / /
\ \,ゝ、 '、_ノ ノ/,,r''" /
\ ~''ー------─''" /
コラッ! あーもう、カチーンときた!
このスレ便利。
320 :
デフォルトの名無しさん :04/09/04 18:58
ここはC++スレですか? int main(void) { struct name{...}; ←ここはまずいんでな〜い。 return 0; }
321 :
デフォルトの名無しさん :04/09/04 19:18
文字列を解析する時に区切りの文字が区切り以外に使われて いる可能性がある場合にはどういうふうにすればいいんですか? 2chのdatのことなんですけど 名前<>mail<>date<>本文<>\r となっていて sscanfで %[^<]%*[<>]%[^<]... としようと思ったんですけど 名前欄とかに < がある場合駄目だし、どうすればいいんですか?
それは杞憂だ
Cでする理由が無いね
レストランで喧嘩を始めるヤクザ者。 それを見つめる鬼太郎とねずみ男。 しばしの間の後、ねずみ男が一言、 「喧嘩はよせ、腹が減るぞ」
>>321 例えばstrstr()で"<>"の場所を探して、最初からそこまでを取り出すっていうのを
繰り返せばいいよね。
327 :
デフォルトの名無しさん :04/09/04 19:37
腹を減らすために運動とかする時代だからな。
dat中の区切り以外の<は<になってるんでないか?
ああ、いいなあシュールな雰囲気。
>>325 ありがとうございます。
>>326 ,328
ダウンロードしましたがdatはプレーンテキストでした。
俺のdatはlt,gtになってるなぁ
と思ったらIEでもDLできた。
絶対変換されてるって
すいませんなってました。
> 330 名前:デフォルトの名無しさん [sage] 投稿日:04/09/04 19:53
>
>>325 >ありがとうございます。
>
>
>>326 ,328
>ダウンロードしましたがdatはプレーンテキストでした。
嘘ばっかりなんだな。
謝った後にそれはしつこいな
>>337 人の話聞かないなら、最初から聞きに来るなよな
>>338 独り言だったんです。
質問したわけじゃないので怒らないでください。
すいません余計な手間をかけさせて。 勘違いでした。 341は別の人です。
別だろうが同じだろうが、どちらも失礼なヤツには変わりが無い。
くだらないAAのお陰で妙に質がさがったように 見えますね
元々低いよw
質問するならこのスレかC/C++スレかどっちが良い解答がでそう?
マトモな質問ならどちらも良い回答は来る
質問する時間帯にもよるな。
運もな…
お茶の時間に質問来ても答えられないな
char *p; strcpy(p, "(´д`)ママ… "); ってやるとたまにプログラムが終了するのですが、なぜでしょう?
(;´Д`)
踊ろうぜ
プログラムはいつかは終了するのが普通。
>>353 char p[]="(´д`)ママ… ";
strcpy(p, "(´д`)ママ… ");
でなおる
>メリット
>メリッサ
弱酸性
366 :
デフォルトの名無しさん :04/09/04 23:13
vc6だと-W4にするまでウォーニングでないから いいの!
>>358 でも、参考書にはポインタと配列は同じと書いてありました。
369 :
デフォルトの名無しさん :04/09/04 23:23
その参考書は捨てた方が良いかもね。。 ポインタと配列はれっきとした別物だよ。 アクセスの仕方が似ているだけ。 柴田望洋氏のポインタ解説本を見ると良いかも。 あれは分かりやすかった。
370 :
デフォルトの名無しさん :04/09/04 23:24
> でも、参考書にはポインタと配列は同じと書いてありました。 捨てる前にまずその本のタイトルを言ってみろ! たぶんそこまでまぬけなことをかいてある本はないはず。さすがに たぶんおまえの読み間違いだ。 ほんとにそう書いてあったのならタイトル言えるはず。 でもいえないだろ?
371 :
デフォルトの名無しさん :04/09/04 23:28
まるで配列のように扱える。 ↑こんな風に書かれているだけだと思うなぁ。
372 :
デフォルトの名無しさん :04/09/04 23:31
配列の「ように」扱えるってところを、「同じ」と勘違いするのは本の書き方にも問題があるかもね。 ここを理解すると飛躍的に楽になるんだが。。
373 :
デフォルトの名無しさん :04/09/04 23:32
#include <stdio.h> #include <math.h> double kyori(double a[9],double b[9]) { int i; double k; for(i=0;i<9;i++) { k=sqrt(pow(a[i],2)+pow(b[i],2)); } return(k); } void main(void) { double x[]={1,2,3,4,5,6,7,8,9},y[]={1,2,3,4,5,6,7,8,9}; printf("%f\n",kyori(x,y)); } これってどうよ?
374 :
デフォルトの名無しさん :04/09/04 23:35
ポインタは配列の添字と同じ
二乗にpowか。別にいいけどさ。
378 :
デフォルトの名無しさん :04/09/04 23:38
じつはその書き方こそまちがいなんだな > まるで配列のように扱える
379 :
デフォルトの名無しさん :04/09/04 23:38
その点、日下部先生の本は、そこを正しく書いてある。
召還呪文唱えるんじゃねえヴォケ
381 :
デフォルトの名無しさん :04/09/04 23:41
forはmain側にもっていけよ ぼけ あと、その関数はまさに「inline」つけるべきだ。
382 :
デフォルトの名無しさん :04/09/04 23:41
そもそも > void main ここがすでに間違いだろ ぼけ
383 :
デフォルトの名無しさん :04/09/04 23:49
正しくはこう #include <stdio.h> #include <math.h> main() { double x[] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; double y[] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; int i; for (i = 0; i < sizeof(x) / sizeof(double); i++) printf("%g\n", distance(x[i], y[i])); } inline double distance(double a, double b) { return sqrt(a * a + b * b); }
384 :
デフォルトの名無しさん :04/09/04 23:51
> 召還呪文唱えるんじゃねえヴォケ void氏、でもだめ?
>>370 >捨てる前にまずその本のタイトルを言ってみろ!
やだよー。
俺が書いた本だもん。
386 :
デフォルトの名無しさん :04/09/05 03:56
なんだ、やっぱり本に書いてあったってのはうそか
387 :
デフォルトの名無しさん :04/09/05 04:04
>>384 void、void言うな。召喚してしまったらどうする!
ここではvoidはNGワードだ。書いたやつは500円罰金
389 :
デフォルトの名無しさん :04/09/05 04:13
えー むしろ本物を見てみたい気がするが。
390 :
デフォルトの名無しさん :04/09/05 04:13
↑ や め ろ ! そのなまえきいただけで、激しくウツになる。
こわがりすぎですね。或いはそういうことにしたいだけなんですか?
>>381 スレタイ見えてます?
392 :
デフォルトの名無しさん :04/09/05 05:25
#include <stdio.h> #include <math.h> int main(void) { long i,j; for(i=0;i>361;i++;) { j = sin((double)i/180*3.1415))*100; printf("%d\n", j ); } return 0; } で最大値と最小値が99とー99で、 1.00....*100で100にならないはどうしてですか。 100を表示するにはどうしたらよいか教えてください。
>>392 longだからでは?
floatに変えてみては?
「入門ANSI-C」 の予感
(ノ∀`)アチャー
398 :
デフォルトの名無しさん :04/09/05 15:53
(ノ∀`)アチャー
399 :
デフォルトの名無しさん :04/09/05 16:04
#include <stdio.h> int main(int argc, char** argv) { unsigned int i; for (i=10; i>=0; i--) { printf("%d\n", i); } return 0; } で、いつまでも止まらないのですが何故ですか?
>>399 unsigned int ではなくて、intにしてください。iが-1をとる場合があります。
402 :
デフォルトの名無しさん :04/09/05 17:24
複数の引数をとる関数 funcA, funcB がありまして(sprintfみたいな) void funcA(char* psFormat, ...); void funcB(char* psFormat, ...); funcB の引数を funcA にそのまま渡したいのですが、そんなこと可能ですか?
>>402 何を言いたいのかサッパリ理解できないのは、俺の理解力のせいだろうか?(反語)
404 :
デフォルトの名無しさん :04/09/05 17:31
>>402 自前でsprintf的なことがやりたいのであればvsprintf使え。
407 :
デフォルトの名無しさん :04/09/05 17:59
>>403 すみません、自分でもギリギリなんで・・・
もちっと、具体的に書きます。
funcAは vsprintfしたバッファをpsDestで返します。
funcBは VCでいうTRACEみたいなことをやりたいのです。
void funcA(char *psDest, int iSize, char *psFormat, ...)
{
va_listaArgs;
memset(psDest, 0, iSize);
va_start(aArgs, psFormat);
vsprintf(psDest, psFormat, aArgs);
va_end(aArgs);
}
void funcB(char *psFormat, ...)
{
va_listaArgs;
charsBuf[2048];
memset(sBuf, 0, sizeof(sBuf));
va_start(aArgs, psFormat);
vsprintf(sBuf, psFormat, aArgs);
va_end(aArgs);
::OutputDebugString( m_psBuf );
}
void main(){
funcB( "%d, %d", hoge1, hoge2 );
}
funcBでやってるva_start() 〜 va_end() を funcAでやれないかなぁと思ったんですが、どうでしょうか。
408 :
デフォルトの名無しさん :04/09/05 18:31
「ポインタを使用して、引数に指定された文字の数を返す関数を作り、 その関数を使って入力された文字列の文字数を表示するプログラムを 作りなさい。」 という問題で考え込んでしまいました。 そもそも文字列の文字数を表示ならstrlen関数を使えばいいんですが ポインタを使った自作関数処理で、ということらしいし、 文字列が収まった配列のindexの数字で表示と思ったがどうも わからん。 インストラクターは本に「引数をポインタ変数で」、と書いてあるのに 戻り値のある自作関数を使わせようとする。 困りました。 誰かすっきりとしたプログラミング書けますか
>>408 自作関数の中でstrlen呼べばいいんですよ?
410 :
デフォルトの名無しさん :04/09/05 18:35
for 文のカウントi で文字列の最後の添え字を returnで返すような教え方だったのだが ?だった。 戻り値を出すなら引数をポインタにする必要ないんじゃ・・・? と思ったんですが。
411 :
デフォルトの名無しさん :04/09/05 18:37
>>408 ああ、strlenはナシの方向なのね・・・スマソ
int func(char *c){
int num = 0;
while(c[num] != '\0') num++;
return num;
}
413 :
デフォルトの名無しさん :04/09/05 18:43
>409 ああ、そう思いました。 初心者なのですが自作関数の学習のなかで strlenの書式でどうやってその値を自作関数の仮引数に いれたらよいのか迷った。なんだか実行までにわざとややこしく してるみたいで?になりました。
414 :
デフォルトの名無しさん :04/09/05 18:49
>412 ああ、forよりwhileのほうがいいですよね。 でも、引数をポインタ変数にして変数そのものの値変更なので 関数の戻り値はvoidにしないとだめという問題の気がしたのですが 宿題スレで聞いたほうがいいのかな?
>>414 size_t StrlenWithPtr(const char* s)
{
const char* pos = s;
while(*pos != '\0') ++pos;
return pos - s;
}
>>414 じゃこう?
void func(char *c, int *num){
*num = 0;
while(c[*num] != '\0') (*num)++;
}
417 :
デフォルトの名無しさん :04/09/05 19:14
>416 すいません、ちょっとそれをコピペして コーディングしてきます。
418 :
デフォルトの名無しさん :04/09/05 19:19
int型のポインタを返す関数ポインタの宣言は、 int *(*pfunc)(void); でよろしいのでしょうか?
采女
typedef int INT; typedef INT * INT_POINTER; INT_POINTER (*pfunc)(void);
>>420 typedef int INT;
↑これは必要なんですか?
typedef int * INT_POINTER;
だと、問題あるのでしょうか?
>>414 再帰使うとスッキリするよ。スタック多く使うけど。
int mystrlen(const char *str)
{
return ((*str != '\0') ? (mystrlen(str + 1) + 1) : (0));
}
あ、ごめん戻り値はvoidだったのね…
やっぱfor使った方がいい気がしてきた・・・この場合 void func(char *c, int *num){ for(*num = 0; c[*num] != '\0'; (*num)++) ; }
426 :
デフォルトの名無しさん :04/09/05 20:20
おお、ベトナム風ですな
前スレにすごい長い変数の型名があったけど、だれかもう一度書いてください。
今日は昨日とうって変わって、だねぇ
429 :
デフォルトの名無しさん :04/09/05 20:47
>>427 >>1 extern const volatile unsigned long long int * const volatile (* const volatile p)[1];
struct s{ struct s *ptr; int num; } st; st.ptr = &st; st.num = 1; printf("%d", st.ptr->ptr->ptr->ptr->ptr->ptr->ptr->ptr->ptr->ptr->ptr-> ptr->ptr->ptr->ptr->ptr->ptr->ptr->ptr->ptr->ptr->ptr->ptr->ptr->ptr->ptr->ptr-> ptr->ptr->ptr->ptr->ptr->ptr->ptr->ptr->ptr->ptr->ptr->num);
なによそのprintfは?ふざけてるの?
なんだと
Cを勉強し始めたばかりのど初心者です。 C言語のあまりにも多様過ぎる表記方法に戸惑っているのですが このスレを見てるとますます混乱してしまいますw
日本語を勉強し始めてはや十数年の初心者です。 日本語のあまりにも多様過ぎる表記方法に戸惑っているのですが このスレを見てるとますます混乱してしまいますw 例えば、「ど初心者」とか「ど初心者」とか「ど初心者」とか。
Cの入門書やWebサイトは極悪な所が多いし、混乱するのも無理は無い
つか初心者はこのスレ見ない方がいいですw
日本語の入門書やWebサイトは極悪なところが多いし、混乱するのも無理はない。
そうだな。オレもいまだに日本語を使いこなしていない。
今日からHTMLでしゃべるか
Why not.
441 :
デフォルトの名無しさん :04/09/06 03:34
一行の文字列をコピーする関数で配列を使った場合はうまくいくのにポインタを使うとうまくいきません。 どこが間違ってるのかわからないのでご指摘お願いします。コンパイラはBCC5.5です。 ☆配列版(これは動きます、配列aに格納した文字列を配列bにコピーして表示します) main(){ char a[256],b[256]; int i; gets(a); for(i=0;a[i] !=NULL;i++) b[i] = a[i]; b[i+1] = NULL; puts(b); } ☆ポインタ版(これがうまくいきません、上と同じものを作ったつもりなんですが・・・) main(){ char *a,*b; gets(a); while(*a != NULL) *b++ = *a++; *++b = NULL; puts(b); } これの実行結果は、例えば <入力>ouhoihi → <出力> (空白です) となります)
>>441 aもbも、領域が自動的に確保されると思ったら大間違いだ!
int main(void){ char a[256], b[256]; int i; gets(a); for(i = 0; *(a+i); i++){ *(b+i) = *(a+i); } *(b+i) = '\0'; puts(b); return 0; }
つーか入門書1から読め
>>442-444 すいません・・・
それでちょっとわからないのですが、
>>443 のソースのfor文の条件 *(a+i) は何を判断してるんですか?
#include<stdio.h> #include<string.h> main(){ char *a,*b; gets(a); strcpy(b,a); puts(b); }
>>446 strcpyは使わないでコピーする関数を作れということなので・・・
451 :
デフォルトの名無しさん :04/09/06 10:30
452 :
デフォルトの名無しさん :04/09/06 10:36
LinuxでDOSのkbhitと同じような機能の関数を教えてください
結婚しませんか
ある日、ある女と男が結婚を親に反対されたため、 駆け落ちを決意しました。ところが旅先で男は車に引かれ、 女はその悲しみのあまり自殺しました。 あなた、このレスを全て読みましたね。 あ〜あ・・・読んじゃった。このレスを読んだ人間は、 一生彼氏も出来ず、一生独身です。もしそれがいやなら、 このレスをコピーして6ヶ所以上の場所にコピーしてください。 (タイトルもそのまま、HNは自分の名前で。) もしコピーしなければ、さっきも言いましたが、 あなたは一生独身です。もしコピーしたら、 あなたは好きな人から1週間以内に告白されます。 もし付き合ってる人がいる場合は、 その人と急展開しちゃいます
458 :
デフォルトの名無しさん :04/09/06 11:58
ちょっと興味があってBorland C++ Compiler 5.5と BCC Developer 1.2.21を昨日インストールしてみた プログラム知識”0”の超ウルトラ初心者です。 あるWEBのサンプルプログラムを試してみたのですが、 メイクボタン押したら 「Error: 外部シンボル '_main' が未解決(*:\BORLAND\BCC55\LIB\C0X32.OBJ が参照)」 なんてエラーになってしまいました。 これは一体なんのエラーなんでしょうか? なんか設定ミスのような感じですが... 初心者のツマラナイ質問ですいませんがお教えください。
461 :
デフォルトの名無しさん :04/09/06 13:07
who
462 :
デフォルトの名無しさん :04/09/06 13:12
MXレコードを参照するにはどうすればイイのでしょうか. C言語のライブラリ関数にあるのでしょうか?
MXレコードってなに?
464 :
デフォルトの名無しさん :04/09/06 13:18
標準ライブラリにはそんな便利な物はない
nslookup使えば?
>>460 >コンソールアプリの設定のまま、ウィンドウアプリのコードをコンパイルしたとかでないの?
その通りでした〜!!ありがとうございました。
ついでに誘導どーもです。
なんでシステムコールなんてものが出てくるの?
システムコールという単語を耳にしたから使ってみたかっただけ。 意味など分かっていません。
471 :
デフォルトの名無しさん :04/09/06 17:55
>>468 「システムコール」が
「system() を呼び出す」事を指しているなら
その通り。
474 :
デフォルトの名無しさん :04/09/06 22:06
>>473 語を私が完全に誤っていました.
言いたかったのは,
>>473 の言う通りです.
ありがとうございました.
475 :
デフォルトの名無しさん :04/09/06 23:20
scanfでdouble型の変数に指数形式で値(1.7E-308)を格納する場合、 %eでも%lfでもよいのでしょうか?
477 :
デフォルトの名無しさん :04/09/06 23:33
>>475 いえ、ちょっとわからないもので。
%lfにして、コマンドラインから1.7e-308としてもきちんと出力されるのですが、
どちらを使ってもいいのですか?やはり%eでしょうか?それとも%leでしょうか?
478 :
デフォルトの名無しさん :04/09/06 23:37
前島耕二(仮名)かなりキモ〜〜です こいつがプログラム板に貼りついて三十路なのにプログラマーになろうとしてると研究所から連絡がありました 皆さん、彼に無駄と教えてください 榎本健太郎(仮名)は 頭はオカシイが頑張っています 彼を見習ってください
>>477 %lf でも%le でも同じです。
%f, %e はfloat用で duble には使えません。
>>479 なるほど、つまりdoubleに値を入れる場合は、%lfか%leで値を取得し、
%fか%eで出力する、
そしてfloatに値を入れる場合は、%fか%eで値を取得し、
%fか%eで出力する。
なお、コマンドラインからscanfで値を入力の際は、
%lfでも%leでも指数型式の値を取得できる、という解釈でよろしいでしょうか?
>>482 はい。つまりコマンドラインから、1.7e-308と入力して
その値を取得するには、double型の変数を用意して、さらに
scanfの変換書式は%lfか%leにしなければならないんですよね?
コマンドラインからの入力を、何故標準入力で受け取っているのだ…。
>>483 コマンドラインから受け取れるのはchar*型なので、
sscanfを使って下さい
あと、指数型式で値は取得できない
えーと、もしかしたらコマンドラインの意味をは履き違えてるかもしれません。。 つまり、DOSプロンプトからの入力のことなんですが。
>>486 履き違えてますね
コマンドのタイプ時に入力したらコマンドラインから
プログラム起動後だとしたら標準入力から
488 :
デフォルトの名無しさん :04/09/07 19:26
>>487 なるほど、つまり引数を持たせてファイルを実行した場合はコマンドラインとなるわけですね。
どうもです。
釣っているのか釣られているのか
491 :
デフォルトの名無しさん :04/09/07 20:07
(・∀・)ジサクジエーン
"%lg"マジお勧め。
493 :
デフォルトの名無しさん :04/09/08 11:25
494 :
デフォルトの名無しさん :04/09/08 12:13
文字列をstd::stringからchar*へ変換する方法ってありますか?
既出スマソ
>>495 了解しました.ありがとうございます
497 :
デフォルトの名無しさん :04/09/08 12:46
>>495 さらにコピーしないとchar*にならないんじゃないの?
498 :
デフォルトの名無しさん :04/09/08 13:39
exit() のプロトタイプ宣言をするときの型はなんですか? しなくていいとは思うんですが、コンパイル時に警告が出るんです。 本にも載ってないので教えてもらえないでしょうか?
>>498 #include <stdlib.h>
500 :
デフォルトの名無しさん :04/09/08 13:43
501 :
デフォルトの名無しさん :04/09/08 13:46
>>499 ライブラリでやるんですね、ありがとうございました
>>500 前にそれでやってみたんですが、確か警告がでてました
503 :
デフォルトの名無しさん :04/09/08 13:48
#include <stdio.h> double kansu(int x,int y) { double n; if(x==y) n=0; else n=(x-y)/(x+y); return(n); } void main() { int x,y; scanf("%f\n%f",&x,&y); printf("%f",kansu(x,y)); } 実行はできますが計算結果がおかしいです どうすればいいですか?
506 :
デフォルトの名無しさん :04/09/08 13:49
507 :
デフォルトの名無しさん :04/09/08 13:52
#include <stdio.h> double kansu(int x,int y) { double n; if(x==y) n=0; else n=(x-y)/(x+y); return(n); } void main() { int x,y; scanf("%d\n%d",&x,&y); printf("%f",kansu(x,y)); }
509 :
デフォルトの名無しさん :04/09/08 13:56
double kansu(double x,double y)
510 :
デフォルトの名無しさん :04/09/08 13:58
511 :
デフォルトの名無しさん :04/09/08 14:03
入力するのが両方とも整数だったら int でもいいのでは?
なにが?
513 :
デフォルトの名無しさん :04/09/08 14:23
多次元配列のメモリ確保と解放で以下のように確保した場合 int** myIntArray; myIntArray = (int**)malloc( sizeof( int* ) * n ); for ( i = 0; i < n; i++ ) myIntArray[i] = (int*)malloc( sizeof( int ) * m ); 解放は, for ( i = 0; i < n; i++ ) free(myIntArray[i]); free(myIntArray); で良いのでしょうか? コンパイルは通り,一応動いてますが,自信がないので...
いいんじゃない?
俺は >free(myIntArray); これやんないけど(w
free(myIntArray[i]) もやる必要ないだろ。
なんで?
ああ、どっちもやらないってんなら分かる。 が、ここでfreeネタなんかやるんじゃねぇよ。
exit前の話題じゃないしな。
520 :
デフォルトの名無しさん :04/09/08 14:30
int** myIntArray; myIntArray = (int**)malloc( sizeof( int* ) * n ); myIntArray[0]=(int *)malloc(sizeof(int)*m*n); for(i=1;i<n;i++) myIntArray[i]=myIntArray[0]+m*i; free(myIntArray[0]); free(myIntArray);
freeのフレームはやめてくれ、もう飽き飽き
freeネタは好ましくないんですかね? どうもすみません。
>>532 コード読めないがフレームネタの知識だけ豊富な厨はキエロ
527 :
デフォルトの名無しさん :04/09/08 14:41
511 :デフォルトの名無しさん :04/09/08 14:03
入力するのが両方とも整数だったら int でもいいのでは?
512 :デフォルトの名無しさん :04/09/08 14:05
なにが?
523 :デフォルトの名無しさん :04/09/08 14:38
>>512 10年以上昔から定期的に話題になる、いい加減にしろ
まああれだ。よっぱらいは消えろ。と言うことだ。
>>523 解説ありがとうございます。
>>525 malloc二回のコードは知ってますが
ぱっと見、分かりやすいと思われる方を書きました。
うぃっす、平日昼間から酔っぱらうのは最高に気分いいっす 寝ます(デスマ明け〜) #マ板ねただな、こりゃ
>>527 ワロタ
おっと失礼、酔っぱらいは消えます
532 :
デフォルトの名無しさん :04/09/08 18:24
for文のカウント変数の値を戻り値にする自作関数がわかりません。 もともとカタチで憶えてループさせるパーツ程度にしか扱った ことないので。
>>532 int func () {
int i;
for (i = 0; [なんたらかんたら]) {
[適当な処理]
}
return i;
}
……じゃないの?
534 :
デフォルトの名無しさん :04/09/08 18:52
#include <stdio.h> int retusu(char *mojiretu) { int i; for(i=0;i<10;i++) { if(*mojiretu=='\0')break ; *mojiretu++; } return i; } int main(void) { int mojisu; char *mojiretu; printf("文字列を入力してください。\n"); scanf("%s",mojiretu); mojisu=retusu(mojiretu); printf("文字数は%dです。\n",mojisu); return 0; } これの構文の間違いを指摘してください。
535 :
デフォルトの名無しさん :04/09/08 18:58
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。
536 :
デフォルトの名無しさん :04/09/08 18:58
こんばんは。質問があります(>_<) √(X2−X1)二乗 +(Y2−Y1)二乗 をプログラムに書くとすると どうなるか教えてくださいm(_ _)m さっぱり分かりません‥距離の公式なんですが。 お願いしますっ!!
scanf("%s",mojiretu);
542 :
デフォルトの名無しさん :04/09/08 19:40
>>538 >>539 仮引数と実引数の変数がいっしょ
と指摘しているんでしょうか?
もともと
//strに入った文字列を一字ずつ表示する
pstr=str;
for(i=0;i<10;i++)
{
if(pstr=='\0')break ;
printf("%c\n",*pstr);
pstr++;
}
を応用させて
カウント変数の値によって
文字列の文字数を表示させるには
どうすればいい?
という考え方を思考錯誤してるのですが。
543 :
デフォルトの名無しさん :04/09/08 19:42
534だと構文コマンドエラーになります。
545 :
デフォルトの名無しさん :04/09/08 20:17
コケる? 文法は間違ってない気がするが 取り込んだ変数の扱い方?
546 :
デフォルトの名無しさん :04/09/08 20:21
文字列の値が入った変数が 自作関数の処理をえて 戻り値として文字数を出すポインタ変数に なる仕組みのつもりですが。
文字列型の配列を、プログラムの途中で空にするには どうしたらいいのでしょうか?
548 :
デフォルトの名無しさん :04/09/08 20:34
>>548 ありがとうございます。strcpyを使えばいいんですよね。
なぜかうまくいかないのですが・・もう少し自分で頑張ってみます。
>>549 strcpy()を使うまでもないぞ。C言語の文字列は'\0'を終端とみなすから、
先頭が'\0'でさえあればよい。だから例えばchar str[128];とあってこれを
空にするにはstr[0] = '\0';とすれば普通は十分。
文字列型なんか使うから大変なんだよ
>>550 すみません;;
>>552 では何を使えば・・・
>>551 詳細ありがとうございますm(_ _)m
で、やってみたのですが、
例えば6文字目に6がはいっていて、str[0] = '\0';としても
6文字目には6がはいったままですよね?
C言語は'\0'を終端とみなすのは分かるのですが、
これを配列全てが何もない状態?になるようにしたいのです。・・・
555 :
デフォルトの名無しさん :04/09/08 20:57
>>553 配列が動的に確保されたものなら free してしまって、
静的に確保されたものならさっさとスコープから抜ける
>>553 んじゃmemset()をつかったらいい。
>>554 それをいっていませんでしたね、
strに123.456という文字列が入っていたとして、
これを数値に変換して表示し、
次にstrに123.45という文字列を入れて数値に変換して表示しようとすると、
6が残ってしまっているのか、123.46(最後の6を四捨五入したため?)
と表示されてしまって困っていたのです。
説明下手ですいません。。
>>556 動的とか静的といったことも分からない初心者でして・・・
申し訳ありません。
>>557 できました!どうもありがとうございましたm(_ _)m
あ、今考えると123.45の後ろに\0を入れるようにすればよかったのかな・・・?
>>558 おいおい、、、普通は
>123.45の後ろに\0
が文字列を入れるって事だろ
560 :
デフォルトの名無しさん :04/09/08 21:25
文字列から関数へのポインタをひっぱってくることは可能でしょうか? プラグインのようなものをつくりたいのですが。
>>559 更に説明不足ですみません。。。
str1に123.456000などと入っていた場合に最後の0の部分を切り落として
str2に123.456をstrncpyでコピーして、それをatofで数値に変換して
表示する、そしてそれを違う数値(123.45000など)でも何度も繰り返す、
ということをやっていたのです。
そのため\0が入っていなかったのかな・・・というわけでして
562 :
デフォルトの名無しさん :04/09/08 21:28
>>560 基本的に無理、必要なら必要に応じて情報を埋め込んどく必要がある。
なんか、このスレの人たちはfloat型やdouble型でも==演算子使いそうな気がする…
564 :
デフォルトの名無しさん :04/09/08 21:32
>>562 ありがとうございます.
んーっと, Unix 上での開発を考えているのですが...
やろうと思ったら C のインタプリタつくってそれ中継するとか?
>>563 float型やdouble型で==演算子使っちゃいけないのですか?
普通にわかんなくて凹む
568 :
デフォルトの名無しさん :04/09/08 21:38
>>567 そう言ったら、「馬鹿か?」とここの住人に言われた。
>>567 C言語では許可されているけれど、数学的に実数がぴったり合うということはほとんど
ありえないことなのです。
だから、実数型で==演算を許可していない言語も存在します。
コンピュータの中ではビットがぴったり合うことはありますが、本来の意味から
したらするべきではないことです。
>>569 ちょっとちゃうだろ。
int main(){
float a;
a = 1.41421356;
if (a == 1.41421356 )
printf("%s","OK");
else
printf("%s","NG");
return 0;
}
@Borland C++ 5.5.1
浮動小数点を勉強するといい
>>570 この場合はfloatの有効桁数が7桁なので桁落ちした、
そういう場合があるからfloat型などで==を使うときは
気をつけなきゃいけないってことですかね
うほっ・・
>>567 比較するときは対象を演算してはいけないという事です。
あえて演算をするケースで考えるなら不動点を探すときには便利です。
これは奥村センセのCのアルゴリズム本が参考になります、収束判定が見事です。
上手に使えば非常に有用です。
>>575 本当はそんなときでも<とか>を使うべきなんだけど、==を使った方が楽だからね…
実際は使っちゃうよね
577 :
デフォルトの名無しさん :04/09/08 22:12
質問です。 C言語で8バイトの整数型を使いたいときって何を使えばいいのでしょうか? 具体的には4バイトを超えるアドレスを格納しておくために使います。
使わないよ
>>576 ある数列が単調増加で上界があるとき、その差分が単調減少ならば必ず上限が存在して必ず停止します。
「_ ̄フ ノ^ー┐ ///////////ノ/ ,-、二、 ーク / 7_/////////^ `ー‐‐' `ー' ///////し _l^l_ i^i i^i /////// / ,--┘ U ノ | //////^ !__ニコ lニ.ノ 7/// _,,.. . __ __l^l__へ i^i i^i //^ .. _ `ヽ ゙┐r┐T゙ ∪ ノ | |/ /::/.┬".) l く,ノr'_,ノ lニ.ノ 7 _iゞ/イ。_ノ _r'''、 | ,へ ,ヘ / / ニ-''^\¨ ∠.} l | `゙ / / |. |l、ヾ⌒-| u r_ノノ " | ヾ二ノ | ヽ |`´_,--| i、ニイ | /,ニ^\. | \l<-ニフ ,ノ ,. \、' | | | | | しリj | \ \ ̄ ,/ノ/ , | Z ゚ ゚ ゚ ゚ `ー" ー' 〔 / ̄/ '", /// ,.
583 :
デフォルトの名無しさん :04/09/08 22:19
>>580 8バイトってdoubleとか_int64しかみつからないのですが・・・。
>>583 アドレスがメモリアドレスのことなら、ポインタ使えば?
585 :
デフォルトの名無しさん :04/09/08 22:34
>>584 それが、足したり引いたりしなきゃいけないんですよ。
アドレスを足したり引いたりって珍しいね
>>585 バラバラにしてunsigned charに格納して計算するのが良いのでは。
C99規格にあるサイズ規定のある整数のtypedefを取りあえず定義しておいて対応されたら、
ほいさっさも良いかと。
対応済みなら使っちゃえ。
ポインタ使うか、移植性を気にするのならlong longでいいだろ。
みなさんレスありがとうございます。 調べてみた結果、どうやらunsigned long long int が使えるようです。 ありがとうございました。 ・・・それにしても長いですねw
もうしわけございません。
unsigned long long int の存在を知ったのは
>>587-588 さんのおかげです。
ありがとうございました。
long long ago...
592 :
デフォルトの名無しさん :04/09/08 23:20
ライディーン
593 :
デフォルトの名無しさん :04/09/08 23:25
スレ違いの質問になるかも知れないんですが、 プログラムに自信のある方って、「こんな感じのプログラムを作ってください」と、 言われたら、どんな感じでプログラムの書くんですか?どんな感じって抽象的なんですが、 例えば・・・これを作ってくれって言われたら即行ソースが思いつくとか・・・まぁ、 そんな感じで教えて下さい!
感じるな、考えるんだ。
>>593 マ板で聞けばいいのに
ソースというか完成したイメージが浮かぶ
それに沿って手を動かすだけ
596 :
デフォルトの名無しさん :04/09/08 23:34
天才は寝ている間に頭の中にできあがるそうだ。
597 :
デフォルトの名無しさん :04/09/08 23:37
明け方の早朝覚醒しかかったボケ頭でけっこう思いついたりすることはある そのほとんどが当日のうちに「最大のネック」を発見することになるが・・・
598 :
デフォルトの名無しさん :04/09/08 23:50
>>593 「(・A・)←こんな感じのプログラムを作ってください」ときたら、
こっちからも「(´・д・`)←こんな感じでどうですか?」ってプロタイプを出してやるしかねぇだろうな。
んで、相手から「(´・ω・`)←いえいえやっぱりこんな感じにしてもらいたいんですが」ってきたら
「(・A・)←アレアレはじめはこうだっていってたじゃないですが」って返したら
相手から「実は(・A・)と(´・ω・`)でどちらにしようか決めかねてて・・・」ときたら
ここで相手といっしょに「( ´∀`)アハハハハ」と笑える奴が最強のプログラマだろうねw
ぶっちゃけどんなにプログラムを組む自信をつけてもここで笑えない奴は
いつまでたっても自信はつかないw
599 :
デフォルトの名無しさん :04/09/09 00:02
? じゃあ、俺はダメだ。 最初こういってた、ということにこだわる。 はっきりさせてくれ、と真顔でいいたくなる。 慇懃無礼な態度になってくる。 丁寧語のなかにも怒りの感情が 込上げて来る。 そんな僕ですが。
仕様凍結日付設定 仕様変更別料金 ただし作成時に発覚した仕様上の不具合修正は除く
601 :
デフォルトの名無しさん :04/09/09 00:13
>>599 こいつとケンカになるとデート代が、クルマのローンが・・・
仕事でなきゃとっくに鼻ぶっつぶしてるぜ (^_^)ニコニコ
そろそろスレの趣旨に帰ろう
なんだっけ。
604 :
デフォルトの名無しさん :04/09/09 00:19
>601 はあ? 鼻ぶっつぶす? どういう意味だ。 この野郎。
三|三 イ `< ,..-──- 、 _|_  ̄ /. : : : : : : : : : \ |_ ヽ ∧ /.: : : : : : : : : : : : : : ヽ (j ) / \ ,!::: : : :,-…-…-ミ: : : : :', {:: : : : :i '⌒' '⌒' i: : : : :} _ヽ_∠ └┼┘ {:: : : : | ェェ ェェ |: : : : :} lニl l | . |_|_| , 、 { : : : :| ,.、 |:: : : :;! l─| l 亅 __ ヽ ヽ. _ .ヾ: :: :i r‐-ニ-┐ | : : :ノ _ / } >'´.-!、 ゞイ! ヽ 二゙ノ イゞ‐′ l `ヽ ´⌒) | −! \` ー一'´丿 \ l/⌒ヽ -' ノ ,二!\ \___/ /`丶、 _ノ /\ / \ /~ト、 / l \ / 、 `ソ! \/l::::|ハ/ l-7 _ヽ /\ ,へi ⊂ニ''ー-ゝ_`ヽ、 |_厂 _゙:、 ∧  ̄ ,ト| >‐- ̄` \. | .r'´ ヽ、 ,ヘ \_,. ' | | 丁二_ 7\、|イ _/ ̄ \ i \ ハ |::::|`''ー-、,_/ /\_ _/⌒ヽ
606 :
デフォルトの名無しさん :04/09/09 00:30
>>599 こいつとケンカになるとデート代が、クルマのローンが・・・
仕事でなきゃとっくに鼻ぶっつぶしてるぜ (^_^)ニコニコ
仕事でなきゃブチ殺してるのはてめえみたいな奴だ。
なにがデート代だ、車のローンだ。
そんなもんがてめえの自信の裏ずけか。
心底ブチ殺してやりたくなるぜ。
この野郎。
607 :
デフォルトの名無しさん :04/09/09 01:35
デート代なんかでていかねえ、車もねえ、 心底ブチョ殺してめえこのやろう。
デート代なんかでていかねえ、車もねえ、 心底ぬるぽしてめえこのやろう。
609 :
デフォルトの名無しさん :04/09/09 06:18
基本的な質問で済みません。画像ファイルの提示方法を教えて下さい。 Macのコードウォーリア―が作業環境です。
C + 標準ライブラリ程度では画像の表示はできかねます。
>>1 の
> GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
をちゃんと読んで下さい。
そもそも「提示」ってなんだ?
612 :
デフォルトの名無しさん :04/09/09 08:43
構造体の型をユーザ関数の型とる事でどういう効果?があるのか、わかりません。 すみません。こんな質問をして。 ですが、マジでわからないので教えて下さい。 お願いします。
5回読んだけど、解読できなかったよ・・・
>>612 もしかして、こういう事?
int userfunc(void);
struct hoge{
int (*pfunc)(void);
:
}foo;
foo.pfunc = userfunc;
>>614 struct hoge{
int a;
・
・
};
hoge* AAA(hoge** pphoge・・・)
{
・
・
・
}
こんな感じです。
このときの関数の型です。
そういう仕様の関数とはどういう事なんでしょうか? たぶん、そこが解ってないんだと思います。 お願いします。
struct hogeへのポインタのポインタを引き数として受け取り、 struct hogeへのポインタを返すってだけでしょ。 構造体が何か判ってないとかポインタとは何か判ってないなら初心者スレへどうぞ。
>>617 それだけの情報でわかる訳ないやん。
hoge**を引数にしているって事は、AAA()の中でインスタンス確保してるんかな。
なるほど!理解できました!!
>>618 さん ありがとうございました☆
ポインタは自分なりに理解してると思うのですが、
なにぶん、初心者で、構造体っていうのがわかっていなかったもので・・・。
ですが、わかりやすい解説ありがとうございました!
617の質問の意味、そして何が理解出来て解決したのかが サパーリわからないオレはアフォですか?
しかしCスレに常駐してしょうもないレスばっかつけてる奴等って 生命削ってまでやることなのか?
>>615 ああ、構造体とかの型が理解できてなかったのか。
やっとわかたよ。。。orz
>>623 いや、別に生命削ってはないけど、今日は偶々暇なんだよ。
pow overflow の回避策を教えてください。
x * log(y) < log(DBL_MAX) のときpow(x,y)が成立と思う
630 :
デフォルトの名無しさん :04/09/09 14:49
質問です。 ファイルから数値をfloat型配列に一つずつ(改行で区切って)読み込むにはどうしたらいいでしょうか? 文字列をChar型配列に読み込むのはできるんですが、数値はどうしてもできません。 宜しくお願いします。
char配列に読み込んだのなら、それをstrtodにかけるとか。
fgetsしてsscanfじゃ駄目?
atoiは?
getsでええやん
635 :
デフォルトの名無しさん :04/09/09 15:10
手抜きならfscanf
/* in test.dat ----------------- 0.1 2.22222 3.141592653589793 ----------------- */ #include <stdio.h> #include <stdlib.h> #include <errno.h> #define IFILENAME "test.dat" #define DAT_MAX 256 int main( void ) { int i; float dat[DAT_MAX]; char str[256]; FILE* fi; if ( ( fi = fopen ( IFILENAME, "r" ) ) == 0) { perror( IFILENAME ); exit(0); } for( i = 0; fgets( str, DAT_MAX, fi ) != NULL; i++ ) { dat[i] = atof(str); printf("%f\n", dat[i]); } return 0; }
637 :
デフォルトの名無しさん :04/09/09 15:17
perrorにerrno.hは必要ない
638 :
デフォルトの名無しさん :04/09/09 16:11
質問です。 WinSock1.1を使用しています。 WinSockは、プロクシサーバーへの接続動作をサポートしているでしょうか? それともCInternetSessionに変更した方が良いでしょうか? よろしくお願いいたします。
630です。質問に答えていただきありがとうございました。 もう一つ聞きたいのですが。 例えば以下のようなファイルが会ったとします。 1 2 3 4 5 6 ファイルから数値(文字列)を配列aに読み込んでいき、途中の空白改行を境に 配列b(要するに別の配列)に数値を読み込んでいくにはどうしたらいいのでしょうか? 途中から読み込むというのができなくて困っています。 宜しくお願いします。
>>640 if(str=="\n")
で区切りを見つけて区切るとか。
if(str=="\n\0") だったかな。
643 :
デフォルトの名無しさん :04/09/09 17:27
このような関数を宣言しているのを見かけたのですが、これはどのような使い方なのでしょうか。 getname(s) char s[][]; { printf("name: %s",s); } 何故char s[][]がこの位置にあるのかがわかりません。 またスコープの範囲はどのようになるのでしょうか。
>>643 古い書き方。
getname(char s[][])
と同等。
646 :
デフォルトの名無しさん :04/09/09 18:30
647 :
デフォルトの名無しさん :04/09/09 19:22
>>640 fgets(str, 100, fp);
for (i=0; str[i]!=0; i++) {
if (str[i]=='\r' || str[i]=='\n')
break;
}
if (i==0)
何かの処理;
648 :
デフォルトの名無しさん :04/09/10 01:04
初めまして、現在マルチメディアタイマーを使用しているのですがVisual C++であれば #include <windows.h> #include <mmsystem.h> #pragma comment(lib,"winmm.lib") で上手く起動するのですがBorland C++だとうまくいきません。教えてください、できる限り具体的に お願いします。
何がうまくいってないのか具体的に書かないと釣りと間違われるぞ
>>648 Googleで"Borland C winmm.lib"などのキーワードで
ていうかスレ違いだ
651 :
デフォルトの名無しさん :04/09/10 01:27
strtok()以外にもリエントラントでない標準関数ってありますか
>>651 検索すればすぐ見つかったが。
いっぱいあったよ。
655 :
デフォルトの名無しさん :04/09/10 01:40
localtimeとかstrerrorとか mblenもそうか。
>>652 >>653 ありがとうございました
個人的にはstrtol()の他にrand()位しか使用しそうもないので
それだけ気をつけてみます
657 :
デフォルトの名無しさん :04/09/10 01:43
asctimeもだ
内部にバッファを持ってる関数は全てか。
errnoを使うもの全て
661 :
デフォルトの名無しさん :04/09/10 07:35
関数の引数に、ハンドラを渡すことが多く見られるけれど、 ハンドラを引数にすることのメリットはどんなことなのでしょうか?
663 :
デフォルトの名無しさん :04/09/10 09:05
//テキストの表示 HDC hdc; LPTSTR lptStr = TEXT("111"); hdc = GetDC(hWnd); TextOut(hdc , 0 , 0 , lptStr , lstrlen(lptStr)); ReleaseDC(hWnd , hdc); これだと111が表示されるのですが 変数Aの内容を表示させたい時はどうすればいいのでしょうか?
>>663 言っている事の意味がよくわからん…
char s[] = "1", t[2];
int i = 1;
HDC hdc = GetDC(hWnd);
sprintf(t, "%d", i);
TextOut(hdc, 0, 0, t, strlen(t));
TextOut(hdc, 0, 0, s, strlen(s));
ReleaseDC(hdc);
666 :
デフォルトの名無しさん :04/09/10 12:03
>>649 リンクの仕方がよくわかりません。Visual C++の場合プロジェクトの設定でライブラリを
追加できるのですが,Borland C++ではどのように行えばいいのでしょうか。初心者ですいません。
668 :
デフォルトの名無しさん :04/09/10 12:27
Borland C++は持っています。 質問の答えが掲示板に載っているということですか?
669 :
デフォルトの名無しさん :04/09/10 12:27
>>667 Borland C++は持っています。
質問の答えが掲示板に載っているということですか?
スレ違い、ということです。 「C言語」そのものの話じゃないでしょ?
すげぇ天然だな、つーかバカだな。
>>669 貴方はこのスレにこなくて良いということです。
もっというと、貴方はいらん子というわけです。
>>664 誘導ありがとうございます
そっちで聞いてみます
素直でいい子じゃん
677 :
デフォルトの名無しさん :04/09/10 19:48:11
mallocで確保した領域の大きさをプログラム中で得るにはどうしたらいいんでしょうか?
>>677 malloc する時点で自分で把握しておくしかない。
malloc(N*sizeof(type)) とかする時に、N*sizeof(type) の値をグローバル変数などに保存。
679 :
デフォルトの名無しさん :04/09/10 20:27:51
質問です。 /*クラップスゲーム*/ #include<stdio.h> #include<stdlib.h> #include<time.h> int rollDice(void); main() { int gameStatus, sum, myPoint; srand(time(NULL)); sum = rollDice();/*最初のサイコロ振り*/ switch(sum) { case 7: case11:/*最初のサイコロ振りで勝つ場合*/ gameStatus = 1; break; case 2: case3: case12:/*最初のサイコロ振りで負ける場合*/ gameStatus = 2; break; default: /*持ち点を記憶する*/ gameStatus = 0; myPoint = sum; printf("持ち点は%d\n",myPoint); break; }
680 :
デフォルトの名無しさん :04/09/10 20:28:45
続き While (gameStatus == 0)/*サイコロを振り続ける*/ { sum = rollDice(); if (sum == myPoint)/*勝ち点が出たので勝ち*/ gameStatus = 1; else if (sum == 7)/*7が出たので負け*/ gameStatus = 2; } if (gameStatus == 1) printf("プレイヤーの勝ち\n"); else printf("プレイヤーの負け\n"); return 0; }
681 :
デフォルトの名無しさん :04/09/10 20:29:08
また続き int rollDice(void) { int die1, die2, workSum; die1 = 1+(rand() %6); die2 = 1+(rand() %6); workSum = die1 + die2; printf("プレイヤーがサイコロを振った。出目は%d + %d = %d\n",die1, die2, workSum); return workSum; } をコンパイルしようとすると「error C2143: 構文エラー : ';' が '{' の前にありません。」と出ます。 何処が間違ってるのでしょうか?
>>681 - While (gameStatus == 0)/*サイコロを振り続ける*/
+ while (gameStatus == 0)/*サイコロを振り続ける*/
ああ! ありがとうございました。 もう逝きます。すいませんでした。
エラーメッセージくらい読めてください。
どこのコンパイラ使ってるのか知らんが、 ちゃんとエラーの場所も教えてくれるやつと交換しろ。
>>686 知らないなら余計な事言わなきゃいいのに。
( ´,_ゝ`)プッ
689 :
デフォルトの名無しさん :04/09/10 22:12:00
あの、漠然とした質問で申し訳ないですが、 よく「floatは極力使うな」と言われます。 処理する内容にもよるのでしょうが、float型変数一個使ったぐらいで 通常のどれくらい処理落ちするものなのでしょう?
>>689 通常もクソも無い。
気になるなら自分で計れ。
>>689 Cではあちこちfloatからdoubleへの格上げされる機会があってその分オーバーヘッドがかかるから遅くなると言われるけど、どのくらいかと聞かれれば
>>690 の一言に集約される。
>>689 80486SXを使っているパソコンだったら float よりも double の方が遅い。
693 :
デフォルトの名無しさん :04/09/10 22:48:35
>>689 691が言っているような事情を知ったうえで、そのうえで690が言っているような検討をすればいい。
その検討の結論が「極力使うな」とか言うDQNと一致しなくても気にする必要はない。
gotoと同じ
695 :
デフォルトの名無しさん :04/09/10 22:52:45
SetWindowsHookExを使ってコピーされたってのを知りたいんですけど WH_CALLWNDPROCRETを使ってWM_COPYを見ていればいいんですか?
699 :
デフォルトの名無しさん :04/09/10 23:03:20
701 :
689 :04/09/10 23:16:51
自分は時間を計るといってもclockぐらいしか知りません。 それでやってみたのですが、処理時間に差は全くと言って良いほどありませんでした。 >「極力使うな」とか言うDQNと一致しなくても気にする必要はない。 そのDQNは先生であり・・・ gotoなど絶対に使うなと、教えられてきました。 その所為でしょうか、floatを一つ使うごとにとても気になってしまっていたのです。 みなさまの意見は大変参考になりました。 ありがとうございます。
702 :
デフォルトの名無しさん :04/09/10 23:21:56
>>701 知らなくていいと言うクルクルパーと、
実測もせずに教わったとおりの受け売りを繰り返すだけの永久初心者の轍を踏むな。
知るべきことは知り、現実を見て判断していればいい。要はそういうことだ。
703 :
デフォルトの名無しさん :04/09/10 23:23:36
レベルとは無関係、こだわりを忘れた奴に多くを期待しない。
704 :
デフォルトの名無しさん :04/09/10 23:26:49
本当に速度を気にして使うなとおっしゃられたのでしょうか?
705 :
デフォルトの名無しさん :04/09/10 23:34:16
なんせ「極力」だからな・・・
> gotoなど絶対に使うなと、教えられてきました。 goto自体は絶対に使ってはならないことはない。 ただし、使うときはかなり厳しめの条件付きになる。 使わないに超したことはない。
707 :
デフォルトの名無しさん :04/09/10 23:54:03
>>706 具体的に条件を示さずに
>使わないに超したことはない。
↑
いきなりこういう結論だけを異様な目つき言う手合いはガイキチ
>>707 それはガイキチとは言わず、低能といいます。
709 :
デフォルトの名無しさん :04/09/10 23:59:10
纏脳
DQNに危険性を教えるのは時間と労力の浪費なので とりあえず「絶対使うな」と教えこむことはあるだろう
>>710 そんなDQNにC言語教えるほうがおかしいんだよ
712 :
デフォルトの名無しさん :04/09/11 00:02:42
>時間と労力の浪費 人にものを教える資質がない証拠
>>712 おまえは人にものを教えた経験があるのか?
どうやってもどうしようもないやつも世の中にはいる
714 :
デフォルトの名無しさん :04/09/11 00:04:55
>>713 とりあえず「絶対使うな」と教えこんだりしない
A gotoを絶対つかうな! B 何故ですか? A 知らん!オレもそう教わったからだ!
今までgoto使ったことないけど、どういうとき使うの?
例えばものすごい深いネストから一気に抜けるときとか。 for (条件A) { for (条件B) { for (条件C) { . . . if (例外) { goto jump; } } } } jump:
>>716 while (hoge) {
switch (foo) {
case bar:
〜;
●
}
}
○
例えば●から○へ行きたい(多重breakしたい)ときとか
720 :
デフォルトの名無しさん :04/09/11 00:34:23
フラグを使うよりマシなとき
721 :
デフォルトの名無しさん :04/09/11 00:38:18
>>716 ループはwhileやforよりもif,gotoを使う方が速くなる。
gotoってjmpだもんね。余計なものがついてない。
gotoを使うと最適化を阻害して却って遅くなることもある。
725 :
デフォルトの名無しさん :04/09/11 00:56:27
726 :
デフォルトの名無しさん :04/09/11 01:07:42
>>725 コンパイラは、for文、while文の動作は大抵の場合この変数をよく参照するだろう
という推論を元に値をレジスタに格納したりするんじゃなかったけ?
(メモリからレジストリにロードするのって結構コストがかかるような気が。。。)
そうなると、goto文にしちゃうとそういう最適化が有効にならずに結果として
出力されるコードが遅くなるなんてこともあるような。
まっ、何だかんだ言ってもさまざまなケースでの実測知に勝るものはものはないけど。。。
>>726 一度アセンブリで出力してみて、どっちが効率的か見て見ればいいんじゃないかな
おまえらなぁ最適化だの速度だのは標準Cと関係無いんだよ
729 :
デフォルトの名無しさん :04/09/11 01:23:32
730 :
デフォルトの名無しさん :04/09/11 01:25:00
731 :
デフォルトの名無しさん :04/09/11 01:25:16
レジストリじゃなくてレジスター。 Windowsに毒されているなぁ〜
733 :
デフォルトの名無しさん :04/09/11 01:27:04
734 :
デフォルトの名無しさん :04/09/11 01:29:10
>>726 空きレジスタの数よりもネスト数が深いループからgotoで抜けるのと1段ずつbreakするのとどっちが早いと思う?
そもそもそんなに深いネストが必要になるようなプログラムは 設計が悪いのではないのか
736 :
デフォルトの名無しさん :04/09/11 02:13:34
>>731 毒されているというより、基礎知識があやふやなだけでは?
goto嫌ならreturnすれば良いじゃん。 そのネストの深い部分を関数にまとめて、returnにしちゃうの。 gotoは必要なし。
739 :
デフォルトの名無しさん :04/09/11 02:35:35
>>738 そして、速度の低下を防ぐためにグローバル変数を使えば完璧だな。
740 :
デフォルトの名無しさん :04/09/11 03:03:01
じゃ俺ループをインライン展開しようっと
742 :
デフォルトの名無しさん :04/09/11 05:12:11
質問です。 Cのプログラムをコンパイルすると scm.c:4 から include されたファイル中: scm.h:1:2: 警告: null 文字は無視されました scm.h:1:3: 無効なプリプロセスディレクティヴ #i scm.h:1:4: 警告: null 文字は無視されました scm.h:1:6: 警告: null 文字は無視されました のような警告がヘッダファイルの全行にわたって出てくるんですが この警告の意味がよくわかりません。 ソースにnull文字なんて入れた覚えはないんですが。。 どなたかご教示お願いします。
743 :
デフォルトの名無しさん :04/09/11 05:48:21
>>742 自己解決しました。
文字コードがutf-8になってた。。orz
744 :
デフォルトの名無しさん :04/09/11 09:01:42
>>735 空きレジスタが少ない状況なんてそこいら中にあるだろ
ネストが何段になったら設計が悪いのかが処理系ごとに異なるとでも言いたいのか?
そんなことより「最適化の阻害」という問題について何か言ったらどうなんだ
745 :
デフォルトの名無しさん :04/09/11 11:35:45
ソケットで通信するプログラムを書いているのですが, read(sock,buf,BUFSIZE); とすると行単位でしか読み込みができません.複数行の受信データを読み出そうと for(;;){ x = read(sock,buf,BUFSIZE); if(x == -1 || x == 0) break; strcpy(buf2[i][0],buf); memset(buf,0,BUFSIZE); i++; } とすると,2度目のreadでなぜかプログラムが停止してしまいます. (つまり1行目しか読み出せません) 解決策は無いでしょうか...
746 :
デフォルトの名無しさん :04/09/11 11:39:32
>>745 送信側の問題と予想してみる。
あたりだったら何か記念品をください。
748 :
デフォルトの名無しさん :04/09/11 11:43:34
>>746 SMTPサーバ相手に通信しているのですが,telnetからアクセスして
EHLOした時の受信内容と,自分のプログラムからEHLOした時とで,比較しているので
送信側の問題ではなさそうな気がします.
220 hoge.hoge.hoge ESMTP
220-8BITMIME
・・・・・
220 ETRN
と帰ってくるのが最初の1行しか読み込めない状況です.
printf("%d\n"),dとかと入力しても 50\nとしかでてこないんです。なんで? Xcode1.1でやってます。OS10.3.5です。
750 :
デフォルトの名無しさん :04/09/11 11:57:50
printf("%d\n"),d でコンパイル通るの?
>>750 後ろにセミコロンさえ付いていれば文法的には問題ない。
…つか、もうカンマ演算子なんか廃止すりゃあいいのに。
入力したのは;もついてます。 でも実行結果だと50\nってでてくるんですよ。
753 :
デフォルトの名無しさん :04/09/11 12:17:43
#include <stdio.h> void main() { char buff[1000]; while(fgets(buff,sizeof(buff),stdin)!=NULL){ char name[1000]; int point; if(sscanf(buff,"%s %d",name,&point)!=2) break; printf("%s %d\n",name,point); } } というプログラムを実行すると"stdinは定義されていません"とエラーが 通知されるんですが、stdinはどのように定義すれば使えるようになるんでしょうか? くだらない質問ですが宜しくお願いします。
>>749 printf("%d\n", 51);
Ultra-C Proを使って、ある計算プログラムを組んだのですが、 配列の大きさにNを定義し、(例えばA[N]のようにして) Nを1000と置けば正常に動いてくれるのですが、 Nを1500とか2000と置くと全く関係なさそうなscanf文の「'&' の演算項が不当」 と出たり、「'fprintf' のファイルポインタ値が不当」というエラーが出ます。 また、Nを10000と置くと「配列のサイズが大き過ぎる」 Nを100000と置くと「配列のサイズが不当」というエラーが出ます。 これはUltra-C特有のものなのでしょうか? 見直すべき箇所がありましたら教えてください。
int型の配列長を取得することはできますか?
758 :
デフォルトの名無しさん :04/09/11 12:33:39
>>759 int i[100];
size_t s;
s = sizeof(i) / sizeof(int);
>>760 すいません、ポインタで渡した先の関数では取れますか?
764 :
デフォルトの名無しさん :04/09/11 12:55:38
#include<stdio.h> #define TYPE int int main(){ printf("sizeof(TYPE)==%d\n",sizeof(TYPE)); } sizeof(TYPE)==4 と表示されてしまします。これはどうしてでしょうか。 Cの文字列中はマクロ変換をしてくれないのでしょうか。
たびたびすいません。 int配列に要素を追加するところで躓いてます。 mallocでlength+1を確保してるんですが、プログラム終了時に鰓はかれます。 ド素人が躓きそうな箇所を教えてください
>>765 っていうか、どんなソース書いてるか見せてくれる?
769 :
753 :04/09/11 13:01:44
どなたか答えてください。 よろしくお願いします。
>>768 ということは、プリプロセッサは、""で囲まれた場所とそうでない場所を
識別して、処理しているということですね。ありがとうございました。
>>769 stdio.hの中で定義されてるはずなのにねぇ
なんでだろ
もしかして標準入力がない環境?
772 :
753 :04/09/11 13:08:52
>>771 おそらくあると思うんですが・・
でも、↑のプログラムで間違いはないって事ですよね。
とりあえず、それだけ知りたかったので有難うございました。
>>767 素人コードですが・・・。
ダメだししてください
void main(void){
int *TestData,length=0;
length = AddNewCoefficient(TestData, length, 0x1222221); }
//配列に係数を挿入する
int AddNewCoefficient(int *Data, int length,int inData){
length=Add32Degree(Data, length);
*(Data+length-1)=inData; return length;}
int Add32Degree(int *Data, int length){
//無限ループすると落ちます。
//引数に現在の長さ(配列の要素数)を渡してください
//戻り値は作成した配列の長さ or FALSE
int i,*tmp;
tmp=(int*)malloc(sizeof(int)*length);
if(length>MAXDATASAFTY) return FALSE;
for(i=0; i<length; i++) tmp[i]=*(Data+i);
free(Data);
Data = (int *)malloc(sizeof(int)*(length+1));
for(i=0; i<length; i++) *(Data+i)=tmp[i];
return(length+1); }
>>773 気付いた点のみ。
・malloc()したあとにlengthを調べるより、malloc()する前に調べるべき。
・↑こうしてないので、returnの前にfree()が必要。
・正常系でもtmpがfree()されていない。
・ポインタを渡しても、ポインタを得ることはできない。
#void func(int)に整数値を渡しても整数値を得られないのと同様。
#int *を受け取りたいなら、void func(int **)としてやる。
・(どうせ受け取れてないから意味ないけど)Dataもfree()されてない。
・特にそう書きたい理由がないなら、*(Data+i)と書くよりData[i]と書くべき。
・戻り値がFALSEと配列の長さと区別できなくなる。
#FALSEが0である前提なら、素直に長さ0を返すべき。
・戻り値がFALSEだった場合に、書き込んではいけないところに書き込んでいる。
>>773 if(length>MAXDATASAFTY) return FALSE;
を
tmp=(int*)malloc(sizeof(int)*length);
の前に置いてください
変数と演算子の間にはスペースを置いたほうが見やすいです
free(Data);
Data = (int *)malloc(sizeof(int)*(length+1));
を
realloc( Data, sizeof(int)*(length+1) );
で書き換えられます
778 :
755 :04/09/11 13:31:31
>>758 >でかい配列をローカルに取らない。
どうすればN=100000の配列が作れるようになりますか?
>>778 staticにするか、グローバル変数にするか
>>778 えとね、
配列っていうのはスタック領域に確保するものだから、大きさに制限がある。
確保できる大きさはかなり小さいです。
あなたのように大きな領域を使う場合はヒープ領域に確保しないとだめ。
int n[100000];
n[0] = 0;
じゃなくて、
int* n;
n = ( int* )malloc( 100000 * sizeof( int ) );
n[0] = 0;
.....(略
free( n ); //これを忘れてはいけない
としてください。
>>773 int main(void) {
int *TestData = NULL, length = 0;
length = AddNewCoefficient(&TestData, length, 0x1222221);
return 0;
}
int AddNewCoefficient(int **Data, int length, int inData) {
int NewLength = Add32Degree(Data, length);
if (NewLength > 1 && )
(*Data)[length] = inData;
return NewLength;
}
//戻り値は作成した配列の長さ or FALSE
int Add32Degree(int **Data, int length) {
if (length > MAXDATASAFTY)
return 0;
*Data = realloc(*Data, sizeof (int) * (length + 1));
return length + 1;
}
782 :
デフォルトの名無しさん :04/09/11 13:44:30
C限定かというとそうでもないのですがCで作っているのでこちらで質問します。 1つの.cファイルのヘッダファイルはどのくらい必要でしょうか? やはりそのファイルの関数を呼び出している分+自分の分でしょうか? それとも、他ファイル分+自分の分だけでいいのでしょうか?
784 :
デフォルトの名無しさん :04/09/11 13:45:29
>>782 同じファイルを使いまわせばいいんじゃない?
>>782 他のファイルから参照したい関数だけでよい。
>>783 AddNewCoefficientのif (NewLength > 1 && )はif (NewLength > 1 && Data != NULL)の間違いだった。
realloc知りました。 *Data = (int *)realloc(*Data, sizeof (int) * (length + 1)); どうしてもここで引っかかってしまいます。
788 :
デフォルトの名無しさん :04/09/11 14:19:04
>>788 .NET2003(?)のVC++でのデバッグ実行中のエラーです。
//test.exe の 0x00417c52 で初回の例外が発生しました : 0xC0000005: 場所 0xccccccc8 を読み込み中にアクセス違反が発生しました。 。
//test.exe の 0x00417c52 でハンドルされていない例外が発生しました : 0xC0000005: 場所 0xccccccc8 を読み込み中にアクセス違反が発生しました。 。
gcc ver.2.95では通りました。
790 :
デフォルトの名無しさん :04/09/11 14:39:05
>>789 reallocのところにブレークポイントかけて、引数をチェックするとか。
>>789 チェックしていましたが、問題が(見当たりませんでした||見つけられませんでした)。
自己で理解できなかったので、配列をconstで確保、迂回策とします。
realloc、常識を投げてくださった諸先輩方ありがとうございました。
gccで通るので、一人で吊ってきます。
#VC++ and Windowsやっぱりよくわかりません
>>791 ところでint *TestData = NULLをint *TestData = malloc(1)にしてみるとどうなる?
おい mallocとfreeには致命的欠陥がある newとdeleteを使えおまえら
>>793 致命的欠陥があるのは貴様の脳ではないのか
>>793 こう?
void *new(size_t s) {
return calloc(1, s);
}
void delete(void *p) {
return realloc(p, NULL);
}
#define new malloc #define delete free
#define new scanf #define delete printf
まぁmallocとfreeの致命的欠陥には 頭が相当良くないと気付けないから おまいらには理解不能だろうよ
>>800 おまえにしか理解不能
つまらんから直ちに消えろ
802 :
デフォルトの名無しさん :04/09/11 15:43:38
Cスレ
>>801 はいはい
malloc/freeでプーなコードでも
書いといてください
>>803 致命的欠陥があるのは貴様の脳ではないのか
805 :
デフォルトの名無しさん :04/09/11 15:46:16
>>804 わからないからって
すぐそうやってごまかすw
またC++スレの住人が荒らしに来たか
もしかして本気でC++スレと勘違いしていたんじゃ・・・
C++スレ住人はあほですか?
失礼な。ヤツがあほなだけだ
じゃあ何が致命的欠陥か教えてやるよ
So, I'll tell you what the fatal flaw is !
newとdeleteが致命的欠陥を抱えてるのは無視ですか?
未使用領域は双方向リストで管理されてるんだよ で、mallocで確保した領域をfreeするとその領域が未使用領域のリストに挿入される ここでもしその領域の前後も未使用領域だった場合, 未使用領域がひとつの大きな未使用領域としてマージされる その時に未使用領域を管理する双方向リストのつなぎ変えが起こる これでどうなるかと未使用領域をつなぐポインタとして 前の未使用領域へのポインタをfd,後の未使用領域へのポインタをbkとすると fd->bk = bk; と bk->fd = fd; という風にポインタがつなぎ変わる で,なんとこのfdとbkのポインタ領域ってmallocしたときに 確保した領域と一緒にユーザに割り当てられちゃう これが超やばい,致命的仕様,セキュリティホール満載 リストの管理領域まで一緒に割り当てちゃうってどんな仕様だよ 頭の回転が速いやつには あんなことやこんなことができてしまう(((( ´,,_ゝ`)))) ププッ プルプルッ ってこった
long long x; int y; x = 1000 * 2; y = 1000 / 2; printf("%d %d\n", x, y); とやると 200 0 と表示され、y = 0x1000 / 0x2の効果が表れません。 しかし、 x = 1000 * 2; y = 1000 / 2; printf("%d ", x); printf("%d\n", y); と一回づつ表示するとちゃんと 2000 500 となるんですが、これはどういう違いなんですか?
>>814 救いようが無い馬鹿だな
お前のところのmalloc/freeの実装なんて興味ないんだよ
818 :
デフォルトの名無しさん :04/09/11 16:18:09
>>814 とくに問題ないんじゃない?
別のプロセスが同一空間にアクセスしてこれるならどうかわからんけど。
>>816 longlongを%dで出してるから。
ごめん、おれがばかだった。
821 :
デフォルトの名無しさん :04/09/11 16:19:58
>>816 %dはint用。
longなら%ld
long longなら%lld
822 :
821 :04/09/11 16:21:08
ああ、それとは関係ないか
>>817 かなり一般的な実装( ゚,_ゝ゚)
>>818 これが場合によってはかなりの問題
実はこれをどう利用するかが
一番頭をひねるところなんだけどね
ただこれは自分で気付くしかないね
このスレだけではとても説明しきれないから
たしかにprintf("%lld %d", x, y)だとうまくいきますね。 ただ、2回目(別々に表示)だとうまくいくのかという疑問がムクムクと。。。 printf()内部の話なのかな?
825 :
デフォルトの名無しさん :04/09/11 16:27:02
>>823 それは、プロセス空間が分かれていても問題が起こるってこと?
>>824 たとえばリトルエンディアンでLonglongの1とIntの2を送ると16進で
0100000000000000 02000000
となり、表示で両方Intと勘違いして
01000000 00000000(以下無視) 02000000
とされ、1 0という表示となる
(かなり用語や数を間違ってるかもしれん)
827 :
755 :04/09/11 16:32:19
>>780 >配列っていうのはスタック領域に確保するものだから、大きさに制限がある。
>確保できる大きさはかなり小さいです。
>あなたのように大きな領域を使う場合はヒープ領域に確保しないとだめ。
>int n[100000];
>n[0] = 0;
>じゃなくて、
>int* n;
>n = ( int* )malloc( 100000 * sizeof( int ) );
>n[0] = 0;
>.....(略
>free( n ); //これを忘れてはいけない
これをそのまま入れたら他の行のintが構文エラーしました。
何をどうすればいいのかサッパリ分かりません・・・。
>>825 起こるというか起こす
別プロセスは関係ない
mallocで確保した領域を
少し工夫してfreeすれば起こせる
やっぱ池沼か そんなことできる権限あったらなんでも出来るわ
830 :
デフォルトの名無しさん :04/09/11 16:35:56
酷いOSを使っているんだな
>>826 ちょっとよく分からない単語も混じってますけど、説明ありがとうございます!
分からない単語の意味は調べてちゃんと理解したいと思います。
>>814 new/deleteを使えば解決するようには読めないけど?
OS板の貴公子が作っているあれなら起こりうる
「リトルエンディアン」「ビッグエンディアン」の リトル、ビッグってのは、何に対してリトル、ビッグなの?
>>829 自分が理解不能だとすぐ池沼か( ´゚,_」゚)ヒッシダナ
このいつまでも塞がれることのない
本当のfreeセキュリティーホールで
ハックしまくり(((( ´,,_ゝ`)))) ププッ プルプルッ
>>830 犬やフリビが酷いって(´ν_.` )
>>832 実はnew/deleteで解決されるかはまだ検討していない( ´_ゝ`)
相対的なリトル・ビッグだろ。
たまご
Little Endian Regular Endian Big Endian
リトルエンディアンにとって、ビッグエンディアンは 何がビッグ?
>>840 下位バイトに対して上位バイトだからビッグ
直径。
844 :
デフォルトの名無しさん :04/09/11 16:55:14
ENDが 相対的ではないと思う。
小さなインディアンと大きなインディアン
>>827 だから宣言はint* n;でしょ。
メモリを確保するのがmalloc使ってる部分でしょ。
メモリを開放するのがfree使ってる部分でしょ。
例えば、
int main( void ) {
int a;
int b;
int* n;
int c;
n = ( int* )malloc( 100000 * sizeof( int ) );
//〜いろんな処理〜
free( n ); //最後に必ず
return 0;
}
みたいにする。
つまり下位バイト=リトル、上位バイト=ビッグ なのですね。リトルエンディアンは、小さい桁が下位バイトに 収められるからリトルエンディアン、小さい桁が上位バイトに 収められるからビッグエンディアン、で合ってますか?
>>847 小さい桁ってのがよくわからんが
リトルエンディアンは下位アドレスに下位バイトが配置され
ビッグエンディアンは下位アドレスに上位バイトが配置される
基本情報試験にでも出てくるようなレベルの話はもういいよ
配置は分かるんですが、エンディアンとう語の語感と、実際の 物理的な配置とが食い違ってるように感じたので、何がどう リトルで、どうビッグなのかが知りたかったのです。
852 :
デフォルトの名無しさん :04/09/11 17:09:24
例えば1次元配列で void hogehoge(double a[], int m){ int i; for(i=0;i<m;i++){ a[i] = i; } } という文法はOKなのに、2次元配列で void hogehoge2(double a[][], int n, int m){ : : } という書き方すると怒られるのは何故ですか?
配列の要素数省略できるのは最初だけ
855 :
デフォルトの名無しさん :04/09/11 17:15:37
>>853 では要素数が不確定な場合は動的に配列を確保するしかないのでしょうか?
なるほど、Endian はつまり「から最初に」と考えれば いいわけですね。 リトルエンディアン=下位バイトから最初に〜 ビッグエンディアン=上位バイトから最初に〜 となるわけですか。ありがとうございます。
858 :
デフォルトの名無しさん :04/09/11 17:23:08
当然ですか。あー、動的配列は重いからいやだのー。
859 :
デフォルトの名無しさん :04/09/11 17:24:46
>>855 要素数が不確定といっても色々で、配列という選択自体が不適切な場合もよくある。
動的配列重いのか?初めて聞いたヨ〜ン
それが嫌ならMB単位で予め確保しとけ
862 :
デフォルトの名無しさん :04/09/11 17:28:17
>>859 数値計算で2次元とか3次元計算してるんですけど、それを可視化する関数に渡す時、
どうしても配列と言う形で渡さねばならんのですよ。
>>860 動的に確保してそれを解放してってのを300msに一度程度やると糞重くなりました。
何かいい方法ありませんか?
それほど頻繁に必要なら、あらかじめ大きめに取って置くほうがいいんじゃない?
なんでスタックが出てくるのだ
>>864 (方法1)スタックサイズ増やせ
(方法2)staticでヒープ領域に作っとけ
>糞重くなりました たくさん出したのね。
>>828 >別プロセスは関係ない
DOS または Classic Mac OS の話じゃないかと思われます。
関数のサイズってどうやったらわかりますか? int test() { //55 push ebp //8B EC mov ebp,esp return 1; //B8 01 00 00 00 mov eax,1 } //5D pop ebp //C3 ret こういうのがあったときtestのサイズが10ってのを 命令数を数えなくても知りたいのですが
871 :
デフォルトの名無しさん :04/09/11 17:50:21
>>862 その数値計算とやらの内容を知らないので何とも言いようがないが、
例えば色々なサイズの行列が出てきて、それら個々は計算中にサイズが変わったりしない、
のようなことであれば、
struct gyouretu_type { int gyou, retu; };
struct gyouretu_obj { struct gyouretu_type *type; double *a; }; みたいな構造体で管理すればいいし、
素因数分解のような話であればリストにする手もあるだろ。リストのリストは俺もよく使う。
872 :
デフォルトの名無しさん :04/09/11 17:53:36
リークさせれば診断ダンプするよw
873 :
デフォルトの名無しさん :04/09/11 17:53:57
>>870 君の言う「サイズ」の定義は?
一般にサイズとは領域の開始番地と終了番地の差に1を加えた値で、
領域とは連続した区間のことを言う。
関数が占有する領域は1つという保証がない。
そこで君は「サイズ」に独自の定義を与える必要が出るわけだが・・・
おまいらすごいな
>>862 void hogehoge2(double a[], int n, int m)
としてnとmからaの位置を自分で計算すればいい。
>>862 OS・ライブラリのオーバヘッドが問題になるのなら、
自分で管理すれば?
( ´゚,_」゚)(((( ´,,_ゝ`))))(´ν_.` ) 笑う角には福きたる!
879 :
デフォルトの名無しさん :04/09/11 20:21:54
signal関数について質問です. サーバプログラムで signal(SIGCLD,Catch); として,void Catch(){}に子が死んだときの処理を書いたのですが, コンパイルエラーが出て,invalid conversion from void(*)() to void(*)(int)となりました. その後signalのプロトタイプはvoid (*signal(int sig, void (*func)(int)))(int); ということを知ってvoid Catch()をvoid Catch(int x){}としたのですが,xには 一体何がわたったのでしょうか...これだとコンパイルが正常にできるのですが, 何を渡したのかわからないので不安です.
そりゃ、引数にした値が渡されるんでしょ。
>>879 エラーだったらコンパイルできないと思うがなぁ
あと、簡単な英語なんだから辞書片手でもメッセージ読んだほうが
void Catch(int hoge){
>>881 あ、後半読んでなかった
まあ辞書片手に(ry
883 :
デフォルトの名無しさん :04/09/11 20:37:20
>>880 Catchはfork()された子プロセスが死んだときに呼び出されるわけで,
プログラム中でCatch(hoge);のように呼び出すわけではないのですが
885 :
755 :04/09/11 20:42:07
>>846 ごめんなさい、本当にわからなくて。
例えば、配列の名前を「Array」配列の大きさをNとしてN=100000としたいなら、
int main()
{
int*N;
N=(int*)malloc(100000*sizeof(int));
〜Array[N]を使った処理〜
free(N);
}
ということでいいのでしょうか?
>>885 オウム返しの返答しないように
試せばわかる事を聞き返さない
>>885 おしい
int main()
{
int *Array;
Array = (int*)malloc(100000 * sizeof(int));
〜Array[N]を使った処理〜
free(Array);
}
888 :
755 :04/09/11 21:16:53
>>887 100000個の配列をちゃんと作っているか確認するために
下のような適当なプログラムを組んでみました。
ところが、i=2506の処理が終わった後、
「行番号 13: '=' の左辺値オペランドが不当」
というエラーが出ました。
どうしたら修正できるのでしょうか?
#include<stdio.h>
#include<stdlib.h>
#define N 100000
int main()
{
int i;
int*Array;
Array=(int*)malloc(N*sizeof(int));
for(i=0;i<N;i++)
{
Array[i]=i;
printf("Array[%d]=%d\n",i,Array[i]);
}
free(Array);
}
890 :
デフォルトの名無しさん :04/09/11 21:25:13
>>889 翻訳中に表示された診断メッセージのように見えるが・・・
>>888 当方の環境では、エラーでないで完走するんだが・・・
うちも問題無いなあ Ultra-C Proがヘンなんじゃない?
>>888 じゃ、これは?
#include<stdio.h>
#include<stdlib.h>
#define N 100000
int Array[N];
int main(void){
int i;
for(i = 0; i<N; i++)
{
Array[i] = i;
printf("Array[%d]=%d\n", i, Array[i]);
}
}
Ultra-C Proって勉強用のインタプリタだったんだね
896 :
755 :04/09/11 21:44:28
>>891 >>892 ソフトは何を使っていますか?
>>893 それだと、
行番号 4: 配列のサイズが不当
行番号 10: 'Array' が未定義
というエラーがでました。
>>896 VC2003
なんかウルトラマンの限界かなぁ・・・?
>>896 そんな変なインタプリタじゃなくて、普通のコンパイラを使うことをお勧めする。
>>896 Borland C++
>行番号 4: 配列のサイズが不当
てことはSuper-C Proでも使うしかないね
>>896 > 行番号 4: 配列のサイズが不当
> 行番号 10: 'Array' が未定義
それは想像できるエラーだね。
だって100000は大きすぎるもん
891 892では無いけど、処理系はGCCかVC++だよ。前者はPC-UNIX系(Linuxなど)、
後者はWindows、でデファクトスタンダードですよ。
Intel C++ Compilerおすすめ
902 :
デフォルトの名無しさん :04/09/11 22:16:56
>>900 処理系にもよるが、400KBは「たかが」だったり・・・
903 :
755 :04/09/11 22:30:14
皆さんたくさんのご意見有難うございます。
>>900 「int *Array;
Array = (int*)malloc(100000 * sizeof(int));
free(Array);
」
をっていないから、Ultra-Cでは配列が大きすぎるという事になってしまうのですね。
今更なんですけど、作ることのできる配列のサイズってコンパイラの種類とかで
違うんですか?
VisualC++6.0(ここで言っているVCでしょうか)だとうまくいったりするのですか?
windows+cygwin+gcc強いぞ
>>903 をっていないから?いみふめ
質問に答えると、そうです。
普通のコンパイラだったらスタック領域のサイズは指定できるよ
相手がCインタプリタだしなぁ
909 :
755 :04/09/11 22:47:43
>>905 「をっていないから」→「を使っていないから」でした・・・。
メモリ確保なんだから環境依存(含むコンパイラ)が教科書的回答 実際は400Kぐらいならwinのまともな「コンパイラ」ならなんでもいける だろ
スモールモデルなんて言葉もあったものだ
物理メモリの利用可能領域が24MBていふぉしか
コンピュータ演習か。
914 :
デフォルトの名無しさん :04/09/12 14:29:51
915 :
デフォルトの名無しさん :04/09/12 15:11:37
C言語のprintf関数ののソースとか見てみたいのですが どこかにないでしょうか?
>>916 マジッスか
どっかにUPしてもらえませんか
UPもなにも…フリーだし…
せこせこするな。UPしてやれよw
>>918 たった一つの関数のソース見るためだけに
わざわざOS落としてきたりはキツイっす
>>920 で、お次は
「たった一つの関数を理解するために
何千行ものコードを読むのはキツイっす」
か?
VCとかBCBとかにはちゃんと付いてきているはずなんだがな。
927 :
デフォルトの名無しさん :04/09/13 22:15:13
文字列⇒整数変換をしたいのですが、 標準関数の atoi() を使うと 0 がエラー扱いになってしまいます。 この制限を解決するスマートな方法はないでしょうか?
strtol使うとか。
930 :
デフォルトの名無しさん :04/09/14 00:21:05
>>928 if(sscanf(mojiretsu, "%d", &seisuu) != 1) goto hell;
sscanfよりstrtolのほうがいいよな。
932 :
デフォルトの名無しさん :04/09/14 00:24:14
評価基準を示さずに結論だけ言うDQNは放置
930にはなぜsscanfを使うか理由が書いてないな。
>>929 strtol() もエラー値が 0 なのでだめそうです。
>>930 sscanf() なら 0 が入力されてもエラー値と混同しないですね。
ありがとうございます。
935 :
デフォルトの名無しさん :04/09/14 00:37:25
どうやら質問者の方が頭よさそうだなw
>>934 もう少し身長にマニュアルを読んだほうがいいよ。
935の頭は質問者と同レベル。
>>934 エラーかどうかを戻り値で判断すると思い込むのは危険だな。
940 :
デフォルトの名無しさん :04/09/14 00:46:55
標準出力とファイル出力を選択できる機能はどうやれば出来ますか?
>標準関数の atoi() を使うと 0 がエラー扱い もうちょっとちゃんと言え。 >strtol() もエラー値が 0 なのでだめそうです。 もうちょっとちゃんと読め。
>>939 オレも初めて数ヶ月は戻り値が全てと思ってたよ・・・
944 :
デフォルトの名無しさん :04/09/14 00:49:07
>>940 fprintfやfputsなどの引数を変えればいいのでは?
dup()dup2()
pipe()
947 :
デフォルトの名無しさん :04/09/14 00:51:20
>>943 そこで悩んでます。if文とかでも出来そうかなとは思うんですがイマイチわからなくて
write(1, ...); write(2, ...); でいいんじゃねw
949 :
デフォルトの名無しさん :04/09/14 00:52:37
>>947 コマンドライン引数でファイル名が指定されていればファイルに、指定されていなければ標準出力に書き出すとか。
argc,argv(main関数の引数)の使い方はわかる?
950 :
デフォルトの名無しさん :04/09/14 00:54:35
if(/*標準出力なら*/) fp = stdout; else fp = fopen("hoge.txt", "w"); fprintf(fp, "Hello");
952 :
デフォルトの名無しさん :04/09/14 00:58:48
>>950 #include <stdio.h>
int main(int argc,char *argv[])
{
FILE *fp;
if(argc<=1)
fp=stdout;
else
fp=fopen(argv[1],"w");
if(fp==NULL)
return 1;
fprintf(fp,"はろーわーるど\n");
if(argc>1)
fclose(fp);
return 0;
}
コンパイルしてできた実行ファイルがtestonなら、
testonで標準出力に、teston file.txtならfile.txtに書き出す。
953 :
デフォルトの名無しさん :04/09/14 00:59:33
>>951 あ、出来そうですね。ありがとうございます
954 :
デフォルトの名無しさん :04/09/14 01:00:54
>>941 よく読んでみました。
strtol() の返り値が 0 の場合、第2引数が数値かどうかを判断すればいいわけですね。
long value = strtol(numStr, &endptr, 10);
if (value == 0 && (*endptr != '\0')) goto ERROR;
こんな感じでしょうか・・・。
956 :
デフォルトの名無しさん :04/09/14 01:04:36
>>955 数字列のあとの空白("-387 "←こういうの)を許さないならそれでいい。
957 :
956 :04/09/14 01:05:27
例がまずかったな "0 "
>>957 アドバイスありがとうございます。
stdinから入力されたCSV形式の数値解析をしたかったんですが、
sscanf(), strtol() どちらでも実現できそうですので、
もう少し考えてみてよりシンプルな処理になる方を使ってみます。
>>958 まだ、いまいち分かってないっぽいな。
どうでもいいけど。
現在あるデータをC言語を使って処理するプログラムを作り、 それがほぼ終わりました。この課題を通してやっと初級の入り口に 立てて、プログラミングの面白さが分かった気がします。 本業ではないですが、プログラミングを続けてレベルアップしたいと 思っています。しかし、次のデータとか、特に課題が見つかりません。 何か面白い課題はないのでしょうか。 恐らくこのままではプログラマーでもない私は今やっているような 面白い課題に自然に巡り合うことは今後もうないと思います。 面白いデータや課題があれば、教えてください。 よろしくお願いします。
オレが学生のころは、ゲーム作ったり、テキストエディタを作ったり、 お絵かきツールを作ったり、言語のインタプリタを作ったり、いろいろしてた。 作るといっても、書籍のソースを打ち込んで、改造したりってのがほとんどだったけど。
>>961 どうもありがとうございます。
ツールという課題がありますね(思いつきもしませんでした・・
自分が使いたいと思うツールを作って使うのは面白そう。
>>962 このスレでも宿題スレでもいいからテンプレリンク含め目を通せばいいよ
964 :
ビル・ジョブス :04/09/14 04:41:03
>962 次はWin32APIを勉強するとかデバイス制御を勉強するのがお奨めです。 コンピュータ言語なんて単なる表現ツールですよ。 (C言語は他の言語に比べてかなり洗練されてるから止められないけど)
>>939 つーか「エラー値」と聞いて何かを早合点している時点でアウツ