C言語なら俺に聞け! Part 112
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2005/08/08(月) 01:32:01質問する前には最低限検索を。
GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。
エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
C言語なら俺に聞け! Part 111
http://pc8.2ch.net/test/read.cgi/tech/1121657911/
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
0002デフォルトの名無しさん
2005/08/08(月) 02:07:250003デフォルトの名無しさん
2005/08/08(月) 03:30:15計算量がもっとも少ない双方向リストのソートアルゴリズムは何か
教えてもらえないでしょうか。
よろしくお願いします。
0004デフォルトの名無しさん
2005/08/08(月) 03:35:45いったんmallocで配列作ってそれを、qsort
そのあとリストを作り直す
大きさにもよるが速度と汎用性でピカイチだこれ
0005デフォルトの名無しさん
2005/08/08(月) 09:36:290006デフォルトの名無しさん
2005/08/08(月) 09:37:46あまりわからないのか。そうかそうか。
0007デフォルトの名無しさん
2005/08/08(月) 09:52:11ここは標準C言語のスレです。
書籍、宿題、コンパイラなどの使い方などはそれぞれ該当スレへ、
初心者丸出しの質問は初心者歓迎の質問スレへ、
その他、他言語の質問、日記などは適宜移動してください。
http://pc8.2ch.net/test/read.cgi/tech/1118072681/
0008デフォルトの名無しさん
2005/08/08(月) 12:48:51scanf()で取得した文字列をhogeに入れ、atoi()したいのですが、
この場合、atoiに失敗した(数値に直せない)場合も、atoiに成功して戻り値が0の場合も、どっちも0が返ってきてしまいます。
今はstrcmpでマッチ文字列を0、00、000(ryとforでループさせて調べるようにしていますが、
もっと簡単な方法があれば教えてください。
VS.NET、gccを使っています。
0009デフォルトの名無しさん
2005/08/08(月) 12:56:41ここは標準C言語のスレです。
書籍、宿題、コンパイラなどの使い方などはそれぞれ該当スレへ、
初心者丸出しの質問は初心者歓迎の質問スレへ、
その他、他言語の質問、日記などは適宜移動してください。
http://pc8.2ch.net/test/read.cgi/tech/1118072681/
0010デフォルトの名無しさん
2005/08/08(月) 13:09:59strtol
0011デフォルトの名無しさん
2005/08/08(月) 13:16:060012デフォルトの名無しさん
2005/08/08(月) 13:39:25ポインタ変数には文字列は入らない訳だが。
文字列が入っている領域へのポインタ値を入れるべきだ。
0013おれ ◆dHe9wXXwgk
2005/08/08(月) 13:57:59文字列の取得にscanf()は辞めたほうがいいと思われ
というのは古いのか?
それと、>>12にもあるが
*hogeの宣言でだけでなく、mallocなりでメモリをアロケートしなくちゃむりぽ
小規模コードなら、配列で世伊部?
0014デフォルトの名無しさん
2005/08/08(月) 16:15:52実はJava/Perl/C#から移転してきて、ポインタについてよく分かっていませんでした。
このサイトを参考にもうちょっと考えます。
ttp://www9.plala.or.jp/sgwr-t/lib/strtol.html
>>13
そうだったんですか…知りませんでした。
ttp://f1.aaa.livedoor.jp/~pointc/log70.html
こう書けば良いようですね。fgets(buf, sizeof(BUF_SIZE), stdin);
メモリの動的確保についてですが、ググっでもすでにchar str[256]するようなソースしか見つからず
入力ストリームの文字数は代入するまで取得できないようですね。。
趣味レベルなので、今はstrの末端に\0を代入することにして、正しい取得方法は引き続き調べようと思います。
0015デフォルトの名無しさん
2005/08/08(月) 16:18:08エーッ、マジっすか?
てっきり横着者の手法だと。。。
回答ありがとうございますm(_ _)m
0016デフォルトの名無しさん
NGNG0017デフォルトの名無しさん
2005/08/08(月) 18:10:46char *hoge;
はどう違うのでしょうか?
0018デフォルトの名無しさん
2005/08/08(月) 18:14:000019デフォルトの名無しさん
2005/08/08(月) 18:14:08002017
2005/08/08(月) 18:14:380021デフォルトの名無しさん
2005/08/08(月) 18:28:09自分は
char* hoge;
が好き。
その上で、
char* hoge, *fugo;
は書かず、必ず
char* hoge;
char* fugo;
と書くようにしてる。
0022デフォルトの名無しさん
2005/08/08(月) 18:32:39で?
002317
2005/08/08(月) 18:33:37ってかけないんだ しらなかった
0024デフォルトの名無しさん
2005/08/08(月) 18:48:53int j;
int k;
だるー
0025デフォルトの名無しさん
2005/08/08(月) 18:49:55書けるけど、
char *hoge;
char geho;
と同意になる。
char* hoge, geho; だと、どっちもポインタに見えて厄介でしょ。
002623
2005/08/08(月) 18:53:13char* って、キャラ型のポインタ宣言じゃなかったんだ
いつも char *hogeでやってて使ったこと無いからしらんかったよ
0027デフォルトの名無しさん
2005/08/08(月) 18:53:18そのいい加減な変数名もだるー
0028デフォルトの名無しさん
2005/08/08(月) 18:59:300029デフォルトの名無しさん
2005/08/08(月) 19:00:390030デフォルトの名無しさん
2005/08/08(月) 19:11:06なんか理由あるの?
0031デフォルトの名無しさん
2005/08/08(月) 19:13:57fortranはIからNで始まる変数名は整数型と決まっていた。
その頃からの流れで、Iterationの頭文字でもあることから
basicやCでも未だにi一文字の変数名が幅を利かせている。
0032デフォルトの名無しさん
2005/08/08(月) 19:14:360033デフォルトの名無しさん
2005/08/08(月) 19:25:07003434
2005/08/08(月) 19:50:47ファイル読み込みの時に1行ずつファイル名を書いて読み込ませるのが、とても面倒臭く苦しんでおります。
ファイル名に数字を入れてループ文を使い一気に読み込ませる方法があると聞きましたが詳しいやり方がわかりません。
すみませんが、教えてください。
0035デフォルトの名無しさん
2005/08/08(月) 19:53:35書いてるまんま
0036デフォルトの名無しさん
NGNGそのファイルの命名に、規則性があれば、いくらでもやりようがあるけど。
003734
2005/08/08(月) 19:57:51for(int i=0;i<10;i++)
{
ファイル読み込み("a"+i+".txt");
}
のようにやってみたのですがうまく行きません。
まいりました・・。
0038デフォルトの名無しさん
2005/08/08(月) 19:58:460039デフォルトの名無しさん
2005/08/08(月) 19:58:52君は阿呆なのか?
0040デフォルトの名無しさん
2005/08/08(月) 19:59:08知ってるけど?それで?
0041デフォルトの名無しさん
2005/08/08(月) 19:59:470042デフォルトの名無しさん
2005/08/08(月) 19:59:53始めてみた
0043デフォルトの名無しさん
2005/08/08(月) 20:00:190044デフォルトの名無しさん
2005/08/08(月) 20:00:27しかもfor-statementで変数宣言ですか
0045デフォルトの名無しさん
2005/08/08(月) 20:00:55ベーシックとかスクリプト系ではよくみかけるな
0046デフォルトの名無しさん
2005/08/08(月) 20:01:10それは別に問題ないだろ
0047デフォルトの名無しさん
NGNGとりあえず、入門書の一冊でも読んでください。
0048デフォルトの名無しさん
2005/08/08(月) 20:01:360049デフォルトの名無しさん
2005/08/08(月) 20:01:45どういう意味なの?
0050デフォルトの名無しさん
2005/08/08(月) 20:02:31文字列編集だよ
0051デフォルトの名無しさん
2005/08/08(月) 20:02:45005234
2005/08/08(月) 20:02:57そのsprintfについて少し調べてみます。
0053デフォルトの名無しさん
2005/08/08(月) 20:05:53処理系によってスコープ範囲が違うからあまり使わないようにしてます。
>>51
初期のころはfor-statementが出てきたところのスコープの末尾まで。
改定された規格ではforの中だけ。
未だにこれ引きずってる処理系はあります。
0054デフォルトの名無しさん
2005/08/08(月) 20:10:33>初期
for(int i=0;i<10;i++)
{
...
}
for(int i=0;i<10;i++)
{
...
}
これがエラーになるのはどう考えてもバグだろw
改定だぁ? はぁ?
0055デフォルトの名無しさん
2005/08/08(月) 20:10:55そうです
005634
2005/08/08(月) 20:14:32皆さんの討論にすらついて行けません・・・。
とにかく"a0.txt"と"a1.txt"と"a2.txt"をループ文で一気に読み込めればよいのです。
一番簡単な方法を教えてください。
くだらないと思った人は無視してください。
身勝手な申し出ですみません。
0057デフォルトの名無しさん
2005/08/08(月) 20:16:01そのファイル名を使う!
0058デフォルトの名無しさん
2005/08/08(月) 20:16:12sprintfだっていわれてるだろ
0059デフォルトの名無しさん
2005/08/08(月) 20:18:53char filename[256];
for(int i = 0; i < 10; ++i)
{
sprintf(filename, "a%d.txt",i);
fp = fopen(filename, "r");
;
fclose(fp);
}
0060デフォルトの名無しさん
NGNG改定されたのってC++の話でしょ。
0061デフォルトの名無しさん
2005/08/08(月) 20:25:49006234
2005/08/08(月) 20:26:01ありがとうございます。
自分の知らないプログラムを見ると、そんな手があったか〜と毎度思ってしまうほど鮮やかです。
毎度と言えるほどプログラムを書いた事はありませぬが。
本当にありがとうございました!!
0063デフォルトの名無しさん
2005/08/08(月) 21:18:230064デフォルトの名無しさん
2005/08/08(月) 21:29:31>>63
>>63
0065デフォルトの名無しさん
2005/08/08(月) 21:30:370066デフォルトの名無しさん
2005/08/08(月) 21:34:440067デフォルトの名無しさん
2005/08/08(月) 22:23:190068デフォルトの名無しさん
2005/08/08(月) 22:35:540069デフォルトの名無しさん
2005/08/08(月) 22:55:24ありました
0070デフォルトの名無しさん
2005/08/08(月) 22:57:41正規表現でどうしろっていうの?
自分で抜けって事?
>>69
過去形なのはどういう意味?
0071デフォルトの名無しさん
2005/08/08(月) 23:03:41char* path = (ファイルパス)
char html[MAX_HTML];
char url[MAX_URL]
char *link_begin, *link_end;
FILE* fp;
fp = fopen(path, "r");
fread(html, sizeof(char), MAX_SIZE-1, fp);
fclose(fp);
link_begin = html;
while((link_begin = strstr(link_begin, "href=\"") != NULL) {
link_begin += 6;
link_end = strchr(link_begin, '\"');
*link_end = 0;
strcpy(url, link_begin);
*link_end = '\"';
}
(目的の処理)
link_begin = link_end+1;
}
適当に書いてみた。
007271
2005/08/08(月) 23:05:30ミス。括弧が足りなかった。
while((link_begin = strstr(link_begin, "href=\"")) != NULL) {
0073デフォルトの名無しさん
2005/08/08(月) 23:09:210074デフォルトの名無しさん
2005/08/08(月) 23:14:57007571
2005/08/08(月) 23:16:46恥かくだけだからもうやめるわ
0076デフォルトの名無しさん
2005/08/08(月) 23:42:28うちも書いて欲しいから
めっちゃ応援してる
頑張って書いてくれ
0077デフォルトの名無しさん
2005/08/09(火) 00:08:48/*ノーワーニング、ノーエラーなら彼女がよりを戻しに来る*/
//"href=\""があるか調べる
char *ishref(char *str)
{
int len[2], i, cmp;
char *ret;
len[0] = strlen("href=\"");len[1]=strlen(str);
cmp = -1;
for(i=0;i+len[0]<len[1]&&cmp!=0;i++){
cmp = strcmp("href=\"", str);
if(cmp==0){
ret = str+i+len[0];
}else{
ret = NULL;
}
return ret;
}
void folink(FILE *fo, FILE *fhtml)
{
char ss[256];
char *p[2];
while(fgets(ss, 256-1, fhtml) != NULL){
if((p[0]=ishref(ss))!=NULL){
p[1]=p[0];
while(*p[1]!='\"')p[1]++;
*p[1]='\0';
fprintf(fo, p[0]);
}
}
}
0078デフォルトの名無しさん
2005/08/09(火) 00:11:45だった・・・
もう駄目だな。。
0079デフォルトの名無しさん
2005/08/09(火) 00:19:420080デフォルトの名無しさん
2005/08/09(火) 00:21:03読むと失恋する
0081デフォルトの名無しさん
2005/08/09(火) 00:23:110082デフォルトの名無しさん
2005/08/09(火) 00:40:19涙忘れるソース
0083デフォルトの名無しさん
2005/08/09(火) 00:42:20ねえマスター、
ねえマスター、はやくぅ
0084デフォルトの名無しさん
2005/08/09(火) 00:49:280085デフォルトの名無しさん
2005/08/09(火) 00:53:240086デフォルトの名無しさん
2005/08/09(火) 02:06:31void main(void) {
printf("ガンガレ!\n");
}
0087デフォルトの名無しさん
2005/08/09(火) 02:19:01http://freshmeat.net/projects/libhtmlparse/
0088デフォルトの名無しさん
2005/08/09(火) 04:11:100089デフォルトの名無しさん
2005/08/09(火) 07:14:03{
char target[] = "href=\"";
char *ret;
int targetlen = strlen(target);
int len = strlen(str);
int i, j, k;
j=0;
for(k=0;k+targetlen<len;){
for(i=0;i<targetlen;){
while(isspace(str[j])){j++;k++;}
if(str[j]==target[i]){
i++;
}else{
break;
}
}
}
if(i==targetlen){
ret = str + j + 1;
}else{
ret = NULL;
}
}
こうかー
0090デフォルトの名無しさん
2005/08/09(火) 08:57:16C言語を覚えたいのですが、環境を整える段階で早くも詰まっています。
Visual C++、gcc、LSI C-68等のコンパイラでオススメの物を教えて下さい。
当方、windousXPです。
0091デフォルトの名無しさん
2005/08/09(火) 09:11:38スレ違い。VCでもgccでもいいけど、整備の仕方が判らないなら該当スレへどうぞ。
LSI-Cは無条件に薦めない。
0093デフォルトの名無しさん
2005/08/09(火) 20:06:26int unko(int a, int* b, int c) {
return a+*b+c;
}
int (*ok)(int a, void* b, int c);
ok = unko;
としてもコンパイルエラーにはならないのですが、(gccだとデフォで警告orz)
これは一般的なテクニックとして利用しても大丈夫なのでしょうか?
0094デフォルトの名無しさん
2005/08/09(火) 20:08:29その位置にvoid* 以外の型のポインタ変数を持つ場合でも、
コンパイルエラーにならないってことです。
0095デフォルトの名無しさん
2005/08/09(火) 20:11:19おまえのオナニーテクニックだろ
unkoの型をvoid*に合わせて演算するところでintにキャストせぇよ
なにがやりたいんだかわからん
0096デフォルトの名無しさん
2005/08/09(火) 20:15:59この様な使い方(プロトタイプに合ってない関数をキャストなしで代入)は
すべきじゃないかを問いかけただけです。
>unkoの型をvoid*に合わせて演算するところでintにキャストせぇよ
すみません。例が意味不明でした^^
これはあくまで単なる例なので、気にしないでください。
0097デフォルトの名無しさん
2005/08/09(火) 20:16:59if(〜〜){
if(〜〜){
break;
}
}
hoge++;
}
これでbreakが実行されるとforから抜けることになるんですか?
それとも外側のifを抜けてforのhoge++が実行されるのでしょうか?
0098デフォルトの名無しさん
2005/08/09(火) 20:19:34クリヤーする必要があるんですか?
0099デフォルトの名無しさん
2005/08/09(火) 20:23:07まずはおまえ自身でやってみろよ
なんだかもう・・・
0100デフォルトの名無しさん
2005/08/09(火) 20:25:11書き込みも友人のPCなのでコンパイラをインストできないんです。
今日は泊まりなので家にも帰れませんし。。
0101デフォルトの名無しさん
2005/08/09(火) 20:26:250102デフォルトの名無しさん
2005/08/09(火) 20:28:50帰ってから思う存分やれ
0103デフォルトの名無しさん
2005/08/09(火) 20:31:101.errnoは、エラーになったときだけセットされる
2.errnoは、エラーになったときだけ参照する
1.2.より、通常は明示的にクリアする必要は無い
0104デフォルトの名無しさん
2005/08/09(火) 20:33:27調べると「ループやスイッチ」が対象みたいなのでforから抜けるみたいですね。
どうもでした
0105デフォルトの名無しさん
2005/08/09(火) 20:37:20switch文を抜けるのまで 同じ「break」 である必要はあったのかね・・・
sbreak とか、別ものにして欲しかったと思うことは無いか?
答えろ! >>107!
0106デフォルトの名無しさん
2005/08/09(火) 20:39:42厨房は黙ってろよ
0107デフォルトの名無しさん
2005/08/09(火) 21:05:27黙ってろ
0108デフォルトの名無しさん
2005/08/09(火) 21:09:33ないな。以上
0109デフォルトの名無しさん
2005/08/09(火) 21:14:51ない。あとおまえは黙ってろ
0110デフォルトの名無しさん
2005/08/09(火) 21:16:400111デフォルトの名無しさん
2005/08/09(火) 21:18:34一般的なテクニックではないな。
Cはそういうところのチェックが甘いし。
0112デフォルトの名無しさん
2005/08/09(火) 21:23:21ひどいじゃん
0113デフォルトの名無しさん
2005/08/09(火) 21:24:24forやwhileの中で、switch文の中からbreakしたくなったことは
一度も無いのか?
0114デフォルトの名無しさん
2005/08/09(火) 21:25:410115デフォルトの名無しさん
2005/08/09(火) 21:26:20テクニックというには、使いどころが無さ杉な気がする。
0116デフォルトの名無しさん
2005/08/09(火) 21:26:47俺は全部gotoにしてる
0117デフォルトの名無しさん
2005/08/09(火) 21:27:540118デフォルトの名無しさん
2005/08/09(火) 21:30:39やはりそうですか。ありがとうございました。
>>115
ポインタをコールバックで渡すとき、
呼ばれた側だけが型の情報を知っている場合に、
別の変数にキャストしなくてもいいので便利かな、と思いまして。
0119デフォルトの名無しさん
2005/08/09(火) 21:32:33ストールマンとコンパやって、やつが酔っ払ってる隙に
gccのソースを直す。
0120デフォルトの名無しさん
2005/08/09(火) 21:35:38俺は極力goto使わないようにしてる
「gotoレスプログラミング」っていうぐらいだし
0121デフォルトの名無しさん
2005/08/09(火) 21:41:11「後藤カスプログラミング」っていうぐらいだし
0122デフォルトの名無しさん
2005/08/09(火) 21:48:590123デフォルトの名無しさん
2005/08/09(火) 22:02:24多重ループを脱出するときは、「仕方がない」という意識ではなく、ここぞ使う場面だ
と思って使うが。
0124122
2005/08/09(火) 22:11:06JavaとかDにはラベル付breakなるものがあるらしい。これなら多重breakにgotoを使う必要がなくなる。
これがないCでは「仕方なく」gotoを使うことになる。もちろんラベル付breakをCに導入しろとは全然思っていない。
俺はJavaもDも使ったことがないけど。
0125デフォルトの名無しさん
2005/08/09(火) 22:11:47そういう場面になったら俺の場合、gotoを使わなくてすむようにロジック組みなおす。
まあ仕事でやってる人はそういうわけにもいかないんだろうけど
0126デフォルトの名無しさん
2005/08/09(火) 22:29:02「引数」と「値を返す」
の基本的な二つの語句の意味がいまいち理解しきれません。
イメージとしては掴みかけているような感じはするんですけど。。。
0127デフォルトの名無しさん
2005/08/09(火) 22:30:01>もちろんラベル付breakをCに導入しろとは全然思っていない
俺はぜひ導入してほすぃと思うが。害はないだろ?
0128デフォルトの名無しさん
2005/08/09(火) 22:32:00↓引数
← foo(a)
値を返す
0129デフォルトの名無しさん
2005/08/09(火) 22:33:410130デフォルトの名無しさん
2005/08/09(火) 22:34:460131デフォルトの名無しさん
2005/08/09(火) 22:35:170132デフォルトの名無しさん
2005/08/09(火) 22:35:48s/悩んで/悲しんで/
0133デフォルトの名無しさん
2005/08/09(火) 22:37:59「gotoを使っちゃダメ」ってエライ学者さんが言ったから使ってはいけない、
程度にしか理解してないのだろ?
0134デフォルトの名無しさん
2005/08/09(火) 22:38:570135デフォルトの名無しさん
2005/08/09(火) 23:02:23まだC言語もおまえらも存在していなかったわけだがな。
ttp://www.acm.org/classics/oct95/
0136デフォルトの名無しさん
2005/08/09(火) 23:11:15反対する気はないが、今さら導入したところで、あまり意味がないよな。
0137デフォルトの名無しさん
2005/08/09(火) 23:17:03学校でy=f(x)とか習ったかい?
0138デフォルトの名無しさん
2005/08/09(火) 23:20:11可読性損ねる馬鹿プログラマには参る
0139デフォルトの名無しさん
2005/08/09(火) 23:37:240140デフォルトの名無しさん
2005/08/09(火) 23:40:00習いました
0141デフォルトの名無しさん
2005/08/09(火) 23:41:29読み方プリーズ
しつけにこりてろをふく?
0142デフォルトの名無しさん
2005/08/09(火) 23:44:10あつ‐もの【▼羹】〘名〙
野菜や魚肉を熱く煮立てた汁物料理。◇「熱いもの」の意。
羹(あつもの)に懲こりて膾(なます)を吹く失敗にこりて、必要以上に用心深くなる。◇熱かった羹にこりて膾のような冷たい料理も吹いて冷ます意からいう。
0143デフォルトの名無しさん
2005/08/09(火) 23:44:52熱いものをはふはふして食べたあとに、冷たい副菜を思わずふーふーしてしまう様から、
ひどい目にあって、同じ目を二度と見ないように、過剰な反応をするの意。
0144デフォルトの名無しさん
2005/08/09(火) 23:51:550145デフォルトの名無しさん
2005/08/10(水) 00:01:00お前見込みないわ…コミュニケーション能力が…
0146デフォルトの名無しさん
2005/08/10(水) 00:03:49ということでしょう
0147デフォルトの名無しさん
2005/08/10(水) 00:04:540148デフォルトの名無しさん
2005/08/10(水) 00:10:57>羹(あつもの)に懲こりて膾(なます)を吹く失敗にこりて、必要以上に用心深くなる。
羹(あつもの)に懲(こ)りて膾(なます)を吹く 失敗にこりて、必要以上に用心深くなる。
>>144
ネタか?
0149デフォルトの名無しさん
2005/08/10(水) 00:54:510150データボックス
2005/08/10(水) 01:11:282次元配列を、それぞれの次元のインデックスや、1次元目の要素数からアドレス計算をしながら
ポインタ扱いして、更にchar * のメンバ変数で文字列を扱ったり、関数の引数にアドレスを渡し
て、関数の中では、もう一段階進んだポインタを扱うことになったりして、苦心惨憺してしまうのお。
関数ポインタの配列も必要だし。
そういうことで悩んでしまうが、どうしようかいな。
0151デフォルトの名無しさん
2005/08/10(水) 01:16:380152デフォルトの名無しさん
NGNG変に工夫しないで素直に組めば?
0153デフォルトの名無しさん
2005/08/10(水) 01:37:300154デフォルトの名無しさん
2005/08/10(水) 01:40:090155データボックス
2005/08/10(水) 01:44:210156デフォルトの名無しさん
2005/08/10(水) 01:59:06(バッサリ略)
センスの悪い奴がわかってるつもりでへんに頭をひねったつもりになっても、
ちぃ〜ともなぁ〜んの解決にもならん、というだけの話かと。
0157デフォルトの名無しさん
2005/08/10(水) 02:16:53何だ、半人前のCプログラマの分際で何を言ってるんだ。
0158デフォルトの名無しさん
2005/08/10(水) 02:30:469/11選挙では 最高裁裁判官の国民審査もあります。下記2人にはご注意を。
「外国人参政権反対」という主張の人は下の二人(賛成派)を落とすべきです。
[裁判官 滝井繁男の反対意見]
・外国人の地方選挙権を付与することを禁止しているものではないのである(スゲー!)
・日本人に限られるのは地方公共団体の長だけでいい。(スゲー!)
[裁判官 泉�コ治の反対意見]
・地方公共団体は,国が日本における在留を認めた外国人について,当該地方公共団体内における活動
を自由に制限できるものではない。(スゲー!)
・特別永住者が地方公共団体の職員になることを禁止する法はない。
・地方公共団体でトップ、警察、消防、以外なら、外国人を任用してもいい。(スゲー!)
0159デフォルトの名無しさん
2005/08/10(水) 09:13:00当然そうするし、ポインタの方が良いとなれば当然
0160デフォルトの名無しさん
2005/08/10(水) 09:36:17どちらが可読性が高いのか
を決めるは当然、開発担当者?
0161デフォルトの名無しさん
2005/08/10(水) 11:15:38お前は何の応用力もなく、進歩できないからといって負け惜しみを言ってるだけだよな。
>ちぃ〜ともなぁ〜んの解決にもならん、というだけの話かと。
お前よりは多くの問題解決の実績があるはずだな。
0162デフォルトの名無しさん
NGNG0163データボックス
2005/08/10(水) 13:40:380164デフォルトの名無しさん
2005/08/10(水) 14:27:00Cを完璧?
完璧の定義は?
負け惜しみにもほどがあるな
0165デフォルトの名無しさん
2005/08/10(水) 14:33:13粘着乙
0166デフォルトの名無しさん
2005/08/10(水) 14:52:02キモイヨおまえ
0167デフォルトの名無しさん
2005/08/10(水) 15:35:53「藻前に Cは無理、C++でも使っとけ」
どちらの発言にも一面の真理が含まれている。
0168データボックス
2005/08/10(水) 15:56:020169デフォルトの名無しさん
2005/08/10(水) 15:58:060170デフォルトの名無しさん
2005/08/10(水) 19:12:47char 型の配列を一度初期化して、
もう一度値を入れて生きたいのですが、
どうすればよいのでしょうか。
char a[100];
a = "ああ";
a = NULL;のようなこと死体のですが、これではむりです。
a = "いいいい";
0171デフォルトの名無しさん
2005/08/10(水) 19:16:21入門書くらいは読んでください。
0172デフォルトの名無しさん
2005/08/10(水) 19:25:25a = "ああ";
a = NULL;
a = "いいいい";
0174データボックス
2005/08/10(水) 20:07:00char a[100];
strcpy(a, "ああ"); /* #include <string.h> */
*a = '\0';
strcpy(a, "いいいい");
0175デフォルトの名無しさん
2005/08/10(水) 20:59:12みたいにアドレスを渡す時って、関数の仮引数に int hoge(*aa)
と書くことが多いだろ?
本で読んだときからずっとハテナだったが、a=10 で &a=FFFFFF(仮に)
だったとき明らかに値がずれてないか?そういう約束なのか?
0176デフォルトの名無しさん
2005/08/10(水) 21:02:17a = "ああ";
a = NULL;
a = "いいいい";
strcpy(a, "うううう");
0177デフォルトの名無しさん
2005/08/10(水) 21:02:56質問は日本語で書いてください
0178デフォルトの名無しさん
2005/08/10(水) 21:04:05悪いことは言わない。
ポインタのない言語に乗り換えてくれ。
0179デフォルトの名無しさん
2005/08/10(水) 21:07:23なぜa=10 で &a=FFFFFFだと値がずれるんだ?
0180デフォルトの名無しさん
2005/08/10(水) 21:11:02別に 172が間違いなわけじゃないが、あきらかに勉強不足なんだから、
文字の配列と文字列定数へのポインタとを混同すんじゃないよ。
174の strcpy()等も調べとく。
0182156はこれと156だけ
2005/08/10(水) 21:52:49そんな不細工なソースを人に受け渡しするなら殴ってもいい。
(C++以前にデータや論理の抽象化云々…)
実際、157,160,161 あたりが、
>>できるだけ配列をポインタ扱いでコーディングするように努めてるが、
に何の意味があるか解説すると、もっと面白くなるかもしれないが。
0183デフォルトの名無しさん
2005/08/10(水) 21:56:05考えが浅いな
0184デフォルトの名無しさん
2005/08/10(水) 22:34:160185デフォルトの名無しさん
2005/08/10(水) 22:52:26詳しく
0186デフォルトの名無しさん
2005/08/10(水) 23:12:15>>1
0187デフォルトの名無しさん
2005/08/10(水) 23:14:03ウザス
0188デフォルトの名無しさん
2005/08/10(水) 23:15:12氏ね世
0189デフォルトの名無しさん
2005/08/11(木) 01:09:39のですが、コマンドライン引数の最大長はどのくらいまでですか?
引数の文字列を5000byteくらい使いたいのですが、そんな長さでも正常に
プログラムに引数が渡りますか?
試したら渡ったようなのですが、毎回渡りますか?
0190デフォルトの名無しさん
2005/08/11(木) 01:11:160191デフォルトの名無しさん
2005/08/11(木) 01:12:20char c;
c = 0xff;
i = c << 24;
これ、gcc3でコンパイルするとi==0xff000000になりますが、
この結果は規格で保証されてますか?
0192デフォルトの名無しさん
2005/08/11(木) 01:14:00環境依存とはどういうことですか?
0193デフォルトの名無しさん
2005/08/11(木) 01:14:110194デフォルトの名無しさん
2005/08/11(木) 01:17:27windows のコマンドプロンプトでしてますが、それ以外だとできないかも
ということですか。
0195デフォルトの名無しさん
2005/08/11(木) 01:23:50日本語を読んで理解できるだろ?
> 環境依存
環境に依存
わかる?
0196デフォルトの名無しさん
2005/08/11(木) 01:29:590197デフォルトの名無しさん
2005/08/11(木) 01:31:16Microsoftが仕様として明文化していなければ、同じマシンでも動いたり
動かなかったりするかもしれない。
Posixでは4096バイトまでは大丈夫なはずだが、コマンドプロンプトが
Posixに準拠しているかどうかは知らない。
0198デフォルトの名無しさん
2005/08/11(木) 01:31:37int型が32ビットとは限らないんじゃないか?
0199デフォルトの名無しさん
2005/08/11(木) 01:32:18コミュニケーション能力ありますか?
0200デフォルトの名無しさん
2005/08/11(木) 01:33:210201デフォルトの名無しさん
2005/08/11(木) 01:35:22自演か以前自分がそういう感じで答えられて腹立ってんでしょ
0202デフォルトの名無しさん
2005/08/11(木) 01:37:24レスありがとうです。
さっきwindows 98で試してみましたが、116文字まででした。
windows xpだと4096バイトで試してもうまくいきました。
0203デフォルトの名無しさん
2005/08/11(木) 01:39:06リダイレクトやパイプが使えるのならそれ使ってもいいし。
0204デフォルトの名無しさん
2005/08/11(木) 01:40:28ファイルに記録してそれから読ませるようにしてみます。
0205デフォルトの名無しさん
2005/08/11(木) 01:44:140206デフォルトの名無しさん
2005/08/11(木) 01:44:17すみません、こうでした。
long l;
char c;
c = 0xff;
l = c << 24;
<< 演算子の左オペランド c は char ですが、
この場合演算前に c が long に promote されることが
保証されているか、が気になっています。
0207デフォルトの名無しさん
2005/08/11(木) 01:44:250208デフォルトの名無しさん
2005/08/11(木) 01:50:27もちろん後から読んだときに誰でもわかるように、明示的にキャストしてやったほうがいい。
0209デフォルトの名無しさん
2005/08/11(木) 02:05:59int型以下のサイズの整数演算は、すべてint型で行われる
「格上げ」あたりのキーワードでぐぐるといいかも
intのサイズは処理系依存。
intのビット幅以上のビットシフトの結果も処理系依存。
0210デフォルトの名無しさん
2005/08/11(木) 02:22:31'FILENAME.EXT' (8 + 1 + 3 = 12)
116 + 12 = 128
0211デフォルトの名無しさん
2005/08/11(木) 02:33:14doskeyか何かとconfig.sysの設定で
2倍程度までは増やせた気もするが。
0212デフォルトの名無しさん
2005/08/11(木) 03:13:39なるほど。この場合、intが16bitだとcharの24bit shift結果は
規格上ロストする可能性があるということになりますね。
>>208
そうですね。キャストすることにします。
0213デフォルトの名無しさん
2005/08/11(木) 11:05:42何がどう厨ネタなのかわからんのだが。
心配するな、お前には受け渡ししないから。
そして、仕事しなくていいから。
>そんな不細工なソースを人に受け渡しするなら殴ってもいい。
それは自分自身のことにならないように気をつけることだな。
0214デフォルトの名無しさん
2005/08/11(木) 11:51:07それを言うなら、何がどう厨ネタなのか「解説すると、もっと面白くなるかもしれないが。」
0215デフォルトの名無しさん
2005/08/11(木) 12:10:34>規格上保障されるかどうかより、現実の実装で確実性の高い手法を使うべし。
規格上保証されているわけではないが、現実の実装で確実性が高いからその手法でも
まあいい、というのはわかるが、規格が保証されているものよりもあえて、規格は保証
されないが、現実の実装で確実性が高いものを推奨するという意味なのかな。
0216デフォルトの名無しさん
2005/08/11(木) 14:17:24Win32には、::IsDBCSLeadByte(char byte)という、マルチバイト文字かどうかを確かめるAPIがあるのですが、
ANSIライブラリにこのAPIと同様の機能をするものがありますか?
Googleで調べたのですが、どうもHitしませんでした。
教えていただけると助かります。
よろしくお願いします。
0217デフォルトの名無しさん
2005/08/11(木) 14:47:350218デフォルトの名無しさん
2005/08/11(木) 16:14:52gccなんですが、/usr/include/linuxの下のヘッダではなくて、
/home/hoge/work/include/linuxの下にあるヘッダを読ませたい
んですけど、どうすればいいんでしょう。C_INCLUDE_PATHを
/home/hoge/work/include:/usr/include
と設定してるんだけど、どうしても標準インクルードの方が
優先されちゃうみたいで。
0219デフォルトの名無しさん
2005/08/11(木) 16:20:41検索順序としては
-I > C_INCLUDE_PATHのような環境変数 > 標準ヘッダ
0220デフォルトの名無しさん
2005/08/11(木) 16:34:30-Iは複雑なMakefileの中なんで。環境変数指定の方が優先
されると俺も思ってるんだけどなあ。/usr/includeとかの
クリティカルなパスは特別扱いされてるとか。その辺の事情
知らない?
0221sage
2005/08/11(木) 16:41:54モノを頼んで悪いんだけどさ、今手元に環境あるんなら、
/home/hoge/work/include/linux/config.h:
#error "local"
main.c:
#include <linux/config.h>
main(){}
C_INCLUDE_PATH=/home/hoge/work/include gcc -c main.c
って試してみてくんない?
俺が阿呆なのかgccのblack magicに引っかかってるのか
切り分けたいんで。
0222デフォルトの名無しさん
2005/08/11(木) 16:47:35処で、-Iは複数指定できるんでないかい?
0223デフォルトの名無しさん
2005/08/11(木) 16:51:510224デフォルトの名無しさん
2005/08/11(木) 16:53:180225sage
2005/08/11(木) 17:37:02ム板はめったに来ないので勝手が分からんでの。
> -nostdinc
なるほど、と試してみた。明示的に標準パスを付加してるはず
なんだけどなーんか微妙にエラーが出るんだよなー・・
ん?てことは/home/.../includeの方を読んでるってことかー?
てことは、阿呆なのはgccではなくやはり俺だったということかー?
0226デフォルトの名無しさん
2005/08/11(木) 17:40:160227デフォルトの名無しさん
2005/08/11(木) 17:42:04Cコンパイラの実装の話は他のスレでやってくれ的なんだ
0228デフォルトの名無しさん
2005/08/11(木) 17:45:230229デフォルトの名無しさん
2005/08/11(木) 17:51:550230デフォルトの名無しさん
2005/08/11(木) 17:52:18あんたもスレ違いですから。
cursesは専用スレがないから環境依存OKスレかUnixプログラミングスレ辺りかな。
0231デフォルトの名無しさん
2005/08/11(木) 17:58:52スマソ、スレ違いでした。
CursesにはこだわっていないのですがC言語の標準関数では無理なんでしょうか?
0232デフォルトの名無しさん
2005/08/11(木) 18:00:41しつこいぞボケ
0233デフォルトの名無しさん
2005/08/11(木) 18:04:58誘導したんだから……
標準関数に座標を云々する関数がないことくらいすぐ判るだろ。
0234デフォルトの名無しさん
2005/08/11(木) 18:12:32ふうむ、スレ違い相当の低脳厨がはりついてるのだけはよくわかった。
0235デフォルトの名無しさん
2005/08/11(木) 20:16:060236デフォルトの名無しさん
2005/08/11(木) 22:10:54テストの時、トレースするのめんどいからprintf文で値確かめようとしたら
ソースが汚くなるからやめろっていわれた。テスト終わったら消すっていったんだけど
めんどくさがらないでトレースしろ、といわれたんだけどこれって普通?
知りたい値が最初から決まってるんだからprintfでいいと思ったんだけど
わざわざデバッガでトレースするのめんどくせーし
0237デフォルトの名無しさん
2005/08/11(木) 22:18:36GUIプログラムとかprintfで出力する先がないときもあるし。
0238デフォルトの名無しさん
2005/08/11(木) 22:23:13たんなるprintfじゃ、確かに見難くなるかもな。
デバッグ出力用の専用ライブラリを使うなり作るなりしろ。
DBG_PRINT() とか DBG_MSG() みたいな用途がハッキリ分かるマクロなら、そんなに可読性を損なうこともない。
リリース時にはマクロでブランクに置換。
0239デフォルトの名無しさん
2005/08/11(木) 22:27:24と思ったが、その種の機能は使っているデバッガに有りや無しや
0240データボックス
2005/08/12(金) 00:25:34n1 = 1 //* */ 2
;
if (n1)
printf("何で 0 にならないんだ?\n");
0241デフォルトの名無しさん
2005/08/12(金) 00:33:47最近のCコンパイラはC++ コメントを理解するから //
以降がコメントとされて消えたと思われ。
0242デフォルトの名無しさん
2005/08/12(金) 00:35:220243デフォルトの名無しさん
2005/08/12(金) 00:58:36そもそも、テストの時始めからデバッガ使うなんて横着。
0244デフォルトの名無しさん
2005/08/12(金) 01:03:33近寄りたくないチームだ。
0245デフォルトの名無しさん
2005/08/12(金) 01:16:04debugはマクロ使うな。
テスト後にデバック用printfの削除だと
消し忘れが発生するかもしれない。
出荷やソースコードのcvs管理等をやってない、
どーでも良いプログラムならprintfでも有りだけど。
0246デフォルトの名無しさん
2005/08/12(金) 01:19:320247デフォルトの名無しさん
2005/08/12(金) 01:21:04下手だな。日本語。
0248デフォルトの名無しさん
2005/08/12(金) 01:24:07起動パラメタなどでデバッグレベル調節できるようにすればリリースバージョンでも
デバッグメッセージ消さなくても済む。
0249デフォルトの名無しさん
2005/08/12(金) 01:31:430250デフォルトの名無しさん
2005/08/12(金) 01:37:05この文は「俺はマクロを使うよ。」、「お前らはマクロを使ったらダメだ。」のどちらにも取れる。
>>245は、前者の意味で書いたと思うが、>>246- は、後者の意味で読んでいると思われ。
>>247の2行目に同意。
0251デフォルトの名無しさん
2005/08/12(金) 16:02:12送受信ともにselect()を使って待機させているんですが、
CPU使用率が99%とかいってしまいます。
OSはRedHat9 2.4.20-6です。
0252デフォルトの名無しさん
2005/08/12(金) 16:09:210253デフォルトの名無しさん
2005/08/12(金) 16:09:27独り言ですか。邪魔です。
0254デフォルトの名無しさん
2005/08/12(金) 16:12:25タイムアウト時間をきちんと設定してください。迷惑です。
0255デフォルトの名無しさん
2005/08/12(金) 16:15:54selectから読み書き可能だと通知されたファイルを放置してるとか。
0256256
2005/08/12(金) 16:21:040257デフォルトの名無しさん
2005/08/12(金) 16:22:31なるほど・・・そういう考えもありか
0258251
2005/08/12(金) 16:23:30CPU負荷率が高いのはselect()使ってたら、しょうがないんですか?
(タイムアウトなしです)
下がられるなら下げたいので、その方法もお願いします。
で、もしかして答えは>>254だったり?
0259デフォルトの名無しさん
2005/08/12(金) 16:26:54読んでないのなら読め
読んだのなら理解できてないからもっかい読め
0260デフォルトの名無しさん
2005/08/12(金) 16:33:510261デフォルトの名無しさん
2005/08/12(金) 16:42:190262デフォルトの名無しさん
2005/08/12(金) 16:55:02解決しました、ありがとう。
ちなみに原因↓
SELECT の掟
10. タイムアウトの値は select を呼ぶたびに初期化すべきである。 OS に
よっ て は timeout 構造体を変更する場合があるからである。ただし
pselect は、自分の timeout 構造体を変更することはない。
0263デフォルトの名無しさん
2005/08/12(金) 18:47:56こいつの程度が分かるな
0264デフォルトの名無しさん
2005/08/12(金) 18:50:46その程度の事しか見ていないお前の程度も解かるよ。
0265デフォルトの名無しさん
2005/08/12(金) 19:01:44Linuxユーザは基本的に日本語マニュアル読んでるな
0266デフォルトの名無しさん
2005/08/12(金) 19:03:100267デフォルトの名無しさん
2005/08/12(金) 19:13:31読んでないんじゃなくて読めないんだと思う
イベントとかいったら、たまにLinux使ってる人と話すことがあるけど
そのときになんか聞いたりすると、マニュアル見て英語だったら一瞬で閉じて
googleで日本語サイト限定にして検索する
めっちゃ古いのとか、gnuのじゃなかったりしてもお構い無しにそれを読んでた
0268デフォルトの名無しさん
2005/08/12(金) 19:20:530269デフォルトの名無しさん
2005/08/12(金) 21:25:35英語にかぶれた非国民は出て行け!
0270デフォルトの名無しさん
2005/08/12(金) 21:32:050271デフォルトの名無しさん
2005/08/12(金) 21:52:38char (*(*x[3])())[5];
ってなんだよ?こんな変態じみた宣言を普通に使ってるのか、おまえら?
俺は、宣言の意味さえ分からん・・・
0272デフォルトの名無しさん
2005/08/12(金) 21:55:37意味が分かればそれが分かると思う
意味が分からないということは
それが必要でないって事
必要でなければ知る必要もないでしょ
0273デフォルトの名無しさん
2005/08/12(金) 21:55:570274デフォルトの名無しさん
2005/08/12(金) 21:58:57なんか戻り地の書き方が変なような。
0275デフォルトの名無しさん
2005/08/12(金) 21:59:360276デフォルトの名無しさん
2005/08/12(金) 22:00:23何が分からないのか分からん
0277デフォルトの名無しさん
2005/08/12(金) 22:00:420278デフォルトの名無しさん
2005/08/12(金) 22:04:09>>273 みたいなのは、、二段のディスパッチテーブルに分解したほうが使いかってがいい。
0279デフォルトの名無しさん
2005/08/12(金) 22:04:28http://kmaebashi.com/programmer/pointer.html
x is array[3] of pointer to function() returning pointer to array[5] of char.
つまりxはcharの配列[5]へのポインタを返す関数へのポインタの配列[3]。
0280デフォルトの名無しさん
2005/08/12(金) 22:06:270281デフォルトの名無しさん
2005/08/12(金) 22:09:250282デフォルトの名無しさん
2005/08/12(金) 22:10:290283274
2005/08/12(金) 22:11:18つか今でもピント来ないな。
char (*)[]
配列へのポインタだろ。これを返す関数は。どういうプロトタイプになるんだ?
char (*)f()[]
char (*f)()[]
うーん。
0284デフォルトの名無しさん
2005/08/12(金) 22:11:24charとキャストとポインタが分かってたら分かるだろ
それらを理解してたつもりで上を読んで理解できなかったのなら
理解できてなかった証拠でしょ
0285デフォルトの名無しさん
2005/08/12(金) 22:14:41typedef どう使うのかわからん。
0286デフォルトの名無しさん
2005/08/12(金) 22:22:04char (*)[]を返す関数はchar ((*)[])()。全体を括弧でくくって右に関数の括弧を付ける。
0287デフォルトの名無しさん
2005/08/12(金) 22:22:19俺ならこうやる(型名が糞とか抜きね)
typedef char FIXEDSTRING5[5];
typedef FIXEDSTRING5 *LPFIXEDSTRING5;
以下略
0288デフォルトの名無しさん
2005/08/12(金) 22:23:54つまり自分で書くソースにあんな宣言が必要になったら>>287みたいにtypedefを使うということ。
既存のものを読み解くのに使えるわけではない。
0289デフォルトの名無しさん
2005/08/12(金) 22:35:31typedef char (*Type_X)[5];//char型配列[5]のポインタ
typedef Type_X (*Type_FuncX)();//Type_Xを返す関数のポインタ
//検証用 これでコンパイラ通れば正解。
char (*(*x[3])())[5];
Type_FuncX lp = NULL;
x[0] = lp;
0290デフォルトの名無しさん
2005/08/13(土) 06:32:25char*[5] (*f[3])();
じゃないの?演算子の優先順位の問題?
0291デフォルトの名無しさん
2005/08/13(土) 06:36:240292デフォルトの名無しさん
2005/08/13(土) 13:53:41ttp://www.kouno.jp/home/c_faq/c1.html#21
char (*(*x[3])())[5]; を typedef 分解するとこんな感じだろうか。
typedef char A[5]; /* A = (*(*x[3])()) -> A *(*x[3])(); */
typedef A *B; /* B = (*x[3])() -> B (*x[3])(); */
typedef B C(); /* C = (*x[3]) -> C *x[3]; */
typedef C *D; /* D = x[3] -> D x[3]; */
D x[3];
あるいは
typedef A x[3]; /* typedef char (*(*A)())[5]; */
typedef B *A; /* typedef char (*B())[5]; */
typedef C B(); /* typedef char (*C)[5]; */
typedef D *C;
typedef char D[5];
>286
それだと、char 型を返す関数の配列へのポインタにならない?
char (*f())[5] じゃないか?関数ポインタの型だと char (*(*)())[5] かな。
0293デフォルトの名無しさん
2005/08/13(土) 22:11:48判断するにはどうすればいいですか?
0294293
2005/08/13(土) 22:12:310295デフォルトの名無しさん
2005/08/13(土) 22:27:14>>1
0296デフォルトの名無しさん
2005/08/13(土) 22:42:50argv[]は単なる文字列へのポインタ。
その文字列が、ファイル名かディレクトリ名か、
あるいは、その他の意味を持つ文字列かは、
コマンドラインで実行した本人以外は誰もわからん。
その文字列と同じ名前のファイルやディレクトリが
存在するか確認する方法はOS依存。
まあ、拡張子が付いていたらファイル、それ以外はディレクトリ、
ファイル名、ディレクトリ名に使用できない文字があったらエラーとか、
ファイルをオープンしにいって、成功したらファイル、それ以外はディレクトリとか、
そんな安易な実装でいいんだったら、純粋なCでも可能だけど。
0297デフォルトの名無しさん
2005/08/13(土) 23:04:40そんな安易な実装について聞いているんだろ
OS依存といってもPOSIX準拠な方法があるんだから
もうstatでいいじゃん。面倒くさい。
0298デフォルトの名無しさん
2005/08/13(土) 23:10:160299293
2005/08/13(土) 23:42:56statをmsdnで調べて出来ました!
ありがとうございました。
>>296
決して安易という訳ではないんですが、
こういうシステム依存の部分て調べ辛くて…
文法とかアルゴリズムは良く見つかるんですけどね。
>>295
言いたいことはよく分かるのですが、
正直、1のリンクからは見つけられませんでした。
0300デフォルトの名無しさん
2005/08/13(土) 23:55:13>>296みたいなのは長々と書いてるだけで何の情報も無い
長文結構だが、その中にこっそり情報混ぜてやれよ
こういう>>293みたいなやつにはヒントをあげるだけでいいんだよ。
問題はそのヒントのセンス。
0301デフォルトの名無しさん
2005/08/14(日) 00:13:280302デフォルトの名無しさん
2005/08/14(日) 03:45:390303デフォルトの名無しさん
2005/08/14(日) 04:25:250304デフォルトの名無しさん
2005/08/14(日) 05:51:39俺だって勉強してると言わんばかりに
とくいげに無駄話ばかり続ける状態。
0305デフォルトの名無しさん
2005/08/14(日) 12:03:390306デフォルトの名無しさん
2005/08/14(日) 12:06:270307デフォルトの名無しさん
2005/08/14(日) 12:06:43%x使うのが一番楽。
0308デフォルトの名無しさん
2005/08/14(日) 12:11:280309デフォルトの名無しさん
2005/08/14(日) 12:12:16勉強しようとしたんですが、わからない事があります。
Microsoft Visual C++ .NET にて
/*hello.c*/
#include <stdio.h>
int main()
{
printf(
"Hello ""World\n");
return 0;
}
というのをビルドしたんですが
error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 _WinMainCRTStartup で参照されました。
fatal error LNK1120: 外部参照 1 が未解決です。
と、エラーが二つでます。 どうしたらいいのでしょうか?
設定があるのですか? それともソースを変えなきゃ行けないのでしょうか?
0310デフォルトの名無しさん
2005/08/14(日) 12:15:280311デフォルトの名無しさん
2005/08/14(日) 13:50:55Windowsプログラミングのスレで聞いてくださいね
0312デフォルトの名無しさん
2005/08/14(日) 14:05:2216で割った余りを調べて10-15をa-fに変換して配列に入れる
商が0になるまで続ける
配列を%sで出力
0313デフォルトの名無しさん
2005/08/14(日) 14:09:22ttp://www.kumei.ne.jp/c_lang/
そしてここを見て設定しなおせ
ttp://www.kumei.ne.jp/c_lang/net/index.html
0314デフォルトの名無しさん
2005/08/14(日) 14:10:05>>309な
0315305
2005/08/14(日) 16:00:43ありがとうございます。
ファイルからデータ読み込む方法はfgetcを使用してるんですが、
漢字が上手く取り込めません。16進数表示部が文字化けしてしまいます。
0316デフォルトの名無しさん
2005/08/14(日) 16:07:41宿題スレでコードで解答もらってんじゃん
0317デフォルトの名無しさん
2005/08/14(日) 16:11:55文字化け…?
fgetcの戻り値はただの整数だから化けることはないと思うけど。
言い忘れたけど配列の最後には必ずNULLを入れること。
0318デフォルトの名無しさん
2005/08/14(日) 19:09:320319デフォルトの名無しさん
2005/08/14(日) 19:18:27ライブラリに依存する
0320デフォルトの名無しさん
2005/08/14(日) 19:18:42じゃなくてコンパイラ付属のライブラリ
(あれ?winな環境だとAPIとかでOSなのか?)
0321デフォルトの名無しさん
2005/08/14(日) 19:34:12ないない。
UNIX系なら仮想ファイルで乱数取得が可能かも知れんけど
0322デフォルトの名無しさん
2005/08/14(日) 20:36:23typedef func_t (*func_t)(obj_t *obj);
func_t func1(obj_t *obj);
func_t func2(obj_t *obj);
func_t func3(obj_t *obj);
のように。(実際にはこうは書けない)
typedef void *(*func_t)(obj_t *obj);
void *func1(obj_t *obj);
...
こんな感じに書いて、あとは必要に応じてキャストすれば済むには済むんですが、気になったもので……。
0323デフォルトの名無しさん
2005/08/14(日) 21:03:59できませんC++でtemplate使いなさい
0324デフォルトの名無しさん
2005/08/14(日) 22:53:04挿入ソートが他の2つよりも3倍以上早かったんですがそんなものなんでしょうか?
3つともO(n^2)とどこかでみたのですが
0325324
2005/08/14(日) 22:53:350326デフォルトの名無しさん
2005/08/14(日) 22:55:27実は効率よく終わるように考慮されているロジックであれば一番速かったりする
0327デフォルトの名無しさん
2005/08/14(日) 22:59:20こんな感じなのですが、これが基本形ですよね?
void bubble(int *d,int n)
{
int i,j;
for(i=0;i<n-1;i++){
for(j=n-1;j>i;j--)
if(d[j]<d[j-1]) swap(d[j],d[j-1]);
}
}
void insert(int *d,int n)
{
int i,j;
for(i=1;i<n;i++){
int temp=d[i];
for(j=i;j>0 && d[j-1]>temp;j--)
d[j]=d[j-1];
d[j]=temp;
}
}
0328デフォルトの名無しさん
2005/08/14(日) 23:36:370329デフォルトの名無しさん
2005/08/14(日) 23:41:02Oは問題の大きさに対して計算量がどう増加するかを表わすもので、
計算量そのものを表わすものじゃないし。
0330デフォルトの名無しさん
2005/08/14(日) 23:42:58たとえば昇順にソートしたいとき、降順にソート済みの入力でためしとけ
0331デフォルトの名無しさん
2005/08/15(月) 04:17:310332デフォルトの名無しさん
2005/08/15(月) 09:18:140333デフォルトの名無しさん
2005/08/15(月) 09:43:50ウソです。
0334デフォルトの名無しさん
2005/08/15(月) 09:56:35そうですか
レス乙です
ヤッパリ老舗のCが良いんですか?
0335デフォルトの名無しさん
2005/08/15(月) 10:00:070336デフォルトの名無しさん
2005/08/15(月) 10:03:390337デフォルトの名無しさん
2005/08/15(月) 10:06:28ググったらマジで有りましたオメガですか・・・
0338デフォルトの名無しさん
2005/08/15(月) 10:08:440339デフォルトの名無しさん
2005/08/15(月) 10:14:300340デフォルトの名無しさん
2005/08/15(月) 10:24:520341デフォルトの名無しさん
2005/08/15(月) 10:25:00頼むからJavaに移ってくれ…という香具師もいる
0342デフォルトの名無しさん
2005/08/15(月) 10:33:25なんでもかんでもCで作る時代は MS-DOS の時代に終った。
0343デフォルトの名無しさん
2005/08/15(月) 10:41:16付けてバンク切り替えで記憶容量は増やすことが出来たがそれでも数M
だった。CPUクロックも 16MHz, 33MHz, 66MHz など、MHz 単位で
3桁に満たなかった。そのような状態だったので当時あらゆる開発に
C言語を使うことは現実的な選択だったのだ。C言語であれば容量が小さく
高速なプログラムがアセンブラで組むよりはるかに楽に作れたからだ。
0344デフォルトの名無しさん
2005/08/15(月) 10:54:48初心者はC++・C#よりCから始めた方が良いのでしょうか
0345デフォルトの名無しさん
2005/08/15(月) 11:45:50なんでも質問すれとか初心者歓迎C/C++スレとかあるだろ。
0346デフォルトの名無しさん
2005/08/15(月) 11:53:28でも答えてくれて、あんがと
0347デフォルトの名無しさん
2005/08/15(月) 12:13:440348デフォルトの名無しさん
2005/08/15(月) 14:45:42DOSでCが使われるようになったってのも、90年代に入ってからで、
それ以前はアセンブラが多かったとおもう。
0349デフォルトの名無しさん
2005/08/15(月) 14:53:41TURBO PASCAL がかなり使われてた。その後はLattice C。
MSCが使われだしたのはWindows3.x以降、コンパイラがDPMIなしじゃまともに動かなかった。
0350デフォルトの名無しさん
2005/08/15(月) 15:00:49VZがasmだったのは確かだけど。
0351デフォルトの名無しさん
2005/08/15(月) 18:00:57すぐにTurboCをはじめ低価格Cコンパイラで、Cブームに。
0352デフォルトの名無しさん
2005/08/15(月) 18:44:40TURBO PASCALが一番使われてたのはCP/MからMS-DOS2.11あたりの時代。
フロッピーディスクベースでエディタ+高速コンパイルが売りだった。
まだN88DISK-BASICと張り合ってた。
MS-DOS3,1まではMicrosoftもDOSの外部コマンドの作成などにLattice-Cを使ってた。
MS-Cが登場し、TurboCなどの低価格Cブームが来るのはこの後。
0353デフォルトの名無しさん
2005/08/15(月) 19:06:570354デフォルトの名無しさん
2005/08/15(月) 19:23:36盂蘭盆会で地獄の釜が開いてるんだ、今日は大目に見てくれ。
0355デフォルトの名無しさん
2005/08/15(月) 19:50:43Cの初心者、宿題系に、軒並みバカがはりついてるみたいだからそこに帰れ。
0356デフォルトの名無しさん
2005/08/15(月) 21:00:56int main(void)
{
float fbuff,ftmp;
int i;
for (i = 5;i <= 8;i++){
ftmp = 0;
switch(i){
case 5:
ftmp = 10 * i;
break;
case 6:
ftmp = 1 * i;
break;
case 7:
ftmp = 0.1 * i;
break;
case 8:
ftmp = 0.01 * i;
break;
}
if (i == 0){
fbuff = 0;
}
fbuff = fbuff + ftmp;
printf("ftmp = %f\n",ftmp);
printf("fbuff = %f ftmp = %f\n",fbuff,ftmp);
}
return 0;
}
実行結果が下記になる理由を教えて下さい。どうして「0.000003」多くなるのでしょうか?
fbuff = 56.780003 ftmp = 0.080000
0357デフォルトの名無しさん
2005/08/15(月) 21:09:230358デフォルトの名無しさん
2005/08/15(月) 21:20:44一般的にfloatの精度は23ビット、即ち高々7桁しかない。
従って、有効なのはは56.78000までが関の山。
%fの代わりに%gを使うことで、誤差を余り見ないで済むかもしれない。
尤も、素直にdoubleを使っとけと言う話になるが。
0359356
2005/08/15(月) 21:22:01ありがとうございました。
0360デフォルトの名無しさん
2005/08/16(火) 10:54:11ファイル内のバイナリの数字の羅列に対して、CSV処理するコマンドを作りたいです。
コマンドの引数として、別のファイルの定数一覧からCSVの区切り文字数を受け取って
処理させるものを作りたいと思っていますが、どう作っていけばいいのか分かりません。
どんな感じで作る物なのか、ヒントかもしくは
参考にしやすいサンプルソースを見れるサイトがあったら教えていただきたいです。
0361デフォルトの名無しさん
2005/08/16(火) 12:12:25>ファイル内のバイナリの数字の羅列に対して、CSV処理するコマンドを作りたいです。
具体例をあげて何がしたいのか説明して。
0362デフォルトの名無しさん
2005/08/16(火) 12:16:53#include <stdio.h>
#defineN 1000 /* Nまでの素数を求める*/
#defineTRUE 1 /* 真:素数である */
#defineFALSE 0 /* 偽:素数でない */
charis_prime[ N+1 ]; /* 結果を格納する配列*/
int main( void )
{
int i, j;
/* 配列を初期化 */
for( i = 1; i <= N; i++ )
{
is_prime[ i ] = TRUE; /* 最初はすべて「素数」とする */
}
is_prime[ 1 ] = FALSE;
/* エラトステネスのふるい */
for( i = 2; i*i <= N; i++ )
if ( is_prime[ i ] )
for( j = i*2; j <= N; j += i )
is_prime[ j ] = FALSE; /* この倍数は「素数」でない */
/* 結果の出力 */
printf( "%dまでの素数は、\n", N );
for( i = 1; i <= N; i++ )
if ( is_prime[ i ] )
printf( "%d ", i );
return 0;
}
0363デフォルトの名無しさん
2005/08/16(火) 12:19:48>>1読め。ここは「C言語」自身に関して、だから
プログラムの組み方、等は激しくスレ違い。
0364デフォルトの名無しさん
2005/08/16(火) 12:22:16最初のfor文のi*iの意味、次のif文に論理演算子がないこと、次のfor文のi*2の意味
がわかりません。
そこがわからないので結果の出力のfor文とif文もわからないです。
ネットでも調べたり本でも調べたんですけど、他のソースは別の書き方をしていて
そのやり方なら理解できるのですが、このソースはちょっとわからないのでよろしくお願いします。
0365デフォルトの名無しさん
2005/08/16(火) 12:42:25>最初の for の i*i の意味
ある数の約数の片方は必ず平方根以下であるから。
逆に考えると、約数( = i )の2乗が合成数以下。
>次の if 文に論理演算子がない
C の条件判断は、0 以外で真。
つまり、#define された TRUE が入ってれば真になる。
そもそも C には本当の意味での bool 型がないから整数で代用してる。
>その次の for の i*2 の意味
さらにその次の行のコメントのとおり、
素数の *2 *3 *4 …を約数でないとするため、
i*2 i*3 i*4…の数列を作るための for 文。
こんな感じでどうよ?
0366デフォルトの名無しさん
2005/08/16(火) 13:14:29ある数の約数の片方は必ず平方根以下であるから。
逆に考えると、約数( = i )の2乗が合成数以下。
これはわかりました。
>、#define された TRUE が入ってれば真になる。
そもそも C には本当の意味での bool 型がないから整数で代用してる。
if文のis_prime[i]が整数で代用してるってことですか?ここら辺がちょっとわからないんですけど。
s_prime[i]は確かに整数・・・ああ、なんとなくわかってきた気がします。
s_prime[i]の要素の整数とif文の条件判断で使う1,0の整数と整数は二つありますね。
1,0の整数のことですね。ただif ( is_prime[ i ] ) の括弧の中がis_prime[ i ] !=0とかとなっていないのがわからないです。
何かの省略なんでしょうか?
>素数の *2 *3 *4 …を約数でないとするため、
i*2 i*3 i*4…の数列を作るための for 文。
i*2の2がわからないです。jがカウントアップしていきますよね。
そのときに2が変数でカウントアップしていかないと常に2の倍数になってしまうと思うのですが、
すぐ答えていただきありがとうございます。できればもうちょっとだけ上記のヒントを下さい。
0367デフォルトの名無しさん
2005/08/16(火) 13:50:06つ[if文の定義]
0368365
2005/08/16(火) 14:14:47>if ( is_prime[ i ] ) の括弧の中がis_prime[ i ] !=0とかとなっていないのがわからないです。
if 文は 真/偽 を判断する、と考えてるとそういう思考に陥ります。
まず定義として if 文は、条件として与えるものは整数で、「0 か否か」を「偽 or 真」として判断します。
そして、!= とか == などの演算子は、0 かそれ以外の値をとる整数値になります。
よって、 たとえば (12 == 13) という条件文は「偽」ではなく 0 という "整数" をとります。
>そのときに2が変数でカウントアップしていかないと常に2の倍数になってしまうと思う
2が変数ってどういうことでしょうか?
for( j = i*2; j <= N; j += i )
i*2 は最初の j の値で、二週目以降 i ずつ増えます。
つまり、i*2、i*2+i、i*2+i+i、…となるわけで、i*2 i*3 i*4…となるわけです。
0369デフォルトの名無しさん
2005/08/16(火) 15:27:07いつ開放されるのでしょうか。
関数の中で新たにヒープに割り当てて、そのアドレスを返したりしているのだったら、
あとでfreeなどで開放してやらないとマズイと思うのですが、
標準関数のlocaltimeなんかはそんなことしませんし。
その辺の解説してもらえるとありがたいです。
0370デフォルトの名無しさん
2005/08/16(火) 15:48:410371デフォルトの名無しさん
2005/08/16(火) 15:53:48libc の localtime は、static な構造体へのポインタを返したり、
内部で自動確保&終了時に自動破棄しています。
そのため、受け取ったポインタを明示的に破棄する必要はありません。
ただし、前者はマルチスレッドの時に問題を引き起こす可能性がある
( 排他処理すればいいけどね ) ので、あまりおすすめはされない手法です。
そんなわけで生存期間は実装依存になるため、
あまり離れると移植性の点で問題になるかもしれません。
すぐに手元のローカル変数などにコピーするのがベターです。
ちなみに自分で関数を書く場合には、
struct tm *localtime_r(const time_t *timep, struct tm *result);
この result 引数のように、バッファを渡してもらう形にすると
余計なことを考えなくて済むのでベストです。
0372369
2005/08/16(火) 16:09:02回答ありがとう。
書き方が悪くてすみません。
localtimeは開放しない関数の例として挙げました。
一般に内部しようの分からない関数だったり、自分で作ったりしたときの当該問題における
寿命についての質問です。
0373369
2005/08/16(火) 16:16:29あらたな回答ありがと。
localtimeの仕様は了解しました。
さっきの質問、書き方が悪かったのですが、自分で作った関数内でメモリを割り当てて
そのポインタを返した場合はどうのようにするのが、適切なんでしょうか。
例えば、調べてて、見つけたのですが下記のようなプログラムは非常にマズイと思います。
ttp://c-production.com/contents/c/sec11.html#15
0374デフォルトの名無しさん
2005/08/16(火) 16:30:49その例がマズイと思えるなら特に言及する必要はなさそうね。
>>371 の最後に書いてあるように、特に何か事情がない限りは
バッファは呼び出し側が用意するのが一番いいかな。
new で確保して free() で解放するようなバグをなくすためにも。
どうしても関数内でメモリを確保しなきゃならないときは、
malloc で確保したら free、new で確保したら delete・・・
というルールを忠実に守ればOK。
0375デフォルトの名無しさん
2005/08/16(火) 16:31:14fopen()とfclose()みたいに、リソースを確保する関数と開放する関数を作って、
必ず両方呼び出してくださいとすればいいと思う。
(直接「free()を呼び出して下さい」でもいいと思うけど)
そのリンク先は、引数は値渡しなんだから、リターンも値で返せばいいのにな。
0376デフォルトの名無しさん
2005/08/16(火) 16:41:01よくわかりました。
そのルールを徹底します。
丁寧な解説ありがとうございました。
0377デフォルトの名無しさん
2005/08/16(火) 16:52:11夏厨で申し訳ないんですが・・・orz
0378デフォルトの名無しさん
2005/08/16(火) 16:57:37変数 st のスコープが関数 p_output() 内に限られてるため、
st のメモリ領域は関数を抜けた時点で無効になる。
だから main() でこのポインタの先にアクセスしちゃだめ。
0379デフォルトの名無しさん
2005/08/16(火) 17:00:22#include<stdio.h>
struct st_samp{
int x;
int y;
int z;
};
struct st_samp *p_output(struct st_samp st);
int main()
{
struct st_samp s1={2,3,0}, s2={4,5,0};
struct st_samp *p_st;
p_st = p_output(s1);
p_output(s2);
printf("%d * %d = %d\n",p_st->x,p_st->y,p_st->z);
return 0;
}
struct st_samp *p_output(struct st_samp st)
{
st.z = st.x * st.y;
return &st;
}
0380デフォルトの名無しさん
2005/08/16(火) 19:01:35a_positionの位置から、配列の後>前へとhoge処理を行いたいのですが
これをfor文だけで綺麗に記述することは可能でしょうか
if( a_position == 0 )
hoge( *array );
else
for( int i = a_position; i >= 0; --i ) hoge( array[i] );
0381デフォルトの名無しさん
2005/08/16(火) 19:02:45これで何が問題?
0382デフォルトの名無しさん
2005/08/16(火) 19:09:300383380
2005/08/16(火) 19:13:05申し訳ないです、仰るとおりっす
これと間違えていました…
if( a_position == 0 )
hoge( *array );
else
for( unsigned long i = a_position; i >= 0; --i ) hoge( array[i] );
0385デフォルトの名無しさん
2005/08/16(火) 19:21:06for( unsigned long i = a_position+1;i--;)hoge( array[i] );
0386380
2005/08/16(火) 19:27:45unsigned long a_position = 0;
do{
hoge( array[i] );
}while( array_pos-- != 0 );
と、思ったら>>385さんのスマートなレスが!
やっぱり聞いて良かった、ありがとうございました。
ループは前置って刷り込みが駄目でした orz
0387デフォルトの名無しさん
2005/08/16(火) 19:29:42do{
hoge( array[a_position] );
}while( a_position-- != 0 );
もう寝よう…
0388デフォルトの名無しさん
2005/08/16(火) 20:48:18含めて意味ないしすべてスレ違いだと思う。
>>385 境界条件 a_position = ULONG_MAX のふるまいは無視なのか?
0389360
2005/08/16(火) 21:01:21具体的に言うとファイル内に
「1234567890」
等の数字(バイナリ)が入っていて、
また別のファイルに
「3,4,3」
のように数字が入っていて、
これを
「123,4567,890」
に変える処理でう。
>>Cでプログラムを作るのですが、
Cの仕様に関する質問じゃないとダメでしょうか?
0390360
2005/08/16(火) 21:02:30下段のは「>>363」です。
0391385
2005/08/16(火) 21:08:29a_position = ULONG_MAX のときは、
array の配列長が ULONG_MAX より大きいということになるから無視ということで。
無視してもそんな馬鹿でかい配列は滅多に無いですし、実用上は問題ないでしょう。
一応それも回避するなら >>386(の間違いを直したやつ)で
unsigned long i = a_position;
do hoge(array[i]);while(i-- != 0);
0392デフォルトの名無しさん
2005/08/16(火) 21:09:02バイナリを連呼しているが、「バイナリ」と「区切り文字数」という二つの単語は矛盾しているよ。
ファイルには単に十進数字文字が入っているだけだろ
0393360
2005/08/16(火) 21:11:58すみません、ちょっと抜けてました。
元のファイルはバイナリで、
それをテキストファイルに、特定の箇所に「,」を入れて出力する感じになります。
0394デフォルトの名無しさん
2005/08/16(火) 21:13:01そのバイナリファイルには何が入ってるんだ?入ってるのは文字では
ないわけだからカンマ区切りも何もないわけだが。
0395デフォルトの名無しさん
2005/08/16(火) 21:18:23このスレって黙ってC99前提?
0396デフォルトの名無しさん
2005/08/16(火) 21:19:23どっちでもいいんじゃね?
0397360=389=393
2005/08/16(火) 21:21:28見づらくなってしまって申し訳ありません。
書き込みが>>360と>>389と>>393とに分かれてしまっています。
>>389の書き込みで返事になるでしょうか?
0398デフォルトの名無しさん
2005/08/16(火) 21:23:12なってない。数"字"とバイナリデータを一緒にするな。
0399デフォルトの名無しさん
2005/08/16(火) 21:24:51ソース丸投げだか初心者向きかに逝け、と言われとるんだよ。
質問さえきちんとできてないだろ? ヒント程度では手も足も出ないだろ?
>>394 マヌケは質問者の補助にもならないから黙ってろ。
0400360=389=393
2005/08/16(火) 21:28:37初心者向き、もしくはソース丸投げスレを探してみます。
お騒がせして申し訳ありませんでした。
0401デフォルトの名無しさん
2005/08/16(火) 21:58:23要するにバイナリダンプだろ。単にスペースがカンマになっただけで
[offset]: +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F 0123456789ABCDEF
----------------------------------------------------------------------------
00000000: 4D,5A,90,00,03,00,00,00,04,00,00,00,FF,FF,00,00 MZ・..........
00000010: B8,00,00,00,00,00,00,00,40,00,00,00,00,00,00,00 ク.......@.......
00000020: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 ................
0402360
2005/08/16(火) 22:55:23フォローしていただいてありがたい所ですが、自分でもよく分かりません。
先日見た設定書では、
ファイルの中の先頭から**バイトにAの情報、次の**バイトにBの情報、・・・
というようなことが書かれていたと記憶しています。
また、「ダンプ」という言葉もチラッと耳にした覚えがあります。
教えを請うには色々と情報が足りなかったようです。
0403デフォルトの名無しさん
2005/08/16(火) 23:04:48>そして、!= とか == などの演算子は、0 かそれ以外の値をとる整数値になります。
>よって、 たとえば (12 == 13) という条件文は「偽」ではなく 0 という "整数" をとります。
比較演算子は0か1を返してくるよ。
a = ( x > 0 ) ? ( 1 ) : ( 0 );
は
a = x > 0;
と同じ。
見辛いからあまりお勧めはしないけど。
0404デフォルトの名無しさん
2005/08/16(火) 23:17:29...
0405デフォルトの名無しさん
2005/08/16(火) 23:19:190406デフォルトの名無しさん
2005/08/16(火) 23:26:15?
比較演算子は0か1しか返さないって言いたいだけだよ。
0かそれ以外の整数を返すって>>368に書いてあるじゃん。
0407デフォルトの名無しさん
2005/08/16(火) 23:39:34ならば次の順序で書くべきだな。
a = x > 0;
は
a = ( x > 0 ) ? ( 1 ) : ( 0 );
と同じ。
0408デフォルトの名無しさん
2005/08/16(火) 23:43:19結局何が言いたいの?
0409デフォルトの名無しさん
2005/08/16(火) 23:43:40変数の初期化について質問です
unsigned int x=0;
x++;
こんなプログラムを書いたとすると
延々 xが0になっちゃいますよね
一回だけ初期化して 二回目は無視みたいなことは簡単にできないのでしょうか?
0410デフォルトの名無しさん
2005/08/16(火) 23:46:39unsigned int x=0;
x++;
こんなプログラムを書くとx==1になるが?
0411デフォルトの名無しさん
2005/08/16(火) 23:46:45しかしわかりにくい日本語と情報量だな、>>409糞ガキ
0412デフォルトの名無しさん
2005/08/16(火) 23:57:570と-1の可能性もあると思ったけど
0413デフォルトの名無しさん
2005/08/16(火) 23:59:48つ[static]
0414デフォルトの名無しさん
2005/08/17(水) 00:00:48>フォローしていただいてありがたい所ですが、自分でもよく分かりません。
まともに質問できないどころか、設計、仕様さえ理解してなかったわけね。
いいかげん腹たってくるな。ここでそんな告白しないで、挨拶して誘導して、
あっちでちゃんととりさげるのが筋じゃあるまいか? (あやまれとまで言わんが)
ttp://pc8.2ch.net/test/read.cgi/tech/1121644782/433
>教えを請うには色々と情報が足りなかったようです。
まあ、仕事がらみなら会社ん中でちゃんと解決しろよ。
もともとほんとにこの程度の話なら、基礎応用に過ぎないので、
解説やらヒントも何も、アドバイスしようが無いほどなので。
0415デフォルトの名無しさん
2005/08/17(水) 00:06:54ISO/IEC 9899:1999の6.5.8 -6と6.5.9 -3によれば、Relational operatorsも
Equality operatorsも共に結果は0と1で、その型はintだそうな。
0416デフォルトの名無しさん
2005/08/17(水) 00:35:53他に アルゴリズムの本買えば
C言語のプログラムは作れる様になるの?
0417デフォルトの名無しさん
2005/08/17(水) 00:37:34それでやったけど 延々1のままです
0418デフォルトの名無しさん
2005/08/17(水) 00:42:050419デフォルトの名無しさん
2005/08/17(水) 00:45:380420デフォルトの名無しさん
2005/08/17(水) 00:47:43{
static unsigned int c=0;
c++;
Printf("%d",c);
}
省略するとこんな感じですかね
0421デフォルトの名無しさん
2005/08/17(水) 00:52:13まさか起動する度に数字を変化させたいのか?
だったらファイルに書き出すしかない。
0422デフォルトの名無しさん
2005/08/17(水) 00:53:04市ね>>420
市ね>>420
市ね>>420
氏ね!>420
0423デフォルトの名無しさん
2005/08/17(水) 00:53:260424デフォルトの名無しさん
2005/08/17(水) 00:56:15何がしたいのかハッキリ書かんと
どうしようもないよ
0425デフォルトの名無しさん
2005/08/17(水) 00:58:030426デフォルトの名無しさん
2005/08/17(水) 00:58:05あ いけました
0427デフォルトの名無しさん
2005/08/17(水) 01:02:04なんか、もやもやする。
0428デフォルトの名無しさん
2005/08/17(水) 01:13:28と思ったらいけてないかもorz
pspの自作プログラムのソースをいじってるところなんです
0429デフォルトの名無しさん
2005/08/17(水) 01:37:21{
static unsigned int c=0;
c++;
Printf("%d",c);
main(aaa,aaa)
}
。
0430デフォルトの名無しさん
2005/08/17(水) 01:45:21えぇっと、何がしたいんですかぇ?
先ず、何でもいいからC言語の本買ってきて
読みましょう。
0431デフォルトの名無しさん
2005/08/17(水) 01:48:18メチャクチャです。
0433デフォルトの名無しさん
2005/08/17(水) 02:01:11>>409が再帰を理解しているとは思えんし。
0434デフォルトの名無しさん
2005/08/17(水) 02:03:33そっそうですか。
でも、先ず本読んでください。
0435デフォルトの名無しさん
2005/08/17(水) 03:24:420436ぼるじょあ ◆yBEncckFOU
2005/08/17(水) 09:20:260439デフォルトの名無しさん
2005/08/17(水) 18:00:21固定文字列をソースの中に持たせる時、
1) #define FIXED_STRING "hogehoge"
2) static const char* FIXED_STRING[] = "hogehoge";
と2種類の方法がありますが、両者に違いはあるのでしょうか?
違うのだとしたら、どういう場合で使い分ければよいのでしょうか?
「こういうときはこうする」、「俺はこうしてる」等
意見があったら教えてください。
0440デフォルトの名無しさん
2005/08/17(水) 18:07:53前者は後者より古い流儀。
後者は前者よりプログラムサイズが小さくなるけど、
それ以外の違いは開発時に感じた事はないな。
0441デフォルトの名無しさん
2005/08/17(水) 18:09:48static const char* FIXED_STRING[] = "hogehoge";
これは構文ネラーになるはず
0442デフォルトの名無しさん
2005/08/17(水) 18:22:15static const char FIXED_STRING[] = "hogehoge";
か
static const char* FIXED_STRING = "hogehoge";
ですね。一般的にマクロはデバッグしにくくなりますね。今回の場合は
関係ないかもしれませんが。
0443デフォルトの名無しさん
2005/08/17(水) 18:31:16複数の関数内で利用すると実体が複数作られる。
後者は長さが得られないが実体は複数作られない(かもしれない)。
Cの場合、マクロで充分な気もするのだが。
0444デフォルトの名無しさん
2005/08/17(水) 19:54:15配列サイズの指定で使えない。
0445デフォルトの名無しさん
2005/08/17(水) 21:20:29マクロならできる
0446デフォルトの名無しさん
2005/08/17(水) 21:26:39イヤな使い方だw
0447デフォルトの名無しさん
NGNGstaticにしてるってことは、インクルードファイルにでも書いておいて、
それぞれのファイルで、インクルードするような使い方を想定してるっぽいから、
ファイルサイズは小さくはならないと思う。
0448デフォルトの名無しさん
2005/08/17(水) 22:30:540449デフォルトの名無しさん
2005/08/17(水) 22:37:130450デフォルトの名無しさん
2005/08/18(木) 00:16:18#define INI_FILE_DIR "../config"
#define INI_FILE_NAME "foo.ini"
fopen(INI_FILE_DIR "/" INI_FILE_NAME, "r");
とか?
別にいいじゃん。
0451デフォルトの名無しさん
2005/08/18(木) 00:36:05お前は俺か!>>445じゃないけど
0452デフォルトの名無しさん
2005/08/18(木) 00:54:110453デフォルトの名無しさん
2005/08/18(木) 00:55:53使えても便利と思ったことはない
0454デフォルトの名無しさん
2005/08/18(木) 01:10:45ただ、セミコロンを打たなくていいのは結構うれしい。
0455デフォルトの名無しさん
2005/08/18(木) 01:25:330456デフォルトの名無しさん
2005/08/18(木) 03:10:20#include<stdio.h>
#define num=10;
int i;
double data[num]={ 173.8,168.2,180.3,166.0,189.7,167.4,159.8,170.5,167.5,167.4};
int main(void)
{
for(i=1;i<=num;i++){
int j,max=i;
for(j=i+1;j<=num;j++) /*最大の要素の場所を捜す*/
if (data[max]<data[j]) max=j;
data[i]=data[max];
data[max]=data[i]; /*入れ換え*/
}
for(i=1;i<=num;i++) printf("%7.1f ",data[i]);
return 0;
}
0457デフォルトの名無しさん
2005/08/18(木) 03:22:04{
int i,j,l;
for(i=0;i<num;i++){
for(j=i+1;j<num;j++){
if(data[i]<data[j]){
l=data[i];data[i]=data[j];data[j]=l;
}
}
}
for(i=0;i<num;i++) printf("%7.1f ",data[i]);
return 0;
}
0458デフォルトの名無しさん
2005/08/18(木) 03:51:36スレ違い。
宿題なら宿題スレへ、そうでないなら初心者スレ辺りへ。
0459デフォルトの名無しさん
2005/08/19(金) 01:51:210461デフォルトの名無しさん
2005/08/19(金) 09:54:30それぞれの構造体がもう一方の構造体を要素として持ちたい時、
どうやればいいんでしょう?下のだとニワトリと卵になってしまうし・・。
----- aaa.h -----
#include "bbb.h"
typedef struct {
BBB *b;
}AAA;
---- bbb.h ----
#include "aaa.h"
typedef struct {
AAA *a;
}BBB;
0462デフォルトの名無しさん
2005/08/19(金) 10:00:40typedef struct B B;
struct A { B* b; };
struct B { A* a; };
0463デフォルトの名無しさん
2005/08/19(金) 10:06:07別々のファイルで宣言すること自体がおかしいってこと?
0464デフォルトの名無しさん
2005/08/19(金) 10:53:56-----t0.h
#ifndef t0_h
#define t0_h
#include "t1.h"
struct a {
struct b *b;
};
typedef struct a a;
#endif
-----t1.h
#ifndef t1_h
#define t1_h
#include "t0.h"
struct b {
struct a *a;
};
typedef struct b b;
#endif
0465デフォルトの名無しさん
2005/08/19(金) 12:28:37入力の中でもっとも大きな数字を表示しなさい。
※入力桁数のエラーについて対処する事
という課題が出されたのですが、入力桁数のエラーがよく分かりません。
誰か教えていただけないでしょうか?
0466デフォルトの名無しさん
2005/08/19(金) 12:46:52どういうエラーなのかが分からないとなんとも。
0467デフォルトの名無しさん
2005/08/19(金) 12:53:11ありがとん。できました。
0468465
2005/08/19(金) 12:55:12先ほどのが課題文の全文なので私にもよく分かっていないのですが、
おそらくは型が扱う数字を超えて入力した場合、
たとえば、int型なら32,767より大きい数字を入力した場合に認識されないことについて対処する
ということだと思います。
0469デフォルトの名無しさん
2005/08/19(金) 13:26:10そう考えた、ということでコード組めばいいんじゃない?
あと、intの場合は環境によってサイズが違うので注意。
・sizeofでバイト数をチェックして上限を計算
・今の環境に合わせて、とりあえず決め打ち
など、方法はいろいろあるので試してみ。
(独り言)
学校の課題ってのは結果をただ提出するだけじゃないんだよ。
不明点、疑問点があったら提出前に質問しに行ってもいいんだし。
全く分からない、何がわからないのかわからない」ってのは論外だけど。
0471デフォルトの名無しさん
2005/08/19(金) 13:40:160472デフォルトの名無しさん
2005/08/19(金) 13:57:42まあ、宿題○投げじゃないから
いいんでないの?
0473465
2005/08/19(金) 14:00:55ですから、宿題スレで質問するのも気が引けてしまいまして(苦笑)
0474デフォルトの名無しさん
2005/08/19(金) 14:15:39double c;
a = 10;
b = 1000;
c = a / b ;
printf("c = %f",c);
結果 c = 0.000000となってしまうのはなぜでしょうか?
0475デフォルトの名無しさん
2005/08/19(金) 14:18:490476デフォルトの名無しさん
2005/08/19(金) 14:30:09ありがとうございました。
もうひとつすみません。
int a,b,d;
double c;
a = 5
b = 5;
d = 1000;
c = (a + b) /d ;
printf("c = %f",c);
この結果がc = 0.000000となりますが
int a,b,d;
double c;
a = 5
b = 5;
d = 1000;
c = a + b ;
c = c / d;
printf("c = %f",c);
この結果がc = 0.01となるのはどうしてでしょうか?
すみませんが教えてください。
0477デフォルトの名無しさん
NGNG> ・sizeofでバイト数をチェックして上限を計算
これってintの最大値のことを言ってるの?
だったらINT_MAXを使うのが定跡だと思うけど。
0478デフォルトの名無しさん
2005/08/19(金) 14:31:05Cでファイルからデータを読み出すとき、「1行(次の\nまで)を読み込む」ってどうしてます?
fgetc で1文字ずつ読み込んで \n かどうか判定して・・・ってやるしかないでしょうか。
まさか fscanf とか使うのもあれだし。
スクリプトファイルを読み込むときなどに使います。
0479デフォルトの名無しさん
2005/08/19(金) 14:33:58fgets関数っていうのがありますよ。
0480デフォルトの名無しさん
2005/08/19(金) 14:35:18fgets()
0481デフォルトの名無しさん
2005/08/19(金) 14:36:18fgets 調べてみました
・・・今までの苦労は・・・orz ありがとございました。
0482デフォルトの名無しさん
NGNG一行はかならず*Kバイト以下とか、そういう仕様で割り切れば、fgets()で簡単に書けると思う。
0483デフォルトの名無しさん
2005/08/19(金) 14:37:28>c = (a+b)/d;
(a+b)もdもint型だから、int型の(a+b)/dがdouble型に型変換されてcに代入される。
>c = c / d;
cがdouble型だからdがdouble型に暗黙的に型変換されてdouble型のc/dが計算される。
その結果がcに代入される。
もう少し型について勉強しとけ。
0484デフォルトの名無しさん
2005/08/19(金) 14:38:18ありがとうございました。
0485デフォルトの名無しさん
2005/08/19(金) 14:38:26前者の場合、
c = (a + b) /d の右辺はすべて整数値
後者の場合、
c = a + b ;
の時点だと右辺は整数値だが
c = c / d;
ではcがdoubleのため実数値となる
前者の場合でも、aかbをdoubleでキャストすれば
後者と同じ結果になる
0486デフォルトの名無しさん
2005/08/19(金) 14:40:44本当にすいません。ありがとうございました。
0487デフォルトの名無しさん
2005/08/19(金) 20:08:24を得るのってどうすればいいのですか?
0488デフォルトの名無しさん
2005/08/19(金) 20:13:49VC なら _fileno 関数が。非標準ね。
stdio.h を読んで構造体メンバから引張ってくるとか。
互換性に問題あるけど。
0489デフォルトの名無しさん
2005/08/19(金) 20:39:40Unix 系なら int fileno(FILE *stream) てなものが...
0490デフォルトの名無しさん
2005/08/19(金) 22:14:49atoiとかstrgetvalue()とか使えないもんかな
0491デフォルトの名無しさん
2005/08/19(金) 23:04:42一体全体何を言っているのやら。
0492デフォルトの名無しさん
2005/08/19(金) 23:24:55何か良い参考書とか
サンプル(オプションなどのコメントアウト付)とかないですかね?
0493デフォルトの名無しさん
2005/08/19(金) 23:28:27ttp://www.ecoop.net/coop/translated/GNUMake3.77/make_toc.jp.html
ttp://www-or.amp.i.kyoto-u.ac.jp/algo-eng/db/makefile.html
俺はこの二つでなんとなかった。あくまで俺の場合な。
0494デフォルトの名無しさん
2005/08/19(金) 23:28:58スレ違い。
Unixプログラミングスレ、makeスレ、書籍スレなどへどうぞ。
0495464
2005/08/20(土) 01:40:36あんたに宿題
>>464 のコードから #include 行を削除しても問題がない事を確認し,
なぜ #include 行がなくても問題ないのか述べよ.
0496デフォルトの名無しさん
2005/08/20(土) 03:05:41typedef struct AAA_{
struct BBB_ *b;
}AAA;
---- bbb.h ----
typedef struct BBB_{
struct AAA_ *a;
}BBB
ってかんじ?
ちなみにstructはtypedefしない方がぱっと見分かりやすいぞ
0497デフォルトの名無しさん
2005/08/20(土) 10:58:01(w)sprintfてのは、int→char変換の為に、て意味でも存在してるぞ
char a;
int b;
(w)sprintf(&a,"%d",b);
0498デフォルトの名無しさん
2005/08/20(土) 11:01:14'\0'の分を用意していないからだめだろ。snprintf/swprintf
0499デフォルトの名無しさん
2005/08/20(土) 15:41:34is_prime = 1
for(i=2; i<=num/2; i=i+1)
if((num%i)==0) is_prime = 0;
これはどうゆう計算が行われてますか?
教えて下さい。。。
0500デフォルトの名無しさん
2005/08/20(土) 15:56:24約数があるかどうか調べてる
0501デフォルトの名無しさん
2005/08/20(土) 16:18:12誰が書いたんだ?
i=i+1じゃなくてi++でいいのに
0502デフォルトの名無しさん
2005/08/20(土) 16:32:49is_primeがフラグになってる。('0'なら非素数、'1'なら素数)
2<=i<=num/2の範囲でiをインクリメントして、逐次numをiで割り切れるか調べる。
ちなみに、
・iの初期値が2なのは、1で割るのを避けるため。
・ループ継続条件がi<=num/2なのは、余計なループをさせないため
まあ一回でも割り切れたらis_primeに'1'が入るから、
約数を調べたいだけなら
if((num%i)==0) {
is_prime = 0;
break;
}
の方がいいと思う
0503デフォルトの名無しさん
2005/08/20(土) 17:28:33昔々 for (i = 0; i < strlen(s); i++) というのを書いたやつが居て衝撃を受けたことのある俺だが。
0504デフォルトの名無しさん
2005/08/20(土) 17:35:42独り言なら公園の便所の中でやってくれ
0505デフォルトの名無しさん
2005/08/20(土) 18:25:230506デフォルトの名無しさん
NGNGVS2003のVC++で確認したら、ループの外で num / 2の処理をしてるみたい。
0508デフォルトの名無しさん
2005/08/21(日) 00:23:54本当に基本的なことなのですが。
staticで関数外に構造体などの領域を宣言しても
いきなりその構造体が使える(=メモリが割り当てられる)
わけではないのでしょうか?
そこにアクセスしようとすると、
アクセスバイオレーションが発生します。。。。
0509デフォルトの名無しさん
2005/08/21(日) 00:30:37いいえ、使えます
0510デフォルトの名無しさん
2005/08/21(日) 00:42:51正しいコードなら>>509のとおりなのであなたのコードに問題があるとしか考えられません。
というわけでソースコードを晒してみて下さい。
0511508
2005/08/21(日) 00:44:02例えば、staticで構造体を宣言します。
typedef struct aa
{
int i;
char *p;
}AA;
static宣言された領域は0初期化されてしまいますので、
pももちろん0になっています。
pはアドレスしか保存されませんよね。
ということは、
どこかにpの実体用メモリ領域が必要になってくるってことなんでしょうか?
0512508
2005/08/21(日) 00:53:23typedef struct a{
unsigned long aa;
int bb;
}addr;
typedef struct info{
int id;
a *addr;
char *host;
}table_info;
#define MAX_SIZE 2
static table_info table[MAX_SIZE];
int main(int argc, char* argv[])
{int i;
for(i=0;i<MAX_SIZE;i++)
{
table[i].id=-1;
table[i].addr->aa=0;←ここでエラー
table[i].host=NULL;
}
return 0;
}
staticで0クリアされてるので、0番地にアクセスしようとして
エラーになってるのはわかったのですが
これを回避する方法がわかりません。。。。
よろしくおねがいいたします!
0513デフォルトの名無しさん
2005/08/21(日) 00:55:520514508
2005/08/21(日) 00:59:52上の構造体のtypedefしたaddrは必要ありません。
2番目の構造体で、構造体のアドレスを使いたいのです。
0515デフォルトの名無しさん
2005/08/21(日) 00:59:57int id;
a addr;
char *host;
}table_info;
0516デフォルトの名無しさん
2005/08/21(日) 01:01:43その構造体は何の構造体? struct infoとライフサイクルに違いはある?
何対何の関係?
0517508
2005/08/21(日) 01:11:19上の構造体は、本来なら既に別ファイルで定義されているものなのです。
それを呼び出す形で、2番目の構造体で使いたいとおもっています。
0518デフォルトの名無しさん
2005/08/21(日) 01:12:040519デフォルトの名無しさん
2005/08/21(日) 01:13:35でいいじゃん。何が不満よ。
0520デフォルトの名無しさん
2005/08/21(日) 01:14:470521デフォルトの名無しさん
2005/08/21(日) 01:20:110522508
2005/08/21(日) 01:20:34そうですね。ポインタを理解してないのが敗因のようです。
勉強してきます。
大変ありがとうございました!
0523515
2005/08/21(日) 01:21:19int id;
addr a;
char *host;
}table_info;
こうだな。
0524デフォルトの名無しさん
2005/08/21(日) 01:25:49どういう意味なんだろ???
0525デフォルトの名無しさん
2005/08/21(日) 01:29:42ただこいつの理解レベルじゃ、定義と宣言のつかいわけも怪しいから、よくわからん。
0526デフォルトの名無しさん
2005/08/21(日) 01:57:51fp++がマズいのでしょうか?
for(i=0;feof(fp)==0;i++){
fp++;
}
0527デフォルトの名無しさん
2005/08/21(日) 01:58:34そうです。FILE*をインクリメントしてどうする。
0528デフォルトの名無しさん
2005/08/21(日) 02:00:02あ、考えてみるとポインタだったんですね。
つまり*fp++とすればいいのですか?
0529デフォルトの名無しさん
2005/08/21(日) 02:01:43そうです。
0530デフォルトの名無しさん
2005/08/21(日) 02:02:26ファイル内の位置は、FILE構造体のメンバに隠されている。
移動させたかったら、FILE*を引数に取る、目的に見合ったを関数を使え
0531デフォルトの名無しさん
2005/08/21(日) 02:05:17さらに構造体だったんですね。。。勉強になりました。
こんな感じですか?
fseek(fp,1,SEEK_CUR)
0532531
2005/08/21(日) 02:13:370533デフォルトの名無しさん
2005/08/21(日) 02:14:030534デフォルトの名無しさん
2005/08/21(日) 02:14:29それ以前にファイルサイズの取得は標準の範囲内では出来ない。
環境依存の方法を使うしかない。
0535デフォルトの名無しさん
2005/08/21(日) 02:15:110536531
2005/08/21(日) 02:20:54ループ内にprintf("%d ",i);と入れて確認しましたが、無限ループになってるようです。
環境依存だったんですね。。スレ違いすいませんでした。。。
代替策とかないですかね?
0537デフォルトの名無しさん
2005/08/21(日) 02:24:39#include <stdio.h>
int filelen(const char *filename, const char *mode)
{
int len = 0;
FILE *fp = fopen(filename, mode);
if( fp == NULL ) return -1;
while(fgetc(fp) != EOF ) ++len;
return len;
}
ちなみに>>531が思い通りにうごかないのは環境依存云々ではなく、fseekの意味を取り違えている。
0538デフォルトの名無しさん
2005/08/21(日) 02:30:32ありがとうございます。
ですが上手く動作せず、デタラメな数字がでてしまいます。
バイナリモードだからでしょうか?
それとも私の組み込み方が悪いのかもしれませんが。。。
>fseekの意味を取り違えている。
教えていただけませんか?
0539デフォルトの名無しさん
2005/08/21(日) 02:34:19feek(fp, 0L, SEEK_END);
size=ftell(fp);
いや、おれはいつもstatで取得するけど
0541デフォルトの名無しさん
2005/08/21(日) 07:31:13複数のファイルにコードを書く場合はどのようなことをするのですか?
また、リンクとはどういったいみなのでしょうか?
0542デフォルトの名無しさん
2005/08/21(日) 07:32:56まず本嫁
0543デフォルトの名無しさん
2005/08/21(日) 07:38:110544デフォルトの名無しさん
2005/08/21(日) 07:40:41ってかくぐれよそんぐらいorz
ttp://okuyama.mt.tama.hosei.ac.jp/unix/C/slide79-1.html
0545デフォルトの名無しさん
2005/08/21(日) 07:43:38#include "sub1.c"
#include "sub2.c"
とか書けばOK
0546デフォルトの名無しさん
2005/08/21(日) 08:30:17俺は普通の入門書読んだが、一通りは書いてあったぞ
まぁ今読んでるK&Rに書いてあるのには及ばないが
0547デフォルトの名無しさん
2005/08/21(日) 13:05:33モジュール化した方がいいと思うが・・・
0548デフォルトの名無しさん
2005/08/21(日) 13:08:35pthread-winのソースみたいになっとるな
0549デフォルトの名無しさん
2005/08/21(日) 13:10:17.c を include するのはあまりおすすめな方法じゃないな。
それでも可能だけど一つのファイルを修正しただけでも
全てのコンパイルをしなければならなくなって効率が悪い。
普通は型やプロトタイプ宣言や#defineをヘッダファイルに
まとめておいてそれを使うソースでincludeする。
0550データボックス
2005/08/21(日) 15:36:210551デフォルトの名無しさん
2005/08/21(日) 16:35:21多分ヘッダファイルを書けないんだろう。
0552デフォルトの名無しさん
2005/08/21(日) 16:42:080553デフォルトの名無しさん
2005/08/21(日) 16:44:440554データボックス
2005/08/21(日) 17:25:00Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
main_kansu_file.c:
sonota_cfile.c:
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
0555デフォルトの名無しさん
2005/08/21(日) 17:37:13をとくプログラム
xとrをきくかたち
教えてください(>Д<)
0556デフォルトの名無しさん
2005/08/21(日) 17:41:210557デフォルトの名無しさん
2005/08/21(日) 17:48:46それはまず式を簡単にしてからやれよ
そのまま計算するバカはいないよ
プログラミングより先に数学を勉強しなさい
0558デフォルトの名無しさん
2005/08/21(日) 18:05:200559デフォルトの名無しさん
2005/08/21(日) 19:34:27.o, .lo, .la, .am, .in
というファイルがあるのですがこれはなんでしょうか?
0560デフォルトの名無しさん
2005/08/21(日) 19:38:17ここではプログラムの組み方を質問するのには不適当です。
やたらレスしたがって >>1を理解したくない、駄弁るだけ、などのかたがたは、
http://pc8.2ch.net/test/read.cgi/tech/1124511889/
へ移動されるのが適当だと思われます。
0561デフォルトの名無しさん
2005/08/21(日) 19:50:110562デフォルトの名無しさん
2005/08/21(日) 19:53:14つ ttp://pc8.2ch.net/test/read.cgi/tech/1124511889/
0563デフォルトの名無しさん
2005/08/21(日) 20:00:550564デフォルトの名無しさん
2005/08/21(日) 20:04:26階乗は自分で書け
累乗はpow
0565デフォルトの名無しさん
2005/08/21(日) 20:09:140566デフォルトの名無しさん
2005/08/21(日) 20:23:17脳内コンパイル注意
#include <stdio.h>
#include <math.h>
int fact(int n)
{
int ret=1,i;
for(i=2;i<=n;i++)ret*=i;
return ret;
}
double func(double x,int r)
{
double ret=1.f,t;
int i;
for(i=1;i<=r;i++)
{
t=pow(x,i);
t/=(double)fact(i);
ret+=t;
}
return ret;
}
int main()
{
double x;
int r;
printf("x,r= ");
scanf("%lf,%d",&x,&r);
printf("Ans= %lf",func(x,r));
return 0;
}
0567デフォルトの名無しさん
2005/08/21(日) 20:27:32int *hogo = 0;
となっているのですが、
NULLと0は何が違うのですか?
0568デフォルトの名無しさん
2005/08/21(日) 20:33:180569デフォルトの名無しさん
2005/08/21(日) 20:40:17書き込むんなら答えをかけよ糞が
0570デフォルトの名無しさん
2005/08/21(日) 20:41:250571デフォルトの名無しさん
2005/08/21(日) 20:42:56forで回す以外の方法は無いのでしょうか?
0572デフォルトの名無しさん
2005/08/21(日) 20:46:25memset
0573デフォルトの名無しさん
2005/08/21(日) 20:47:010574デフォルトの名無しさん
2005/08/21(日) 20:51:420575デフォルトの名無しさん
2005/08/21(日) 20:51:50ありがとう!!!!
0576デフォルトの名無しさん
2005/08/21(日) 20:54:45絶対にする必要は無いからだろ
0577デフォルトの名無しさん
2005/08/21(日) 20:56:02常にZeroFillする必要は無いけど、
必要な時には効率よくZerofillしたいからじゃない?
0578デフォルトの名無しさん
2005/08/21(日) 20:56:36少なくとも>>571には必要なようだが。
0579デフォルトの名無しさん
2005/08/21(日) 20:57:09だとしたら、何故callocは?
0580579
2005/08/21(日) 20:57:490581デフォルトの名無しさん
2005/08/21(日) 20:59:15自前でfor回したり、後でmemsetするよりも効率よくZerofillすることが
可能かもしれない。
0582579
2005/08/21(日) 21:00:37だったらmallocにZeroFillフラグつけるとか、mallocZとかいう別関数で用意するほうが分かりやすいのに。
そんなもん、なんで"printf"があるのに"puts"があるのですか
っていってるようなもん
0584デフォルトの名無しさん
2005/08/21(日) 21:11:40ごめん
0585デフォルトの名無しさん
2005/08/21(日) 21:42:16rとnを聞いて
と求めるプログラム
0586デフォルトの名無しさん
2005/08/21(日) 21:43:33C/C++の宿題を片づけます 49代目
http://pc8.2ch.net/test/read.cgi/tech/1123661447/l50
0587デフォルトの名無しさん
2005/08/21(日) 21:58:59おまえ、その二つは用途が完全に違うだろ。
0588デフォルトの名無しさん
2005/08/21(日) 22:01:34用途が違うのに一緒のように使おうとするっていう例では丁度いいじゃん
0589デフォルトの名無しさん
2005/08/21(日) 22:15:01と言うのがあるのですが = の後ろからの意味が分かりません
どのような意味なのでしょうか?
0590デフォルトの名無しさん
2005/08/21(日) 22:16:540591デフォルトの名無しさん
2005/08/21(日) 22:17:200592デフォルトの名無しさん
2005/08/21(日) 22:18:33答えなかったら?
0593デフォルトの名無しさん
2005/08/21(日) 22:23:27それだけじゃ、何言ってるのかわからん。
0594デフォルトの名無しさん
2005/08/21(日) 22:37:54{
{"hoge1", 1, 0, 'a'},
{"hoge2", 1, 0, 'a'},
{"hoge3", 1, 0, 'a'}
};
のようなコードがあるのですが、
なぜhogeとhoge_hogeを二つの変数を宣言しているのですか?
0595デフォルトの名無しさん
2005/08/21(日) 22:43:32お前生意気帰れ二度と来るな
0596デフォルトの名無しさん
2005/08/21(日) 22:47:18hoge は変数じゃない
0599デフォルトの名無しさん
2005/08/21(日) 22:52:05「struct hoge」型の変数hoge_hogeの宣言。
0600デフォルトの名無しさん
2005/08/21(日) 22:52:270601デフォルトの名無しさん
2005/08/21(日) 22:53:210602デフォルトの名無しさん
2005/08/21(日) 22:54:110603デフォルトの名無しさん
2005/08/21(日) 22:55:33条件演算子
そのコードの意味としてはこんな感じ。
int this_option_optind;
if (optind != 0)
this_option_optind = optind;
else
this_option_optind = 1;
0604デフォルトの名無しさん
2005/08/21(日) 22:56:310605デフォルトの名無しさん
2005/08/21(日) 22:58:47見苦しいぞ
0606デフォルトの名無しさん
2005/08/21(日) 22:59:20たとえ何回ループされようとソースコード上ではたった1箇所でしか定義がなされていないから。
0607デフォルトの名無しさん
2005/08/21(日) 22:59:280608デフォルトの名無しさん
2005/08/21(日) 23:00:40一度目のループで宣言され
二度目のループで2回目は宣言されないのですか?
0609デフォルトの名無しさん
2005/08/21(日) 23:02:54悪いが言ってる意味が分からん
具体例を挙げてくれ
0610デフォルトの名無しさん
2005/08/21(日) 23:06:01だから1回目とか2回目と考えるのがナンセンス。
プログラムの実行するとき、ソース上でstatic変数の宣言している箇所を通ったらその変数が用意されるというわけではない。
コンパイル時にコンパイラがstatic変数を見つけたらその時点で領域を確保しておく。
実行時にはただ確保された箇所をstatic変数として使うだけ。実行時には宣言なんてどこにも残っていない。
0611デフォルトの名無しさん
2005/08/21(日) 23:06:53static int hoge = 0;
hoge++;
}
これだと何度もhogeが宣言されると思うのですが
0612デフォルトの名無しさん
2005/08/21(日) 23:08:48なんで?
0613デフォルトの名無しさん
2005/08/21(日) 23:08:54static の意味調べてね
べーた臭がする・・・
0614デフォルトの名無しさん
2005/08/21(日) 23:09:21プログラムの実行時に静的変数の宣言は実行されるものではない。
予め場所だけ用意しておき、静的変数を参照するときにはいつでもそこを見に行くだけ。
0615デフォルトの名無しさん
2005/08/21(日) 23:10:43static int hoge = 0;
hoge++;
}
は
static int hoge = 0;
void foo()
{
while(1){
hoge++;
}
}
とほぼ同じ。違いはブロックの外からは直接参照できないこと。
0616デフォルトの名無しさん
2005/08/21(日) 23:12:49お前友達いるのか?
0617597
2005/08/21(日) 23:17:00なんであなたは自分の意見を共有したがるのですか?
自分で意見があるのなら他人まで巻き込まないで自分で実行しましょうよ
>>616
いますよ
そんなこと聞いてどうするんですか?
私の経験から行くと、「友達いるのか?」って聞く人のほうが
友達がいないような気がするんですけど
0618デフォルトの名無しさん
2005/08/21(日) 23:19:490619デフォルトの名無しさん
2005/08/21(日) 23:21:34お前らがやめろ
それで終わる
0620デフォルトの名無しさん
2005/08/21(日) 23:22:150621デフォルトの名無しさん
2005/08/21(日) 23:26:14そうか、いるのか。
ふーん。では、ここではそういう現実とネット上の世界の区別を付けてるわけか。
0622デフォルトの名無しさん
2005/08/21(日) 23:28:130623デフォルトの名無しさん
2005/08/21(日) 23:40:46>なんであなたは自分の意見を共有したがるのですか?
あなたも >>569 の意見を共有できるものならしてみたらどうですか?
0624デフォルトの名無しさん
2005/08/21(日) 23:45:33NULL = ヌルポインタ
プロセスが0ということだ
int *a =0
は
int* a;
a = 0;
でポインタaにプロセス0を渡してる
0625デフォルトの名無しさん
2005/08/22(月) 00:00:55お前らって・・・
俺書き込んでなかったんだけど。
まあいいけどさ。
0626デフォルトの名無しさん
2005/08/22(月) 00:03:36お前も同類だバカ
0627社長
2005/08/22(月) 00:45:47解雇
0628デフォルトの名無しさん
2005/08/22(月) 00:58:23プロセスって…
0629デフォルトの名無しさん
2005/08/22(月) 01:15:51そもそもchar型ポインタにNULLのファイルポインタを代入している時点で
ファイルはクラッシュします.
NULLは0ではありません.
0630デフォルトの名無しさん
2005/08/22(月) 01:24:35ここを最初から最後まで読め。
ttp://www.kouno.jp/home/c_faq/c5.html
0631人事部
2005/08/22(月) 02:22:370632デフォルトの名無しさん
2005/08/22(月) 02:26:36あれ? そうだったっけ? それは保障されてなかったっけ?
0633デフォルトの名無しさん
2005/08/22(月) 02:32:06ポインタへの 0 の代入は NULL の代入になる。
http://www.kouno.jp/home/c_faq/c5.html#2
0634629
2005/08/22(月) 02:52:43fopen()で(FILE *)を返すのでFILEという構造体を返すものだと勘違いをしていました......
0635デフォルトの名無しさん
2005/08/22(月) 05:11:11629 はてっきり冗談(悪意の)だと思ってたが…
つ ttp://pc8.2ch.net/test/read.cgi/tech/1124511889/
0636デフォルトの名無しさん
2005/08/22(月) 07:28:15>>558 を読んでやりなおし。
0637デフォルトの名無しさん
2005/08/22(月) 08:45:210638デフォルトの名無しさん
2005/08/22(月) 13:46:07>あなたに解雇処分が決定しました
日本語で話してください。
0639デフォルトの名無しさん
2005/08/22(月) 14:28:55あなたを、解雇です。
0640デフォルトの名無しさん
2005/08/22(月) 14:40:090641デフォルトの名無しさん
2005/08/22(月) 14:40:34あなたに、解雇です。
0642デフォルトの名無しさん
2005/08/22(月) 15:54:320643デフォルトの名無しさん
2005/08/22(月) 17:26:50次の共用体を使ってshort型で入れた整数を
long型に変換するように作ったのですがどうしてもコメント行のような結果になりません.
どこかまずかったのかどなたかご指摘をお願いします....
/* int型をlong型に変換するプログラム */
#include <stdio.h>
union int_long {
short i;
long j;
} itl;
int main(void)
{
itl.j = 0L;
itl.i = 1024;
printf("%ld", itl.j);
// 00000100 00000000 00000000 00000000 = 67108864
return 0;
}
0644デフォルトの名無しさん
2005/08/22(月) 17:35:32なにがまずいわけ?
0645デフォルトの名無しさん
2005/08/22(月) 17:36:26Windowsの話なら
union int_long {
short i[2];
long j;
} itl;
にして、
itl.i[1] = 1024;
とすることでコメント行の結果になる。
キーワードはhighとlow
0646デフォルトの名無しさん
2005/08/22(月) 18:08:30内部で Big endian (上位桁が下位アドレスに入る形式) で数値を扱っている
マシンならお望み通りになる。Little endian (下位桁が下位アドレスに入る
形式) のマシンの場合は正の整数の値の場合 short を long に入れても値に
変化はない。図にするとこうだ。
上位addr 下位addr
00000000 00000000 00000100 00000000
|-------------- long -------------|
|------short-----|
ずれているかも知れないが脳内で修正しろ。
0647デフォルトの名無しさん
2005/08/22(月) 18:10:210648デフォルトの名無しさん
2005/08/22(月) 18:10:540649デフォルトの名無しさん
2005/08/22(月) 19:04:02実際にメモリに置いた状態との対比とかしないと。
0650643
2005/08/22(月) 19:18:10>>645,>>646
さんの通りにやったら思ったとおりの値が出ました.
あと,混乱するようなソースを作ってしまったのでこれも出来ればお願いします.
pak |-[7] [6] ....... [2] [1] [0]----|
double |---------------d---------------------|のように捉えたのですが考え方は間違ってますか?
union {
double d;
char pak[sizeof(double)];
} _ddat;
int i;
FILE *fp;
_ddat.d = 1283648236.434532;
if((fp = fopen("double", "wb+")) == NULL) {
printf("ファイル展開に失敗.");
exit(1);
}
for(i=sizeof(double); i; i--)
fwrite(&_ddat.pak[i-1], sizeof(char), 1, fp);
fclose(fp);
_ddat.d = 0.0;
if((fp = fopen("double", "rb")) == NULL) {
printf("ファイル展開に失敗.");
exit(1);
}
fread(&_ddat.d, sizeof(double), 1, fp);
fclose(fp);
0651デフォルトの名無しさん
2005/08/22(月) 19:28:480652デフォルトの名無しさん
2005/08/22(月) 19:29:39#define OUTPUTNum1(fname,id1) \
{\
test = fopen( "unko.txt", "w" );\
fprintf( test, "%d" ,id1 );\
fclose( test );\
}
#define OUTPUTNum2(fname,id1,id2) \
{\
test = fopen( "unko.txt", "w" );\
fprintf( test, "%d %d" ,id1, id2 );\
fclose( test );\
}
#define OUTPUTNum3(fname,id1, id2, id3) \
{\
test = fopen( "unko.txt", "w" );\
fprintf( test, "%d %d %d" ,id1, id2, id3 );\
fclose( test );\
}
こんな感じの、可変長の引数にうまく対応するマクロ、
もっと簡潔にかけませんか?
0653デフォルトの名無しさん
2005/08/22(月) 19:29:500654651
2005/08/22(月) 19:30:02スレ違いスマソ
0655デフォルトの名無しさん
2005/08/22(月) 20:33:44用途は違うかもしれないが、参考までに。
-- hoge.h --
#define _OUTPUT_FLAG
#ifdef _OUTPUT_FLAG
extern void _OutputNum( const char *format, ...);
#define OUTPUT_NUM(...) _OutputNum(__VA_ARGS__)
#else
#define OUTPUT_NUM(...) ((void)0)
#endif //_OUTPUT_FLAG
-- hoge.c --
#include "hoge.h"
#ifdef _OUTPUT_FLAG
#include <stdio.h>
#include <stdarg.h>
void _OutputNum( const char *format, ...)
{
va_list args;
char buf[256];
FILE* fp = fopen( "unko.txt", "w" );
va_start(args, format);
vfprintf(fp, format, args);
va_end(args);
fclose(fp);
}
#endif //_OUTPUT_FLAG
0656652
2005/08/22(月) 20:38:08unko.txtに出力できるようになる。
また、_OUTPUT_FLAGの定義をコメントアウトすることで、
ソース中のOUTPUT_NUM()があっても出力を抑止できる。
0657デフォルトの名無しさん
2005/08/22(月) 20:43:47正直思っとりませんでした
さすが2ちゃん・・・
>>656さま本当にありがとうございました
0658656
2005/08/22(月) 20:48:46>>656 = >>655ね
なんで質問者になってるんだよ俺www
ちなみに、↑のはVCのTRACEマクロと同じやり方ね。
0659650
2005/08/22(月) 21:42:05union {
short sht;
char ch[4];
long lng;
} test;
でポインタのアドレスを求めたら,
|--sht--|
|------lng------|
|--ch[0].......ch[3]--|
のようなアドレス分布になったのですが,このshtとlngを考えたら
どう考えてもlngの左端のビットにshtを介して1は入らないと思うのですが,実際は入ります.
>>646さんのように
|--sht--|
|------lng------|
|--ch[3].......ch[0]--|
と考えるのでしょうか?double型のデータを一旦,共用体の配列メンバchから適当なファイルに保存して,double dとして読み込むと考えると以下のように
考えれば読み込めば正常な値が得られるのですが,
|------------------------double d--------------------------|
|-----ch[0]-----ch[1]---.............................----------------ch[7]----|
ひとたび,
|------------------------double d--------------------------|
|-----ch[7]-----ch[6]---.............................----------------ch[0]----|
と考えてやるとdouble dの値は意味のない値となってしまいます.
かなり混乱してしまって何がどうなっているのかよく,掴めません.どうか,お願いします.(´・ω・`)
0660デフォルトの名無しさん
2005/08/22(月) 21:52:51ビックエンディアンとリトルエンディアンは調べた?
0661デフォルトの名無しさん
2005/08/22(月) 21:57:260662デフォルトの名無しさん
2005/08/22(月) 22:05:28下位ビットから転送されるということは例えば,
ch[0] の値が100,ch[1] の値が120 としたとき二進数表記がそれぞれ 01100100,01111000
となっているとしたらメモリのビットの並びは
00100110 || 00011110
となっているということでしょうか?
0663デフォルトの名無しさん
2005/08/22(月) 22:05:57#include <stdio.h>
void dump(void *data, int size)
{
unsigned char *p = data;
int i;
for(i = 0; i < size; ++i) printf("%02X ", p[i]);
putchar('\n');
}
union {
short sht;
char ch[4];
long lng;
} u_test;
int main()
{
printf("ofset: 00 01 02 03\n------------------\n");
u_test.sht = 0x1234;
printf("sht : "); dump(&u_test, sizeof(u_test));
u_test.lng = 0x12345678;
printf("lng : "); dump(&u_test, sizeof(u_test));
return 0;
}
0665デフォルトの名無しさん
2005/08/22(月) 22:17:23なこと聞いてくるのが沸いて出るなあ。
>>643,650
>>共用体を使ってshort型で入れた整数をlong型に変換
そもそも bit操作を(言われてもendianも理解しないで)
こういう方法でやるのが間違い。
というか、スレ違いは相手にするなと。
初心者系かなあ。少なくとも実用プログラムじゃないよなあ。
(もともとその処理自体意味無いんじゃね? 会社の、とか言い出したりして……)
0666デフォルトの名無しさん
2005/08/22(月) 22:26:24#include <stdio.h>
int sum(int,int);/* プロトタイプ宣言 */
int main(void)
{
int value;
value = sum(50,100);
printf("%d\n",value);
return 0;
}
int sum(int min,int max)
{
int num;
num = (min + max) * (max - min + 1) / 2;
return num;
}
return numはどこに返り?
return numでなくreturn 0ではだめなんですか?
0667デフォルトの名無しさん
2005/08/22(月) 22:28:18いいよ
0668デフォルトの名無しさん
2005/08/22(月) 22:29:300669デフォルトの名無しさん
2005/08/22(月) 22:31:07return 0でもいいけど、それじゃ何のためにsum()呼んでるの?
0670デフォルトの名無しさん
2005/08/22(月) 22:31:37質問者と回答者の双方が学生さん
0671デフォルトの名無しさん
2005/08/22(月) 22:32:15解説おねがいできますか?
0672659
2005/08/22(月) 22:33:19独習C の練習問題でどうしても解答のやっていることが理解できなくて質問させていただきました.
スレ違い,失礼いたしました.
0673デフォルトの名無しさん
2005/08/22(月) 22:41:33ちょっと待って。それこそ初心者系じゃないか、とか、
endianとかは他の書籍も参考にきちんと調べろよ、とか
は置いといて…
その「独習C の練習問題」というのは一般の書籍のことなのか?
スレ違いだがいちおう最後に晒してくれ。
(書籍にきちんと解説があるはずの場合もあるし、例題、書籍自体が
トンデモナイ場合があるので…)
0674デフォルトの名無しさん
2005/08/22(月) 22:44:33return numとreturn 0
の違いが分かりません。。
厨質すんません。。
0675デフォルトの名無しさん
2005/08/22(月) 22:45:020676デフォルトの名無しさん
2005/08/22(月) 22:50:23「独習C 第三版・Herbert Schildt著・翔泳社」です.
すでに改訂版が出ているようですが.....
事前に代入処理の型変換についての解説はありました.
0677デフォルトの名無しさん
2005/08/22(月) 22:53:39厨質にもほどがある。
まずはまともに本で自習してくれないか。
0678デフォルトの名無しさん
2005/08/22(月) 22:54:41ぶっちゃけ、
int a=1;
・・・・
とかからどうやってドラクエとか作るんでしょうか?めちゃめちゃ不思議です。
0679デフォルトの名無しさん
2005/08/22(月) 22:54:47いや、ネタだろういくらなんでも・・・
とりあえず676が本気でやる気あるのなら、
トリップつけて(自分でくぐれよ)初心者スレへどうぞ...
0680デフォルトの名無しさん
2005/08/22(月) 22:56:45ttp://www.kumei.ne.jp/c_lang/index_c.html
0681デフォルトの名無しさん
2005/08/22(月) 22:59:05戦闘のダメージとかはただの計算式だし
表示は画面を構成する二次元の点々に色付けるだけだし。
まずはマルバツでも作ってみたら。
ユーザーの入力、計算、画面の出力という意味でドラクエと変わらんw
0682デフォルトの名無しさん
2005/08/22(月) 23:06:000683デフォルトの名無しさん
2005/08/22(月) 23:06:24漏れも。
0684人事部
2005/08/22(月) 23:20:22受けた会社から聞き合わせの電話が来たら、しっかりとあなたの問題行動を伝えておきますので。
0685デフォルトの名無しさん
2005/08/22(月) 23:21:17プログラムの練習に超おすすめ。
0686デフォルトの名無しさん
2005/08/22(月) 23:24:470687デフォルトの名無しさん
2005/08/23(火) 06:18:47お手数です。続けるべきじゃないですがチト引っかかるので…
「代入処理の型変換」って「代入文での型変換」ということですよね。
そもそも、
>>643 >>共用体を使ってshort型で入れた整数をlong型に変換
にある例を、いわゆる"型変換"と呼ぶ(考える)のは誤解のもと
でしょうから注意。(強いて言えば byte(or bit)列の操作かなあ?)
その本も見たこと無いんで十分な説明があるのか良否はわかりませんが、
入門者に誤解を与えかねないのは危険かも。
どちらにせよ学習者が1冊だけを参考にするのは不備でしょう。
0688デフォルトの名無しさん
2005/08/23(火) 09:43:340689デフォルトの名無しさん
2005/08/23(火) 09:44:510690デフォルトの名無しさん
2005/08/23(火) 09:45:07コメントアウト
0691デフォルトの名無しさん
2005/08/23(火) 09:46:09ありがとう
では、コメントアウトした部分をもとに戻すことはなんと言いますか?
0692デフォルトの名無しさん
2005/08/23(火) 09:56:50encomment/decomment
0693デフォルトの名無しさん
2005/08/23(火) 13:05:450694デフォルトの名無しさん
2005/08/23(火) 17:19:150695デフォルトの名無しさん
2005/08/23(火) 17:34:200696デフォルトの名無しさん
2005/08/23(火) 23:18:29# なんだ、この流れは。
0697デフォルトの名無しさん
2005/08/23(火) 23:21:52uncomment out
オプションを設定するヘッダーファイルのなかでこんなの良く見るよ。
/* uncomment out the following line to enable XXX */
/* #define OPTION_XXX_ENABLED 1 */
0698デフォルトの名無しさん
2005/08/23(火) 23:43:39だれか分かり易く教えてくれない?
0699デフォルトの名無しさん
2005/08/23(火) 23:55:10リストって線形リストか?
とりあえず新たに挿入するノードようの領域をmallocなりcallocなりで確保して
こいつへのポインタをnewにでも放り込んでおく
んで、挿入位置の直前にあるノード(A)の次のノードへのポインタをnewの次へのポインタに複写
その後、Aの次へのポインタをnewへのポインタに書き換えて終了
0700デフォルトの名無しさん
2005/08/23(火) 23:55:25A→Cの間にBを挿入するなら、BにCをつないで(B→C)、AにBを
つなげば(A→B)いい。
具体的にstruct list {struct list *next;};みたいな単純な線形リストなら、
CへのポインタをBのnextに入れて、BへのポインタをAのnextに代入する。
0701デフォルトの名無しさん
2005/08/24(水) 00:06:57◆を挿入
口→◆♂■⇒
0702698
2005/08/24(水) 00:25:47よんでもいまいちワカランのよ
0703デフォルトの名無しさん
2005/08/24(水) 00:26:590704デフォルトの名無しさん
2005/08/24(水) 00:31:150705デフォルトの名無しさん
2005/08/24(水) 00:31:56線形リストでググれ
0706デフォルトの名無しさん
2005/08/24(水) 03:25:26双方向リスト?
0707デフォルトの名無しさん
2005/08/24(水) 03:35:590708デフォルトの名無しさん
2005/08/24(水) 03:37:56char * GetStr ()
{
char _szTemp[128];
strcpy(_szTemp, "abc");
return _szTemp;
}
int main ()
{
cout << GetStr() << endl;
return 0;
}
GetStr()関数で char 型に入ってる文字列を返したいのですが、
どうすればいいんでしょうか。
void GetStr(char *_szTemp)
みたいに引数に入れて返すのではなく、
戻り値で返したいんです。
どなたかお願いします m(__)m
0709デフォルトの名無しさん
2005/08/24(水) 03:40:50{
strcpy(_szTemp, "abc");
return _szTemp;
}
0710708
2005/08/24(水) 03:45:23にゃるほど。それで行けますね。
どうもありがとうございます。 m(__)m
GetStr()で宣言した文字列を返したほうがスマートになるような
気がするんですが、それは無理ですか?
0711デフォルトの名無しさん
2005/08/24(水) 03:45:52std::string GetStr()
{
std::string str("abc");
return str;
}
0712デフォルトの名無しさん
2005/08/24(水) 03:49:27typedef struct ulist ulist;
struct ulist {
int value;
ulist *next;
};
ulist *ulist_create() {
ulist *res = malloc(sizeof (ulist));
res->value = 0;
res->next = NULL;
}
void ulist_insert_next(ulist *prev, ulist *node) {
node->next = prev->next;
prev->next = node;
}
void ulist_remove_next(ulist *node) {
ulist *next = node->next;
if(next == NULL) { return; }
node->next = next->next;
free(next);
}
void ulist_free(ulist *node) {
ulist *next;
if(node == NULL) { return; }
next = node->next;
free(node);
ulist_free(next);
}
0713デフォルトの名無しさん
2005/08/24(水) 03:51:32char *GetStr()
{
return "abc";
}
0714デフォルトの名無しさん
2005/08/24(水) 03:53:55動的に確保していいんなら
char *GetStr() {
return strdup("abc");
}
きちんと後で free すること。
あと、静的なデータならそのまま return できる。
char *GetStr() {
return "abc";
}
char *GetStr() {
static char _szTemp[128];
strcpy(_szTemp, "abc");
return _szTemp;
}
ただ、静的なので当然データは同時に1つしか存在できない。
呼び出すたびに違うのを返したい場合には使えない。
ただまあ、普通は >>709 の形にするんじゃない?
0715708
2005/08/24(水) 04:00:55char * GetStr ()
{
char *_szTemp = "wertyuytrewruyreertyurertyuiitrertyuytre";
strcpy(_szTemp, "abc");
return _szTemp;
}
↑がいけるかと思ったら無理でしたww
>>711 >>713 >>714
std::stringはまだわからないので、
>>709か、できたら>>713で行って見ます。
皆様、どうもありがとうございます。
0716デフォルトの名無しさん
2005/08/24(水) 04:04:03Cの初歩の初歩で学ぶ禁じ手をやっている。
一冊Cのテキストを読むことをお勧めする。
そんな調子じゃ、まともなものは作れない。
0717デフォルトの名無しさん
2005/08/24(水) 04:05:37そもそも文字定数って書き換え不可じゃなかったっけ?
0718デフォルトの名無しさん
2005/08/24(水) 04:06:13うはwwごめんなさい。
つい必死で。
0719デフォルトの名無しさん
2005/08/24(水) 05:34:460720デフォルトの名無しさん
2005/08/24(水) 06:22:18なんとなく不安になるんですが、考えられるまずい要素とかありますか?
0721デフォルトの名無しさん
2005/08/24(水) 07:43:46>考えられるまずい要素とかありますか
あんたの頭。
0722デフォルトの名無しさん
2005/08/24(水) 07:50:130723デフォルトの名無しさん
2005/08/24(水) 09:55:08演算子の優先順位をあたまにたたきこんでくだちい
0724デフォルトの名無しさん
2005/08/24(水) 10:00:01最適化効くかもしれんけど。
0725デフォルトの名無しさん
2005/08/24(水) 10:00:55優先順位じゃなくて結合規則だ。
0726デフォルトの名無しさん
2005/08/24(水) 10:20:47そうだ、それをいいたかったんだよ
0727デフォルトの名無しさん
2005/08/24(水) 12:46:28tmp = a->pnext;
tmp->pnext
でいいだろ。
まずいというか、ポインタ参照は出来るだけ深くしないように習慣づけた方が良い。
****pとか論外。
簡単な事を複雑に見せてるだけでハッタリと変わらん。
0728デフォルトの名無しさん
2005/08/24(水) 13:04:23流石に五つも先ならa->pnext->pnext->pnext->pnext->pnextはやりすぎだと思うけど。
0729デフォルトの名無しさん
2005/08/24(水) 13:25:53途中のポインタが NULL になっていた時に落ちる。
0730デフォルトの名無しさん
2005/08/24(水) 14:19:25int in;
printf( "kyoumoiitennki\n" );
scanf( "%d" ,&in );
printf( "rakki-number %d" ,in );
}
void def( void ) {
int in;
printf( "kyoumoiitennki\n" );
printf( "sentakumonowohosou\n" );// point!
scanf( "%d" ,&in );
printf( "rakki-number %d" ,in );
}
例えが少し悪いかもしれませんが、このように、ほとんど同じ関数なのに、
中途半端な位置で、一部だけ違うという場合にたまに遭遇します。
マクロ化して省略すると見づらくなりますし、どう回避すべきでしょうか
気にせず違う関数として2つ定義しておくのが、やはり一番の正解ですか?
0731デフォルトの名無しさん
2005/08/24(水) 14:27:27int in;
printf( "kyoumoiitennki\n" );
if(mode==1)printf( "sentakumonowohosou\n" );
scanf( "%d" ,&in );
printf( "rakki-number %d" ,in );
}
void abc()
{
f(0);
}
void def()
{
f(1);
}
0732デフォルトの名無しさん
2005/08/24(水) 14:28:32コピペしてちょっと変えるだけの手抜きは決して許してはならない。
俺がそういう関数が数百ある他人の書いたプログラムのデバッグで
どれだけ苦労していると思ってるんだ。ふざけるな。
0733デフォルトの名無しさん
2005/08/24(水) 14:38:190734デフォルトの名無しさん
2005/08/24(水) 14:40:42enum action {
NO_ACTION;
SOUJI;
HOSU;
NERU;
};
void f( action mode ) {
int in;
printf( "kyoumoiitennki\n" );
if(mode==HOSU)printf( "sentakumonowohosou\n" );
scanf( "%d" ,&in );
printf( "rakki-number %d" ,in );
}
void abc()
{
f(NO_ACTION);
}
void def()
{
f(HOSU);
}
0735デフォルトの名無しさん
2005/08/24(水) 14:42:00void f( char *prompt ) {
int in;
printf( "kyoumoiitennki\n" );
if ( prompt[0] ) printf( prompt );
scanf( "%d" ,&in );
printf( "rakki-number %d" ,in );
}
void abc()
{
f( "sentakumonowohosou\n" );
}
void def()
{
f( "" );
}
0736デフォルトの名無しさん
2005/08/24(水) 14:48:29void f( void(*callback)() )
{
int in;
printf( "kyoumoiitennki\n" );
if( callback ) callback();
scanf( "%d" ,&in );
printf( "rakki-number %d" ,in );
}
void abc( void ) {
f(NULL);
}
void def( void ) {
struct SFunc {
static void Callback() {
printf( "sentakumonowohosou\n" );
}
};
f(SFunc::Callback);
}
0737デフォルトの名無しさん
2005/08/24(水) 15:53:08自分が阿呆であると知ったいい機会でした
皆様レスありがとう!
0738デフォルトの名無しさん
2005/08/24(水) 16:10:54>if ( prompt[0] ) printf( prompt );
こういうコードはやめて欲しい。
せめて
if ( prompt != NULL )
とかにしてくれ。
ぬるぽが来たらどうすんだ。
0739デフォルトの名無しさん
NGNGprintf( prompt ); だけでいいような気が。
0740デフォルトの名無しさん
2005/08/24(水) 16:36:36厳密にやるなら、
if (prompt) {printf("%s", prompt);}
でないと%を含む文字列を表示できない。。
0741デフォルトの名無しさん
2005/08/24(水) 16:37:590742デフォルトの名無しさん
2005/08/24(水) 17:07:48個人的には文字列は1つにまとめた方が好き。
#define HARE "kyoumoiitennki\n"
#define HOSU "sentakumonowohosou\n"
void f(char* msg)
{
int in;
if(msg)
printf( "%s", msg );
scanf( "%d" ,&in );
printf( "rakki-number %d" ,in );
}
void abc( void ) {
f(HARE);
}
void def( void ) {
f(HARE HOSU);
}
0743デフォルトの名無しさん
2005/08/24(水) 17:26:59printf( RAKKI "%d" ,in );
とはしないの?w
0744デフォルトの名無しさん
NGNGプロンプトがなしの場合、NULLを渡すか、長さが0の文字列を
渡すかって仕様の問題じゃん。
NULLを渡さないって仕様ならifはいらないって話。
0745デフォルトの名無しさん
2005/08/24(水) 22:27:48Cで自作アプリを書き始めたのですが、(1)「できるだけ小さく」
(2)「他のライブラリに依存しない」を目指したら、標準Cがあまりにも
プリミティブ過ぎて、再発明した(しかも出来の良くない)「車輪」が量産
されつつあります。(メモリ管理とか文字列とかリストとかマップとか)
さすがにやってられないので、(2)はあきらめて、できあいの「車輪」を
使おうとしてるのですが、皆さんこういうとき何を使ってますか?
とりあえずライセンスのぬるいaprを使おうかと思ってるのですが……。
ちなみに、C++には宗教上の理由で近付きたくないです(ぉ
# いや、単に挫折しただけなんですが(^^;
0746デフォルトの名無しさん
2005/08/24(水) 22:30:040747デフォルトの名無しさん
2005/08/24(水) 22:40:490748デフォルトの名無しさん
2005/08/24(水) 22:51:46大丈夫、STLはオブジェクト指向じゃないから。
0749デフォルトの名無しさん
2005/08/24(水) 22:58:45初めてC++をさわったとき、Hello worldのバイナリが数MBになったのが未だにトラウマだったりしまつ。
>>747 >>748
オブジェクト指向に挫折したんじゃなくて、C++に挫折しました。JavaやRubyには挫折しなかったんですが……。
0750デフォルトの名無しさん
2005/08/24(水) 23:04:16今、VC7.1で試してみたけど、Hello, worldに目いっぱいの最適化をかけて48KiBになったよ。
しかしSTLを使わないのは惜しいな。
お前が例に挙げた文字列とかリストとかマップとかはみな含まれている。
0751デフォルトの名無しさん
2005/08/24(水) 23:05:260752デフォルトの名無しさん
2005/08/24(水) 23:06:57そっとしておこうか。
0753デフォルトの名無しさん
2005/08/24(水) 23:27:13↑このように、ビットマップファイルを輝度値の行列にしたいのですが、
方針としては、
ヘッダー情報読み取り
↓
ピクセルデータを24bitずつ読み出しては先頭の8bitを10進数で出力
↓
出力した輝度値が1行分の数になったら改行を出力
↓
以下繰り返し
こんなかんじでできるでしょうか?
0754ESP
2005/08/24(水) 23:30:000755デフォルトの名無しさん
2005/08/24(水) 23:56:53そこだけ注意な。
0756753
2005/08/24(水) 23:59:08>>755
ありがとうございます。
C言語プログラムは初めてなのですごく緊張してます・・・
またお世話になるかもしれませんので、そのときはよろしくお願いしますm(_ _)m
0757デフォルトの名無しさん
2005/08/25(木) 00:05:520758デフォルトの名無しさん
2005/08/25(木) 00:10:24画像編集ツールでxpmとかpgmを出力できるのを探してこい。
例えばIrfanView(プラグインも必要かな)でもいい。
bmpファイルをそのツールで開き、pgmの場合はOptionでAsciiに設定の上、
保存すればほぼ目的に到達できるぞ。
#自分でプログラミングする場合でも一度見ておくといいと思う。
0759753
2005/08/25(木) 00:22:32いちおうカラー画像として保存してるんですが、
確認するようにします。
>>758
あ・・・ できちゃいましたw
まぁ、練習ということで組めそうならがんばってみます。
ありがとうございました。
0760デフォルトの名無しさん
2005/08/25(木) 01:37:48過去に作ったプログラムから使えそうなものを拾って繋ぐ。
0761デフォルトの名無しさん
2005/08/25(木) 01:55:35printf();でバイナリをそのまま出力させたいんですがどう指定すればいいんですか?
あえてASCIIに変換したくないんですが・・・
print("%c",0xff);とすると、Dosプロンプトに出力された時のメモリ上にffと格納されるんでしょうか?
おねがいします。
0762デフォルトの名無しさん
2005/08/25(木) 01:57:44バイナリをそのままってどういうことだ?
バイナリエディタで表示されるような感じのを出したいのか?
0763デフォルトの名無しさん
2005/08/25(木) 01:57:530764デフォルトの名無しさん
2005/08/25(木) 01:58:05%02X みたいなことを意味しているんだろうか。
0765デフォルトの名無しさん
2005/08/25(木) 02:04:54一つの方法としては
char ch=0xff;
int i;
for(i=128; i>0; i/=2)
if(i & ch) printf("1 ");
else printf("0 ");
他にはビットフィールドと共用体を利用する等
でいいのかな
0766デフォルトの名無しさん
2005/08/25(木) 02:07:41なんというか、バイナリをprintfで出力する必要があって・・・
0xffなら0x66,0x66ではなく0xffのまま出力させたいんです。
どうすればいいんでしょう?
ひょっとして
char a[2];
a[0]=0xff;
a[1]=0;
printf("%s",a);
とかでいいんでしょうか・・・
0767デフォルトの名無しさん
2005/08/25(木) 02:11:01printf がどういう関数なのか、
全く分かってないように思われる。
0768デフォルトの名無しさん
2005/08/25(木) 02:13:05それだと文字列が表示されると思いますが。
しかも妙な。
0769デフォルトの名無しさん
2005/08/25(木) 02:17:130770デフォルトの名無しさん
2005/08/25(木) 02:18:00fwriteでいいのではないか。
0771デフォルトの名無しさん
2005/08/25(木) 02:20:15これで普通にできるが・・・
こいつは何を言ってるんだ?
0772デフォルトの名無しさん
2005/08/25(木) 02:20:59言いたいことは
printf("0x%x", 0xff);
ですか?
0773デフォルトの名無しさん
2005/08/25(木) 02:21:040xff(文字ではなく数値)で埋められたバイナリファイルができてほしいってことか?
0774デフォルトの名無しさん
2005/08/25(木) 02:22:040775デフォルトの名無しさん
2005/08/25(木) 02:22:58%#xでいいじゃん
0776デフォルトの名無しさん
2005/08/25(木) 02:26:470777デフォルトの名無しさん
2005/08/25(木) 02:26:57それは、%sとかのパターンが入ったときに嫌な予感。
0778766
2005/08/25(木) 02:27:19対象がファイルじゃないんです・・
>771
perlですか?参考にします!
>772
ASCIIじゃだめなんです
>773
そうです。
何故かprintfを介さないと相手は受け取ってくれなくて・・
ASCII文字では無く数値そのままを渡したいんですが・・
うう・・入門書から出直してきます・・orz
0779デフォルトの名無しさん
2005/08/25(木) 02:28:250780デフォルトの名無しさん
2005/08/25(木) 02:29:20> 対象がファイルじゃないんです・・
stdoutファイルへ出力すれば?
0781デフォルトの名無しさん
2005/08/25(木) 02:32:27fprintf()もprintf()も最終的にテキストになるから無理ですよ。
0782デフォルトの名無しさん
2005/08/25(木) 02:37:26例えば、0x41を出力したときどんな風に表示させたいのかね?
"A"?それとも"0x41"?
0783デフォルトの名無しさん
2005/08/25(木) 02:39:090784デフォルトの名無しさん
2005/08/25(木) 02:42:15putchar でもいいと思うが。
0785デフォルトの名無しさん
2005/08/25(木) 02:59:07それだと文字に変換されたのが出るんじゃなかったっけ?
まぁどっちにしろ766の言ってることはいろいろとおかしいが
0786デフォルトの名無しさん
2005/08/25(木) 03:08:37単に1バイトそのまま出力するだけなんだが?
ディスプレイに出力すれば文字として表示されるだけであって。
0787デフォルトの名無しさん
2005/08/25(木) 03:10:400788デフォルトの名無しさん
2005/08/25(木) 03:12:030789デフォルトの名無しさん
2005/08/25(木) 03:18:280790デフォルトの名無しさん
2005/08/25(木) 05:54:33>Dosプロンプトに出力された時「のメモリ上に」ffと格納されるんでしょうか?
>何故かprintfを介さないと相手は受け取ってくれなくて・・
あたりで、意思の疎通が無理なのは自明。
0791デフォルトの名無しさん
2005/08/25(木) 10:59:11dx/dt = -10*x + 10*y
dy/dt = 28*x - y - x*z
dz/dt = -8/3*z + xy
をオイラー法で解く場合の式って以下でいいのでしょうか?
for(i=0; i<last; i++){
x[i+1] = x[i] + h * dxdt(x[i], y[i]);
y[i+1] = y[i] + h * dydt(x[i], y[i], z[i]);
z[i+1] = z[i] + h * dzdt(x[i], y[i], z[i]);
}
//x、y、zは解を入れる配列(0番目は初期値)、hは刻み幅、dxdt、dydt、dzdtは上述の式
0792デフォルトの名無しさん
2005/08/25(木) 11:06:20刻み幅が十分で無かったため、発散してました
0793デフォルトの名無しさん
2005/08/25(木) 14:53:38いくつか種類があるみたいなので初心者でも分かる本のタイトルを教えてください。
前見たような記憶では付属のCDがあったんですがそれにはコンパイラが入ってるんでしょうか?
0794デフォルトの名無しさん
NGNG本は見たことないけど、サイトのほうを見るとあまりよくないと思う。
(本はゴーストライターが書いていて、悪くはないって話もあるけど)
0795デフォルトの名無しさん
2005/08/25(木) 15:28:02過去ログサイトから 2ch books を見ていろんな本の書評を見てみたら?
0796デフォルトの名無しさん
2005/08/25(木) 15:29:40猫だとは基本的な概念とか文法についての説明が不足しているので
他にちゃんとしたC言語の入門書 (サイトでもいいけど) がほしいところ。
あと、付属のCDにはコンパイラとサンプルソースが入ってた気がする。
0797デフォルトの名無しさん
2005/08/25(木) 15:33:45では、他の本で分かりやすいおすすめのはないでしょうか?
0798デフォルトの名無しさん
2005/08/25(木) 15:37:490799デフォルトの名無しさん
2005/08/25(木) 15:45:15そういうページがあるのを初めて知ったw
過去ログにまとまってるリンクも便利だね。
>>793ではないが、ありがトン
0800デフォルトの名無しさん
2005/08/25(木) 16:03:04>>795読んでますか?
0801デフォルトの名無しさん
2005/08/25(木) 17:13:51>>795+推薦図書スレ行ってこい
そこのお勧め本使ってそれなりに勉強してる最中の俺ガイル
0802デフォルトの名無しさん
2005/08/25(木) 20:13:140803793
2005/08/25(木) 21:19:12柴田望洋氏の本を図書館で借りてみました
過去ログも見てみます
0804デフォルトの名無しさん
2005/08/25(木) 22:05:180805デフォルトの名無しさん
2005/08/25(木) 23:14:370806デフォルトの名無しさん
2005/08/25(木) 23:15:270807デフォルトの名無しさん
2005/08/25(木) 23:19:03漢字とかひらがなとか入力できないんでどうすればできるのかなぁと
0808デフォルトの名無しさん
2005/08/25(木) 23:28:170809デフォルトの名無しさん
2005/08/25(木) 23:50:270810デフォルトの名無しさん
2005/08/25(木) 23:53:290811デフォルトの名無しさん
2005/08/25(木) 23:54:28どいつもこいつも小出しにしやがって
0812デフォルトの名無しさん
2005/08/25(木) 23:54:520813デフォルトの名無しさん
2005/08/26(金) 00:33:18エラーE2209 インクルードファイルをオープンできない、といわれました
borland c++ 5.5 ってコンパイラーを使ってます。
誰か教えていただけませんか?
0814デフォルトの名無しさん
2005/08/26(金) 00:34:360815813
2005/08/26(金) 00:43:13cの本についてるCDと同じ名前だったのでc++の本についていた付録CDをつかったんですけど、
それは関係ありませんよね?
コンパイルするとき bcc32 ***.c ってやってるんですけど
cのときとc++のときってコンパイルの仕方が違ったりするのですか?
超初心者ですいません、あと環境設定ってのはなんですか?
0816デフォルトの名無しさん
2005/08/26(金) 00:44:260817813
2005/08/26(金) 00:45:410818デフォルトの名無しさん
2005/08/26(金) 00:46:560819813
2005/08/26(金) 00:50:33cをコンパイルするときでもbcc32でいいんですか?
c++のコンパイラでもcはコンパイルできるって書いてあったのでやってたんですけど
0820デフォルトの名無しさん
2005/08/26(金) 00:51:430821813
2005/08/26(金) 00:52:360822デフォルトの名無しさん
2005/08/26(金) 00:52:45自分では調べない
自分で解決しようとせずになんでも人に聞く
こんなやつには、プログラミングはできない
0823813
2005/08/26(金) 00:58:00自分でなんとかします
0824デフォルトの名無しさん
2005/08/26(金) 01:27:300825デフォルトの名無しさん
2005/08/26(金) 04:11:02どこのスレに書き込んでいいのか分からなかったので
とりあえずここに書かせてください。
試験なんかに使うマークリーダー用のデータ読み取りプログラムというのは
どういった言語で構築するのでしょうか?
ちなみに、仕様はCSVファイルのデータをマークリーダー(読み取り機)で
読み込んで正否などを打ち出すらしいのですが...
0826デフォルトの名無しさん
2005/08/26(金) 04:16:31とりあえずはすれたてるまでもない質問スレでやれ
CSVにはどんなデータが入っていてリーダーはどの機種で
OSや予算や使える言語も最低限書くこと
0827デフォルトの名無しさん
2005/08/26(金) 04:28:55でも、どんな言語で作るのかを聞きたいのに
使える言語も最低限書くことと言うのは、どういう意味ですか?
因みに
OS Win
予算 数100万
CSVの中には 試験に必要な「個人情報」と答案用フォームに書き込まれた「解答番号」です。
リーダーの機種名は 不明です。
0828デフォルトの名無しさん
2005/08/26(金) 04:32:47頼むからここを荒らすな。
スレ違いつーか、鼬害なんだから。
0829デフォルトの名無しさん
2005/08/26(金) 04:41:39失礼しました。
0830デフォルトの名無しさん
2005/08/26(金) 04:48:59例えば,
c = a[i][j + 0] + b[i][j + 0];
c = a[i][j + 1] + b[i][j + 1];
c = a[i][j + 2] + b[i][j + 2];
c = a[i][j + 3] + b[i][j + 3];
見たいに書く代わりに,
LOOP_4(c = ....);
みたいにかける LOOP_4 のような物が欲しいです.
こういうのって割と需要ありそうなんですが,検索してもなかなか見つかりま
せん.識者の方,アドバイスお願いします.
0831デフォルトの名無しさん
2005/08/26(金) 04:52:30ループじゃいかんのけ?
0832デフォルトの名無しさん
2005/08/26(金) 05:19:120833デフォルトの名無しさん
2005/08/26(金) 05:40:28#include<boost/preprocessor.hpp>
#define GEN(z,k,_) c = a[i][j + k] + b[i][j + k];
BOOST_PP_REPEAT(4,GEN,_)
こんな感じ
0834デフォルトの名無しさん
2005/08/26(金) 05:47:38普通にfor文のループで書くしかない
わけのわからんマクロ作ったらタコ殴りの刑
0835デフォルトの名無しさん
2005/08/26(金) 05:55:13>>833
ありがとうございます.できれば C でやりたいんですが,やっぱり無理なんでしょうか.
0836デフォルトの名無しさん
2005/08/26(金) 05:56:350837デフォルトの名無しさん
2005/08/26(金) 05:57:02高速化の随分と最後の方にやるモノではあるのだが、
使わないこともない技術だ。
0838833
2005/08/26(金) 05:57:52一応手元のgcc,vc,dmcでは問題無かったです。
0839デフォルトの名無しさん
2005/08/26(金) 06:03:13おお.
Boost == C++ ってイメージがあったので試さずに書いてしまいました.
ありがとうございました.
0840デフォルトの名無しさん
2005/08/26(金) 08:18:550841デフォルトの名無しさん
2005/08/26(金) 11:51:19一番最初にくる文字を表示するプログラム*/
#include <stdio.h>
int main(void)
{
int i;
char ch1, ch2;
printf("英字を10個入力してください\n");
ch1 = getchar();
for(i = 0; i < 10; i++){
printf("%d", i); /*動作確認のため*/
ch2 = getchar();
if(ch1 > ch2){ch1 = ch2;}
}
printf("%c", ch1);
return 0;
}
ループの中で1つ文字を読み込むときにi++が2回行われているようなんですが
どうしてでしょうか?
0842デフォルトの名無しさん
2005/08/26(金) 11:59:29改行コードでも入力されたんだろ。
詳しく知りたいなら初心者スレにでも行ってくれ。
0843デフォルトの名無しさん
NGNG英字10って言ってるけど、それだと11個入力しないといけないんじゃない。
0844デフォルトの名無しさん
2005/08/26(金) 12:23:41わかりました。そっちに行ってみます。
>>843
本当だ!気がつかなかった…ありがとう(^ω^)
0845デフォルトの名無しさん
2005/08/26(金) 12:25:28未だにCに拘っている方がいるのはなぜですか?
0846デフォルトの名無しさん
2005/08/26(金) 12:38:33・C++ コンパイラがない
・C++ だとバイナリがかさばって、サイズがヤバい
・最適化能力の上な C でないと速度が少し気になる
・使用可能者の数が多い
・新人教育の手間が省ける
・比較的多くの人が保守可能
・怠慢、理解力不足
・言語学習に時間を割くより娯楽に割く
・C++ が理解できなかった
0847デフォルトの名無しさん
2005/08/26(金) 12:38:530848デフォルトの名無しさん
2005/08/26(金) 12:40:07おそらくこんなところじゃないかと思う。
C++コンパイラがない。
今更新しい言語を学ぶ気にはならない。
Better Cとして使えることを知らない。あるいはBetter CでもCより実行速度が遅いと思い込んでいる。
0849847
2005/08/26(金) 12:41:26『拘っている』って字が読めてなかった
0850デフォルトの名無しさん
2005/08/26(金) 12:59:41・printfの方がいい
0851デフォルトの名無しさん
2005/08/26(金) 13:12:55それはC++を使わない積極的な理由にならない。
つーか、>850自信が>846や>848の最後の行に該当するんジャマイカ。
0852デフォルトの名無しさん
2005/08/26(金) 13:14:560854デフォルトの名無しさん
2005/08/26(金) 13:29:210855デフォルトの名無しさん
2005/08/26(金) 13:46:360856デフォルトの名無しさん
2005/08/26(金) 13:55:17stringに慣れてしまうと一々文字列編集でstr系の処理で配列の上限値を意識するのが面倒になる
0857デフォルトの名無しさん
2005/08/26(金) 14:01:57にゅうが使えない という環境も
いや、使えないことは無いんだけど自分でにゅう作るのもしんどいし
にゅう無いとC++使っててもなんか損した気分になるからなぁ
0858デフォルトの名無しさん
2005/08/26(金) 14:22:340859デフォルトの名無しさん
2005/08/26(金) 14:29:26うー
0860デフォルトの名無しさん
2005/08/26(金) 15:00:450861デフォルトの名無しさん
2005/08/26(金) 15:10:51にゅうが使えない/使いにくい/使いたくない環境もあるということです。
Cやアセンブラなら東京ドーム4杯分に感じる512kbのメモリ空間も
C++だと途端に広島市民球場に見えるということです。
0862デフォルトの名無しさん
2005/08/26(金) 15:14:50C++を完全に手放す理由にはならんだろ。もしかして
int main(){ return 0; }
のプログラムでも使用メモリって両者でけっこう違ったりするもんなのか?
っていうか広島市民球場を馬鹿にするな
0863デフォルトの名無しさん
2005/08/26(金) 15:18:15そうです。でも、BetterCとして使うのは、なんとなくもったいないというか
そういう感じがするだけです。
広島市民球場でも、まあ、野球やろうと思えば 出来ないこともないですし
0864デフォルトの名無しさん
2005/08/26(金) 15:22:09立てるだの立てないだのぐだぐだしてる時期にあるだけで、
いずれは時代も流れて行くものなのでつ Cも廃れる日が来るのでしょうね
0865デフォルトの名無しさん
2005/08/26(金) 15:32:58もったいないってなんだよ。コンパイラの値段が高い、という話ならわかる。
むしろ better C のほうがメモリ節約になる例↓
int main()
{
if(getchar()=='A')return 0;
char str[256]; //↑でAが入力されればこの配列が確保されることはない
gets(str);
return 0;
}
0866デフォルトの名無しさん
2005/08/26(金) 15:33:22そうでなければCっぽいコードとC++っぽいコードが混在してわけわからんコードになる。
規約作ってまでbetterCに拘ることもないかなと。
0867デフォルトの名無しさん
2005/08/26(金) 15:40:54charのコンストラクタが走る事はないと思うが、スタックを消費しない事は
規約で決まってたんだっけ?
0868デフォルトの名無しさん
2005/08/26(金) 15:42:26ワロタ
0869デフォルトの名無しさん
2005/08/26(金) 15:49:07別に「使っちゃいけない」機能があるわけじゃないだろ。
「使うことは推奨しない」だけで。別にそれで致命的なエラーが発生するわけでもあるまいし。
そんなガチガチに縛る必要ないから、規約だって簡易的なもので済むんじゃねーの。
>>867
あ、そこは見落としてた。どうなんだろ。
0870デフォルトの名無しさん
NGNG>あ、そこは見落としてた。どうなんだろ。
VC++だと、関数の途中で変数を宣言しても、スタックの節約にはならないね。
0871デフォルトの名無しさん
2005/08/26(金) 16:31:18うん。それなら広島市民球場よりは広く便利に使えそうだ。
ベターCとしてのC++仕様簡易規約みたいなのをでっちあげるのも
楽しそうだな。
スタックは、多少消費しても暗算で計算できる範囲内なら
まあ問題ないかな
0872デフォルトの名無しさん
2005/08/26(金) 16:56:59・static inline int min(int a, int b) {return a < b ? a : b;}
Cだとマクロを持ち出す必要がある。
で、マクロなら型違いを吸収できるわけだがそれならそれで、
C++にはテンプレートがある。
しかも、適切なオペレータが用意されていれば構造体でも同じ(テンプレート)関数で済む。
Cだとオペレータを用意することもできなければ同じマクロで実装することもできない。
0873749
2005/08/26(金) 17:03:07Cygwin上で bjam --without-test --without-python -sTOOLS=gcc install 中。
つーことで、わかんなかったらboostスレ逝ってみまつ。
0874デフォルトの名無しさん
2005/08/26(金) 17:10:03何もいきなりboostに走らんでもw
まぁ、がんがれ。
0875デフォルトの名無しさん
NGNG吉田弘一郎もC++は書式付出力が使いにくいから実用的な言語でないとかなんとか書いてたな。
おれもstream系は使いにくいと思うけど、なにもそれを持って全否定することはないじゃないかと
思った。
0876デフォルトの名無しさん
2005/08/26(金) 17:21:01strlenやstrcpyを使っているとします。
この時、あるプログラムで関数Bとstrlenやstrcpyを使っている場合、
リンク時にstrlenやstrcpyのコード(?)が重複してプログラムに置かれたりは
しないのでしょうか?
0877デフォルトの名無しさん
2005/08/26(金) 17:26:13しない。
0878デフォルトの名無しさん
2005/08/26(金) 17:35:350879デフォルトの名無しさん
2005/08/26(金) 20:55:54double a, b;
printf("例えばこんなところに(%d, %d)座標が入ってたり\n\t制御コードが入るとね\n", a, b);
0880デフォルトの名無しさん
2005/08/26(金) 21:58:42氏の言語に対する罵倒は、一種の愛情表現ですから。
0881デフォルトの名無しさん
2005/08/26(金) 22:23:21ってえことは、COBOLさいこー、FORTRANまんせーってことですな。
0882デフォルトの名無しさん
2005/08/26(金) 22:41:27ライブラリ作るとき、もうちょっとキレイなインターフェースを考えられなかったのかな。
世界で一番有名になってしまったこのprintfのおかげで、世の中、
発想がprintfしてるインターフェース設計が多すぎ
0883デフォルトの名無しさん
2005/08/26(金) 22:46:480884デフォルトの名無しさん
2005/08/26(金) 22:50:47Javaのprintfを見て、Javaを使うのを止めた
0885デフォルトの名無しさん
2005/08/26(金) 23:07:27型チェックが効かないってのは痛いけど、見た目は美しいと思うんだが。
0886デフォルトの名無しさん
2005/08/26(金) 23:10:580887デフォルトの名無しさん
2005/08/26(金) 23:20:06Javaやってないから何なのかと思って調べてみたら
printfが標準で無いのか
不便すぎるな
0888デフォルトの名無しさん
2005/08/26(金) 23:25:46標準にあるよ。
0889デフォルトの名無しさん
2005/08/26(金) 23:29:10J2SE5から実装されたのか、スマンカッタ
0890デフォルトの名無しさん
2005/08/26(金) 23:29:55くそみそ書いてた。
0891デフォルトの名無しさん
2005/08/26(金) 23:34:420892デフォルトの名無しさん
2005/08/26(金) 23:36:59まずは >>882 が考えている「美しいインターフェース」を持った
ライブラリとはどんなものかを伺おうじゃないか・・・
0893デフォルトの名無しさん
2005/08/26(金) 23:42:260894デフォルトの名無しさん
2005/08/26(金) 23:44:25便利さならphpとかのprintがいいと思うけど
0895デフォルトの名無しさん
2005/08/26(金) 23:44:33puts "rubyは気絶するほど美しい(#{x},#{y})"
0896デフォルトの名無しさん
2005/08/26(金) 23:47:54printf の偉大さが身にしみてくるんだな、これが。
0897デフォルトの名無しさん
2005/08/26(金) 23:48:130898デフォルトの名無しさん
2005/08/26(金) 23:48:59と言いたかったがここはCスレ(´・ω・`)ショボーン
0899デフォルトの名無しさん
2005/08/27(土) 00:04:53と言いたかったがここはCスレ(´・ω・`)ショボーン
0900デフォルトの名無しさん
2005/08/27(土) 00:05:22効率が良いとは言えないんじゃないか。プログラムサイズも大きくする原因になるし、任意の
文字列をchar の配列で取得して、第一引数にそのまま渡すだけなら%があると正常に出力できな
いだけでなく、セキュリティ面の問題もあるそうだな。
putsを使ったり、最後に改行を追加したくないならfputsやprintf("%s", "文字列"); を使ったり
しないものなのかいな。
0901デフォルトの名無しさん
2005/08/27(土) 00:10:130902デフォルトの名無しさん
2005/08/27(土) 00:11:430903デフォルトの名無しさん
2005/08/27(土) 00:12:58それはある。効率が悪いよね。
0904デフォルトの名無しさん
2005/08/27(土) 00:15:10何で?
0905デフォルトの名無しさん
2005/08/27(土) 00:18:07文字列として確保されてしまうか、
かな
0906デフォルトの名無しさん
2005/08/27(土) 00:20:41効率も何もない希ガス。
0907デフォルトの名無しさん
2005/08/27(土) 00:29:04printf()だと文字列に対して%の書式指定がないか検索が行われるから。
0908デフォルトの名無しさん
2005/08/27(土) 00:31:280909デフォルトの名無しさん
2005/08/27(土) 00:31:33そりゃ無いに越したことはないけどさ
0910デフォルトの名無しさん
2005/08/27(土) 00:34:12と言いたかったがここはCスレ(´・ω・`)ショボーン
0911デフォルトの名無しさん
2005/08/27(土) 00:34:41printf("先生、93バイトの文字列を先頭から順に調べましたが、パーセント文字は一つもありませんでした。\n");
printf("全く、何だよ。忙しいというのに余計な手間を掛けさせあがって。\n");
printf("puts()で書いてくれないと無駄な時間をロスして仕事が遅れるじゃないか\n");
0912デフォルトの名無しさん
2005/08/27(土) 00:36:05とはいえ、そういうところにも気がまわるようになるべきだと思う。
無意識のうちに printf("\n") ではなく putchar('\n')を選択できるようにね。
計算機にできることは、計算機にやらせるべきというのも正しいけど、
無駄なコードは一行たりとも書かんという気概でいてほしい。
0913デフォルトの名無しさん
2005/08/27(土) 00:38:12毎回検索に失敗してたら分岐予測が効くから、
いう程は低速化しない希ガス。
0914デフォルトの名無しさん
2005/08/27(土) 00:43:28>>908
0915デフォルトの名無しさん
2005/08/27(土) 00:46:48>別に今のPCならその程度のオーバーヘッドなんて十分に無視できる希ガス
×今のPCなら
○IO自体の低速さに比べたら
0916デフォルトの名無しさん
2005/08/27(土) 00:47:160917デフォルトの名無しさん
2005/08/27(土) 01:14:45ように思えるだろう。揚げ足を取ってるようにも思えるだろう。そして、それにこだわりす
ぎて前に進めないということもあるだろう。
プログラムの学習の一番初めのときから既に、無駄を省くことばかり知恵を働かせるように
してるが。
0918デフォルトの名無しさん
2005/08/27(土) 01:23:570919デフォルトの名無しさん
2005/08/27(土) 01:30:480920デフォルトの名無しさん
2005/08/27(土) 01:33:04それはWindowsの馬鹿プログラマには関係ない
0921デフォルトの名無しさん
NGNGいやバグのなさだろ。
移植以前にまともに動かないと。
0922デフォルトの名無しさん
2005/08/27(土) 01:37:210923デフォルトの名無しさん
2005/08/27(土) 01:37:24バグがないコードだと思うのか?
バグの無いコードは重要以前の問題だろ
0924デフォルトの名無しさん
2005/08/27(土) 01:38:18プログラミングはアートだ。
0925デフォルトの名無しさん
2005/08/27(土) 01:38:32バグのないコード?
そんなのどこにある
0926デフォルトの名無しさん
2005/08/27(土) 01:38:57バグを無しに近づけることが重要。
0927デフォルトの名無しさん
2005/08/27(土) 01:43:06なんかレベル低いねこのスレ。
0928デフォルトの名無しさん
2005/08/27(土) 01:44:34int main(void)
{
puts("何言ってんだ");
return 0;
}
------------------------
上は「何言ってんだ」を標準出力するプログラムです。
バグはありません。
0929デフォルトの名無しさん
2005/08/27(土) 01:49:01いやそう思うならそれでもいいけど
0930デフォルトの名無しさん
2005/08/27(土) 01:49:190931デフォルトの名無しさん
2005/08/27(土) 01:52:510932デフォルトの名無しさん
2005/08/27(土) 01:55:300934デフォルトの名無しさん
2005/08/27(土) 01:55:54コンパイラがCで書いてあって、具体的なバグについての議論ならOK。
0935デフォルトの名無しさん
2005/08/27(土) 01:56:390936デフォルトの名無しさん
2005/08/27(土) 01:58:100937デフォルトの名無しさん
2005/08/27(土) 02:16:07バグがない事を証明してください
0938デフォルトの名無しさん
2005/08/27(土) 02:41:24面白くないよ
0939937
2005/08/27(土) 02:48:47「バグの不在は(少なくとも現実的な手間では)証明出来ない」
ということを知らない人がいるみたいだから。
0940デフォルトの名無しさん
2005/08/27(土) 03:00:31すべての入力に対して正しい出力が得られればそれは正しい。
そしてそのすべての対応をチェック可能であればバグ無しが証明できる。
0941デフォルトの名無しさん
2005/08/27(土) 03:12:310943デフォルトの名無しさん
2005/08/27(土) 03:51:04無限くらい証明できるんじゃない?
0944デフォルトの名無しさん
2005/08/27(土) 03:57:280945デフォルトの名無しさん
2005/08/27(土) 03:58:14仕様にかかれていない範囲での入力に対して、出力に不都合があっても、
それはバグではない
仕様上、入力が有限なら、バグのないことを証明することも可能だ。
といってみるテスト
0946デフォルトの名無しさん
2005/08/27(土) 04:14:430947デフォルトの名無しさん
2005/08/27(土) 04:20:52修正しないのかと
0948デフォルトの名無しさん
2005/08/27(土) 04:33:49たとえば外部デバイスから送られる数値の範囲が仕様で0〜255って決まってたら、
数値が-1や256だったときの動作まで保証する責任はない。
0949デフォルトの名無しさん
2005/08/27(土) 04:36:380950デフォルトの名無しさん
2005/08/27(土) 04:36:53を
puts("abc");
に最適化するコンパイラもあるというのに……
0951デフォルトの名無しさん
2005/08/27(土) 04:38:110952デフォルトの名無しさん
2005/08/27(土) 04:40:450953デフォルトの名無しさん
2005/08/27(土) 04:41:57#最初見たときは目が点になったw
0954デフォルトの名無しさん
2005/08/27(土) 04:46:56システムの設計能力なさそう
0955デフォルトの名無しさん
2005/08/27(土) 05:22:25手元のもそうなった
gccすげーな
gccのGはGNUじゃなくてGodなんじゃないか?
0956デフォルトの名無しさん
2005/08/27(土) 06:17:02この業界、なにかとgccマンセーな雰囲気があるが、
商用コンパイラと比べると見劣りすることも多々あるよ。
たとえば、gccはARMプロセッサ向けのコンパイルでは、
IARやARMのコンパイラと比べて、サイズは馬鹿でかくなるし実行速度も遅い。
組み込み向けの資源が厳しい環境で、これは致命的。
0957デフォルトの名無しさん
2005/08/27(土) 08:42:20ハゲドウ!
0958デフォルトの名無しさん
2005/08/27(土) 10:46:03一般的なプログラムは無理だけれど、特殊なプログラムはできる。
あなた、数理論理学をまともに勉強したこと、本当にあるの?
0959デフォルトの名無しさん
2005/08/27(土) 10:46:23言ってない奴に限って
「M...N の総和を求めろ」
をループで組んだりするんだが…
0960デフォルトの名無しさん
2005/08/27(土) 10:46:43組み込みの世界ではCが使えるだけでも満足すべきだ!
0961デフォルトの名無しさん
2005/08/27(土) 10:51:52使い方によっては、ループの方が速かったりして。
0962デフォルトの名無しさん
2005/08/27(土) 11:42:41x回ループする時に、進行状況を1%、2%と表したいのですが、%が整数の時だけを見極める方法を教えて下さい。
0963デフォルトの名無しさん
2005/08/27(土) 11:44:40i 回目のループで i * 100 / x %
0964デフォルトの名無しさん
2005/08/27(土) 11:44:44ごめん、正規表現ライブラリの前にはかすんで見える。
0965デフォルトの名無しさん
2005/08/27(土) 11:54:530966デフォルトの名無しさん
2005/08/27(土) 12:00:26数十MBや100MB以上のファイルを扱うのでreadやwriteは必須だな。
0967962
2005/08/27(土) 12:04:40ぴったり整数になる時だけ判定できないでしょうか?
0968デフォルトの名無しさん
2005/08/27(土) 12:06:400969デフォルトの名無しさん
2005/08/27(土) 12:07:03判定する必要無いんじゃないの?
0970デフォルトの名無しさん
2005/08/27(土) 12:07:290971デフォルトの名無しさん
2005/08/27(土) 12:08:310972デフォルトの名無しさん
2005/08/27(土) 12:11:066%2は0だけど、2/6は33.33...%ジャマイカ
0973デフォルトの名無しさん
2005/08/27(土) 12:14:53ということにはならんだろ。
下手をすれば、0と100%のときだけしか表示しないことになるんじゃないか。
0974デフォルトの名無しさん
2005/08/27(土) 12:21:11先に100倍なんじゃないか
0975デフォルトの名無しさん
2005/08/27(土) 12:22:49int main(void)
{
int i, x = 6;
int b = -1;
for (i = 1; i <= x; i++) {
if (b != i*100/x) {
printf("%d\n",i*100/x);
b = i*100/x;
}
}
return 0;
}
0976デフォルトの名無しさん
2005/08/27(土) 12:26:451回目の後の時点から表示するなら、完了したときの100%の表示だけしか表示しない
ことが起こりうるな。
0977デフォルトの名無しさん
2005/08/27(土) 12:27:540978デフォルトの名無しさん
2005/08/27(土) 12:35:05整数だけで計算すればどうせ結果も整数になるし、そうでなくてもキャストでもすれば整数にできる。
0979962
2005/08/27(土) 12:49:27整数になる時では無く、
普通に百分率を求めると、
1%
1%
1%
2%
2%
2%
3%
3%
3%
・
・
・
となる所を、
1%
2%
3%
としたかったんです。
0980デフォルトの名無しさん
2005/08/27(土) 12:52:11#include <stdio.h>
#include <windows.h>
#include <process.h>
unsigned __stdcall mythread(void *);
int main ()
{
DWORD thID;
HANDLE hTh;
hTh = (HANDLE)_beginthread(
NULL, 0, mythread, NULL, 0, &thID);
return 0;
}
上のプログラムで、ビルドだけしようとすると、なぜか
_beginthread' : 定義されていない識別子です。
と出てしまいます。
引数のポップアップとかはちゃんと出るので、定義されてないわけないと思うのですが・・
アフォな質問ですみませんが、どなたかお願いします m(__)m
ツールは VC++6.0 です。
0981デフォルトの名無しさん
2005/08/27(土) 12:53:110982デフォルトの名無しさん
2005/08/27(土) 12:55:49#include <stdio.h>
int main()
{
int x, end = 123, cur = 0, tmp;
for(x = 0; x <= end; ++x)
{
tmp = x * 100 / end;
if( cur != tmp )
{
cur = tmp;
printf("%d %%\n", cur);
}
}
return 0;
}
0984デフォルトの名無しさん
2005/08/27(土) 14:00:12DOSのFINDコマンドをよく使うが、巨大なサイズのファイルだったり大量のファイルを検索
したりするから、極限まで高速化したいんでread関数で一気に読んで、出力ために必要とな
る、行単位として扱うための処理をコーディングしたりした。検索はstrstr任せだ。
もっと高速にできるならしたいんだが、どうしようかな。アセンブリ言語を学習してカリカリ
にチューニングするべきかな。
0985デフォルトの名無しさん
2005/08/27(土) 14:02:29ここは標準Cのスレで、低水準ファイル入出力は標準ライブラリに含まれていないからスレ違い。
0986デフォルトの名無しさん
2005/08/27(土) 14:20:13ビットシフトはなんの役に立つのでしょうか?
0987デフォルトの名無しさん
2005/08/27(土) 14:23:410988デフォルトの名無しさん
2005/08/27(土) 14:27:420989デフォルトの名無しさん
2005/08/27(土) 14:42:380990デフォルトの名無しさん
2005/08/27(土) 14:43:29ってどういう意味ですか??
0991デフォルトの名無しさん
2005/08/27(土) 14:47:01c++;
s++;
なんじゃないか。
0992デフォルトの名無しさん
2005/08/27(土) 14:47:18c = &c[1];
s = &s[1];
って意味。
0993デフォルトの名無しさん
2005/08/27(土) 15:02:100994デフォルトの名無しさん
2005/08/27(土) 15:04:15次スレは立てないのですか?
0995デフォルトの名無しさん
2005/08/27(土) 15:14:180996デフォルトの名無しさん
2005/08/27(土) 15:32:160997デフォルトの名無しさん
2005/08/27(土) 15:33:13そういうのやめて欲しいよな…
まだ括弧付けてるだけましだけどさ。
0998デフォルトの名無しさん
2005/08/27(土) 15:33:560999デフォルトの名無しさん
2005/08/27(土) 15:34:291000デフォルトの名無しさん
2005/08/27(土) 15:34:3810011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。