トップページ⇒tech
1001コメント273KB

C言語なら俺に聞け! Part 112

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2005/08/08(月) 01:32:01
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。

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:25
>>1 乙
0003デフォルトの名無しさん2005/08/08(月) 03:30:15
スレタイと微妙に異なるんですが、
計算量がもっとも少ない双方向リストのソートアルゴリズムは何か
教えてもらえないでしょうか。

よろしくお願いします。
0004デフォルトの名無しさん2005/08/08(月) 03:35:45
双方向のリストでそのままソートすんなよ
いったんmallocで配列作ってそれを、qsort
そのあとリストを作り直す
大きさにもよるが速度と汎用性でピカイチだこれ
0005デフォルトの名無しさん2005/08/08(月) 09:36:29
C言語をはじめたばかりであまりわからないのですが、 
0006デフォルトの名無しさん2005/08/08(月) 09:37:46
>>5
あまりわからないのか。そうかそうか。
0007デフォルトの名無しさん2005/08/08(月) 09:52:11
>>5
ここは標準C言語のスレです。
書籍、宿題、コンパイラなどの使い方などはそれぞれ該当スレへ、
初心者丸出しの質問は初心者歓迎の質問スレへ、
その他、他言語の質問、日記などは適宜移動してください。
http://pc8.2ch.net/test/read.cgi/tech/1118072681/
0008デフォルトの名無しさん2005/08/08(月) 12:48:51
char *hoge;

scanf()で取得した文字列をhogeに入れ、atoi()したいのですが、
この場合、atoiに失敗した(数値に直せない)場合も、atoiに成功して戻り値が0の場合も、どっちも0が返ってきてしまいます。
今はstrcmpでマッチ文字列を0、00、000(ryとforでループさせて調べるようにしていますが、
もっと簡単な方法があれば教えてください。

VS.NET、gccを使っています。
0009デフォルトの名無しさん2005/08/08(月) 12:56:41
>>8
ここは標準C言語のスレです。
書籍、宿題、コンパイラなどの使い方などはそれぞれ該当スレへ、
初心者丸出しの質問は初心者歓迎の質問スレへ、
その他、他言語の質問、日記などは適宜移動してください。
http://pc8.2ch.net/test/read.cgi/tech/1118072681/
0010デフォルトの名無しさん2005/08/08(月) 13:09:59
>>8
strtol
0011デフォルトの名無しさん2005/08/08(月) 13:16:06
即答ありがとうございました。
0012デフォルトの名無しさん2005/08/08(月) 13:39:25
>>8
ポインタ変数には文字列は入らない訳だが。
文字列が入っている領域へのポインタ値を入れるべきだ。
0013おれ ◆dHe9wXXwgk 2005/08/08(月) 13:57:59
>>8
文字列の取得にscanf()は辞めたほうがいいと思われ

というのは古いのか?

それと、>>12にもあるが
*hogeの宣言でだけでなく、mallocなりでメモリをアロケートしなくちゃむりぽ
小規模コードなら、配列で世伊部?
0014デフォルトの名無しさん2005/08/08(月) 16:15:52
>>12
実は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
>>4
エーッ、マジっすか?
てっきり横着者の手法だと。。。


回答ありがとうございますm(_ _)m
0016デフォルトの名無しさんNGNG
リンクリストでもクイックソートできるけど、ま、配列に入れてqsort()を呼ぶのが楽だな。
0017デフォルトの名無しさん2005/08/08(月) 18:10:46
char* hoge;
char *hoge;
はどう違うのでしょうか?
0018デフォルトの名無しさん2005/08/08(月) 18:14:00
違わない。好みの問題。
0019デフォルトの名無しさん2005/08/08(月) 18:14:08
書き方
0020172005/08/08(月) 18:14:38
ありがとうございました
0021デフォルトの名無しさん2005/08/08(月) 18:28:09
>>17
自分は
char* hoge;
が好き。
その上で、
char* hoge, *fugo;
は書かず、必ず
char* hoge;
char* fugo;
と書くようにしてる。
0022デフォルトの名無しさん2005/08/08(月) 18:32:39
>>21
で?
0023172005/08/08(月) 18:33:37
char* hoge, geho;
ってかけないんだ しらなかった
0024デフォルトの名無しさん2005/08/08(月) 18:48:53
int i;
int j;
int k;
だるー
0025デフォルトの名無しさん2005/08/08(月) 18:49:55
>>23
書けるけど、
char *hoge;
char geho;
と同意になる。
char* hoge, geho; だと、どっちもポインタに見えて厄介でしょ。
0026232005/08/08(月) 18:53:13
ごめん、俺17じゃない

char* って、キャラ型のポインタ宣言じゃなかったんだ
いつも char *hogeでやってて使ったこと無いからしらんかったよ
0027デフォルトの名無しさん2005/08/08(月) 18:53:18
>>24
そのいい加減な変数名もだるー
0028デフォルトの名無しさん2005/08/08(月) 18:59:30
int a, b, c, d, e, ,i ,j;
0029デフォルトの名無しさん2005/08/08(月) 19:00:39
ひいぃぃ。やめてやめて
0030デフォルトの名無しさん2005/08/08(月) 19:11:06
よく一文字変数にiってみるんだけど
なんか理由あるの?
0031デフォルトの名無しさん2005/08/08(月) 19:13:57
>>30
fortranはIからNで始まる変数名は整数型と決まっていた。
その頃からの流れで、Iterationの頭文字でもあることから
basicやCでも未だにi一文字の変数名が幅を利かせている。
0032デフォルトの名無しさん2005/08/08(月) 19:14:36
iterator の i だったり int の i だったり、習慣や慣れだったり。
0033デフォルトの名無しさん2005/08/08(月) 19:25:07
iterator では it 派の漏れ
0034342005/08/08(月) 19:50:47
質問です。
ファイル読み込みの時に1行ずつファイル名を書いて読み込ませるのが、とても面倒臭く苦しんでおります。
ファイル名に数字を入れてループ文を使い一気に読み込ませる方法があると聞きましたが詳しいやり方がわかりません。
すみませんが、教えてください。
0035デフォルトの名無しさん2005/08/08(月) 19:53:35
>>34
書いてるまんま
0036デフォルトの名無しさんNGNG
>>34
そのファイルの命名に、規則性があれば、いくらでもやりようがあるけど。
0037342005/08/08(月) 19:57:51
自分の考えではファイル名をa*.txtという風にして*を0からの数字にしようと思っているのですが、

for(int i=0;i<10;i++)
{
ファイル読み込み("a"+i+".txt");
}
のようにやってみたのですがうまく行きません。
まいりました・・。
0038デフォルトの名無しさん2005/08/08(月) 19:58:46
sprintf()って知ってる?
0039デフォルトの名無しさん2005/08/08(月) 19:58:52
>>37
君は阿呆なのか?
0040デフォルトの名無しさん2005/08/08(月) 19:59:08
>>38
知ってるけど?それで?
0041デフォルトの名無しさん2005/08/08(月) 19:59:47
ファイル名をsprintf()で作れよw
0042デフォルトの名無しさん2005/08/08(月) 19:59:53
+i+ってなに?
始めてみた
0043デフォルトの名無しさん2005/08/08(月) 20:00:19
初めて・・・ orz
0044デフォルトの名無しさん2005/08/08(月) 20:00:27
>>37
しかもfor-statementで変数宣言ですか
0045デフォルトの名無しさん2005/08/08(月) 20:00:55
>42
ベーシックとかスクリプト系ではよくみかけるな
0046デフォルトの名無しさん2005/08/08(月) 20:01:10
>>44
それは別に問題ないだろ
0047デフォルトの名無しさんNGNG
>>37
とりあえず、入門書の一冊でも読んでください。
0048デフォルトの名無しさん2005/08/08(月) 20:01:36
>>44
0049デフォルトの名無しさん2005/08/08(月) 20:01:45
>>45
どういう意味なの?
0050デフォルトの名無しさん2005/08/08(月) 20:02:31
>49
文字列編集だよ
0051デフォルトの名無しさん2005/08/08(月) 20:02:45
forの中で宣言したらforの中のローカル変数になるんだっけ?
0052342005/08/08(月) 20:02:57
すみません。知りません。
そのsprintfについて少し調べてみます。
0053デフォルトの名無しさん2005/08/08(月) 20:05:53
>>46
処理系によってスコープ範囲が違うからあまり使わないようにしてます。

>>51
初期のころはfor-statementが出てきたところのスコープの末尾まで。
改定された規格ではforの中だけ。
未だにこれ引きずってる処理系はあります。
0054デフォルトの名無しさん2005/08/08(月) 20:10:33
>53
>初期

for(int i=0;i<10;i++)
{
...
}
for(int i=0;i<10;i++)
{
...
}

これがエラーになるのはどう考えてもバグだろw
改定だぁ? はぁ?
0055デフォルトの名無しさん2005/08/08(月) 20:10:55
>>53
そうです
0056342005/08/08(月) 20:14:32
やはり、どうすれば良いのかわかりません。
皆さんの討論にすらついて行けません・・・。
とにかく"a0.txt"と"a1.txt"と"a2.txt"をループ文で一気に読み込めればよいのです。
一番簡単な方法を教えてください。

くだらないと思った人は無視してください。
身勝手な申し出ですみません。
0057デフォルトの名無しさん2005/08/08(月) 20:16:01
だからsprintf()でファイル名を編集汁!
そのファイル名を使う!
0058デフォルトの名無しさん2005/08/08(月) 20:16:12
>>56
sprintfだっていわれてるだろ
0059デフォルトの名無しさん2005/08/08(月) 20:18:53
FILE *fp;
char filename[256];
for(int i = 0; i < 10; ++i)
{
  sprintf(filename, "a%d.txt",i);
  fp = fopen(filename, "r");
    ;
  fclose(fp);
}
0060デフォルトの名無しさんNGNG
>>53
改定されたのってC++の話でしょ。
0061デフォルトの名無しさん2005/08/08(月) 20:25:49
C99規格で,変数の宣言の位置に関してはC++風になりました.
0062342005/08/08(月) 20:26:01
>>59
ありがとうございます。
自分の知らないプログラムを見ると、そんな手があったか〜と毎度思ってしまうほど鮮やかです。
毎度と言えるほどプログラムを書いた事はありませぬが。
本当にありがとうございました!!
0063デフォルトの名無しさん2005/08/08(月) 21:18:23
+i+って・・・ここはJavaScriptのスレじゃないんだが・・・
0064デフォルトの名無しさん2005/08/08(月) 21:29:31
>>63
>>63
>>63
0065デフォルトの名無しさん2005/08/08(月) 21:30:37
そこはJavaって言ってあげるとこだろ
0066デフォルトの名無しさん2005/08/08(月) 21:34:44
お馬鹿
0067デフォルトの名無しさん2005/08/08(月) 22:23:19
HTMLのなかからリンクだけを取り出す関数というかライブラリはありますか?
0068デフォルトの名無しさん2005/08/08(月) 22:35:54
regex
0069デフォルトの名無しさん2005/08/08(月) 22:55:24
>>67
ありました
0070デフォルトの名無しさん2005/08/08(月) 22:57:41
>>68
正規表現でどうしろっていうの?
自分で抜けって事?

>>69
過去形なのはどういう意味?
0071デフォルトの名無しさん2005/08/08(月) 23:03:41
>>67
char* 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;
}

適当に書いてみた。
0072712005/08/08(月) 23:05:30
while((link_begin = strstr(link_begin, "href=\"") != NULL) {
ミス。括弧が足りなかった。
while((link_begin = strstr(link_begin, "href=\"")) != NULL) {
0073デフォルトの名無しさん2005/08/08(月) 23:09:21
いろいろと問題有だな
0074デフォルトの名無しさん2005/08/08(月) 23:14:57
最後の中括弧はなんだ?
0075712005/08/08(月) 23:16:46
余計な中括弧が残ってたかorz
恥かくだけだからもうやめるわ
0076デフォルトの名無しさん2005/08/08(月) 23:42:28
>>71
うちも書いて欲しいから
めっちゃ応援してる
頑張って書いてくれ
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
cmp = strcmp("href=\"", &str[i]);
だった・・・
もう駄目だな。。
0079デフォルトの名無しさん2005/08/09(火) 00:19:42
これどうなってんの?
0080デフォルトの名無しさん2005/08/09(火) 00:21:03
>>79
読むと失恋する
0081デフォルトの名無しさん2005/08/09(火) 00:23:11
失恋したorz
0082デフォルトの名無しさん2005/08/09(火) 00:40:19
ねえマスター、作ってやってよ
涙忘れるソース
0083デフォルトの名無しさん2005/08/09(火) 00:42:20
ねえマスター、
ねえマスター、
ねえマスター、はやくぅ
0084デフォルトの名無しさん2005/08/09(火) 00:49:28
誰もがhref="と空白を空けずに書くと想定するのは如何な最中と。
0085デフォルトの名無しさん2005/08/09(火) 00:53:24
MSHTMLでも使えってことですね
0086デフォルトの名無しさん2005/08/09(火) 02:06:31
>>77
void main(void) {
printf("ガンガレ!\n");
}
0087デフォルトの名無しさん2005/08/09(火) 02:19:01
http://freshmeat.net/projects/htmlcxx/
http://freshmeat.net/projects/libhtmlparse/
0088デフォルトの名無しさん2005/08/09(火) 04:11:10
htmlcxx ってC++じゃなかったか?
0089デフォルトの名無しさん2005/08/09(火) 07:14:03
char *ishref(char *str)
{
  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:16
完全な初心者です。
C言語を覚えたいのですが、環境を整える段階で早くも詰まっています。
Visual C++、gcc、LSI C-68等のコンパイラでオススメの物を教えて下さい。
当方、windousXPです。
0091デフォルトの名無しさん2005/08/09(火) 09:11:38
>>90
スレ違い。VCでもgccでもいいけど、整備の仕方が判らないなら該当スレへどうぞ。
LSI-Cは無条件に薦めない。
0092902005/08/09(火) 09:30:58
>>91
ここかと思っていました、すみません。
スレ違いなのに答えてくださってありがとうございます。
0093デフォルトの名無しさん2005/08/09(火) 20:06:26
質問です。
int 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* をプロトタイプに持つ関数のポインタに、
その位置に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:59
for(〜〜){
  if(〜〜){
    if(〜〜){
      break;
    }
  }
  hoge++;
}

これでbreakが実行されるとforから抜けることになるんですか?
それとも外側のifを抜けてforのhoge++が実行されるのでしょうか?
0098デフォルトの名無しさん2005/08/09(火) 20:19:34
errnoでセットされた値はプログラマが明示的に
クリヤーする必要があるんですか?
0099デフォルトの名無しさん2005/08/09(火) 20:23:07
>>97
まずはおまえ自身でやってみろよ
なんだかもう・・・
0100デフォルトの名無しさん2005/08/09(火) 20:25:11
すいません。友人の家でふと疑問に思ったのです。
書き込みも友人のPCなのでコンパイラをインストできないんです。
今日は泊まりなので家にも帰れませんし。。
0101デフォルトの名無しさん2005/08/09(火) 20:26:25
>>100=>>97です
0102デフォルトの名無しさん2005/08/09(火) 20:28:50
べつに急ぎじゃないんだろ?
帰ってから思う存分やれ
0103デフォルトの名無しさん2005/08/09(火) 20:31:10
>>98
1.errnoは、エラーになったときだけセットされる
2.errnoは、エラーになったときだけ参照する

1.2.より、通常は明示的にクリアする必要は無い
0104デフォルトの名無しさん2005/08/09(火) 20:33:27
>>101
調べると「ループやスイッチ」が対象みたいなのでforから抜けるみたいですね。
どうもでした
0105デフォルトの名無しさん2005/08/09(火) 20:37:20
ところでさ、なんで break の対象は ループや「スイッチ」 なんだろうね。
switch文を抜けるのまで 同じ「break」 である必要はあったのかね・・・
sbreak とか、別ものにして欲しかったと思うことは無いか?

答えろ! >>107!
0106デフォルトの名無しさん2005/08/09(火) 20:39:42
>105
厨房は黙ってろよ
0107デフォルトの名無しさん2005/08/09(火) 21:05:27
>>105
黙ってろ
0108デフォルトの名無しさん2005/08/09(火) 21:09:33
>別ものにして欲しかったと思うことは
ないな。以上
0109デフォルトの名無しさん2005/08/09(火) 21:14:51
>>105
ない。あとおまえは黙ってろ
0110デフォルトの名無しさん2005/08/09(火) 21:16:40
breakじゃなくてgotoにしてほしかった。
0111デフォルトの名無しさん2005/08/09(火) 21:18:34
>>93
一般的なテクニックではないな。
Cはそういうところのチェックが甘いし。
0112デフォルトの名無しさん2005/08/09(火) 21:23:21
>>107
ひどいじゃん
0113デフォルトの名無しさん2005/08/09(火) 21:24:24
>>106
forやwhileの中で、switch文の中からbreakしたくなったことは
一度も無いのか?
0114デフォルトの名無しさん2005/08/09(火) 21:25:41
goto
0115デフォルトの名無しさん2005/08/09(火) 21:26:20
>>93
テクニックというには、使いどころが無さ杉な気がする。
0116デフォルトの名無しさん2005/08/09(火) 21:26:47
breakなんswitch以外で使わなければいい
俺は全部gotoにしてる
0117デフォルトの名無しさん2005/08/09(火) 21:27:54
で、うじうじそんなことを考えてどうするつもりかね。
0118デフォルトの名無しさん2005/08/09(火) 21:30:39
>>111
やはりそうですか。ありがとうございました。

>>115
ポインタをコールバックで渡すとき、
呼ばれた側だけが型の情報を知っている場合に、
別の変数にキャストしなくてもいいので便利かな、と思いまして。
0119デフォルトの名無しさん2005/08/09(火) 21:32:33
>>117
ストールマンとコンパやって、やつが酔っ払ってる隙に
gccのソースを直す。
0120デフォルトの名無しさん2005/08/09(火) 21:35:38
>>116
俺は極力goto使わないようにしてる
「gotoレスプログラミング」っていうぐらいだし
0121デフォルトの名無しさん2005/08/09(火) 21:41:11
俺は極力 後藤 使わないようにしてる
「後藤カスプログラミング」っていうぐらいだし
0122デフォルトの名無しさん2005/08/09(火) 21:48:59
でも多重breakしたいときには仕方がないから使う。
0123デフォルトの名無しさん2005/08/09(火) 22:02:24
gotoレスくらい、ほとんどの人が分かり切ったこととしてるはずじゃないのかいな。

多重ループを脱出するときは、「仕方がない」という意識ではなく、ここぞ使う場面だ
と思って使うが。
01241222005/08/09(火) 22:11:06
>>123
JavaとかDにはラベル付breakなるものがあるらしい。これなら多重breakにgotoを使う必要がなくなる。
これがないCでは「仕方なく」gotoを使うことになる。もちろんラベル付breakをCに導入しろとは全然思っていない。
俺はJavaもDも使ったことがないけど。
0125デフォルトの名無しさん2005/08/09(火) 22:11:47
>>123
そういう場面になったら俺の場合、gotoを使わなくてすむようにロジック組みなおす。
まあ仕事でやってる人はそういうわけにもいかないんだろうけど
0126デフォルトの名無しさん2005/08/09(火) 22:29:02
いや、ほんとくだらねぇんですけど。

「引数」と「値を返す」
の基本的な二つの語句の意味がいまいち理解しきれません。
イメージとしては掴みかけているような感じはするんですけど。。。
0127デフォルトの名無しさん2005/08/09(火) 22:30:01
>>124
>もちろんラベル付breakをCに導入しろとは全然思っていない
俺はぜひ導入してほすぃと思うが。害はないだろ?
0128デフォルトの名無しさん2005/08/09(火) 22:32:00
イメージとしては

       ↓引数
   ← foo(a)
値を返す
0129デフォルトの名無しさん2005/08/09(火) 22:33:41
故後藤先生は、なぜgotoが不当に迫害されなればならないのかと悩んでおられた。
0130デフォルトの名無しさん2005/08/09(火) 22:34:46
gotoを使う奴は強盗
0131デフォルトの名無しさん2005/08/09(火) 22:35:17
近藤さんは毎晩悩んでおられた。
0132デフォルトの名無しさん2005/08/09(火) 22:35:48
>>129
s/悩んで/悲しんで/
0133デフォルトの名無しさん2005/08/09(火) 22:37:59
おまえら本当は、
「gotoを使っちゃダメ」ってエライ学者さんが言ったから使ってはいけない、
程度にしか理解してないのだろ?
0134デフォルトの名無しさん2005/08/09(火) 22:38:57
ごめんなさい先輩風吹かしたいだけです
0135デフォルトの名無しさん2005/08/09(火) 23:02:23
ダイクストラがgoto(゚д゚)マズーって言ったころには、
まだC言語もおまえらも存在していなかったわけだがな。
ttp://www.acm.org/classics/oct95/
0136デフォルトの名無しさん2005/08/09(火) 23:11:15
>>127
反対する気はないが、今さら導入したところで、あまり意味がないよな。
0137デフォルトの名無しさん2005/08/09(火) 23:17:03
>>126
学校でy=f(x)とか習ったかい?
0138デフォルトの名無しさん2005/08/09(火) 23:20:11
gotoを使わないことが自己目的化して関数分割しすぎて
可読性損ねる馬鹿プログラマには参る
0139デフォルトの名無しさん2005/08/09(火) 23:37:24
ダイクストラは、羮に懲りて膾を吹くという感じでgotoを全面否定することはないだろうにな。
0140デフォルトの名無しさん2005/08/09(火) 23:40:00
>137
習いました
0141デフォルトの名無しさん2005/08/09(火) 23:41:29
>羮に懲りて膾を吹く
読み方プリーズ
しつけにこりてろをふく?
0142デフォルトの名無しさん2005/08/09(火) 23:44:10
>>141
あつ‐もの【▼羹】〘名〙
野菜や魚肉を熱く煮立てた汁物料理。◇「熱いもの」の意。
羹(あつもの)に懲こりて膾(なます)を吹く失敗にこりて、必要以上に用心深くなる。◇熱かった羹にこりて膾のような冷たい料理も吹いて冷ます意からいう。
0143デフォルトの名無しさん2005/08/09(火) 23:44:52
あつものにこりてなますをふく

熱いものをはふはふして食べたあとに、冷たい副菜を思わずふーふーしてしまう様から、
ひどい目にあって、同じ目を二度と見ないように、過剰な反応をするの意。
0144デフォルトの名無しさん2005/08/09(火) 23:51:55
あつものにしこりてなますをふく
0145デフォルトの名無しさん2005/08/10(水) 00:01:00
>>140
お前見込みないわ…コミュニケーション能力が…
0146デフォルトの名無しさん2005/08/10(水) 00:03:49
習ったけど、理解はしてないよ
ということでしょう
0147デフォルトの名無しさん2005/08/10(水) 00:04:54
どっちにせよ見込みないわ
0148デフォルトの名無しさん2005/08/10(水) 00:10:57
142を直す
>羹(あつもの)に懲こりて膾(なます)を吹く失敗にこりて、必要以上に用心深くなる。
羹(あつもの)に懲(こ)りて膾(なます)を吹く 失敗にこりて、必要以上に用心深くなる。

>>144
ネタか?
0149デフォルトの名無しさん2005/08/10(水) 00:54:51
にしこり
0150データボックス2005/08/10(水) 01:11:28
できるだけ配列をポインタ扱いでコーディングするように努めてるが、構造体へのポインタの
2次元配列を、それぞれの次元のインデックスや、1次元目の要素数からアドレス計算をしながら
ポインタ扱いして、更にchar * のメンバ変数で文字列を扱ったり、関数の引数にアドレスを渡し
て、関数の中では、もう一段階進んだポインタを扱うことになったりして、苦心惨憺してしまうのお。
関数ポインタの配列も必要だし。
そういうことで悩んでしまうが、どうしようかいな。
0151デフォルトの名無しさん2005/08/10(水) 01:16:38
っ[C++]
0152デフォルトの名無しさんNGNG
>>150
変に工夫しないで素直に組めば?
0153デフォルトの名無しさん2005/08/10(水) 01:37:30
そういうことで悩むならC++使った方がマシ
0154デフォルトの名無しさん2005/08/10(水) 01:40:09
だからC++が使えない開発環境なんだよ!
0155データボックス2005/08/10(水) 01:44:21
いや、今はC++ BuilderでWindowsプログラムのイベントハンドラにC言語のコードを差し込んでるんだけどな。
0156デフォルトの名無しさん2005/08/10(水) 01:59:06
>>できるだけ配列をポインタ扱いでコーディングするように努めてるが
(バッサリ略)
センスの悪い奴がわかってるつもりでへんに頭をひねったつもりになっても、
ちぃ〜ともなぁ〜んの解決にもならん、というだけの話かと。
0157デフォルトの名無しさん2005/08/10(水) 02:16:53
>>156
何だ、半人前のCプログラマの分際で何を言ってるんだ。
0158デフォルトの名無しさん2005/08/10(水) 02:30:46
コピペしてはりまくってください。
9/11選挙では 最高裁裁判官の国民審査もあります。下記2人にはご注意を。
「外国人参政権反対」という主張の人は下の二人(賛成派)を落とすべきです。

[裁判官 滝井繁男の反対意見]
・外国人の地方選挙権を付与することを禁止しているものではないのである(スゲー!)
・日本人に限られるのは地方公共団体の長だけでいい。(スゲー!)

[裁判官 泉�コ治の反対意見]
・地方公共団体は,国が日本における在留を認めた外国人について,当該地方公共団体内における活動
を自由に制限できるものではない。(スゲー!)
・特別永住者が地方公共団体の職員になることを禁止する法はない。
・地方公共団体でトップ、警察、消防、以外なら、外国人を任用してもいい。(スゲー!)
0159デフォルトの名無しさん2005/08/10(水) 09:13:00
可読性を高めるのに配列形式の方が良いとなれば
当然そうするし、ポインタの方が良いとなれば当然
0160デフォルトの名無しさん2005/08/10(水) 09:36:17
>>159
どちらが可読性が高いのか
を決めるは当然、開発担当者?
0161デフォルトの名無しさん2005/08/10(水) 11:15:38
>>156
お前は何の応用力もなく、進歩できないからといって負け惜しみを言ってるだけだよな。
>ちぃ〜ともなぁ〜んの解決にもならん、というだけの話かと。
お前よりは多くの問題解決の実績があるはずだな。
0162デフォルトの名無しさんNGNG
>>150 がどういう状況でどういうコードを書いているか分からんし。
0163データボックス2005/08/10(水) 13:40:38
そうか、Cを完璧にしないうちにC++に進んでもいいのかいな。
0164デフォルトの名無しさん2005/08/10(水) 14:27:00
>>163
Cを完璧?
完璧の定義は?
負け惜しみにもほどがあるな
0165デフォルトの名無しさん2005/08/10(水) 14:33:13
>>164
粘着乙
0166デフォルトの名無しさん2005/08/10(水) 14:52:02
>>165
キモイヨおまえ
0167デフォルトの名無しさん2005/08/10(水) 15:35:53
「C も使えん香具師にはC++は無理」
「藻前に Cは無理、C++でも使っとけ」

どちらの発言にも一面の真理が含まれている。
0168データボックス2005/08/10(水) 15:56:02
高級アセンブリ言語Cを究めなくてどうするんだろうな。
0169デフォルトの名無しさん2005/08/10(水) 15:58:06
究めてから言えや
0170デフォルトの名無しさん2005/08/10(水) 19:12:47
こんばんは、よろしくお願いします。
char 型の配列を一度初期化して、
もう一度値を入れて生きたいのですが、
どうすればよいのでしょうか。
char a[100];
a = "ああ";
a = NULL;のようなこと死体のですが、これではむりです。
a = "いいいい";
0171デフォルトの名無しさん2005/08/10(水) 19:16:21
>>170
入門書くらいは読んでください。
0172デフォルトの名無しさん2005/08/10(水) 19:25:25
char *a;
a = "ああ";
a = NULL;
a = "いいいい";
0173デフォルトの名無しさん2005/08/10(水) 19:56:00
>>171
そうですねすみませんでした。
>>172
ありがとうございます。
できました。
0174データボックス2005/08/10(水) 20:07:00
>>173
char a[100];
strcpy(a, "ああ"); /* #include <string.h> */
*a = '\0';
strcpy(a, "いいいい");
0175デフォルトの名無しさん2005/08/10(水) 20:59:12
関数の引数に hoge(&a)
みたいにアドレスを渡す時って、関数の仮引数に int hoge(*aa)
と書くことが多いだろ?
本で読んだときからずっとハテナだったが、a=10 で &a=FFFFFF(仮に)
だったとき明らかに値がずれてないか?そういう約束なのか?
0176デフォルトの名無しさん2005/08/10(水) 21:02:17
char *a;
a = "ああ";
a = NULL;
a = "いいいい";
strcpy(a, "うううう");
0177デフォルトの名無しさん2005/08/10(水) 21:02:56
>>175
質問は日本語で書いてください
0178デフォルトの名無しさん2005/08/10(水) 21:04:05
>>175
悪いことは言わない。
ポインタのない言語に乗り換えてくれ。
0179デフォルトの名無しさん2005/08/10(水) 21:07:23
>>175
なぜa=10 で &a=FFFFFFだと値がずれるんだ?
0180デフォルトの名無しさん2005/08/10(水) 21:11:02
>>173
別に 172が間違いなわけじゃないが、あきらかに勉強不足なんだから、
文字の配列と文字列定数へのポインタとを混同すんじゃないよ。
174の strcpy()等も調べとく。
0181データボックス2005/08/10(水) 21:12:06
>>176
strcpyはネタだよな。
0182156はこれと156だけ2005/08/10(水) 21:52:49
>>150 って、163,168 同様、厨ネタにしかならんのよ。
そんな不細工なソースを人に受け渡しするなら殴ってもいい。
(C++以前にデータや論理の抽象化云々…)
実際、157,160,161 あたりが、
>>できるだけ配列をポインタ扱いでコーディングするように努めてるが、
に何の意味があるか解説すると、もっと面白くなるかもしれないが。
0183デフォルトの名無しさん2005/08/10(水) 21:56:05
>>181
考えが浅いな
0184デフォルトの名無しさん2005/08/10(水) 22:34:16
156が何言ってるのかわからないのは俺だけですか
0185デフォルトの名無しさん2005/08/10(水) 22:52:26
>>183
詳しく
0186デフォルトの名無しさん2005/08/10(水) 23:12:15
>>185
>>1
0187デフォルトの名無しさん2005/08/10(水) 23:14:03
>>186
ウザス
0188デフォルトの名無しさん2005/08/10(水) 23:15:12
>>186
氏ね世
0189デフォルトの名無しさん2005/08/11(木) 01:09:39
コマンドプロンプトで、コマンドライン引数を使ってプログラムを動かす
のですが、コマンドライン引数の最大長はどのくらいまでですか?
引数の文字列を5000byteくらい使いたいのですが、そんな長さでも正常に
プログラムに引数が渡りますか?
試したら渡ったようなのですが、毎回渡りますか?
0190デフォルトの名無しさん2005/08/11(木) 01:11:16
環境依存
0191デフォルトの名無しさん2005/08/11(木) 01:12:20
int i;
char c;
c = 0xff;
i = c << 24;

これ、gcc3でコンパイルするとi==0xff000000になりますが、
この結果は規格で保証されてますか?
0192デフォルトの名無しさん2005/08/11(木) 01:14:00
>>190
環境依存とはどういうことですか?
0193デフォルトの名無しさん2005/08/11(木) 01:14:11
保証されてないんじゃないの?
0194デフォルトの名無しさん2005/08/11(木) 01:17:27
>>193
windows のコマンドプロンプトでしてますが、それ以外だとできないかも
ということですか。
0195デフォルトの名無しさん2005/08/11(木) 01:23:50
日本語書いてるんだから
日本語を読んで理解できるだろ?

> 環境依存
環境に依存

わかる?
0196デフォルトの名無しさん2005/08/11(木) 01:29:59
たとえばスタック容量不足で変数が消えるとか。賢くないコンパイラではへんなことになる。
0197デフォルトの名無しさん2005/08/11(木) 01:31:16
>>194
Microsoftが仕様として明文化していなければ、同じマシンでも動いたり
動かなかったりするかもしれない。
Posixでは4096バイトまでは大丈夫なはずだが、コマンドプロンプトが
Posixに準拠しているかどうかは知らない。
0198デフォルトの名無しさん2005/08/11(木) 01:31:37
>>191
int型が32ビットとは限らないんじゃないか?
0199デフォルトの名無しさん2005/08/11(木) 01:32:18
>>195
コミュニケーション能力ありますか?
0200デフォルトの名無しさん2005/08/11(木) 01:33:21
>>195が一番適切なレスだと思うんだが
0201デフォルトの名無しさん2005/08/11(木) 01:35:22
>>200
自演か以前自分がそういう感じで答えられて腹立ってんでしょ
0202デフォルトの名無しさん2005/08/11(木) 01:37:24
>>197
レスありがとうです。
さっきwindows 98で試してみましたが、116文字まででした。
windows xpだと4096バイトで試してもうまくいきました。
0203デフォルトの名無しさん2005/08/11(木) 01:39:06
心配するくらいならファイルに記録したものを読み込ませればいいのに。
リダイレクトやパイプが使えるのならそれ使ってもいいし。
0204デフォルトの名無しさん2005/08/11(木) 01:40:28
>>203
ファイルに記録してそれから読ませるようにしてみます。
0205デフォルトの名無しさん2005/08/11(木) 01:44:14
Win98だと116文字か…MAX_PATH以下ってどうなんだろ…
0206デフォルトの名無しさん2005/08/11(木) 01:44:17
>>198
すみません、こうでした。

long l;
char c;
c = 0xff;
l = c << 24;

<< 演算子の左オペランド c は char ですが、
この場合演算前に c が long に promote されることが
保証されているか、が気になっています。
0207デフォルトの名無しさん2005/08/11(木) 01:44:25
staticしる
0208デフォルトの名無しさん2005/08/11(木) 01:50:27
規格上保障されるかどうかより、現実の実装で確実性の高い手法を使うべし。

もちろん後から読んだときに誰でもわかるように、明示的にキャストしてやったほうがいい。
0209デフォルトの名無しさん2005/08/11(木) 02:05:59
>>206
int型以下のサイズの整数演算は、すべてint型で行われる
「格上げ」あたりのキーワードでぐぐるといいかも

intのサイズは処理系依存。
intのビット幅以上のビットシフトの結果も処理系依存。
0210デフォルトの名無しさん2005/08/11(木) 02:22:31
>>205
'FILENAME.EXT' (8 + 1 + 3 = 12)
116 + 12 = 128
0211デフォルトの名無しさん2005/08/11(木) 02:33:14
PSPの制限が由来だな。
doskeyか何かとconfig.sysの設定で
2倍程度までは増やせた気もするが。
0212デフォルトの名無しさん2005/08/11(木) 03:13:39
>>209
なるほど。この場合、intが16bitだとcharの24bit shift結果は
規格上ロストする可能性があるということになりますね。
>>208
そうですね。キャストすることにします。
0213デフォルトの名無しさん2005/08/11(木) 11:05:42
>>182
何がどう厨ネタなのかわからんのだが。
心配するな、お前には受け渡ししないから。
そして、仕事しなくていいから。
>そんな不細工なソースを人に受け渡しするなら殴ってもいい。
それは自分自身のことにならないように気をつけることだな。
0214デフォルトの名無しさん2005/08/11(木) 11:51:07
>に何の意味があるか解説すると、もっと面白くなるかもしれないが。
それを言うなら、何がどう厨ネタなのか「解説すると、もっと面白くなるかもしれないが。」
0215デフォルトの名無しさん2005/08/11(木) 12:10:34
>>208
>規格上保障されるかどうかより、現実の実装で確実性の高い手法を使うべし。
規格上保証されているわけではないが、現実の実装で確実性が高いからその手法でも
まあいい、というのはわかるが、規格が保証されているものよりもあえて、規格は保証
されないが、現実の実装で確実性が高いものを推奨するという意味なのかな。
0216デフォルトの名無しさん2005/08/11(木) 14:17:24
こんにちは

Win32には、::IsDBCSLeadByte(char byte)という、マルチバイト文字かどうかを確かめるAPIがあるのですが、
ANSIライブラリにこのAPIと同様の機能をするものがありますか?
Googleで調べたのですが、どうもHitしませんでした。

教えていただけると助かります。

よろしくお願いします。
0217デフォルトの名無しさん2005/08/11(木) 14:47:35
ありません。
0218デフォルトの名無しさん2005/08/11(木) 16:14:52
linux板の方がいいのかな。

gccなんですが、/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 使えよ
検索順序としては
-I > C_INCLUDE_PATHのような環境変数 > 標準ヘッダ
0220デフォルトの名無しさん2005/08/11(木) 16:34:30
> 素直に -I 使えよ

-Iは複雑なMakefileの中なんで。環境変数指定の方が優先
されると俺も思ってるんだけどなあ。/usr/includeとかの
クリティカルなパスは特別扱いされてるとか。その辺の事情
知らない?


0221sage2005/08/11(木) 16:41:54
>219
モノを頼んで悪いんだけどさ、今手元に環境あるんなら、

/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:51
#include "lunix/config.h"
0224デフォルトの名無しさん2005/08/11(木) 16:53:18
-nostdinc してみるとか
0225sage2005/08/11(木) 17:37:02
やっぱスレ違いかの。だって「俺に聞け」って言うからさ。
ム板はめったに来ないので勝手が分からんでの。

> -nostdinc

なるほど、と試してみた。明示的に標準パスを付加してるはず
なんだけどなーんか微妙にエラーが出るんだよなー・・




ん?てことは/home/.../includeの方を読んでるってことかー?
てことは、阿呆なのはgccではなくやはり俺だったということかー?
0226デフォルトの名無しさん2005/08/11(木) 17:40:16
ていうかよく見たらあげてるな、俺。
0227デフォルトの名無しさん2005/08/11(木) 17:42:04
このスレでは、C言語自体の話題をするのであって、
Cコンパイラの実装の話は他のスレでやってくれ的なんだ
0228デフォルトの名無しさん2005/08/11(木) 17:45:23
Cursesとかで現在カーソルのある座標を取得する関数とかありませんか?調べていますがなかなか見つからない
0229デフォルトの名無しさん2005/08/11(木) 17:51:55
/home/の下読んでた。阿呆なのは俺だった。お騒がせ。
0230デフォルトの名無しさん2005/08/11(木) 17:52:18
>>228
あんたもスレ違いですから。
cursesは専用スレがないから環境依存OKスレかUnixプログラミングスレ辺りかな。
0231デフォルトの名無しさん2005/08/11(木) 17:58:52
>>230
スマソ、スレ違いでした。
CursesにはこだわっていないのですがC言語の標準関数では無理なんでしょうか?
0232デフォルトの名無しさん2005/08/11(木) 18:00:41
>>231
しつこいぞボケ
0233デフォルトの名無しさん2005/08/11(木) 18:04:58
>>231
誘導したんだから……
標準関数に座標を云々する関数がないことくらいすぐ判るだろ。
0234デフォルトの名無しさん2005/08/11(木) 18:12:32
>>213,214
ふうむ、スレ違い相当の低脳厨がはりついてるのだけはよくわかった。
0235デフォルトの名無しさん2005/08/11(木) 20:16:06
はいはい埋め埋め
0236デフォルトの名無しさん2005/08/11(木) 22:10:54
C言語に限らないんだけど質問させて

テストの時、トレースするのめんどいからprintf文で値確かめようとしたら
ソースが汚くなるからやめろっていわれた。テスト終わったら消すっていったんだけど
めんどくさがらないでトレースしろ、といわれたんだけどこれって普通?

知りたい値が最初から決まってるんだからprintfでいいと思ったんだけど
わざわざデバッガでトレースするのめんどくせーし
0237デフォルトの名無しさん2005/08/11(木) 22:18:36
>>236
GUIプログラムとかprintfで出力する先がないときもあるし。
0238デフォルトの名無しさん2005/08/11(木) 22:23:13
>>236
たんなるprintfじゃ、確かに見難くなるかもな。
デバッグ出力用の専用ライブラリを使うなり作るなりしろ。
DBG_PRINT() とか DBG_MSG() みたいな用途がハッキリ分かるマクロなら、そんなに可読性を損なうこともない。
リリース時にはマクロでブランクに置換。
0239デフォルトの名無しさん2005/08/11(木) 22:27:24
デバッガ用のマクロ/スクリプトを書くのが良い方法
と思ったが、その種の機能は使っているデバッガに有りや無しや
0240データボックス2005/08/12(金) 00:25:34
 int n1;

 n1 = 1 //* */ 2
  ;
 
 if (n1)
 printf("何で 0 にならないんだ?\n");
0241デフォルトの名無しさん2005/08/12(金) 00:33:47
>>240
最近のCコンパイラはC++ コメントを理解するから //
以降がコメントとされて消えたと思われ。
0242デフォルトの名無しさん2005/08/12(金) 00:35:22
なんでマジレス?
0243デフォルトの名無しさん2005/08/12(金) 00:58:36
>>236
そもそも、テストの時始めからデバッガ使うなんて横着。
0244デフォルトの名無しさん2005/08/12(金) 01:03:33
全関数全分岐、ステップ実行で目視確認するのかね。
近寄りたくないチームだ。
0245デフォルトの名無しさん2005/08/12(金) 01:16:04
>>236
debugはマクロ使うな。
テスト後にデバック用printfの削除だと
消し忘れが発生するかもしれない。

出荷やソースコードのcvs管理等をやってない、
どーでも良いプログラムならprintfでも有りだけど。
0246デフォルトの名無しさん2005/08/12(金) 01:19:32
マクロの消し忘れと、cvsの関係が分からん。
0247デフォルトの名無しさん2005/08/12(金) 01:21:04
単に最初の一行はその後の文章と何の関係もない文章なのか?
下手だな。日本語。
0248デフォルトの名無しさん2005/08/12(金) 01:24:07
消すのはもったいないなぁ。
起動パラメタなどでデバッグレベル調節できるようにすればリリースバージョンでも
デバッグメッセージ消さなくても済む。
0249デフォルトの名無しさん2005/08/12(金) 01:31:43
まぁ、ASSERTとかTRACEとかのマクロ使うよな、大抵。
0250デフォルトの名無しさん2005/08/12(金) 01:37:05
>debugはマクロ使うな。
この文は「俺はマクロを使うよ。」、「お前らはマクロを使ったらダメだ。」のどちらにも取れる。
>>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:21
で?
0253デフォルトの名無しさん2005/08/12(金) 16:09:27
>>251
独り言ですか。邪魔です。
0254デフォルトの名無しさん2005/08/12(金) 16:12:25
>>251
タイムアウト時間をきちんと設定してください。迷惑です。
0255デフォルトの名無しさん2005/08/12(金) 16:15:54
selectの使い方を間違ってるんじゃないの?
selectから読み書き可能だと通知されたファイルを放置してるとか。
02562562005/08/12(金) 16:21:04
 
0257デフォルトの名無しさん2005/08/12(金) 16:22:31
>>256
なるほど・・・そういう考えもありか
02582512005/08/12(金) 16:23:30
肝心の質問かいてないおれアホッス

CPU負荷率が高いのはselect()使ってたら、しょうがないんですか?
(タイムアウトなしです)
下がられるなら下げたいので、その方法もお願いします。

で、もしかして答えは>>254だったり?
0259デフォルトの名無しさん2005/08/12(金) 16:26:54
マニュアルよんだのか?
読んでないのなら読め
読んだのなら理解できてないからもっかい読め
0260デフォルトの名無しさん2005/08/12(金) 16:33:51
あと、man select_tutの内容もチェックな。
0261デフォルトの名無しさん2005/08/12(金) 16:42:19
つーか、スレ違いだがね。
0262デフォルトの名無しさん2005/08/12(金) 16:55:02
>>260
解決しました、ありがとう。

ちなみに原因↓

SELECT の掟
10. タイムアウトの値は select を呼ぶたびに初期化すべきである。 OS に
よっ て は timeout 構造体を変更する場合があるからである。ただし
pselect は、自分の timeout 構造体を変更することはない。
0263デフォルトの名無しさん2005/08/12(金) 18:47:56
日本語のマニュアルをよんでる時点で
こいつの程度が分かるな
0264デフォルトの名無しさん2005/08/12(金) 18:50:46
>>263
その程度の事しか見ていないお前の程度も解かるよ。
0265デフォルトの名無しさん2005/08/12(金) 19:01:44
>>263
Linuxユーザは基本的に日本語マニュアル読んでるな

0266デフォルトの名無しさん2005/08/12(金) 19:03:10
MIKO GNYOユーザーの俺が来ましたよ
0267デフォルトの名無しさん2005/08/12(金) 19:13:31
>>265
読んでないんじゃなくて読めないんだと思う
イベントとかいったら、たまにLinux使ってる人と話すことがあるけど
そのときになんか聞いたりすると、マニュアル見て英語だったら一瞬で閉じて
googleで日本語サイト限定にして検索する
めっちゃ古いのとか、gnuのじゃなかったりしてもお構い無しにそれを読んでた
0268デフォルトの名無しさん2005/08/12(金) 19:20:53
ここで英語のマニュアル引用しても、読める奴がいないしな。
0269デフォルトの名無しさん2005/08/12(金) 21:25:35
2chは日本人用の掲示板ですから
英語にかぶれた非国民は出て行け!
0270デフォルトの名無しさん2005/08/12(金) 21:32:05
プ
0271デフォルトの名無しさん2005/08/12(金) 21:52:38
正直、K&Rの「5.12 複雑な宣言」が理解できなかった。

char (*(*x[3])())[5];

ってなんだよ?こんな変態じみた宣言を普通に使ってるのか、おまえら?
俺は、宣言の意味さえ分からん・・・
0272デフォルトの名無しさん2005/08/12(金) 21:55:37
必要だからそう宣言するだけ
意味が分かればそれが分かると思う

意味が分からないということは
それが必要でないって事
必要でなければ知る必要もないでしょ
0273デフォルトの名無しさん2005/08/12(金) 21:55:57
そういうのはtypedefで分解してやるとわかりやすいかも
0274デフォルトの名無しさん2005/08/12(金) 21:58:57
char を返す関数ポインタの配列の配列へのポインタ?

なんか戻り地の書き方が変なような。
0275デフォルトの名無しさん2005/08/12(金) 21:59:36
お前ら真面で分からないのか・・・
0276デフォルトの名無しさん2005/08/12(金) 22:00:23
ただの配列じゃん
何が分からないのか分からん
0277デフォルトの名無しさん2005/08/12(金) 22:00:42
関数ポインタの配列と理解した
0278デフォルトの名無しさん2005/08/12(金) 22:04:09
複雑すぎる宣言は使いみちはあまりない。
>>273 みたいなのは、、二段のディスパッチテーブルに分解したほうが使いかってがいい。
0279デフォルトの名無しさん2005/08/12(金) 22:04:28
>>271
http://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:27
いや見ただけで分かるだろ
0281デフォルトの名無しさん2005/08/12(金) 22:09:25
こう言うの、一瞬見ただけで分からないと、Cプログラマーを名乗ってはいけないのか?
0282デフォルトの名無しさん2005/08/12(金) 22:10:29
むしろ解るやつはPerler
02832742005/08/12(金) 22:11:18
「配列へのポインタを返す」ってとこが分からんかった。
つか今でもピント来ないな。

char (*)[]

配列へのポインタだろ。これを返す関数は。どういうプロトタイプになるんだ?

char (*)f()[]

char (*f)()[]

うーん。
0284デフォルトの名無しさん2005/08/12(金) 22:11:24
いけなくは無いと思うけど
charとキャストとポインタが分かってたら分かるだろ
それらを理解してたつもりで上を読んで理解できなかったのなら
理解できてなかった証拠でしょ
0285デフォルトの名無しさん2005/08/12(金) 22:14:41
>>271を読み解くのは問題ないけど、
typedef どう使うのかわからん。
0286デフォルトの名無しさん2005/08/12(金) 22:22:04
>>283
char (*)[]を返す関数はchar ((*)[])()。全体を括弧でくくって右に関数の括弧を付ける。
0287デフォルトの名無しさん2005/08/12(金) 22:22:19
>>285
俺ならこうやる(型名が糞とか抜きね)

typedef char FIXEDSTRING5[5];
typedef FIXEDSTRING5 *LPFIXEDSTRING5;

以下略
0288デフォルトの名無しさん2005/08/12(金) 22:23:54
>>285
つまり自分で書くソースにあんな宣言が必要になったら>>287みたいにtypedefを使うということ。
既存のものを読み解くのに使えるわけではない。
0289デフォルトの名無しさん2005/08/12(金) 22:35:31
>>285
typedef 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:25
なんで、
char*[5] (*f[3])();
じゃないの?演算子の優先順位の問題?
0291デフォルトの名無しさん2005/08/13(土) 06:36:24
ああそうか。悪い、スルーしてン。
0292デフォルトの名無しさん2005/08/13(土) 13:53:41
関数ポインタが入った段階で typedef しちゃうへたれだけど、とりあえず
ttp://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
コマンドラインからもらったargv[]がファイルなのかディレクトリなのか
判断するにはどうすればいいですか?
02942932005/08/13(土) 22:12:31
すいませんWinXPです。
0295デフォルトの名無しさん2005/08/13(土) 22:27:14
>>294
>>1
0296デフォルトの名無しさん2005/08/13(土) 22:42:50
>>293
argv[]は単なる文字列へのポインタ。
その文字列が、ファイル名かディレクトリ名か、
あるいは、その他の意味を持つ文字列かは、
コマンドラインで実行した本人以外は誰もわからん。

その文字列と同じ名前のファイルやディレクトリが
存在するか確認する方法はOS依存。

まあ、拡張子が付いていたらファイル、それ以外はディレクトリ、
ファイル名、ディレクトリ名に使用できない文字があったらエラーとか、
ファイルをオープンしにいって、成功したらファイル、それ以外はディレクトリとか、
そんな安易な実装でいいんだったら、純粋なCでも可能だけど。
0297デフォルトの名無しさん2005/08/13(土) 23:04:40
>>296
そんな安易な実装について聞いているんだろ
OS依存といってもPOSIX準拠な方法があるんだから
もうstatでいいじゃん。面倒くさい。
0298デフォルトの名無しさん2005/08/13(土) 23:10:16
やれやれだぜ
02992932005/08/13(土) 23:42:56
>>297
statをmsdnで調べて出来ました!
ありがとうございました。

>>296
決して安易という訳ではないんですが、
こういうシステム依存の部分て調べ辛くて…
文法とかアルゴリズムは良く見つかるんですけどね。

>>295
言いたいことはよく分かるのですが、
正直、1のリンクからは見つけられませんでした。
0300デフォルトの名無しさん2005/08/13(土) 23:55:13
>>295みたいなのはマジであほというか、ナンセンス
>>296みたいなのは長々と書いてるだけで何の情報も無い
長文結構だが、その中にこっそり情報混ぜてやれよ

こういう>>293みたいなやつにはヒントをあげるだけでいいんだよ。
問題はそのヒントのセンス。
0301デフォルトの名無しさん2005/08/14(日) 00:13:28
ナンセンスとかヒントとか使う奴増えたなー
0302デフォルトの名無しさん2005/08/14(日) 03:45:39
ヒントが増えたことは認めるがナンセンスは認めない
0303デフォルトの名無しさん2005/08/14(日) 04:25:25
>296はダメダメだな。例えばa.txtなるディレクトリがあるやもしれん。
0304デフォルトの名無しさん2005/08/14(日) 05:51:39
ううむ、夏の補講で残されてる数人だけが
俺だって勉強してると言わんばかりに
とくいげに無駄話ばかり続ける状態。
0305デフォルトの名無しさん2005/08/14(日) 12:03:39
ファイルの内容を%x使わないで16進数に表示させたいのですが、どうやったらいいんでしょうか?
0306デフォルトの名無しさん2005/08/14(日) 12:06:27
宿題は宿題スレへ
0307デフォルトの名無しさん2005/08/14(日) 12:06:43
>>305
%x使うのが一番楽。
0308デフォルトの名無しさん2005/08/14(日) 12:11:28
宿題スレにいきます
0309デフォルトの名無しさん2005/08/14(日) 12:12:16
猫でもわかるC言語プログラミングという本を見ながら
勉強しようとしたんですが、わからない事があります。
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:28
まず>>1をよく読む
0311デフォルトの名無しさん2005/08/14(日) 13:50:55
わかってないと思うけど、>>309のしつもんは環境依存なんですよ
Windowsプログラミングのスレで聞いてくださいね
0312デフォルトの名無しさん2005/08/14(日) 14:05:22
>>305
16で割った余りを調べて10-15をa-fに変換して配列に入れる
商が0になるまで続ける
配列を%sで出力
0313デフォルトの名無しさん2005/08/14(日) 14:09:22
その本の作者のサイトがここにある
ttp://www.kumei.ne.jp/c_lang/
そしてここを見て設定しなおせ
ttp://www.kumei.ne.jp/c_lang/net/index.html
0314デフォルトの名無しさん2005/08/14(日) 14:10:05
>>313は
>>309な
03153052005/08/14(日) 16:00:43
>>312
ありがとうございます。

ファイルからデータ読み込む方法はfgetcを使用してるんですが、
漢字が上手く取り込めません。16進数表示部が文字化けしてしまいます。
0316デフォルトの名無しさん2005/08/14(日) 16:07:41
>>315
宿題スレでコードで解答もらってんじゃん
0317デフォルトの名無しさん2005/08/14(日) 16:11:55
>>315
文字化け…?
fgetcの戻り値はただの整数だから化けることはないと思うけど。
言い忘れたけど配列の最後には必ずNULLを入れること。
0318デフォルトの名無しさん2005/08/14(日) 19:09:32
rand関数によって出てくる数列ってOSに依存するんですか?
0319デフォルトの名無しさん2005/08/14(日) 19:18:27
>>318
ライブラリに依存する
0320デフォルトの名無しさん2005/08/14(日) 19:18:42
>OS
じゃなくてコンパイラ付属のライブラリ
(あれ?winな環境だとAPIとかでOSなのか?)
0321デフォルトの名無しさん2005/08/14(日) 19:34:12
>>320
ないない。
UNIX系なら仮想ファイルで乱数取得が可能かも知れんけど
0322デフォルトの名無しさん2005/08/14(日) 20:36:23
「「自分と同じシグネチャを持つ関数へのポインタ」を返す関数」へのポインタ型って定義できるんでしょうか?

typedef 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
>>322
できませんC++でtemplate使いなさい
0324デフォルトの名無しさん2005/08/14(日) 22:53:04
交換・選択・挿入のソートプログラムを作って、試しに50000個の乱数をソートさせてみたのですが、
挿入ソートが他の2つよりも3倍以上早かったんですがそんなものなんでしょうか?
3つともO(n^2)とどこかでみたのですが
03253242005/08/14(日) 22:53:35
すいません。よく考えたらスレ違いですね
0326デフォルトの名無しさん2005/08/14(日) 22:55:27
ある程度並んでいる状態での挿入ソートは
実は効率よく終わるように考慮されているロジックであれば一番速かったりする
0327デフォルトの名無しさん2005/08/14(日) 22:59:20
>>326
こんな感じなのですが、これが基本形ですよね?
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:37
なんでスレ違いに得意げに無意味なレスだけ増やすやつらが沸いて出るんだ?
0329デフォルトの名無しさん2005/08/14(日) 23:41:02
>>324
Oは問題の大きさに対して計算量がどう増加するかを表わすもので、
計算量そのものを表わすものじゃないし。
0330デフォルトの名無しさん2005/08/14(日) 23:42:58
>324
たとえば昇順にソートしたいとき、降順にソート済みの入力でためしとけ
0331デフォルトの名無しさん2005/08/15(月) 04:17:31
つーか、順次生成したデータをソートするケースなら挿入ソートが速いのは自明だ罠。
0332デフォルトの名無しさん2005/08/15(月) 09:18:14
Cってもう時代遅れでC++・C#の方が良いって聞いたんですが本当ですか?
0333デフォルトの名無しさん2005/08/15(月) 09:43:50
>>332
ウソです。
0334デフォルトの名無しさん2005/08/15(月) 09:56:35
>333
そうですか
レス乙です
ヤッパリ老舗のCが良いんですか?
0335デフォルトの名無しさん2005/08/15(月) 10:00:07
Cωが一番良いです。
0336デフォルトの名無しさん2005/08/15(月) 10:03:39
ネタレス止めてくれぃ
0337デフォルトの名無しさん2005/08/15(月) 10:06:28
スミマセン
ググったらマジで有りましたオメガですか・・・
0338デフォルトの名無しさん2005/08/15(月) 10:08:44
もう、しょうがないなぁ、337は
0339デフォルトの名無しさん2005/08/15(月) 10:14:30
でCが安定してて良いんですか?
0340デフォルトの名無しさん2005/08/15(月) 10:24:52
安定させるのはプログラマ次第です。
0341デフォルトの名無しさん2005/08/15(月) 10:25:00
プログラマの技量による
頼むからJavaに移ってくれ…という香具師もいる
0342デフォルトの名無しさん2005/08/15(月) 10:33:25
Cが時代後れということはないのだが、PC 関係のプログラムを
なんでもかんでもCで作る時代は MS-DOS の時代に終った。
0343デフォルトの名無しさん2005/08/15(月) 10:41:16
MS-DOS の時代の後半はメモリの上限が 640KB だった。EMSメモリを
付けてバンク切り替えで記憶容量は増やすことが出来たがそれでも数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/C++スレとかあるだろ。
0346デフォルトの名無しさん2005/08/15(月) 11:53:28
失礼
でも答えてくれて、あんがと
0347デフォルトの名無しさん2005/08/15(月) 12:13:44
なんかこぉバァァァーみたいな
0348デフォルトの名無しさん2005/08/15(月) 14:45:42
>>343
DOSでCが使われるようになったってのも、90年代に入ってからで、
それ以前はアセンブラが多かったとおもう。
0349デフォルトの名無しさん2005/08/15(月) 14:53:41
>>348
TURBO PASCAL がかなり使われてた。その後はLattice C。
MSCが使われだしたのはWindows3.x以降、コンパイラがDPMIなしじゃまともに動かなかった。
0350デフォルトの名無しさん2005/08/15(月) 15:00:49
でも、一太郎V3やLotus123、Mifesみたいなメジャーどころは皆MSCだったような覚えが。
VZがasmだったのは確かだけど。
0351デフォルトの名無しさん2005/08/15(月) 18:00:57
日本じゃTurboPascalはブームになる前にしぼんだような。
すぐにTurboCをはじめ低価格Cコンパイラで、Cブームに。
0352デフォルトの名無しさん2005/08/15(月) 18:44:40
>>351
TURBO 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:57
うるせえよじじいども
0354デフォルトの名無しさん2005/08/15(月) 19:23:36
>>353
盂蘭盆会で地獄の釜が開いてるんだ、今日は大目に見てくれ。
0355デフォルトの名無しさん2005/08/15(月) 19:50:43
じじいだろうと、厨はウザイ、スレ違いだ。
Cの初心者、宿題系に、軒並みバカがはりついてるみたいだからそこに帰れ。
0356デフォルトの名無しさん2005/08/15(月) 21:00:56
#include <stdio.h>
int 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:23
ふ、ふろーと
0358デフォルトの名無しさん2005/08/15(月) 21:20:44
>>356
一般的にfloatの精度は23ビット、即ち高々7桁しかない。
従って、有効なのはは56.78000までが関の山。
%fの代わりに%gを使うことで、誤差を余り見ないで済むかもしれない。
尤も、素直にdoubleを使っとけと言う話になるが。
03593562005/08/15(月) 21:22:01
>>358
ありがとうございました。
0360デフォルトの名無しさん2005/08/16(火) 10:54:11
お邪魔します。

ファイル内のバイナリの数字の羅列に対して、CSV処理するコマンドを作りたいです。
コマンドの引数として、別のファイルの定数一覧からCSVの区切り文字数を受け取って
処理させるものを作りたいと思っていますが、どう作っていけばいいのか分かりません。

どんな感じで作る物なのか、ヒントかもしくは
参考にしやすいサンプルソースを見れるサイトがあったら教えていただきたいです。
0361デフォルトの名無しさん2005/08/16(火) 12:12:25
>>360
>ファイル内のバイナリの数字の羅列に対して、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
>>360
>>1読め。ここは「C言語」自身に関して、だから
プログラムの組み方、等は激しくスレ違い。
0364デフォルトの名無しさん2005/08/16(火) 12:22:16
このソースのエラトステネスのふるいのfor文if文がわかりません。
最初のfor文のi*iの意味、次のif文に論理演算子がないこと、次のfor文のi*2の意味
がわかりません。

そこがわからないので結果の出力のfor文とif文もわからないです。

ネットでも調べたり本でも調べたんですけど、他のソースは別の書き方をしていて
そのやり方なら理解できるのですが、このソースはちょっとわからないのでよろしくお願いします。
0365デフォルトの名無しさん2005/08/16(火) 12:42:25
>>362

>最初の 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
>最初の for の i*i の意味
ある数の約数の片方は必ず平方根以下であるから。
逆に考えると、約数( = 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 ( is_prime[ i ] ) の括弧の中がis_prime[ i ] !=0とかとなっていないのがわからないです。
つ[if文の定義]
03683652005/08/16(火) 14:14:47
>>366

>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:41
ヒープに割り当ててないから。
0371デフォルトの名無しさん2005/08/16(火) 15:53:48
>>369
libc の localtime は、static な構造体へのポインタを返したり、
内部で自動確保&終了時に自動破棄しています。
そのため、受け取ったポインタを明示的に破棄する必要はありません。

ただし、前者はマルチスレッドの時に問題を引き起こす可能性がある
( 排他処理すればいいけどね ) ので、あまりおすすめはされない手法です。

そんなわけで生存期間は実装依存になるため、
あまり離れると移植性の点で問題になるかもしれません。
すぐに手元のローカル変数などにコピーするのがベターです。

ちなみに自分で関数を書く場合には、
struct tm *localtime_r(const time_t *timep, struct tm *result);
この result 引数のように、バッファを渡してもらう形にすると
余計なことを考えなくて済むのでベストです。
03723692005/08/16(火) 16:09:02
>>370
回答ありがとう。
書き方が悪くてすみません。
localtimeは開放しない関数の例として挙げました。
一般に内部しようの分からない関数だったり、自分で作ったりしたときの当該問題における
寿命についての質問です。
03733692005/08/16(火) 16:16:29
>>371
あらたな回答ありがと。

localtimeの仕様は了解しました。
さっきの質問、書き方が悪かったのですが、自分で作った関数内でメモリを割り当てて
そのポインタを返した場合はどうのようにするのが、適切なんでしょうか。

例えば、調べてて、見つけたのですが下記のようなプログラムは非常にマズイと思います。
ttp://c-production.com/contents/c/sec11.html#15

0374デフォルトの名無しさん2005/08/16(火) 16:30:49
>>373
その例がマズイと思えるなら特に言及する必要はなさそうね。

>>371 の最後に書いてあるように、特に何か事情がない限りは
バッファは呼び出し側が用意するのが一番いいかな。
new で確保して free() で解放するようなバグをなくすためにも。

どうしても関数内でメモリを確保しなきゃならないときは、
malloc で確保したら free、new で確保したら delete・・・
というルールを忠実に守ればOK。
0375デフォルトの名無しさん2005/08/16(火) 16:31:14
>>373
fopen()とfclose()みたいに、リソースを確保する関数と開放する関数を作って、
必ず両方呼び出してくださいとすればいいと思う。
(直接「free()を呼び出して下さい」でもいいと思うけど)

そのリンク先は、引数は値渡しなんだから、リターンも値で返せばいいのにな。
0376デフォルトの名無しさん2005/08/16(火) 16:41:01
>>374-375

よくわかりました。
そのルールを徹底します。
丁寧な解説ありがとうございました。
0377デフォルトの名無しさん2005/08/16(火) 16:52:11
>>373の例・・・なんでマズイんか教えてください。。
夏厨で申し訳ないんですが・・・orz
0378デフォルトの名無しさん2005/08/16(火) 16:57:37
>>377
変数 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:35
C++スレで質問してしまったので、こちらへ移動させて下さい
a_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
for( int i = a_position; i >= 0; --i ) hoge( array[i] ); 
これで何が問題?
0382デフォルトの名無しさん2005/08/16(火) 19:09:30
381の回答がすぐ出ないC++スレの連中は一体
03833802005/08/16(火) 19:13:05
>>381
申し訳ないです、仰るとおりっす
これと間違えていました…

if( a_position == 0 )
 hoge( *array );
else
 for( unsigned long i = a_position; i >= 0; --i ) hoge( array[i] );
03843802005/08/16(火) 19:19:55
すいません、>>383もバグありです
要するに符号無しでの綺麗なループの話だったのですが、ぐだぐだなので出直してきます
0385デフォルトの名無しさん2005/08/16(火) 19:21:06
添え字にunsignedを使いたいなら
for( unsigned long i = a_position+1;i--;)hoge( array[i] );
03863802005/08/16(火) 19:27:45
これで解決できました…こんな事でスレ汚しすいません

unsigned long a_position = 0;
do{
 hoge( array[i] );
}while( array_pos-- != 0 );

と、思ったら>>385さんのスマートなレスが!
やっぱり聞いて良かった、ありがとうございました。
ループは前置って刷り込みが駄目でした orz
0387デフォルトの名無しさん2005/08/16(火) 19:29:42
unsigned long a_position = 0;
do{
 hoge( array[a_position] );
}while( a_position-- != 0 );

もう寝よう…
0388デフォルトの名無しさん2005/08/16(火) 20:48:18
ほんとうに(なんで) unsigned long の範囲じゃないといけないのか?
含めて意味ないしすべてスレ違いだと思う。
>>385 境界条件 a_position = ULONG_MAX のふるまいは無視なのか?
03893602005/08/16(火) 21:01:21
>>361
具体的に言うとファイル内に
「1234567890」
等の数字(バイナリ)が入っていて、
また別のファイルに
「3,4,3」
のように数字が入っていて、
これを
「123,4567,890」
に変える処理でう。


>>Cでプログラムを作るのですが、
 Cの仕様に関する質問じゃないとダメでしょうか?
03903602005/08/16(火) 21:02:30
↑すみません抜けてました。
下段のは「>>363」です。
03913852005/08/16(火) 21:08:29
>>388
a_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
>>360
バイナリを連呼しているが、「バイナリ」と「区切り文字数」という二つの単語は矛盾しているよ。
ファイルには単に十進数字文字が入っているだけだろ
03933602005/08/16(火) 21:11:58
>>392
すみません、ちょっと抜けてました。

元のファイルはバイナリで、
それをテキストファイルに、特定の箇所に「,」を入れて出力する感じになります。
0394デフォルトの名無しさん2005/08/16(火) 21:13:01
>>393
そのバイナリファイルには何が入ってるんだ?入ってるのは文字では
ないわけだからカンマ区切りも何もないわけだが。
0395デフォルトの名無しさん2005/08/16(火) 21:18:23
>>383
このスレって黙ってC99前提?
0396デフォルトの名無しさん2005/08/16(火) 21:19:23
>>395
どっちでもいいんじゃね?
0397360=389=3932005/08/16(火) 21:21:28
>>394
見づらくなってしまって申し訳ありません。

書き込みが>>360と>>389と>>393とに分かれてしまっています。
>>389の書き込みで返事になるでしょうか?
0398デフォルトの名無しさん2005/08/16(火) 21:23:12
>>397
なってない。数"字"とバイナリデータを一緒にするな。
0399デフォルトの名無しさん2005/08/16(火) 21:24:51
>>389,360
ソース丸投げだか初心者向きかに逝け、と言われとるんだよ。
質問さえきちんとできてないだろ? ヒント程度では手も足も出ないだろ?
>>394 マヌケは質問者の補助にもならないから黙ってろ。
0400360=389=3932005/08/16(火) 21:28:37
了解しました。

初心者向き、もしくはソース丸投げスレを探してみます。
お騒がせして申し訳ありませんでした。
0401デフォルトの名無しさん2005/08/16(火) 21:58:23
>>360の言いたいのは
要するにバイナリダンプだろ。単にスペースがカンマになっただけで
[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 ................
04023602005/08/16(火) 22:55:23
>>401
フォローしていただいてありがたい所ですが、自分でもよく分かりません。

先日見た設定書では、
ファイルの中の先頭から**バイトにAの情報、次の**バイトにBの情報、・・・
というようなことが書かれていたと記憶しています。
また、「ダンプ」という言葉もチラッと耳にした覚えがあります。

教えを請うには色々と情報が足りなかったようです。
0403デフォルトの名無しさん2005/08/16(火) 23:04:48
>>368
>そして、!= とか == などの演算子は、0 かそれ以外の値をとる整数値になります。
>よって、 たとえば (12 == 13) という条件文は「偽」ではなく 0 という "整数" をとります。

比較演算子は0か1を返してくるよ。
a = ( x > 0 ) ? ( 1 ) : ( 0 );
は
a = x > 0;
と同じ。
見辛いからあまりお勧めはしないけど。
0404デフォルトの名無しさん2005/08/16(火) 23:17:29
>>403
...
0405デフォルトの名無しさん2005/08/16(火) 23:19:19
>>403は何が言いたいのか
0406デフォルトの名無しさん2005/08/16(火) 23:26:15
>>404,405
?
比較演算子は0か1しか返さないって言いたいだけだよ。
0かそれ以外の整数を返すって>>368に書いてあるじゃん。
0407デフォルトの名無しさん2005/08/16(火) 23:39:34
>>406
ならば次の順序で書くべきだな。

a = x > 0;
は
a = ( x > 0 ) ? ( 1 ) : ( 0 );
と同じ。
0408デフォルトの名無しさん2005/08/16(火) 23:43:19
>>404==405==407?
結局何が言いたいの?
0409デフォルトの名無しさん2005/08/16(火) 23:43:40
初歩的な質問で申し訳ないのですが

変数の初期化について質問です

unsigned int x=0;

x++;

こんなプログラムを書いたとすると

延々 xが0になっちゃいますよね

一回だけ初期化して 二回目は無視みたいなことは簡単にできないのでしょうか?
0410デフォルトの名無しさん2005/08/16(火) 23:46:39
>>409
unsigned int x=0;
x++;
こんなプログラムを書くとx==1になるが?
0411デフォルトの名無しさん2005/08/16(火) 23:46:45
static unsigned int x=0;
しかしわかりにくい日本語と情報量だな、>>409糞ガキ
0412デフォルトの名無しさん2005/08/16(火) 23:57:57
比較演算子の演算結果って真偽じゃないの?
0と-1の可能性もあると思ったけど
0413デフォルトの名無しさん2005/08/16(火) 23:59:48
>>409
つ[static]
0414デフォルトの名無しさん2005/08/17(水) 00:00:48
>>402,360
>フォローしていただいてありがたい所ですが、自分でもよく分かりません。
まともに質問できないどころか、設計、仕様さえ理解してなかったわけね。
いいかげん腹たってくるな。ここでそんな告白しないで、挨拶して誘導して、
あっちでちゃんととりさげるのが筋じゃあるまいか? (あやまれとまで言わんが)
ttp://pc8.2ch.net/test/read.cgi/tech/1121644782/433
>教えを請うには色々と情報が足りなかったようです。
まあ、仕事がらみなら会社ん中でちゃんと解決しろよ。
もともとほんとにこの程度の話なら、基礎応用に過ぎないので、
解説やらヒントも何も、アドバイスしようが無いほどなので。
0415デフォルトの名無しさん2005/08/17(水) 00:06:54
>>412
ISO/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言語の本 買ったは良いけれど
他に アルゴリズムの本買えば
C言語のプログラムは作れる様になるの?
0417デフォルトの名無しさん2005/08/17(水) 00:37:34
>>411 413

それでやったけど 延々1のままです
0418デフォルトの名無しさん2005/08/17(水) 00:42:05
日本語が使えないなら該当コード晒せよ
0419デフォルトの名無しさん2005/08/17(水) 00:45:38
もうグローバル変数でも使ってください。
0420デフォルトの名無しさん2005/08/17(水) 00:47:43
int main(int aaa char* aaa[])
{
static unsigned int c=0;
c++;
Printf("%d",c);
}

省略するとこんな感じですかね
0421デフォルトの名無しさん2005/08/17(水) 00:52:13
>>420
まさか起動する度に数字を変化させたいのか?
だったらファイルに書き出すしかない。
0422デフォルトの名無しさん2005/08/17(水) 00:53:04
市ね>>420
市ね>>420
市ね>>420
市ね>>420
氏ね!>420
0423デフォルトの名無しさん2005/08/17(水) 00:53:26
爆笑スマソ
0424デフォルトの名無しさん2005/08/17(水) 00:56:15
>>420
何がしたいのかハッキリ書かんと
どうしようもないよ
0425デフォルトの名無しさん2005/08/17(水) 00:58:03
おそらく>>421の書いたとおりのことじゃないのか
0426デフォルトの名無しさん2005/08/17(水) 00:58:05
>>424

あ いけました
0427デフォルトの名無しさん2005/08/17(水) 01:02:04
そうか、いけたんか。
なんか、もやもやする。
0428デフォルトの名無しさん2005/08/17(水) 01:13:28
>>427

と思ったらいけてないかもorz

pspの自作プログラムのソースをいじってるところなんです
0429デフォルトの名無しさん2005/08/17(水) 01:37:21
int main(int aaa char* aaa[])
{
static unsigned int c=0;
c++;
Printf("%d",c);
main(aaa,aaa)
}
。
0430デフォルトの名無しさん2005/08/17(水) 01:45:21
>>429
えぇっと、何がしたいんですかぇ?

先ず、何でもいいからC言語の本買ってきて
読みましょう。
0431デフォルトの名無しさん2005/08/17(水) 01:48:18
あっ、ついでに言うと
メチャクチャです。
04324202005/08/17(水) 02:00:05
ありゃ ここ IDでないのか

>>430


429は僕じゃないです
0433デフォルトの名無しさん2005/08/17(水) 02:01:11
じゃあ再帰でどうよ?みたいなネタでしょ。
>>409が再帰を理解しているとは思えんし。
0434デフォルトの名無しさん2005/08/17(水) 02:03:33
>>432
そっそうですか。
でも、先ず本読んでください。
0435デフォルトの名無しさん2005/08/17(水) 03:24:42
(笑) >>1嫁。>>420含めておまえらみんな出て逝け(怒)
0436ぼるじょあ ◆yBEncckFOU 2005/08/17(水) 09:20:26
(・3・)
0437ぼるじょあ ◆yBEncckFOU 2005/08/17(水) 10:35:54
>>436
(・3・)エェー ちみも出て行けYO!
04383772005/08/17(水) 14:02:29
>>378-379さん
遅レスになりましたがわかりました、どうもありがとうございます!!
0439デフォルトの名無しさん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
>>439
前者は後者より古い流儀。
後者は前者よりプログラムサイズが小さくなるけど、
それ以外の違いは開発時に感じた事はないな。
0441デフォルトの名無しさん2005/08/17(水) 18:09:48
>>439
static const char* FIXED_STRING[] = "hogehoge";

これは構文ネラーになるはず
0442デフォルトの名無しさん2005/08/17(水) 18:22:15
>>439
static const char FIXED_STRING[] = "hogehoge";
か
static const char* FIXED_STRING = "hogehoge";
ですね。一般的にマクロはデバッグしにくくなりますね。今回の場合は
関係ないかもしれませんが。
0443デフォルトの名無しさん2005/08/17(水) 18:31:16
>442の前者は配列なので長さをsizeof(FIXED_STRING)-1で得られる代わりに、
複数の関数内で利用すると実体が複数作られる。
後者は長さが得られないが実体は複数作られない(かもしれない)。
Cの場合、マクロで充分な気もするのだが。
0444デフォルトの名無しさん2005/08/17(水) 19:54:15
const 変数て、Cだと定数扱いにならないんじゃなかたっけ?
配列サイズの指定で使えない。
0445デフォルトの名無しさん2005/08/17(水) 21:20:29
char[]だとコンパイル時に連結できない
マクロならできる
0446デフォルトの名無しさん2005/08/17(水) 21:26:39
>>445
イヤな使い方だw
0447デフォルトの名無しさんNGNG
>>440
staticにしてるってことは、インクルードファイルにでも書いておいて、
それぞれのファイルで、インクルードするような使い方を想定してるっぽいから、
ファイルサイズは小さくはならないと思う。
0448デフォルトの名無しさん2005/08/17(水) 22:30:54
グローバル変数にすればいい
0449デフォルトの名無しさん2005/08/17(水) 22:37:13
(^^)
0450デフォルトの名無しさん2005/08/18(木) 00:16:18
>>445>>446
#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
>>450
お前は俺か!>>445じゃないけど
0452デフォルトの名無しさん2005/08/18(木) 00:54:11
マクロなら#ifdefできる。
0453デフォルトの名無しさん2005/08/18(木) 00:55:53
>>452
使えても便利と思ったことはない
0454デフォルトの名無しさん2005/08/18(木) 01:10:45
正直、マクロは結構見辛い。
ただ、セミコロンを打たなくていいのは結構うれしい。
0455デフォルトの名無しさん2005/08/18(木) 01:25:33
セミコロンうたないとオートインデントがおかしくなるんですよ。
0456デフォルトの名無しさん2005/08/18(木) 03:10:20
10人の身長デ−タ(data)を背の高い順に並べ換えた後打ち出すプログラムです。正しく動くように虫を取って下さい。
#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 main(void)
{
 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
>>456
スレ違い。
宿題なら宿題スレへ、そうでないなら初心者スレ辺りへ。
0459デフォルトの名無しさん2005/08/19(金) 01:51:21
defineとconst話じゃねのか? >458
04604582005/08/19(金) 08:41:12
>>459
defineの文法までここで教える必要はないと思うが。
0461デフォルトの名無しさん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:40
typedef struct A A;
typedef struct B B;

struct A { B* b; };
struct B { A* a; };
0463デフォルトの名無しさん2005/08/19(金) 10:06:07
>>462
別々のファイルで宣言すること自体がおかしいってこと?
0464デフォルトの名無しさん2005/08/19(金) 10:53:56
>>461
-----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
scanf関数を使用し、コマンドラインからの数字を10回入力し、
入力の中でもっとも大きな数字を表示しなさい。
※入力桁数のエラーについて対処する事

という課題が出されたのですが、入力桁数のエラーがよく分かりません。
誰か教えていただけないでしょうか?
0466デフォルトの名無しさん2005/08/19(金) 12:46:52
>>465
どういうエラーなのかが分からないとなんとも。
0467デフォルトの名無しさん2005/08/19(金) 12:53:11
>>464
ありがとん。できました。
04684652005/08/19(金) 12:55:12
>>466
先ほどのが課題文の全文なので私にもよく分かっていないのですが、
おそらくは型が扱う数字を超えて入力した場合、
たとえば、int型なら32,767より大きい数字を入力した場合に認識されないことについて対処する
ということだと思います。
0469デフォルトの名無しさん2005/08/19(金) 13:26:10
>>468
そう考えた、ということでコード組めばいいんじゃない?

あと、intの場合は環境によってサイズが違うので注意。
 ・sizeofでバイト数をチェックして上限を計算
 ・今の環境に合わせて、とりあえず決め打ち
など、方法はいろいろあるので試してみ。

(独り言)
学校の課題ってのは結果をただ提出するだけじゃないんだよ。
不明点、疑問点があったら提出前に質問しに行ってもいいんだし。
全く分からない、何がわからないのかわからない」ってのは論外だけど。

04704652005/08/19(金) 13:37:53
>>469
助かりました。ありがとうございます
0471デフォルトの名無しさん2005/08/19(金) 13:40:16
つーか、宿題スレがあるんだからそっちでやれよ。
0472デフォルトの名無しさん2005/08/19(金) 13:57:42
>>472
まあ、宿題○投げじゃないから
いいんでないの?
04734652005/08/19(金) 14:00:55
えっと、これ学校の宿題とは違うのですよ。
ですから、宿題スレで質問するのも気が引けてしまいまして(苦笑)
0474デフォルトの名無しさん2005/08/19(金) 14:15:39
int a,b;
double c;
a = 10;
b = 1000;
c = a / b ;
printf("c = %f",c);

結果 c = 0.000000となってしまうのはなぜでしょうか?

0475デフォルトの名無しさん2005/08/19(金) 14:18:49
c = (double)a / (double)b ;
0476デフォルトの名無しさん2005/08/19(金) 14:30:09
>>475
ありがとうございました。

もうひとつすみません。
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
>>469
> ・sizeofでバイト数をチェックして上限を計算

これってintの最大値のことを言ってるの?
だったらINT_MAXを使うのが定跡だと思うけど。
0478デフォルトの名無しさん2005/08/19(金) 14:31:05
質問です。

Cでファイルからデータを読み出すとき、「1行(次の\nまで)を読み込む」ってどうしてます?
fgetc で1文字ずつ読み込んで \n かどうか判定して・・・ってやるしかないでしょうか。
まさか fscanf とか使うのもあれだし。
スクリプトファイルを読み込むときなどに使います。
0479デフォルトの名無しさん2005/08/19(金) 14:33:58
>>478
fgets関数っていうのがありますよ。
0480デフォルトの名無しさん2005/08/19(金) 14:35:18
>>478
fgets()
0481デフォルトの名無しさん2005/08/19(金) 14:36:18
>>479
fgets 調べてみました
・・・今までの苦労は・・・orz ありがとございました。
0482デフォルトの名無しさんNGNG
>>478
一行はかならず*Kバイト以下とか、そういう仕様で割り切れば、fgets()で簡単に書けると思う。
0483デフォルトの名無しさん2005/08/19(金) 14:37:28
>>476
>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
>>483
ありがとうございました。
0485デフォルトの名無しさん2005/08/19(金) 14:38:26
>476
前者の場合、
c = (a + b) /d の右辺はすべて整数値

後者の場合、
c = a + b ;
の時点だと右辺は整数値だが
c = c / d;
ではcがdoubleのため実数値となる

前者の場合でも、aかbをdoubleでキャストすれば
後者と同じ結果になる
0486デフォルトの名無しさん2005/08/19(金) 14:40:44
>>485
本当にすいません。ありがとうございました。
0487デフォルトの名無しさん2005/08/19(金) 20:08:24
FILE型の変数(ポインタ)からint型の整数(ファイルデスクリプタ?)
を得るのってどうすればいいのですか?
0488デフォルトの名無しさん2005/08/19(金) 20:13:49
>>487
VC なら _fileno 関数が。非標準ね。
stdio.h を読んで構造体メンバから引張ってくるとか。
互換性に問題あるけど。
0489デフォルトの名無しさん2005/08/19(金) 20:39:40
>>487
Unix 系なら int fileno(FILE *stream) てなものが...
0490デフォルトの名無しさん2005/08/19(金) 22:14:49
strcpy、sprintfとか使って、char型にしてから、
atoiとかstrgetvalue()とか使えないもんかな
0491デフォルトの名無しさん2005/08/19(金) 23:04:42
>>490
一体全体何を言っているのやら。
0492デフォルトの名無しさん2005/08/19(金) 23:24:55
UNIX系C言語のコンパイルで汎用で使えるMAKEFILEを作りたいんだけど、
何か良い参考書とか
サンプル(オプションなどのコメントアウト付)とかないですかね?
0493デフォルトの名無しさん2005/08/19(金) 23:28:27
>>492
ttp://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
>>492
スレ違い。
Unixプログラミングスレ、makeスレ、書籍スレなどへどうぞ。
04954642005/08/20(土) 01:40:36
>>461==467
あんたに宿題
>>464 のコードから #include 行を削除しても問題がない事を確認し,
なぜ #include 行がなくても問題ないのか述べよ.
0496デフォルトの名無しさん2005/08/20(土) 03:05:41
----- aaa.h -----
typedef struct AAA_{
struct BBB_ *b;
}AAA;

---- bbb.h ----
typedef struct BBB_{
struct AAA_ *a;
}BBB


ってかんじ?
ちなみにstructはtypedefしない方がぱっと見分かりやすいぞ
0497デフォルトの名無しさん2005/08/20(土) 10:58:01
>491
(w)sprintfてのは、int→char変換の為に、て意味でも存在してるぞ
char a;
int b;
(w)sprintf(&a,"%d",b);
0498デフォルトの名無しさん2005/08/20(土) 11:01:14
>>497
'\0'の分を用意していないからだめだろ。snprintf/swprintf
0499デフォルトの名無しさん2005/08/20(土) 15:41:34
/* 約数があるかどうか調べる */
is_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
>>499
約数があるかどうか調べてる
0501デフォルトの名無しさん2005/08/20(土) 16:18:12
>>499
誰が書いたんだ?
i=i+1じゃなくてi++でいいのに
0502デフォルトの名無しさん2005/08/20(土) 16:32:49
>>499
is_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<=num/2 とか書いても速いのかな・・・。
昔々 for (i = 0; i < strlen(s); i++) というのを書いたやつが居て衝撃を受けたことのある俺だが。
0504デフォルトの名無しさん2005/08/20(土) 17:35:42
>>503
独り言なら公園の便所の中でやってくれ
0505デフォルトの名無しさん2005/08/20(土) 18:25:23
公園の便所には阿部さんがいて危険だから自宅のトイレでいいじゃん
0506デフォルトの名無しさんNGNG
>>503
VS2003のVC++で確認したら、ループの外で num / 2の処理をしてるみたい。
05074992005/08/20(土) 18:54:22
>>502
ありがとう!なかなか理解できなくて困ってた。
0508デフォルトの名無しさん2005/08/21(日) 00:23:54
すみません。教えてください。
本当に基本的なことなのですが。

staticで関数外に構造体などの領域を宣言しても
いきなりその構造体が使える(=メモリが割り当てられる)
わけではないのでしょうか?

そこにアクセスしようとすると、
アクセスバイオレーションが発生します。。。。
0509デフォルトの名無しさん2005/08/21(日) 00:30:37
>>508
いいえ、使えます
0510デフォルトの名無しさん2005/08/21(日) 00:42:51
>>508
正しいコードなら>>509のとおりなのであなたのコードに問題があるとしか考えられません。
というわけでソースコードを晒してみて下さい。
05115082005/08/21(日) 00:44:02
すみません。言葉不足でした。

例えば、staticで構造体を宣言します。

typedef struct aa
{
int i;
char *p;
}AA;

static宣言された領域は0初期化されてしまいますので、
pももちろん0になっています。

pはアドレスしか保存されませんよね。
ということは、
どこかにpの実体用メモリ領域が必要になってくるってことなんでしょうか?
05125082005/08/21(日) 00:53:23
すみません。ソース晒した方がよさそうですね。
typedef 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:52
回避する方法というか、addrは何のための変数?
05145082005/08/21(日) 00:59:52
あ。変な宣言になってますね。
上の構造体のtypedefしたaddrは必要ありません。

2番目の構造体で、構造体のアドレスを使いたいのです。
0515デフォルトの名無しさん2005/08/21(日) 00:59:57
typedef struct info{
int id;
a addr;
char *host;
}table_info;
0516デフォルトの名無しさん2005/08/21(日) 01:01:43
>>514
その構造体は何の構造体? struct infoとライフサイクルに違いはある?
何対何の関係?
05175082005/08/21(日) 01:11:19
>>516

上の構造体は、本来なら既に別ファイルで定義されているものなのです。
それを呼び出す形で、2番目の構造体で使いたいとおもっています。
0518デフォルトの名無しさん2005/08/21(日) 01:12:04
そんなことは聞いてない。
0519デフォルトの名無しさん2005/08/21(日) 01:13:35
>>515
でいいじゃん。何が不満よ。
0520デフォルトの名無しさん2005/08/21(日) 01:14:47
ポインタを理解していない模様
0521デフォルトの名無しさん2005/08/21(日) 01:20:11
構造体以前の問題だな
05225082005/08/21(日) 01:20:34
>>515の宣言で、呼び出しができるのですか?

そうですね。ポインタを理解してないのが敗因のようです。
勉強してきます。
大変ありがとうございました!
05235152005/08/21(日) 01:21:19
typedef struct info{
int 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:51
下記のようにバイナリモードで開いたファイルのサイズ(Byte)を得ようとしたのですが、うまくいきません。
fp++がマズいのでしょうか?

for(i=0;feof(fp)==0;i++){
  fp++;
}
0527デフォルトの名無しさん2005/08/21(日) 01:58:34
>>526
そうです。FILE*をインクリメントしてどうする。
0528デフォルトの名無しさん2005/08/21(日) 02:00:02
>>527
あ、考えてみるとポインタだったんですね。
つまり*fp++とすればいいのですか?
0529デフォルトの名無しさん2005/08/21(日) 02:01:43
>>528
そうです。
0530デフォルトの名無しさん2005/08/21(日) 02:02:26
fp はファイル内の位置そのものではない。
ファイル内の位置は、FILE構造体のメンバに隠されている。

移動させたかったら、FILE*を引数に取る、目的に見合ったを関数を使え
0531デフォルトの名無しさん2005/08/21(日) 02:05:17
>>530
さらに構造体だったんですね。。。勉強になりました。
こんな感じですか?
fseek(fp,1,SEEK_CUR)
05325312005/08/21(日) 02:13:37
第二引数がlong型ということで1Lに修正してみましたが、正常に動作しませんでしたorz
0533デフォルトの名無しさん2005/08/21(日) 02:14:03
おしいな・・・
0534デフォルトの名無しさん2005/08/21(日) 02:14:29
>>532
それ以前にファイルサイズの取得は標準の範囲内では出来ない。
環境依存の方法を使うしかない。
0535デフォルトの名無しさん2005/08/21(日) 02:15:11
ケツに移動させてみい
05365312005/08/21(日) 02:20:54
>>535さんの言うようにしても正常に動作しなかったので、
ループ内に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
>>537
ありがとうございます。
ですが上手く動作せず、デタラメな数字がでてしまいます。
バイナリモードだからでしょうか?
それとも私の組み込み方が悪いのかもしれませんが。。。

>fseekの意味を取り違えている。
教えていただけませんか?
0539デフォルトの名無しさん2005/08/21(日) 02:34:19
ほんとにケツに移動したのか?
feek(fp, 0L, SEEK_END);
size=ftell(fp);
いや、おれはいつもstatで取得するけど
05405312005/08/21(日) 02:48:52
>>539
おお、こんな方法があるんですね。
ありがとうございます。
0541デフォルトの名無しさん2005/08/21(日) 07:31:13
今まで一つのファイルでプログラミングを行って来たのですが
複数のファイルにコードを書く場合はどのようなことをするのですか?

また、リンクとはどういったいみなのでしょうか?
0542デフォルトの名無しさん2005/08/21(日) 07:32:56
>>541
まず本嫁
0543デフォルトの名無しさん2005/08/21(日) 07:38:11
普通の入門書には書いてないだろ
0544デフォルトの名無しさん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
main.cに
#include "sub1.c"
#include "sub2.c"
とか書けばOK
0546デフォルトの名無しさん2005/08/21(日) 08:30:17
>>543
俺は普通の入門書読んだが、一通りは書いてあったぞ
まぁ今読んでるK&Rに書いてあるのには及ばないが
0547デフォルトの名無しさん2005/08/21(日) 13:05:33
>>545
モジュール化した方がいいと思うが・・・
0548デフォルトの名無しさん2005/08/21(日) 13:08:35
>>545
pthread-winのソースみたいになっとるな
0549デフォルトの名無しさん2005/08/21(日) 13:10:17
>>545
.c を include するのはあまりおすすめな方法じゃないな。
それでも可能だけど一つのファイルを修正しただけでも
全てのコンパイルをしなければならなくなって効率が悪い。

普通は型やプロトタイプ宣言や#defineをヘッダファイルに
まとめておいてそれを使うソースでincludeする。
0550データボックス2005/08/21(日) 15:36:21
複数のソースファイルをコンパイル・リンクするだけなんじゃないか。
0551デフォルトの名無しさん2005/08/21(日) 16:35:21
>>550
多分ヘッダファイルを書けないんだろう。
0552デフォルトの名無しさん2005/08/21(日) 16:42:08
リンクってどうするの?
0553デフォルトの名無しさん2005/08/21(日) 16:44:44
負けファイル作んないと。
0554データボックス2005/08/21(日) 17:25:00
D:\databox>bcc32 main_kansu_file.c sonota_cfile.c kison_objfile.obj
Borland 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
1 + x/1! + x^2/2! + x^3/3! +・・・・+x^r/r!
をとくプログラム
xとrをきくかたち
教えてください(>Д<)
0556デフォルトの名無しさん2005/08/21(日) 17:41:21
嫌。
0557デフォルトの名無しさん2005/08/21(日) 17:48:46
>>555
それはまず式を簡単にしてからやれよ
そのまま計算するバカはいないよ
プログラミングより先に数学を勉強しなさい
0558デフォルトの名無しさん2005/08/21(日) 18:05:20
x^r/r! = x^(r-1)/(r-1)! * ???????
0559デフォルトの名無しさん2005/08/21(日) 19:34:27
ソースをダウンロードしたら
.o, .lo, .la, .am, .in
というファイルがあるのですがこれはなんでしょうか?
0560デフォルトの名無しさん2005/08/21(日) 19:38:17
質問者は >>1 を理解して、(おそらくほとんどの場合)初心者系や宿題系へどうぞ。
ここではプログラムの組み方を質問するのには不適当です。
やたらレスしたがって >>1を理解したくない、駄弁るだけ、などのかたがたは、
http://pc8.2ch.net/test/read.cgi/tech/1124511889/
へ移動されるのが適当だと思われます。
0561デフォルトの名無しさん2005/08/21(日) 19:50:11
ではまず駄弁るだけの>>560さんが移動してください
0562デフォルトの名無しさん2005/08/21(日) 19:53:14
>>561
つ ttp://pc8.2ch.net/test/read.cgi/tech/1124511889/
0563デフォルトの名無しさん2005/08/21(日) 20:00:55
階乗と累乗教えてください
0564デフォルトの名無しさん2005/08/21(日) 20:04:26
>>563
階乗は自分で書け
累乗はpow
0565デフォルトの名無しさん2005/08/21(日) 20:09:14
新しめのC規格で、オーバーロードってできるのですか?
0566デフォルトの名無しさん2005/08/21(日) 20:23:17
>>555
脳内コンパイル注意
#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:32
char *hoge = NULL;
int *hogo = 0;
となっているのですが、
NULLと0は何が違うのですか?
0568デフォルトの名無しさん2005/08/21(日) 20:33:18
FAQ参照。
0569デフォルトの名無しさん2005/08/21(日) 20:40:17
はぁ?
書き込むんなら答えをかけよ糞が
0570デフォルトの名無しさん2005/08/21(日) 20:41:25
#define NULL 0
0571デフォルトの名無しさん2005/08/21(日) 20:42:56
mallocでメモリを確保してそれを全て0にしたいのですが
forで回す以外の方法は無いのでしょうか?
0572デフォルトの名無しさん2005/08/21(日) 20:46:25
calloc
memset
0573デフォルトの名無しさん2005/08/21(日) 20:47:01
forで回すのなんて本当にやってるやついるの?
0574デフォルトの名無しさん2005/08/21(日) 20:51:42
なんで、mallocはゴミつめたままで、callocはZeroFillなんだろうな?
0575デフォルトの名無しさん2005/08/21(日) 20:51:50
566さん
ありがとう!!!! 
0576デフォルトの名無しさん2005/08/21(日) 20:54:45
>>>574
絶対にする必要は無いからだろ
0577デフォルトの名無しさん2005/08/21(日) 20:56:02
>>574
常にZeroFillする必要は無いけど、
必要な時には効率よくZerofillしたいからじゃない?
0578デフォルトの名無しさん2005/08/21(日) 20:56:36
mallocは絶対にゼロで埋める必要がないといいたいのだろうか。情報少なすぎて意味分からん。
少なくとも>>571には必要なようだが。
0579デフォルトの名無しさん2005/08/21(日) 20:57:09
>>577
だとしたら、何故callocは?
05805792005/08/21(日) 20:57:49
あ、その使い分けが出来るように、変えてあるということか。
0581デフォルトの名無しさん2005/08/21(日) 20:59:15
>>579
自前でfor回したり、後でmemsetするよりも効率よくZerofillすることが
可能かもしれない。
05825792005/08/21(日) 21:00:37
でも、calocとmallocは本来目的が違う関数なのに、そういう設計はなんだかな。
だったらmallocにZeroFillフラグつけるとか、mallocZとかいう別関数で用意するほうが分かりやすいのに。
0583 ◆fZOaF4CQP6 2005/08/21(日) 21:10:15
ここは阿呆連中ばっかりか?
そんなもん、なんで"printf"があるのに"puts"があるのですか
っていってるようなもん
0584デフォルトの名無しさん2005/08/21(日) 21:11:40
そりゃそうだな
ごめん
0585デフォルトの名無しさん2005/08/21(日) 21:42:16
1 + 1/r^2 + 1/r^2 +・・・・+1/r^n
rとnを聞いて
と求めるプログラム
0586デフォルトの名無しさん2005/08/21(日) 21:43:33
>>585
C/C++の宿題を片づけます 49代目
http://pc8.2ch.net/test/read.cgi/tech/1123661447/l50
0587デフォルトの名無しさん2005/08/21(日) 21:58:59
>>583
おまえ、その二つは用途が完全に違うだろ。
0588デフォルトの名無しさん2005/08/21(日) 22:01:34
だからなに?
用途が違うのに一緒のように使おうとするっていう例では丁度いいじゃん
0589デフォルトの名無しさん2005/08/21(日) 22:15:01
int this_option_optind = optind ? optind : 1;
と言うのがあるのですが = の後ろからの意味が分かりません
どのような意味なのでしょうか?
0590デフォルトの名無しさん2005/08/21(日) 22:16:54
自分で調べろ
0591デフォルトの名無しさん2005/08/21(日) 22:17:20
ヒント:三項演算子
0592デフォルトの名無しさん2005/08/21(日) 22:18:33
>>590
答えなかったら?
0593デフォルトの名無しさん2005/08/21(日) 22:23:27
煽りすらまともに出来ないのかよ。
それだけじゃ、何言ってるのかわからん。
0594デフォルトの名無しさん2005/08/21(日) 22:37:54
static struct hoge hoge_hoge[] =
{
{"hoge1", 1, 0, 'a'},
{"hoge2", 1, 0, 'a'},
{"hoge3", 1, 0, 'a'}
};

のようなコードがあるのですが、
なぜhogeとhoge_hogeを二つの変数を宣言しているのですか?
0595デフォルトの名無しさん2005/08/21(日) 22:43:32
>>569
お前生意気帰れ二度と来るな
0596デフォルトの名無しさん2005/08/21(日) 22:47:18
>>594
hoge は変数じゃない
05975692005/08/21(日) 22:48:44
>>595
帰れって言われてもここは自宅ですよ?
あなたが現実とネット上の世界の区別が付かないといわれている人ですか?
0598!=5952005/08/21(日) 22:50:47
>>597は無視でいきましょう。
0599デフォルトの名無しさん2005/08/21(日) 22:52:05
>>594
「struct hoge」型の変数hoge_hogeの宣言。
0600デフォルトの名無しさん2005/08/21(日) 22:52:27
>>598 = >>595だな
0601デフォルトの名無しさん2005/08/21(日) 22:53:21
それが何か?
0602デフォルトの名無しさん2005/08/21(日) 22:54:11
必死だな
0603デフォルトの名無しさん2005/08/21(日) 22:55:33
>>589
条件演算子
そのコードの意味としてはこんな感じ。

int this_option_optind;
if (optind != 0)
    this_option_optind = optind;
else
    this_option_optind = 1;
0604デフォルトの名無しさん2005/08/21(日) 22:56:31
static hogeをループで回したときは、なぜ多重宣言にならないんですか?
0605デフォルトの名無しさん2005/08/21(日) 22:58:47
>>597
見苦しいぞ
0606デフォルトの名無しさん2005/08/21(日) 22:59:20
>>604
たとえ何回ループされようとソースコード上ではたった1箇所でしか定義がなされていないから。
0607デフォルトの名無しさん2005/08/21(日) 22:59:28
見苦しいのは595だと思う
0608デフォルトの名無しさん2005/08/21(日) 23:00:40
>>606
一度目のループで宣言され
二度目のループで2回目は宣言されないのですか?
0609デフォルトの名無しさん2005/08/21(日) 23:02:54
>>604
悪いが言ってる意味が分からん
具体例を挙げてくれ
0610デフォルトの名無しさん2005/08/21(日) 23:06:01
>>608
だから1回目とか2回目と考えるのがナンセンス。
プログラムの実行するとき、ソース上でstatic変数の宣言している箇所を通ったらその変数が用意されるというわけではない。
コンパイル時にコンパイラがstatic変数を見つけたらその時点で領域を確保しておく。
実行時にはただ確保された箇所をstatic変数として使うだけ。実行時には宣言なんてどこにも残っていない。
0611デフォルトの名無しさん2005/08/21(日) 23:06:53
while(1){
static int hoge = 0;
hoge++;
}

これだと何度もhogeが宣言されると思うのですが
0612デフォルトの名無しさん2005/08/21(日) 23:08:48
>>611
なんで?
0613デフォルトの名無しさん2005/08/21(日) 23:08:54
>>611
static の意味調べてね

べーた臭がする・・・
0614デフォルトの名無しさん2005/08/21(日) 23:09:21
>>611
プログラムの実行時に静的変数の宣言は実行されるものではない。
予め場所だけ用意しておき、静的変数を参照するときにはいつでもそこを見に行くだけ。
0615デフォルトの名無しさん2005/08/21(日) 23:10:43
while(1){
static int hoge = 0;
hoge++;
}
は
static int hoge = 0;
void foo()
{
while(1){
hoge++;
}
}
とほぼ同じ。違いはブロックの外からは直接参照できないこと。
0616デフォルトの名無しさん2005/08/21(日) 23:12:49
>>597
お前友達いるのか?
06175972005/08/21(日) 23:17:00
>>598
なんであなたは自分の意見を共有したがるのですか?
自分で意見があるのなら他人まで巻き込まないで自分で実行しましょうよ

>>616
いますよ
そんなこと聞いてどうするんですか?
私の経験から行くと、「友達いるのか?」って聞く人のほうが
友達がいないような気がするんですけど
0618デフォルトの名無しさん2005/08/21(日) 23:19:49
いい加減C言語と関係ないこと書き込むのやめれば?
0619デフォルトの名無しさん2005/08/21(日) 23:21:34
>>618
お前らがやめろ
それで終わる
0620デフォルトの名無しさん2005/08/21(日) 23:22:15
構って君を構うやつが一番悪い。
0621デフォルトの名無しさん2005/08/21(日) 23:26:14
>>617
そうか、いるのか。
ふーん。では、ここではそういう現実とネット上の世界の区別を付けてるわけか。
0622デフォルトの名無しさん2005/08/21(日) 23:28:13
>>621は 宣言子でいうと auto あたりかな
0623デフォルトの名無しさん2005/08/21(日) 23:40:46
>>617
>なんであなたは自分の意見を共有したがるのですか?
あなたも >>569 の意見を共有できるものならしてみたらどうですか?
0624デフォルトの名無しさん2005/08/21(日) 23:45:33
>>567
NULL = ヌルポインタ
プロセスが0ということだ
int *a =0
は
int* a;
a = 0;
でポインタaにプロセス0を渡してる
0625デフォルトの名無しさん2005/08/22(月) 00:00:55
>>619
お前らって・・・
俺書き込んでなかったんだけど。
まあいいけどさ。
0626デフォルトの名無しさん2005/08/22(月) 00:03:36
>>625
お前も同類だバカ
0627社長2005/08/22(月) 00:45:47
"\x35\x39\x37"
解雇
0628デフォルトの名無しさん2005/08/22(月) 00:58:23
>>624
プロセスって…
0629デフォルトの名無しさん2005/08/22(月) 01:15:51
>>567
そもそもchar型ポインタにNULLのファイルポインタを代入している時点で
ファイルはクラッシュします.
NULLは0ではありません.
0630デフォルトの名無しさん2005/08/22(月) 01:24:35
>>567
ここを最初から最後まで読め。
ttp://www.kouno.jp/home/c_faq/c5.html
0631人事部2005/08/22(月) 02:22:37
社員番号 0x255の方、あなたに解雇処分が決定しました。
0632デフォルトの名無しさん2005/08/22(月) 02:26:36
>>629
あれ? そうだったっけ? それは保障されてなかったっけ?
0633デフォルトの名無しさん2005/08/22(月) 02:32:06
>>629
ポインタへの 0 の代入は NULL の代入になる。
http://www.kouno.jp/home/c_faq/c5.html#2
06346292005/08/22(月) 02:52:43
ごめんなさい,根本的なところを間違えていました.
fopen()で(FILE *)を返すのでFILEという構造体を返すものだと勘違いをしていました......
0635デフォルトの名無しさん2005/08/22(月) 05:11:11
スレ違いとアホ大杉…… orz
629 はてっきり冗談(悪意の)だと思ってたが…
つ ttp://pc8.2ch.net/test/read.cgi/tech/1124511889/
0636デフォルトの名無しさん2005/08/22(月) 07:28:15
>>566
>>558 を読んでやりなおし。
0637デフォルトの名無しさん2005/08/22(月) 08:45:21
友達はいても会社クビになる見苦しい人、何で恥の上塗りしてるんですか?
0638デフォルトの名無しさん2005/08/22(月) 13:46:07
>>631
>あなたに解雇処分が決定しました
日本語で話してください。
0639デフォルトの名無しさん2005/08/22(月) 14:28:55
>>638
あなたを、解雇です。
0640デフォルトの名無しさん2005/08/22(月) 14:40:09
お部屋をお連れします
0641デフォルトの名無しさん2005/08/22(月) 14:40:34
>>639
あなたに、解雇です。
0642デフォルトの名無しさん2005/08/22(月) 15:54:32
あなたは、可愛い子です
0643デフォルトの名無しさん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
>>643
なにがまずいわけ?
0645デフォルトの名無しさん2005/08/22(月) 17:36:26
>>643
Windowsの話なら
union int_long {
 short i[2];
 long j;
} itl;
にして、
 itl.i[1] = 1024;
とすることでコメント行の結果になる。
キーワードはhighとlow
0646デフォルトの名無しさん2005/08/22(月) 18:08:30
>>643
内部で Big endian (上位桁が下位アドレスに入る形式) で数値を扱っている
マシンならお望み通りになる。Little endian (下位桁が下位アドレスに入る
形式) のマシンの場合は正の整数の値の場合 short を long に入れても値に
変化はない。図にするとこうだ。

上位addr         下位addr
00000000 00000000 00000100 00000000
|-------------- long -------------|
         |------short-----|

ずれているかも知れないが脳内で修正しろ。
0647デフォルトの名無しさん2005/08/22(月) 18:10:21
そんなエサに俺様が
0648デフォルトの名無しさん2005/08/22(月) 18:10:54
ずれまくりw
0649デフォルトの名無しさん2005/08/22(月) 19:04:02
紛らわしい書き方だなぁ。
実際にメモリに置いた状態との対比とかしないと。
06506432005/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:48
なんか中庭ででけえ音楽鳴らして車に乗ってるカスがいるな
0652デフォルトの名無しさん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:50
広い中庭ですね。
06546512005/08/22(月) 19:30:02
スレッドミス.....orz
スレ違いスマソ
0655デフォルトの名無しさん2005/08/22(月) 20:33:44
>>652
用途は違うかもしれないが、参考までに。
-- 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
06566522005/08/22(月) 20:38:08
↑のように書くことで、OUTPUT_NUMマクロはprintfと同じ書式で
unko.txtに出力できるようになる。

また、_OUTPUT_FLAGの定義をコメントアウトすることで、
ソース中のOUTPUT_NUM()があっても出力を抑止できる。
0657デフォルトの名無しさん2005/08/22(月) 20:43:47
まさかこれほどすばらしい答えが得られるとは、
正直思っとりませんでした
さすが2ちゃん・・・
>>656さま本当にありがとうございました
06586562005/08/22(月) 20:48:46
今更ながら>>656の名前間違えてたorz
>>656 = >>655ね
なんで質問者になってるんだよ俺www

ちなみに、↑のはVCのTRACEマクロと同じやり方ね。
06596502005/08/22(月) 21:42:05
すみません.よく考えてみたのですが
union {
 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
>>659
ビックエンディアンとリトルエンディアンは調べた?
0661デフォルトの名無しさん2005/08/22(月) 21:57:26
どう考えても...入るんじゃないのか?
0662デフォルトの名無しさん2005/08/22(月) 22:05:28
ググッたら IntelのCPUなのでリトルエンディアンを採用しているようです.
下位ビットから転送されるということは例えば,
ch[0] の値が100,ch[1] の値が120 としたとき二進数表記がそれぞれ 01100100,01111000
となっているとしたらメモリのビットの並びは
00100110 || 00011110
となっているということでしょうか?
0663デフォルトの名無しさん2005/08/22(月) 22:05:57
>>659
#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;
}
06646592005/08/22(月) 22:12:39
すみません,コテ忘れました...>>662 == >>659です.
0665デフォルトの名無しさん2005/08/22(月) 22:17:23
なんか、バイナリ入出力だ endianだ、似たようなバカ
なこと聞いてくるのが沸いて出るなあ。
>>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
>>666
いいよ
0668デフォルトの名無しさん2005/08/22(月) 22:29:30
659,662 のあほさ加減は、ネタなんだよな!?
0669デフォルトの名無しさん2005/08/22(月) 22:31:07
>>666
return 0でもいいけど、それじゃ何のためにsum()呼んでるの?
0670デフォルトの名無しさん2005/08/22(月) 22:31:37
>>665
質問者と回答者の双方が学生さん
0671デフォルトの名無しさん2005/08/22(月) 22:32:15
いや、わかりません。。

解説おねがいできますか?
06726592005/08/22(月) 22:33:19
ネタではないです......
独習C の練習問題でどうしても解答のやっていることが理解できなくて質問させていただきました.
スレ違い,失礼いたしました.
0673デフォルトの名無しさん2005/08/22(月) 22:41:33
>>672
ちょっと待って。それこそ初心者系じゃないか、とか、
endianとかは他の書籍も参考にきちんと調べろよ、とか
は置いといて…
その「独習C の練習問題」というのは一般の書籍のことなのか?
スレ違いだがいちおう最後に晒してくれ。
(書籍にきちんと解説があるはずの場合もあるし、例題、書籍自体が
トンデモナイ場合があるので…)
0674デフォルトの名無しさん2005/08/22(月) 22:44:33
そもそも

return numとreturn 0

の違いが分かりません。。
厨質すんません。。
0675デフォルトの名無しさん2005/08/22(月) 22:45:02
そういうのは先生に聞いてくれ
0676デフォルトの名無しさん2005/08/22(月) 22:50:23
>>673
「独習C 第三版・Herbert Schildt著・翔泳社」です.
すでに改訂版が出ているようですが.....
事前に代入処理の型変換についての解説はありました.
0677デフォルトの名無しさん2005/08/22(月) 22:53:39
>>674
厨質にもほどがある。
まずはまともに本で自習してくれないか。
0678デフォルトの名無しさん2005/08/22(月) 22:54:41
今日からC言語を勉強し始めたばかりのものです。
ぶっちゃけ、
int a=1;
・・・・
とかからどうやってドラクエとか作るんでしょうか?めちゃめちゃ不思議です。
0679デフォルトの名無しさん2005/08/22(月) 22:54:47
>>677
いや、ネタだろういくらなんでも・・・
とりあえず676が本気でやる気あるのなら、
トリップつけて(自分でくぐれよ)初心者スレへどうぞ...
0680デフォルトの名無しさん2005/08/22(月) 22:56:45
猫。
ttp://www.kumei.ne.jp/c_lang/index_c.html
0681デフォルトの名無しさん2005/08/22(月) 22:59:05
>>678
戦闘のダメージとかはただの計算式だし
表示は画面を構成する二次元の点々に色付けるだけだし。
まずはマルバツでも作ってみたら。
ユーザーの入力、計算、画面の出力という意味でドラクエと変わらんw
0682デフォルトの名無しさん2005/08/22(月) 23:06:00
俺にはプログラムでドラクエが動くことよりも、ドット絵師の技術の方が不思議に見える。
0683デフォルトの名無しさん2005/08/22(月) 23:06:24
>>682
漏れも。
0684人事部2005/08/22(月) 23:20:22
社員番号:0x0255の方、次の職探しで大変ですね。
受けた会社から聞き合わせの電話が来たら、しっかりとあなたの問題行動を伝えておきますので。
0685デフォルトの名無しさん2005/08/22(月) 23:21:17
ヒットアンドブローはお手軽に作れてそれなりに遊べて、
プログラムの練習に超おすすめ。
0686デフォルトの名無しさん2005/08/22(月) 23:24:47
聞き合わせ?
0687デフォルトの名無しさん2005/08/23(火) 06:18:47
>>676
お手数です。続けるべきじゃないですがチト引っかかるので…
「代入処理の型変換」って「代入文での型変換」ということですよね。
そもそも、
>>643 >>共用体を使ってshort型で入れた整数をlong型に変換
にある例を、いわゆる"型変換"と呼ぶ(考える)のは誤解のもと
でしょうから注意。(強いて言えば byte(or bit)列の操作かなあ?)
その本も見たこと無いんで十分な説明があるのか良否はわかりませんが、
入門者に誤解を与えかねないのは危険かも。
どちらにせよ学習者が1冊だけを参考にするのは不備でしょう。

0688デフォルトの名無しさん2005/08/23(火) 09:43:34
プログラムの一部を//や/**/等でコメントにすることをなんと言いますか?
0689デフォルトの名無しさん2005/08/23(火) 09:44:51
コメントアウト
0690デフォルトの名無しさん2005/08/23(火) 09:45:07
>>688
コメントアウト
0691デフォルトの名無しさん2005/08/23(火) 09:46:09
>>689-690
ありがとう

では、コメントアウトした部分をもとに戻すことはなんと言いますか?
0692デフォルトの名無しさん2005/08/23(火) 09:56:50
あまり使わないような気もするけど
encomment/decomment
0693デフォルトの名無しさん2005/08/23(火) 13:05:45
コメントアウトを戻す
0694デフォルトの名無しさん2005/08/23(火) 17:19:15
コメントイン
0695デフォルトの名無しさん2005/08/23(火) 17:34:20
お前マジ頭いいな
0696デフォルトの名無しさん2005/08/23(火) 23:18:29
普通だって。
# なんだ、この流れは。
0697デフォルトの名無しさん2005/08/23(火) 23:21:52
>>691
uncomment 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
>>698
リストって線形リストか?
とりあえず新たに挿入するノードようの領域をmallocなりcallocなりで確保して
こいつへのポインタをnewにでも放り込んでおく
んで、挿入位置の直前にあるノード(A)の次のノードへのポインタをnewの次へのポインタに複写
その後、Aの次へのポインタをnewへのポインタに書き換えて終了
0700デフォルトの名無しさん2005/08/23(火) 23:55:25
>>698
A→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
口−−→■⇒

 ◆を挿入

口→◆♂■⇒
07026982005/08/24(水) 00:25:47
簡単な挿入をおこなってるプログラム書いてほしいって言ったら…駄目?

よんでもいまいちワカランのよ
0703デフォルトの名無しさん2005/08/24(水) 00:26:59
今読んでるの葬ってソースの載ってる本探せよ。
0704デフォルトの名無しさん2005/08/24(水) 00:31:15
持ってる本はリスト関連がのってなくて…
0705デフォルトの名無しさん2005/08/24(水) 00:31:56
>>704
線形リストでググれ
0706デフォルトの名無しさん2005/08/24(水) 03:25:26
単方向リスト?
双方向リスト?
0707デフォルトの名無しさん2005/08/24(水) 03:35:59
>>698の態度が気に入らない
0708デフォルトの名無しさん2005/08/24(水) 03:37:56
すいません、質問です

char * 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
char * GetStr (char *_szTemp)
{
 strcpy(_szTemp, "abc");
 return _szTemp;
}
07107082005/08/24(水) 03:45:23
>>709
にゃるほど。それで行けますね。
どうもありがとうございます。 m(__)m

GetStr()で宣言した文字列を返したほうがスマートになるような
気がするんですが、それは無理ですか?
0711デフォルトの名無しさん2005/08/24(水) 03:45:52
>>710
std::string GetStr() 
{
  std::string str("abc");
  return str; 
}
0712デフォルトの名無しさん2005/08/24(水) 03:49:27
/* 俺も暇だなぁ */
typedef 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:32
>>710
char *GetStr()
{
return "abc";
}

0714デフォルトの名無しさん2005/08/24(水) 03:53:55
>>710
動的に確保していいんなら

char *GetStr() {
 return strdup("abc");
}

きちんと後で free すること。


あと、静的なデータならそのまま return できる。

char *GetStr() {
 return "abc";
}

char *GetStr() {
 static char _szTemp[128];
 strcpy(_szTemp, "abc");
 return _szTemp;
}

ただ、静的なので当然データは同時に1つしか存在できない。
呼び出すたびに違うのを返したい場合には使えない。


ただまあ、普通は >>709 の形にするんじゃない?
07157082005/08/24(水) 04:00:55
全然スマートじゃないんですが、

char * GetStr ()
{
 char *_szTemp = "wertyuytrewruyreertyurertyuiitrertyuytre";
 strcpy(_szTemp, "abc");
 return _szTemp;
}

↑がいけるかと思ったら無理でしたww

>>711 >>713 >>714
std::stringはまだわからないので、
>>709か、できたら>>713で行って見ます。
皆様、どうもありがとうございます。
0716デフォルトの名無しさん2005/08/24(水) 04:04:03
>>715
Cの初歩の初歩で学ぶ禁じ手をやっている。
一冊Cのテキストを読むことをお勧めする。
そんな調子じゃ、まともなものは作れない。
0717デフォルトの名無しさん2005/08/24(水) 04:05:37
>>715
そもそも文字定数って書き換え不可じゃなかったっけ?
0718デフォルトの名無しさん2005/08/24(水) 04:06:13
>>716 >>717
うはwwごめんなさい。
つい必死で。
0719デフォルトの名無しさん2005/08/24(水) 05:34:46
つ >>1 だから、無能厨が初心者と雑談するスレじゃないちゅうに。
0720デフォルトの名無しさん2005/08/24(水) 06:22:18
アロー演算子が a->pnext->pnext とか2つ以上続いちゃうと
なんとなく不安になるんですが、考えられるまずい要素とかありますか?
0721デフォルトの名無しさん2005/08/24(水) 07:43:46
>>720
>考えられるまずい要素とかありますか
あんたの頭。
0722デフォルトの名無しさん2005/08/24(水) 07:50:13
あんたのあたま
0723デフォルトの名無しさん2005/08/24(水) 09:55:08
>>720
演算子の優先順位をあたまにたたきこんでくだちい
0724デフォルトの名無しさん2005/08/24(水) 10:00:01
a->pnext が何度も出てくる場合は効率悪いってくらいか。
最適化効くかもしれんけど。
0725デフォルトの名無しさん2005/08/24(水) 10:00:55
>>723
優先順位じゃなくて結合規則だ。
0726デフォルトの名無しさん2005/08/24(水) 10:20:47
>>725
そうだ、それをいいたかったんだよ
0727デフォルトの名無しさん2005/08/24(水) 12:46:28
>>720
tmp = a->pnext;
tmp->pnext
でいいだろ。
まずいというか、ポインタ参照は出来るだけ深くしないように習慣づけた方が良い。
****pとか論外。
簡単な事を複雑に見せてるだけでハッタリと変わらん。
0728デフォルトの名無しさん2005/08/24(水) 13:04:23
リストの二つ先を拾うだけなら別にa->pnext->pnextでいいじゃん。
流石に五つも先ならa->pnext->pnext->pnext->pnext->pnextはやりすぎだと思うけど。
0729デフォルトの名無しさん2005/08/24(水) 13:25:53
>>720
途中のポインタが NULL になっていた時に落ちる。
0730デフォルトの名無しさん2005/08/24(水) 14:19:25
void abc( void ) {
int 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:27
void f( int mode ) {
 int 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
>>730
コピペしてちょっと変えるだけの手抜きは決して許してはならない。
俺がそういう関数が数百ある他人の書いたプログラムのデバッグで
どれだけ苦労していると思ってるんだ。ふざけるな。
0733デフォルトの名無しさん2005/08/24(水) 14:38:19
は?
0734デフォルトの名無しさん2005/08/24(水) 14:40:42
>>731のを横から勝手に改造。

enum 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:00
文字列を直接渡す方がマシ
void 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:29
トリッキーな解としては関数ポインタを渡すとか。
void 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
こう言う場合一行追加される if 文を気にしていた
自分が阿呆であると知ったいい機会でした
皆様レスありがとう!
0738デフォルトの名無しさん2005/08/24(水) 16:10:54
>>735
>if ( prompt[0] ) printf( prompt );
こういうコードはやめて欲しい。
せめて
if ( prompt != NULL )
とかにしてくれ。
ぬるぽが来たらどうすんだ。
0739デフォルトの名無しさんNGNG
>>735 の場合は、ifを省略して、

printf( prompt ); だけでいいような気が。

0740デフォルトの名無しさん2005/08/24(水) 16:36:36
ダメすぎ。NULLはprintf()に使えない。
厳密にやるなら、
if (prompt) {printf("%s", prompt);}
でないと%を含む文字列を表示できない。。
0741デフォルトの名無しさん2005/08/24(水) 16:37:59
話が完全に反れてるな
0742デフォルトの名無しさん2005/08/24(水) 17:07:48
>>735と同じスタンスだが
個人的には文字列は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:59
>>742
printf( RAKKI "%d" ,in );
とはしないの?w
0744デフォルトの名無しさんNGNG
>>740
プロンプトがなしの場合、NULLを渡すか、長さが0の文字列を
渡すかって仕様の問題じゃん。
NULLを渡さないって仕様ならifはいらないって話。
0745デフォルトの名無しさん2005/08/24(水) 22:27:48
うーん、こういう質問てここでいいのかな。より適切なスレがあれば誘導よろしこ。

Cで自作アプリを書き始めたのですが、(1)「できるだけ小さく」
(2)「他のライブラリに依存しない」を目指したら、標準Cがあまりにも
プリミティブ過ぎて、再発明した(しかも出来の良くない)「車輪」が量産
されつつあります。(メモリ管理とか文字列とかリストとかマップとか)

さすがにやってられないので、(2)はあきらめて、できあいの「車輪」を
使おうとしてるのですが、皆さんこういうとき何を使ってますか?

とりあえずライセンスのぬるいaprを使おうかと思ってるのですが……。

ちなみに、C++には宗教上の理由で近付きたくないです(ぉ
# いや、単に挫折しただけなんですが(^^;
0746デフォルトの名無しさん2005/08/24(水) 22:30:04
ちいさくする意味がわからん
0747デフォルトの名無しさん2005/08/24(水) 22:40:49
C++ を better C として使えばいい。
0748デフォルトの名無しさん2005/08/24(水) 22:51:46
あとSTLも必要だな。

大丈夫、STLはオブジェクト指向じゃないから。
0749デフォルトの名無しさん2005/08/24(水) 22:58:45
>>746
初めてC++をさわったとき、Hello worldのバイナリが数MBになったのが未だにトラウマだったりしまつ。
>>747 >>748
オブジェクト指向に挫折したんじゃなくて、C++に挫折しました。JavaやRubyには挫折しなかったんですが……。
0750デフォルトの名無しさん2005/08/24(水) 23:04:16
>>749
今、VC7.1で試してみたけど、Hello, worldに目いっぱいの最適化をかけて48KiBになったよ。

しかしSTLを使わないのは惜しいな。
お前が例に挙げた文字列とかリストとかマップとかはみな含まれている。
0751デフォルトの名無しさん2005/08/24(水) 23:05:26
ここはアンチ野郎がC++を使ってくれるように説得してあげるスレじゃありませんから。
0752デフォルトの名無しさん2005/08/24(水) 23:06:57
それもそうだな。
そっとしておこうか。
0753デフォルトの名無しさん2005/08/24(水) 23:27:13
ttp://axts10.web.infoseek.co.jp/bitmap_text.gif
↑このように、ビットマップファイルを輝度値の行列にしたいのですが、
方針としては、

ヘッダー情報読み取り
 ↓
ピクセルデータを24bitずつ読み出しては先頭の8bitを10進数で出力
 ↓
出力した輝度値が1行分の数になったら改行を出力
 ↓
以下繰り返し

こんなかんじでできるでしょうか?
0754ESP2005/08/24(水) 23:30:00
それでいいだろ。何を求めてるんだよ。
0755デフォルトの名無しさん2005/08/24(水) 23:56:53
ビットマップは絵の一番下のデータが一番最初にくるという逆転構造になってるから、
そこだけ注意な。
07567532005/08/24(水) 23:59:08
>>754
>>755
ありがとうございます。
C言語プログラムは初めてなのですごく緊張してます・・・
またお世話になるかもしれませんので、そのときはよろしくお願いしますm(_ _)m
0757デフォルトの名無しさん2005/08/25(木) 00:05:52
あと、グレースケールならパレットになってるかもな。
0758デフォルトの名無しさん2005/08/25(木) 00:10:24
>>753
画像編集ツールでxpmとかpgmを出力できるのを探してこい。
例えばIrfanView(プラグインも必要かな)でもいい。
bmpファイルをそのツールで開き、pgmの場合はOptionでAsciiに設定の上、
保存すればほぼ目的に到達できるぞ。
#自分でプログラミングする場合でも一度見ておくといいと思う。
07597532005/08/25(木) 00:22:32
>>757
いちおうカラー画像として保存してるんですが、
確認するようにします。
>>758
あ・・・ できちゃいましたw
まぁ、練習ということで組めそうならがんばってみます。
ありがとうございました。
0760デフォルトの名無しさん2005/08/25(木) 01:37:48
>>745
過去に作ったプログラムから使えそうなものを拾って繋ぐ。
0761デフォルトの名無しさん2005/08/25(木) 01:55:35
質問です!
printf();でバイナリをそのまま出力させたいんですがどう指定すればいいんですか?

あえてASCIIに変換したくないんですが・・・
print("%c",0xff);とすると、Dosプロンプトに出力された時のメモリ上にffと格納されるんでしょうか?
おねがいします。
0762デフォルトの名無しさん2005/08/25(木) 01:57:44
>>761
バイナリをそのままってどういうことだ?
バイナリエディタで表示されるような感じのを出したいのか?
0763デフォルトの名無しさん2005/08/25(木) 01:57:53
まずは、入門書から読み直せ
0764デフォルトの名無しさん2005/08/25(木) 01:58:05
「そのまま」の定義がよー分からんが、
%02X みたいなことを意味しているんだろうか。
0765デフォルトの名無しさん2005/08/25(木) 02:04:54
>>761
一つの方法としては
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:01
「バイナリ」が何なのか、
printf がどういう関数なのか、
全く分かってないように思われる。
0768デフォルトの名無しさん2005/08/25(木) 02:13:05
>>766
それだと文字列が表示されると思いますが。
しかも妙な。
0769デフォルトの名無しさん2005/08/25(木) 02:17:13
こいつには>>763のレスで十分だろ
0770デフォルトの名無しさん2005/08/25(木) 02:18:00
printfに拘る必要がわからない。
fwriteでいいのではないか。
0771デフォルトの名無しさん2005/08/25(木) 02:20:15
print "\xff\xff"
これで普通にできるが・・・
こいつは何を言ってるんだ?
0772デフォルトの名無しさん2005/08/25(木) 02:20:59
>>766
言いたいことは
printf("0x%x", 0xff);
ですか?
0773デフォルトの名無しさん2005/08/25(木) 02:21:04
リダイレクトしてファイルにしたときに、
0xff(文字ではなく数値)で埋められたバイナリファイルができてほしいってことか?
0774デフォルトの名無しさん2005/08/25(木) 02:22:04
深まる謎
0775デフォルトの名無しさん2005/08/25(木) 02:22:58
>>772
%#xでいいじゃん
0776デフォルトの名無しさん2005/08/25(木) 02:26:47
で、肝心の>>766さん、いかがですか?
0777デフォルトの名無しさん2005/08/25(木) 02:26:57
>>771
それは、%sとかのパターンが入ったときに嫌な予感。
07787662005/08/25(木) 02:27:19
>770
対象がファイルじゃないんです・・
>771
perlですか?参考にします!
>772
ASCIIじゃだめなんです
>773
そうです。
何故かprintfを介さないと相手は受け取ってくれなくて・・
ASCII文字では無く数値そのままを渡したいんですが・・


うう・・入門書から出直してきます・・orz
0779デフォルトの名無しさん2005/08/25(木) 02:28:25
ここまで阿呆だとカポーンだな
0780デフォルトの名無しさん2005/08/25(木) 02:29:20
>>778
> 対象がファイルじゃないんです・・
stdoutファイルへ出力すれば?
0781デフォルトの名無しさん2005/08/25(木) 02:32:27
リダイレクトなんかしないでFILEポインタ宣言して素直にfputc()かfwrite()を使ったらどうですか?
fprintf()もprintf()も最終的にテキストになるから無理ですよ。
0782デフォルトの名無しさん2005/08/25(木) 02:37:26
>>766
例えば、0x41を出力したときどんな風に表示させたいのかね?
"A"?それとも"0x41"?
0783デフォルトの名無しさん2005/08/25(木) 02:39:09
用語の統一が大切だって良く分かった。
0784デフォルトの名無しさん2005/08/25(木) 02:42:15
つまり、最初の %c でいいんじゃないのか?
putchar でもいいと思うが。
0785デフォルトの名無しさん2005/08/25(木) 02:59:07
>>784
それだと文字に変換されたのが出るんじゃなかったっけ?

まぁどっちにしろ766の言ってることはいろいろとおかしいが
0786デフォルトの名無しさん2005/08/25(木) 03:08:37
>>785
単に1バイトそのまま出力するだけなんだが?
ディスプレイに出力すれば文字として表示されるだけであって。
0787デフォルトの名無しさん2005/08/25(木) 03:10:40
それは分かってても言わない約束よ
0788デフォルトの名無しさん2005/08/25(木) 03:12:03
言わなきゃいけないことだよ馬鹿
0789デフォルトの名無しさん2005/08/25(木) 03:18:28
ど、どーぶる。
0790デフォルトの名無しさん2005/08/25(木) 05:54:33
質問はともかくスレ違いなアホなレスする奴はどっか逝け。
>Dosプロンプトに出力された時「のメモリ上に」ffと格納されるんでしょうか?
>何故かprintfを介さないと相手は受け取ってくれなくて・・
あたりで、意思の疎通が無理なのは自明。
0791デフォルトの名無しさん2005/08/25(木) 10:59:11
かなりスレ違いな気もするがどこで聞いたらいいか分からないので
dx/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
>>793
本は見たことないけど、サイトのほうを見るとあまりよくないと思う。
(本はゴーストライターが書いていて、悪くはないって話もあるけど)
0795デフォルトの名無しさん2005/08/25(木) 15:28:02
>>793
過去ログサイトから 2ch books を見ていろんな本の書評を見てみたら?
0796デフォルトの名無しさん2005/08/25(木) 15:29:40
>>793
猫だとは基本的な概念とか文法についての説明が不足しているので
他にちゃんとしたC言語の入門書 (サイトでもいいけど) がほしいところ。

あと、付属のCDにはコンパイラとサンプルソースが入ってた気がする。
0797デフォルトの名無しさん2005/08/25(木) 15:33:45
お答えどうもありがとうございました。
では、他の本で分かりやすいおすすめのはないでしょうか?
0798デフォルトの名無しさん2005/08/25(木) 15:37:49
void
0799デフォルトの名無しさん2005/08/25(木) 15:45:15
>>795
そういうページがあるのを初めて知ったw
過去ログにまとまってるリンクも便利だね。
>>793ではないが、ありがトン
0800デフォルトの名無しさん2005/08/25(木) 16:03:04
>>797
>>795読んでますか?
0801デフォルトの名無しさん2005/08/25(木) 17:13:51
>>793
>>795+推薦図書スレ行ってこい
そこのお勧め本使ってそれなりに勉強してる最中の俺ガイル
0802デフォルトの名無しさん2005/08/25(木) 20:13:14
個人的には日下部先生の本がお薦め
08037932005/08/25(木) 21:19:12
すいません、なぜか795飛ばしてましたorz
柴田望洋氏の本を図書館で借りてみました
過去ログも見てみます
0804デフォルトの名無しさん2005/08/25(木) 22:05:18
>>802はネタ
0805デフォルトの名無しさん2005/08/25(木) 23:14:37
漢字とか2バイト文字ってどう実現させればいいんでしょうか
0806デフォルトの名無しさん2005/08/25(木) 23:15:27
メモリに2バイト格納すればいいと思うよ。
0807デフォルトの名無しさん2005/08/25(木) 23:19:03
DOSだとアルファベットをscanfとかで配列や動的に確保した変数に代入できますが、
漢字とかひらがなとか入力できないんでどうすればできるのかなぁと
0808デフォルトの名無しさん2005/08/25(木) 23:28:17
できますがなにか。
0809デフォルトの名無しさん2005/08/25(木) 23:50:27
コマンドプロンプトの設定を替えればできるのかな。
0810デフォルトの名無しさん2005/08/25(木) 23:53:29
全角/半角じゃ入力が切り替わらないって問題?
0811デフォルトの名無しさん2005/08/25(木) 23:54:28
Alt+全角
どいつもこいつも小出しにしやがって
0812デフォルトの名無しさん2005/08/25(木) 23:54:52
そうです。すみません説明不足で
0813デフォルトの名無しさん2005/08/26(金) 00:33:18
重複してたらすいません、コンパイルするさいに
エラーE2209 インクルードファイルをオープンできない、といわれました
borland c++ 5.5 ってコンパイラーを使ってます。

誰か教えていただけませんか?
0814デフォルトの名無しさん2005/08/26(金) 00:34:36
セットアップを死ぬほどやれ
08158132005/08/26(金) 00:43:13
w やっぱそうですよね、
cの本についてるCDと同じ名前だったのでc++の本についていた付録CDをつかったんですけど、
それは関係ありませんよね?

コンパイルするとき bcc32 ***.c ってやってるんですけど
cのときとc++のときってコンパイルの仕方が違ったりするのですか?

超初心者ですいません、あと環境設定ってのはなんですか?
0816デフォルトの名無しさん2005/08/26(金) 00:44:26
ググれ。
08178132005/08/26(金) 00:45:41
らじゃ
0818デフォルトの名無しさん2005/08/26(金) 00:46:56
readme嫁
08198132005/08/26(金) 00:50:33
そのreadmeがcにも適応してるのかどうかわかんなくて
cをコンパイルするときでもbcc32でいいんですか?
c++のコンパイラでもcはコンパイルできるって書いてあったのでやってたんですけど
0820デフォルトの名無しさん2005/08/26(金) 00:51:43
とりあえず全てのマニュアルを嫁
08218132005/08/26(金) 00:52:36
了解
0822デフォルトの名無しさん2005/08/26(金) 00:52:45
いっとくけど、マニュアルも読まない
自分では調べない
自分で解決しようとせずになんでも人に聞く

こんなやつには、プログラミングはできない
08238132005/08/26(金) 00:58:00
そーですね、甘えてました。
自分でなんとかします
0824デフォルトの名無しさん2005/08/26(金) 01:27:30
つーか、スレ違いだって気づけ。
0825デフォルトの名無しさん2005/08/26(金) 04:11:02
すみません。
どこのスレに書き込んでいいのか分からなかったので
とりあえずここに書かせてください。

試験なんかに使うマークリーダー用のデータ読み取りプログラムというのは
どういった言語で構築するのでしょうか?
ちなみに、仕様はCSVファイルのデータをマークリーダー(読み取り機)で
読み込んで正否などを打ち出すらしいのですが...
0826デフォルトの名無しさん2005/08/26(金) 04:16:31
>>825
とりあえずはすれたてるまでもない質問スレでやれ
CSVにはどんなデータが入っていてリーダーはどの機種で
OSや予算や使える言語も最低限書くこと
0827デフォルトの名無しさん2005/08/26(金) 04:28:55
即レス感謝します。
でも、どんな言語で作るのかを聞きたいのに
使える言語も最低限書くことと言うのは、どういう意味ですか?

因みに
OS Win
予算 数100万
CSVの中には 試験に必要な「個人情報」と答案用フォームに書き込まれた「解答番号」です。
リーダーの機種名は 不明です。
0828デフォルトの名無しさん2005/08/26(金) 04:32:47
>>827
頼むからここを荒らすな。
スレ違いつーか、鼬害なんだから。
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
>>830
ループじゃいかんのけ?
0832デフォルトの名無しさん2005/08/26(金) 05:19:12
インライン?行数稼ぎ?
0833デフォルトの名無しさん2005/08/26(金) 05:40:28
boost preprocessor を使うのはどうだろ。

#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
>>830
普通にfor文のループで書くしかない
わけのわからんマクロ作ったらタコ殴りの刑
0835デフォルトの名無しさん2005/08/26(金) 05:55:13
訳あって明示的にインライン化したいんです.

>>833
ありがとうございます.できれば C でやりたいんですが,やっぱり無理なんでしょうか.
0836デフォルトの名無しさん2005/08/26(金) 05:56:35
無理
0837デフォルトの名無しさん2005/08/26(金) 05:57:02
ループのアンロールでしょ?
高速化の随分と最後の方にやるモノではあるのだが、
使わないこともない技術だ。
08388332005/08/26(金) 05:57:52
preprocessorしか使ってないはずだからCでも使えると思いますよ
一応手元のgcc,vc,dmcでは問題無かったです。
0839デフォルトの名無しさん2005/08/26(金) 06:03:13
>>838
おお.

Boost == C++ ってイメージがあったので試さずに書いてしまいました.
ありがとうございました.
0840デフォルトの名無しさん2005/08/26(金) 08:18:55
つーか、ループアンロールならコンパイラにやらせればいいじゃん。
0841デフォルトの名無しさん2005/08/26(金) 11:51:19
/*10個の英字を読み取り、その中からアルファベット順に並べたとき
  一番最初にくる文字を表示するプログラム*/
#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
>>841
改行コードでも入力されたんだろ。
詳しく知りたいなら初心者スレにでも行ってくれ。
0843デフォルトの名無しさんNGNG
>>841
英字10って言ってるけど、それだと11個入力しないといけないんじゃない。
0844デフォルトの名無しさん2005/08/26(金) 12:23:41
>>842
わかりました。そっちに行ってみます。

>>843
本当だ!気がつかなかった…ありがとう(^ω^)
0845デフォルトの名無しさん2005/08/26(金) 12:25:28
圧倒的に生産性の高いC++を使わずに
未だにCに拘っている方がいるのはなぜですか?
0846デフォルトの名無しさん2005/08/26(金) 12:38:33
・環境による制限がある
 ・C++ コンパイラがない
 ・C++ だとバイナリがかさばって、サイズがヤバい
 ・最適化能力の上な C でないと速度が少し気になる

・使用可能者の数が多い
 ・新人教育の手間が省ける
 ・比較的多くの人が保守可能

・怠慢、理解力不足
 ・言語学習に時間を割くより娯楽に割く
 ・C++ が理解できなかった
0847デフォルトの名無しさん2005/08/26(金) 12:38:53
C++はCが進化したものと考えてるからだよっ、きっと!
0848デフォルトの名無しさん2005/08/26(金) 12:40:07
>>845
おそらくこんなところじゃないかと思う。
C++コンパイラがない。
今更新しい言語を学ぶ気にはならない。
Better Cとして使えることを知らない。あるいはBetter CでもCより実行速度が遅いと思い込んでいる。
08498472005/08/26(金) 12:41:26
意味不明なこと書いちゃったよ
『拘っている』って字が読めてなかった
0850デフォルトの名無しさん2005/08/26(金) 12:59:41
・CのAPIしか用意されていない環境に、OOなクラスライブラリを構築するのが面倒
・printfの方がいい
0851デフォルトの名無しさん2005/08/26(金) 13:12:55
>>850
それはC++を使わない積極的な理由にならない。
つーか、>850自信が>846や>848の最後の行に該当するんジャマイカ。
0852デフォルトの名無しさん2005/08/26(金) 13:14:56
coutのほうが楽じゃん。書くの
0853≠8502005/08/26(金) 13:18:56
>>852
printf("例えばこんなところに(%d, %d)座標が入ってたり\n\t制御コードが入るとね\n", -1, 2);
0854デフォルトの名無しさん2005/08/26(金) 13:29:21
cout << "例えばこんなところに(" << -1 << ", " << 2 << ")座標が入ってたり\n\t制御コードが入るとね\n";
0855デフォルトの名無しさん2005/08/26(金) 13:46:36
printf の勝ちだな。
0856デフォルトの名無しさん2005/08/26(金) 13:55:17
別にC++はprintfを禁止してはいない。
stringに慣れてしまうと一々文字列編集でstr系の処理で配列の上限値を意識するのが面倒になる
0857デフォルトの名無しさん2005/08/26(金) 14:01:57
>>845
にゅうが使えない という環境も

いや、使えないことは無いんだけど自分でにゅう作るのもしんどいし
にゅう無いとC++使っててもなんか損した気分になるからなぁ
0858デフォルトの名無しさん2005/08/26(金) 14:22:34
ルーシー...
0859デフォルトの名無しさん2005/08/26(金) 14:29:26
るー
うー
0860デフォルトの名無しさん2005/08/26(金) 15:00:45
newの使えないC++ってなんだよ
0861デフォルトの名無しさん2005/08/26(金) 15:10:51
>>860
にゅうが使えない/使いにくい/使いたくない環境もあるということです。

Cやアセンブラなら東京ドーム4杯分に感じる512kbのメモリ空間も
C++だと途端に広島市民球場に見えるということです。
0862デフォルトの名無しさん2005/08/26(金) 15:14:50
じゃあ better C として使えばいいじゃない。
C++を完全に手放す理由にはならんだろ。もしかして
int main(){ return 0; }
のプログラムでも使用メモリって両者でけっこう違ったりするもんなのか?

っていうか広島市民球場を馬鹿にするな
0863デフォルトの名無しさん2005/08/26(金) 15:18:15
>>862
そうです。でも、BetterCとして使うのは、なんとなくもったいないというか
そういう感じがするだけです。

広島市民球場でも、まあ、野球やろうと思えば 出来ないこともないですし
0864デフォルトの名無しさん2005/08/26(金) 15:22:09
広島市民球場も廃れ、いずれはでっかく新しいのになるんだ
立てるだの立てないだのぐだぐだしてる時期にあるだけで、
いずれは時代も流れて行くものなのでつ Cも廃れる日が来るのでしょうね
0865デフォルトの名無しさん2005/08/26(金) 15:32:58
>>863
もったいないってなんだよ。コンパイラの値段が高い、という話ならわかる。

むしろ better C のほうがメモリ節約になる例↓
int main()
{
 if(getchar()=='A')return 0;
 char str[256]; //↑でAが入力されればこの配列が確保されることはない
 gets(str);
 return 0;
}
0866デフォルトの名無しさん2005/08/26(金) 15:33:22
betterCとして使う場合、使っちゃいけないC++の機能などをコーディング規約として決めるのなら良いが、
そうでなければCっぽいコードとC++っぽいコードが混在してわけわからんコードになる。
規約作ってまでbetterCに拘ることもないかなと。
0867デフォルトの名無しさん2005/08/26(金) 15:40:54
>>865
charのコンストラクタが走る事はないと思うが、スタックを消費しない事は
規約で決まってたんだっけ?
0868デフォルトの名無しさん2005/08/26(金) 15:42:26
>>858
ワロタ
0869デフォルトの名無しさん2005/08/26(金) 15:49:07
>>866
別に「使っちゃいけない」機能があるわけじゃないだろ。
「使うことは推奨しない」だけで。別にそれで致命的なエラーが発生するわけでもあるまいし。
そんなガチガチに縛る必要ないから、規約だって簡易的なもので済むんじゃねーの。

>>867
あ、そこは見落としてた。どうなんだろ。
0870デフォルトの名無しさんNGNG
>>869
>あ、そこは見落としてた。どうなんだろ。

VC++だと、関数の途中で変数を宣言しても、スタックの節約にはならないね。
0871デフォルトの名無しさん2005/08/26(金) 16:31:18
>>869
うん。それなら広島市民球場よりは広く便利に使えそうだ。
ベターCとしてのC++仕様簡易規約みたいなのをでっちあげるのも
楽しそうだな。

スタックは、多少消費しても暗算で計算できる範囲内なら
まあ問題ないかな
0872デフォルトの名無しさん2005/08/26(金) 16:56:59
C++がCよりタイトなコードを吐く例。
・static inline int min(int a, int b) {return a < b ? a : b;}
Cだとマクロを持ち出す必要がある。
で、マクロなら型違いを吸収できるわけだがそれならそれで、
C++にはテンプレートがある。
しかも、適切なオペレータが用意されていれば構造体でも同じ(テンプレート)関数で済む。
Cだとオペレータを用意することもできなければ同じマクロで実装することもできない。
08737492005/08/26(金) 17:03:07
煽られたので、boostに走ってみることにすますた。
Cygwin上で bjam --without-test --without-python -sTOOLS=gcc install 中。
つーことで、わかんなかったらboostスレ逝ってみまつ。
0874デフォルトの名無しさん2005/08/26(金) 17:10:03
>>749
何もいきなりboostに走らんでもw
まぁ、がんがれ。
0875デフォルトの名無しさんNGNG
>>851-855
吉田弘一郎もC++は書式付出力が使いにくいから実用的な言語でないとかなんとか書いてたな。
おれもstream系は使いにくいと思うけど、なにもそれを持って全否定することはないじゃないかと
思った。
0876デフォルトの名無しさん2005/08/26(金) 17:21:01
新しく作ったライブラリAには関数Bがあって、関数Bは標準関数の
strlenやstrcpyを使っているとします。
この時、あるプログラムで関数Bとstrlenやstrcpyを使っている場合、
リンク時にstrlenやstrcpyのコード(?)が重複してプログラムに置かれたりは
しないのでしょうか?
0877デフォルトの名無しさん2005/08/26(金) 17:26:13
>876
しない。
0878デフォルトの名無しさん2005/08/26(金) 17:35:35
OK
0879デフォルトの名無しさん2005/08/26(金) 20:55:54
>>853
double a, b;
printf("例えばこんなところに(%d, %d)座標が入ってたり\n\t制御コードが入るとね\n", a, b);
0880デフォルトの名無しさん2005/08/26(金) 21:58:42
>>875
氏の言語に対する罵倒は、一種の愛情表現ですから。
0881デフォルトの名無しさん2005/08/26(金) 22:23:21
>880
ってえことは、COBOLさいこー、FORTRANまんせーってことですな。
0882デフォルトの名無しさん2005/08/26(金) 22:41:27
printfは、美しくないと思うが、Cプログラマーは、美しいと思うものなのか?
ライブラリ作るとき、もうちょっとキレイなインターフェースを考えられなかったのかな。

世界で一番有名になってしまったこのprintfのおかげで、世の中、
発想がprintfしてるインターフェース設計が多すぎ
0883デフォルトの名無しさん2005/08/26(金) 22:46:48
cin/coutは後発のどんな言語も真似なかった糞設計なライブラリ
0884デフォルトの名無しさん2005/08/26(金) 22:50:47
Cのprintfはいいけど
Javaのprintfを見て、Javaを使うのを止めた
0885デフォルトの名無しさん2005/08/26(金) 23:07:27
>>882
型チェックが効かないってのは痛いけど、見た目は美しいと思うんだが。
0886デフォルトの名無しさん2005/08/26(金) 23:10:58
printf() 美しい.....
0887デフォルトの名無しさん2005/08/26(金) 23:20:06
>>884
Javaやってないから何なのかと思って調べてみたら
printfが標準で無いのか

不便すぎるな
0888デフォルトの名無しさん2005/08/26(金) 23:25:46
>>887
標準にあるよ。
0889デフォルトの名無しさん2005/08/26(金) 23:29:10
>>888
J2SE5から実装されたのか、スマンカッタ
0890デフォルトの名無しさん2005/08/26(金) 23:29:55
吉田弘一郎が極めるjavaを書いた時点ではなった。
くそみそ書いてた。
0891デフォルトの名無しさん2005/08/26(金) 23:34:42
なぜに、みんなそんなに printf が好きなん?
0892デフォルトの名無しさん2005/08/26(金) 23:36:59
>>882
まずは >>882 が考えている「美しいインターフェース」を持った
ライブラリとはどんなものかを伺おうじゃないか・・・
0893デフォルトの名無しさん2005/08/26(金) 23:42:26
入門書でコンソール組むときに腐るほど使ったので染み付いてしまいました。
0894デフォルトの名無しさん2005/08/26(金) 23:44:25
Cのprintfは何となく好きです
便利さならphpとかのprintがいいと思うけど
0895デフォルトの名無しさん2005/08/26(金) 23:44:33
x = 10; y = 20
puts "rubyは気絶するほど美しい(#{x},#{y})"
0896デフォルトの名無しさん2005/08/26(金) 23:47:54
printf の書式指定文字列を sprintf で作成したりするようになると、
printf の偉大さが身にしみてくるんだな、これが。
0897デフォルトの名無しさん2005/08/26(金) 23:48:13
std::cout << boost::format("x = %1, y = %2") % x % y << std::endl;
0898デフォルトの名無しさん2005/08/26(金) 23:48:59
ここでboost::formatですよ。

と言いたかったがここはCスレ(´・ω・`)ショボーン
0899デフォルトの名無しさん2005/08/27(土) 00:04:53
ここでCString::Formatですよ。

と言いたかったがここはCスレ(´・ω・`)ショボーン
0900デフォルトの名無しさん2005/08/27(土) 00:05:22
printfか。文字列をそのまま出力するだけでも、何でもprintfを使うのは頭が固いんじゃないか。
効率が良いとは言えないんじゃないか。プログラムサイズも大きくする原因になるし、任意の
文字列をchar の配列で取得して、第一引数にそのまま渡すだけなら%があると正常に出力できな
いだけでなく、セキュリティ面の問題もあるそうだな。

putsを使ったり、最後に改行を追加したくないならfputsやprintf("%s", "文字列"); を使ったり
しないものなのかいな。
0901デフォルトの名無しさん2005/08/27(土) 00:10:13
そして、printf("\n"); のコードを見ると、putchar('\n');でいいじゃないかと思う。
0902デフォルトの名無しさん2005/08/27(土) 00:11:43
puts("");
0903デフォルトの名無しさん2005/08/27(土) 00:12:58
>>901
それはある。効率が悪いよね。
0904デフォルトの名無しさん2005/08/27(土) 00:15:10
>>903
何で?
0905デフォルトの名無しさん2005/08/27(土) 00:18:07
ただの数値ですむか、
文字列として確保されてしまうか、
かな
0906デフォルトの名無しさん2005/08/27(土) 00:20:41
どうせデバッグ用でしか使わないのに
効率も何もない希ガス。
0907デフォルトの名無しさん2005/08/27(土) 00:29:04
>>904
printf()だと文字列に対して%の書式指定がないか検索が行われるから。
0908デフォルトの名無しさん2005/08/27(土) 00:31:28
とりあえず、printfを読んだこと無い奴は嫁よ
0909デフォルトの名無しさん2005/08/27(土) 00:31:33
別に今のPCならその程度のオーバーヘッドなんて十分に無視できる希ガス

そりゃ無いに越したことはないけどさ
0910デフォルトの名無しさん2005/08/27(土) 00:34:12
そこでSystem.String.Formatメソッドですよ。

と言いたかったがここはCスレ(´・ω・`)ショボーン
0911デフォルトの名無しさん2005/08/27(土) 00:34:41
printf("先生、パーセントなどの書式指定の文字がこの第一引数の文字列の中にあるか、順番に見ていきます。\n");
printf("先生、93バイトの文字列を先頭から順に調べましたが、パーセント文字は一つもありませんでした。\n");
printf("全く、何だよ。忙しいというのに余計な手間を掛けさせあがって。\n");
printf("puts()で書いてくれないと無駄な時間をロスして仕事が遅れるじゃないか\n");
0912デフォルトの名無しさん2005/08/27(土) 00:36:05
>909
とはいえ、そういうところにも気がまわるようになるべきだと思う。
無意識のうちに printf("\n") ではなく putchar('\n')を選択できるようにね。

計算機にできることは、計算機にやらせるべきというのも正しいけど、
無駄なコードは一行たりとも書かんという気概でいてほしい。
0913デフォルトの名無しさん2005/08/27(土) 00:38:12
末尾の \0 検索でキャッシュに入るし、
毎回検索に失敗してたら分岐予測が効くから、
いう程は低速化しない希ガス。
0914デフォルトの名無しさん2005/08/27(土) 00:43:28
>>911
>>908
0915デフォルトの名無しさん2005/08/27(土) 00:46:48
>>909
>別に今のPCならその程度のオーバーヘッドなんて十分に無視できる希ガス
×今のPCなら
○IO自体の低速さに比べたら
0916デフォルトの名無しさん2005/08/27(土) 00:47:16
漢字ROM搭載したら速いよ!!
0917デフォルトの名無しさん2005/08/27(土) 01:14:45
まあ、本来の目的を達成することに比べて、枝葉末節なことに目を向けて問題視しすぎてる
ように思えるだろう。揚げ足を取ってるようにも思えるだろう。そして、それにこだわりす
ぎて前に進めないということもあるだろう。
プログラムの学習の一番初めのときから既に、無駄を省くことばかり知恵を働かせるように
してるが。
0918デフォルトの名無しさん2005/08/27(土) 01:23:57
プログラムを作ることで重要なのは速度よりもバグの無さ
0919デフォルトの名無しさん2005/08/27(土) 01:30:48
移植性だろ
0920デフォルトの名無しさん2005/08/27(土) 01:33:04
>>919
それはWindowsの馬鹿プログラマには関係ない
0921デフォルトの名無しさんNGNG
>>919
いやバグのなさだろ。
移植以前にまともに動かないと。
0922デフォルトの名無しさん2005/08/27(土) 01:37:21
有用性
0923デフォルトの名無しさん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:34
#include <stdio.h>
int main(void)
{
puts("何言ってんだ");
return 0;
}
------------------------
上は「何言ってんだ」を標準出力するプログラムです。
バグはありません。
0929デフォルトの名無しさん2005/08/27(土) 01:49:01
レベル低いのかw
いやそう思うならそれでもいいけど
0930デフォルトの名無しさん2005/08/27(土) 01:49:19
コンパイラのバグとかはこのスレでは関係ないしね
0931デフォルトの名無しさん2005/08/27(土) 01:52:51
何するスレだっけ?
0932デフォルトの名無しさん2005/08/27(土) 01:55:30
C言語を俺に聞くスレ
0933 ◆i6G.jsz.NY 2005/08/27(土) 01:55:47
stdio.cにバグが無いことは保証されてんの?
0934デフォルトの名無しさん2005/08/27(土) 01:55:54
>>930
コンパイラがCで書いてあって、具体的なバグについての議論ならOK。
0935デフォルトの名無しさん2005/08/27(土) 01:56:39
基準は、Cで書いてあるか、具体的か、という2点。
0936デフォルトの名無しさん2005/08/27(土) 01:58:10
そもそも>>917が重要そうに見える一人言を
0937デフォルトの名無しさん2005/08/27(土) 02:16:07
>>928
バグがない事を証明してください
0938デフォルトの名無しさん2005/08/27(土) 02:41:24
>>937
面白くないよ
09399372005/08/27(土) 02:48:47
いや、面白がらせようとして書いたわけではない。
「バグの不在は(少なくとも現実的な手間では)証明出来ない」
ということを知らない人がいるみたいだから。
0940デフォルトの名無しさん2005/08/27(土) 03:00:31
あるよ馬鹿。
すべての入力に対して正しい出力が得られればそれは正しい。
そしてそのすべての対応をチェック可能であればバグ無しが証明できる。
0941デフォルトの名無しさん2005/08/27(土) 03:12:31
そもそも俺らは数学者ではないわけで。
0942 ◆i6G.jsz.NY 2005/08/27(土) 03:31:12
全てとは無限であり
無限のものを有限である我々は証明できない

このくらいはわかりましょう
0943デフォルトの名無しさん2005/08/27(土) 03:51:04
>>942
無限くらい証明できるんじゃない?
0944デフォルトの名無しさん2005/08/27(土) 03:57:28
プログラムに哲学を持ち出す馬鹿のいるスレはここですか?
0945デフォルトの名無しさん2005/08/27(土) 03:58:14
バグってのは仕様に対しての不都合だろ。
仕様にかかれていない範囲での入力に対して、出力に不都合があっても、
それはバグではない

仕様上、入力が有限なら、バグのないことを証明することも可能だ。
といってみるテスト
0946デフォルトの名無しさん2005/08/27(土) 04:14:43
禿同
0947デフォルトの名無しさん2005/08/27(土) 04:20:52
じゃあお前は、使用に載ってないからバグじゃないと言い張って
修正しないのかと
0948デフォルトの名無しさん2005/08/27(土) 04:33:49
文意読めてるのか?というか仕様の意味わかってるのか?

たとえば外部デバイスから送られる数値の範囲が仕様で0〜255って決まってたら、
数値が-1や256だったときの動作まで保証する責任はない。
0949デフォルトの名無しさん2005/08/27(土) 04:36:38
こういうプログラマもいるんだ
0950デフォルトの名無しさん2005/08/27(土) 04:36:53
printf("%s\n", "abc");
を
puts("abc");
に最適化するコンパイラもあるというのに……
0951デフォルトの名無しさん2005/08/27(土) 04:38:11
全くいみの違うことをしたらならんだろ
0952デフォルトの名無しさん2005/08/27(土) 04:40:45
適当に予想でいったんだろ
0953デフォルトの名無しさん2005/08/27(土) 04:41:57
少なくともCygwin版のgccはそういう最適化をするよ。
#最初見たときは目が点になったw
0954デフォルトの名無しさん2005/08/27(土) 04:46:56
printf()をputchar()にしろとか言ってる奴って
システムの設計能力なさそう
0955デフォルトの名無しさん2005/08/27(土) 05:22:25
>>953
手元のもそうなった
gccすげーな
gccのGはGNUじゃなくてGodなんじゃないか?
0956デフォルトの名無しさん2005/08/27(土) 06:17:02
>>955
この業界、なにかとgccマンセーな雰囲気があるが、
商用コンパイラと比べると見劣りすることも多々あるよ。

たとえば、gccはARMプロセッサ向けのコンパイルでは、
IARやARMのコンパイラと比べて、サイズは馬鹿でかくなるし実行速度も遅い。
組み込み向けの資源が厳しい環境で、これは致命的。
0957デフォルトの名無しさん2005/08/27(土) 08:42:20
>>896
ハゲドウ!
0958デフォルトの名無しさん2005/08/27(土) 10:46:03
>>939
一般的なプログラムは無理だけれど、特殊なプログラムはできる。
あなた、数理論理学をまともに勉強したこと、本当にあるの?
0959デフォルトの名無しさん2005/08/27(土) 10:46:23
>>954
言ってない奴に限って
「M...N の総和を求めろ」
をループで組んだりするんだが…
0960デフォルトの名無しさん2005/08/27(土) 10:46:43
>>956
組み込みの世界ではCが使えるだけでも満足すべきだ!
0961デフォルトの名無しさん2005/08/27(土) 10:51:52
>>959
使い方によっては、ループの方が速かったりして。
0962デフォルトの名無しさん2005/08/27(土) 11:42:41
質問します。
x回ループする時に、進行状況を1%、2%と表したいのですが、%が整数の時だけを見極める方法を教えて下さい。
0963デフォルトの名無しさん2005/08/27(土) 11:44:40
>>962
i 回目のループで i * 100 / x %
0964デフォルトの名無しさん2005/08/27(土) 11:44:44
>>896
ごめん、正規表現ライブラリの前にはかすんで見える。
0965デフォルトの名無しさん2005/08/27(土) 11:54:53
じゃぁ、Ruby 最強ってことで。
0966デフォルトの名無しさん2005/08/27(土) 12:00:26
ところで、低水準ファイル入出力関数は使っとるか。
数十MBや100MB以上のファイルを扱うのでreadやwriteは必須だな。
09679622005/08/27(土) 12:04:40
>>963
ぴったり整数になる時だけ判定できないでしょうか?
0968デフォルトの名無しさん2005/08/27(土) 12:06:40
何の判定?
0969デフォルトの名無しさん2005/08/27(土) 12:07:03
>>967
判定する必要無いんじゃないの?
0970デフォルトの名無しさん2005/08/27(土) 12:07:29
剰余が0であればいいんだろ
0971デフォルトの名無しさん2005/08/27(土) 12:08:31
整数になるかどうかの判定を、整数のときだけやるなら無駄だなw
0972デフォルトの名無しさん2005/08/27(土) 12:11:06
>>970
6%2は0だけど、2/6は33.33...%ジャマイカ
0973デフォルトの名無しさん2005/08/27(土) 12:14:53
で、その判定というのは、進捗状況の百分率の整数部が変化したときだけの判定
ということにはならんだろ。
下手をすれば、0と100%のときだけしか表示しないことになるんじゃないか。
0974デフォルトの名無しさん2005/08/27(土) 12:21:11
>>972
先に100倍なんじゃないか
0975デフォルトの名無しさん2005/08/27(土) 12:22:49
こんなのどう?

int 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:45
いや、1回目の処理をする前(0回目の時点)での進捗を表示するなら0%は表示するが、
1回目の後の時点から表示するなら、完了したときの100%の表示だけしか表示しない
ことが起こりうるな。
0977デフォルトの名無しさん2005/08/27(土) 12:27:54
ようするに>>962は、整数の時だけ処理をしたいが、整数かどうかの判定はしたくないってことだろ?
0978デフォルトの名無しさん2005/08/27(土) 12:35:05
>>967
整数だけで計算すればどうせ結果も整数になるし、そうでなくてもキャストでもすれば整数にできる。
09799622005/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:11
float型からint型にキャストすればいいだけの話ではないんですか。
0982デフォルトの名無しさん2005/08/27(土) 12:55:49
>>979
#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;
}
09839802005/08/27(土) 13:21:23
すいません、>>980は自己解決しました m(__)m
コンパイラの設定の問題だったようです。
考えてくださった人、ありがとー。
0984デフォルトの名無しさん2005/08/27(土) 14:00:12
何だ、低水準ファイル入出力関数使っとるやつはおらんのかな。
DOSのFINDコマンドをよく使うが、巨大なサイズのファイルだったり大量のファイルを検索
したりするから、極限まで高速化したいんでread関数で一気に読んで、出力ために必要とな
る、行単位として扱うための処理をコーディングしたりした。検索はstrstr任せだ。
もっと高速にできるならしたいんだが、どうしようかな。アセンブリ言語を学習してカリカリ
にチューニングするべきかな。
0985デフォルトの名無しさん2005/08/27(土) 14:02:29
>>984
ここは標準Cのスレで、低水準ファイル入出力は標準ライブラリに含まれていないからスレ違い。
0986デフォルトの名無しさん2005/08/27(土) 14:20:13
C言語をはじめたばかりであまりわからないのですが、
ビットシフトはなんの役に立つのでしょうか?
0987デフォルトの名無しさん2005/08/27(土) 14:23:41
それ前にもどこかに書いてたな。
0988デフォルトの名無しさん2005/08/27(土) 14:27:42
急速にスレの質が低下してまいりました
0989デフォルトの名無しさん2005/08/27(土) 14:42:38
http://pc8.2ch.net/test/read.cgi/tech/1123918075/
0990デフォルトの名無しさん2005/08/27(土) 14:43:29
(*c++)*=(*s++);
ってどういう意味ですか??
0991デフォルトの名無しさん2005/08/27(土) 14:47:01
*c = *c * *s;
c++;
s++;
なんじゃないか。
0992デフォルトの名無しさん2005/08/27(土) 14:47:18
c[0] = c[0] * s[0];
c = &c[1];
s = &s[1];

って意味。
0993デフォルトの名無しさん2005/08/27(土) 15:02:10
にゃるほど!ありがとー!
0994デフォルトの名無しさん2005/08/27(土) 15:04:15
C言語をはじめたばかりであまりわからないのですが、
次スレは立てないのですか?
0995デフォルトの名無しさん2005/08/27(土) 15:14:18
次スレではprintfの話題禁止
0996デフォルトの名無しさん2005/08/27(土) 15:32:16
次スレは fprintfとsprintfについて語ろう。
0997デフォルトの名無しさん2005/08/27(土) 15:33:13
>>990
そういうのやめて欲しいよな…
まだ括弧付けてるだけましだけどさ。
0998デフォルトの名無しさん2005/08/27(土) 15:33:56
またお前か
0999デフォルトの名無しさん2005/08/27(土) 15:34:29
printf("");
1000デフォルトの名無しさん2005/08/27(土) 15:34:38
ごーるっ
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。