ポケモンの対戦技術スレPART8

このエントリーをはてなブックマークに追加
10名無しさん、君に決めた!
>>1
新スレ立て乙
11名無しさん、君に決めた!:03/01/31 11:05 ID:???
HPに努力値振り込むのと防御と特防に均等に努力値振り込むのは

どっちが防御効果高いですか?
12名無しさん、君に決めた!:03/01/31 17:35 ID:???
tes
13名無しさん、君に決めた!:03/01/31 17:50 ID:???
>>11
俺もそれがすごい気になってる

質問スレにHP 2:防御 1 :特防 1で振り込むのが一番硬くなるって書いてあった
14名無しさん、君に決めた!:03/01/31 17:56 ID:???
どっかのスレにHP、防御、特防の努力値配分を出してくれるツールを作った香具師がいたな
15名無しさん、君に決めた!:03/01/31 17:56 ID:???
16名無しさん、君に決めた!:03/01/31 17:57 ID:???
sss
17名無しさん、君に決めた!:03/01/31 17:57 ID:???
=6
おまえのチェックミスを棚に上げんな
18名無しさん、君に決めた!:03/01/31 17:57 ID:???
禿同。はアフォ。早く削除依頼しなさい。
19名無しさん、君に決めた!:03/01/31 17:57 ID:???
=10
自作自演でした。テヘッ
20名無しさん、君に決めた!:03/01/31 17:57 ID:???
自作自演でした。
21名無しさん、君に決めた!:03/01/31 17:57 ID:???
見ればわかります
22名無しさん、君に決めた!:03/01/31 17:57 ID:???
void func(char **);

main()
{
char a[100][100];

func(a);

return 0;
}

void func(char **a)
{
}

↑のようにやったらプログラムが暴走したんですが
対処法はいかに?
23名無しさん、君に決めた!:03/01/31 17:57 ID:???
void func(char a[][100])
24名無しさん、君に決めた!:03/01/31 17:57 ID:???
25名無しさん、君に決めた!:03/01/31 17:57 ID:???
PHP
26名無しさん、君に決めた!:03/01/31 17:57 ID:???
PHPやったことないんですが・・ほんとに応用できるのですか?
27名無しさん、君に決めた!:03/01/31 17:58 ID:???
int a = 4.3;
abs(3.5);
とかのミスってlintで検出できますか?
28名無しさん、君に決めた!:03/01/31 17:58 ID:???
まあ、当然のことですけど
C++
29名無しさん、君に決めた!:03/01/31 17:58 ID:???
30名無しさん、君に決めた!:03/01/31 17:58 ID:???
C言語の感覚で書かれたC++はクソコード
31名無しさん、君に決めた!:03/01/31 17:58 ID:???
誰もそんなことは聞いていない。
32名無しさん、君に決めた!:03/01/31 17:58 ID:???
C++はオブジェクト指向なのになんでCが応用できるのかと小一時間(略
33名無しさん、君に決めた!:03/01/31 17:58 ID:???
キター
34名無しさん、君に決めた!:03/01/31 17:58 ID:???
逆にCに応用できる言語は何ですか?
35名無しさん、君に決めた!:03/01/31 17:58 ID:???
awk
36名無しさん、君に決めた!:03/01/31 17:58 ID:???
C++
37名無しさん、君に決めた!:03/01/31 17:58 ID:???
C++言語の感覚で書かれたCはクソコード
38名無しさん、君に決めた!:03/01/31 17:58 ID:???
誰もそんなことは聞いていない。
39名無しさん、君に決めた!:03/01/31 17:58 ID:???
結局、CとC++は、繰り返しや比較などが同じなだけであって
設計方法は全然違うわけだな。
40名無しさん、君に決めた!:03/01/31 17:58 ID:???
ありがとう。でもそこに書いてあることをほとんど
やってくれなかった。
41名無しさん、君に決めた!:03/01/31 17:58 ID:???
質問!!
C言語ってDVDなどにあるプロテクトもC言語に一種ですか?
42名無しさん、君に決めた!:03/01/31 17:58 ID:???
教えてください

Cでsnprintfを自作することになりました。
参考になる資料とかありましたら教えてください。
フリーで使えるソースが何処かに落ちていると良いのですが。
43名無しさん、君に決めた!:03/01/31 17:58 ID:???
VC++ならCRT\SRCフォルダに。
44名無しさん、君に決めた!:03/01/31 17:58 ID:???
レスどうもです。
VC++見てみたのですが、うーん難しい事してるんですね。
FILEポインタの中身なんて、いじった事無いです。
これprintf系で汎用的に使う為にこんな感じで実装してるのかなー?
そのまま使いたいところだけど、多分ライセンスで引っかかりそう・・・
45名無しさん、君に決めた!:03/01/31 17:58 ID:???
46名無しさん、君に決めた!:03/01/31 17:58 ID:???
マルチいくない!
47名無しさん、君に決めた!:03/01/31 17:58 ID:???
つーか、なんで...

> Cでsnprintfを自作することになりました。

なんてことやってんの ?
48名無しさん、君に決めた!:03/01/31 17:58 ID:???
win上でgccを使っているのですが、
*.libのファイルを*.oなんかに変換できますか?
49名無しさん、君に決めた!:03/01/31 17:58 ID:???
別に *.lib のままでいいのでは?
何か不都合でもあるのん?
50名無しさん、君に決めた!:03/01/31 17:58 ID:???
お答えありがとうございます。
ファイルフォーマットが認識されない、といわれたので。
単に対応していないだけなのでしょうね。
まあ、至急必要なものでもないですし。。。
51名無しさん、君に決めた!:03/01/31 17:58 ID:???
あ、すまん。
*.a じゃなくて *.lib か。
なるほど。
分離ってできたっけかな...。
52名無しさん、君に決めた!:03/01/31 17:58 ID:???
win 上の gcc とは何者で、その *.lib はどっから持ってきたものかを書けよ。
53名無しさん、君に決めた!:03/01/31 17:58 ID:???
これからC言語を始めてみようという初心者です。
LSI CってのをDLしてみたんですが、使い方がよく分かりません。
参考書買ってみたんですが動かし方については詳しく載ってませんでした。
どなたか詳しく教えていただけませんか?
54名無しさん、君に決めた!:03/01/31 17:58 ID:???
lsc ファイル名
以上
55名無しさん、君に決めた!:03/01/31 17:58 ID:???
ごめん、うそ>46
lcc ファイル名
lcc.exeにちゃんとパスを通すこと
あと、_lccも自分の環境に合わせて編集すること
あとは、read.me読めば書いてるよ
56名無しさん、君に決めた!:03/01/31 17:58 ID:???
えっと・・・
まだよくわからないんですが、
MS-DOSを開きますよね。
lcc filename
しますよね。
次は何をすれば動きますか?
57名無しさん、君に決めた!:03/01/31 17:58 ID:???
エラーメッセージが出なければ、もう何もしなくていい。
58名無しさん、君に決めた!:03/01/31 17:58 ID:???
やりかたは分かったんですが、
コマンドまたはファイル名が正しくありません
とでます。
どうすればいいですか?
しつこくてすいません。。。
59名無しさん、君に決めた!:03/01/31 17:59 ID:???
MS-DOSのコマンドラインから

SET PATH=%PATH%***

と入力して

lcc filename

としてみてください。***の部分はパス名(C:\...\LCC\BIN;)です。
ちなみにBINはBINARY(二進)の略で実行可能ファイルが入ったフォルダの
名前として常識です。わかりましたか?
60名無しさん、君に決めた!:03/01/31 17:59 ID:???
51ですが追伸です。参考になればいいのですが、_lccファイルです。

# LSI C-86 compiler's configuration file

-DLSI_C
-XC:\LSIC330C\BIN -LC:\LSIC330C\LIB -IC:\LSIC330C\INCLUDE -T -O
-acdos.obj $LSICOPTS
?Command line argument will be inserted here
-lknjlib -ldoslib -v
61名無しさん、君に決めた!:03/01/31 17:59 ID:???
うぜぇ
Cそのものとは関係ねえ事書くな
62名無しさん、君に決めた!:03/01/31 17:59 ID:???

    ∧ ∧___  ダッコ♪
   /(*゚ー゚) /\
 /| ̄∪∪ ̄|\/
   |        |/
     ̄ ̄ ̄ ̄

63名無しさん、君に決めた!:03/01/31 17:59 ID:???
大人しくしていなさい。
64名無しさん、君に決めた!:03/01/31 17:59 ID:???
セグメンテーション違反ですってなんですか?
65名無しさん、君に決めた!:03/01/31 17:59 ID:???
変なとこに書き込んだりしたときに良く出る。
66名無しさん、君に決めた!:03/01/31 17:59 ID:???
どこが間違ってるのかさっぱりわからんです...
67名無しさん、君に決めた!:03/01/31 17:59 ID:???
変なとこをかいたりしたときに良く出る。
68名無しさん、君に決めた!:03/01/31 17:59 ID:???
セグメンテーション違反は一番良く見るバグだと思うので、
頑張って間違った箇所を探しませう。

・配列の添え字が変な位置を指しているかどうか
・ポインタの扱いが間違っているかどうか

の2箇所を重点的に調べましょう。
69名無しさん、君に決めた!:03/01/31 17:59 ID:???
それはコアダンプ。
70名無しさん、君に決めた!:03/01/31 17:59 ID:???
ありがとうございます。
がんばって探してみます。
卒論間に合うか不安。。。
71名無しさん、君に決めた!:03/01/31 17:59 ID:???
・・・デバッガ使えよ・・・
72名無しさん、君に決めた!:03/01/31 17:59 ID:???
!?そ..それはいったい....?
emacsとかについてるやつですか?
73名無しさん、君に決めた!:03/01/31 17:59 ID:???
gdbとか
74名無しさん、君に決めた!:03/01/31 17:59 ID:???
emacs見てみたらgdbなるものを発見いたしました!
しかし英語表記のため使いかたがいまいちわからぬ。
調べてみます。。。
75名無しさん、君に決めた!:03/01/31 17:59 ID:???
memsetでdouble型の配列の値を全てdouble x;
にすることはできますか?
76名無しさん、君に決めた!:03/01/31 17:59 ID:???
できない。
77名無しさん、君に決めた!:03/01/31 17:59 ID:???
デバッガという言葉も知らない奴が卒論までにgdbを使えるわけがない。
78名無しさん、君に決めた!:03/01/31 17:59 ID:???
デバッガgdbの簡単な使い方。

まずプログラム作成 hoge.c
#include <stdio.h>

main(){
int *a = NULL;
*a = 0;
}


コンパイル時に -g オプションをつける
gcc -g -o hoge hoge.c
実行プログラムをgdbの引数に指定
gdb hoge

gdbのプロンプトが出たらrunを実行
(gdb) run
フォールトエラーなどが出たら、理由と場所を教えてくれる。
Program received signal SIGSEGV, Segmentation fault.
0x8048468 in main () at hoge.c:5
5 *a = 0;

終了するときはquit
(gdb) quit
79名無しさん、君に決めた!:03/01/31 17:59 ID:???
初歩的な質問で申し訳ない。

ファイルからコンソール画面に一行一行読み込んで表示するという、
超基本的なプログラムを書いてみました。
そこで質問なのですが、今のままでは、改行は何も表示されない空白で表されますよね。
この改行部分に「----ここは改行です-----」といったメッセージを表示したいのですが、
どうすればいんでしょう?とりあえず自分が書いたものを↓に。

#include <stdio.h>
void main(){

  FILE *fp;
  char a[20];
  fp = fopen("text.txt" ,"r");

  do{
    if (fgets(a ,20 ,fp) == NULL){
      printf("//////終わりです//////\n" );
      break;
    }else{
      if (a == ""){ ★★★問題の箇所です
        printf("-----ここは改行です-----");
        printf("%s\n" ,a);
      }else
        printf("%s\n" ,a);
      }
  }while(1);
    fclose(fp);
    return;
}
80名無しさん、君に決めた!:03/01/31 17:59 ID:???
if(a=="") を if(*a=='\0') に変更すればいいのでは?
81名無しさん、君に決めた!:03/01/31 17:59 ID:???
if (strlen(a))
a[strlen(a) - 1] = '\0';

ってのを付け加えた方がいいかも。
82名無しさん、君に決めた!:03/01/31 17:59 ID:???
if (strcmp(a, "\n") == 0)
にすればええんでない?
まぁ簡単に
if (a[0] == '\n')
でもいいか。

あとは
・改行の場合はわざわざ a を表示しようとする必要は無い
・do-while じゃなくて、while 内で fgets を使ったので構わない。
・fp が NULL かどうかのチェックは入れる癖をつけておくが吉。
・最後の行にのみ改行が無い場合があることを考慮するべし。
ってとこでしょうか。
83名無しさん、君に決めた!:03/01/31 17:59 ID:???
#include <stdio.h>
int main()
{
 FILE *fp = fopen("text.txt", "r");
 char a[20];

 while (fgets(a, 20, fp) != NULL) {
  if (a[0]=='\n')
   printf("-----ここは改行です-----\n");
  else
   printf(a);
 }
 printf("//////終わりです//////\n" );
 fclose(fp);
 return 0;
}
84名無しさん、君に決めた!:03/01/31 17:59 ID:???
printf(a); と printf("%s", a); は違う。
85名無しさん、君に決めた!:03/01/31 17:59 ID:???
ごめんうっかりしてた。
printf(a)はprintf("%s", a)に読み替えて。

あなたのコードを見て思ったことを書きます。
だいたいさんが言ってくれてるけど。

・fgetsは改行も読み込むのでprintf("%s\n",a)でなくprintf("%s",a)。
・0回以上の繰り返しのときは基本的に, do-whileでなくwhileを使う。
・文字列の比較はstrcmpを使う。a==""としても文字列の比較ではなく
 文字列のアドレスの比較が行われるだけで無意味。

あとのコードでも19文字ジャストの行を読み込むと誤動作します。
19文字ジャストの行を読むと, 次回のfgetsで改行文字だけを読み込む
ので, 文末の改行と空行との区別がつかなくなるためです。
a[]の配列を十分大きくとることで簡単に解決します。
86名無しさん、君に決めた!:03/01/31 17:59 ID:???
> printf("%s", a)

漏れは fputs(a, stdout) のが好きだ。
87名無しさん、君に決めた!:03/01/31 17:59 ID:???
72です!皆さんのご指摘でうまく動くようになりました。
質問の箇所だけではなく、他の様々な部分まで指摘してもらって、感謝してます。
判定文ごとwhileの中に入れろとか、さんの19文字ジャストでおかしくなる・・・とかの話は、
読みながらハタと手を打ってしまいました。

速度面で有利とか、エラーでにくいとか、そういったことが何かあるんですかね?
単に好みの問題でしょうか。
88名無しさん、君に決めた!:03/01/31 18:00 ID:???
速度は大抵fputsのほうが速いだろう。
必ずじゃないけど。
89名無しさん、君に決めた!:03/01/31 18:00 ID:???
教えてください!
return (
x1 >= x2+width2 || x1+width1 <= x2 ||
y1 >= y2+height2 || y1+height1 <= y2
) ? false : true;
ってどういうことですか??
90名無しさん、君に決めた!:03/01/31 18:00 ID:???
if(x1 >= x2 + width2) return false;
if(x1 + width1 <= x2) return false;
if(y1 >= y2 + height2) return false;
if(y1 + height1 <= y2) return false;
return true;

と同じだよ。多分2つの領域の重なり判定と思う。

91名無しさん、君に決めた!:03/01/31 18:00 ID:???
ふむふむ
確かゲーム系で、当たり判定のところっぽい関数だったからそうなのかも!
「||」って、「OR」だったと思うのですが、三項演算子って順々に判定してfalseやtureを返すんですか?
なんか質問部分がわかりにくいーー・・・
92名無しさん、君に決めた!:03/01/31 18:00 ID:???
> 三項演算子って順々に判定してfalseやtureを返すんですか?

三項演算子 xxx ? yyy : zzz は、単に xxx の値の真/偽によって yyy か zzz を返すだけ。

順々に判定するのは、|| (論理 OR 演算子) の方。

xxx || yyy は、xxx が真なら yyy を実行しないで 真 を返す。
(短絡演算で、ググッてくれ。)
93名無しさん、君に決めた!:03/01/31 18:00 ID:???
ありがとう!ググってきましたー。なるほど。よくわかりました
お世話になりました!
94名無しさん、君に決めた!:03/01/31 18:00 ID:???
Cで書いたプログラムなんですが、コンパイルは通るのに実行するとエラーが起こります。
デバッグ(と呼んでいいのかどうか分かりませんが)したいのですが、
どのように行うのでしょうか。
コンパイラはgccをMS-DOS上(MinGW)で使っています。
95名無しさん、君に決めた!:03/01/31 18:00 ID:???
そんなのソースださないと分かるわけ無いだろ。
せめてどうエラー出るのか書けや。
96名無しさん、君に決めた!:03/01/31 18:00 ID:???
やはりソースによって変わってくるのですね。
一般的にどのようにやっていくのかお聞きしたくて、書き込みました。

エラーは、エラーログを作成しています。というメッセージと共に
プログラムが強制終了します。
97名無しさん、君に決めた!:03/01/31 18:00 ID:???
> エラーは、エラーログを作成しています。というメッセージと共に
> プログラムが強制終了します。

.... で、そのエラーログとやらはあるのか ?
98名無しさん、君に決めた!:03/01/31 18:00 ID:???
プログラムを少しづつ削っていって、エラーが出なくなったら直前に
削ったところが、エラーに関係するところだ。大抵は、
99名無しさん、君に決めた!:03/01/31 18:00 ID:???
つーか、エラーログ出てるなら読めよとりあえず(w
100名無しさん、君に決めた!:03/01/31 18:00 ID:???
gdb(gcc用のデバッガ)ないの?
なければprintfとassertと根性でバグ捜せ。
101名無しさん、君に決めた!:03/01/31 18:00 ID:???
エラーログの読みかたわからないです。スマソ
実行したフォルダを探しても該当するようなファイルが見つかりません。
gdbというものは落としてすぐ使えるでしょうか?
探してみます。明日提出の課題なんです。
やはりそれですか・・・

皆さんどうもアリガd
102名無しさん、君に決めた!:03/01/31 18:00 ID:???
おいおい、システムのエラーログに記録されとるんだろ。
実行フォルダには無いぞ。
103名無しさん、君に決めた!:03/01/31 18:00 ID:???
見方教えてください。
お手数かけてほんとスマソ
104名無しさん、君に決めた!:03/01/31 18:00 ID:???
だから、OSは何なんだよ(藁
何も情報書かずに推測するスレか、ここは。
恐らくLinux系だろうけど、君じゃ無理だ多分。その様子だと。
105名無しさん、君に決めた!:03/01/31 18:00 ID:???
もアフォだけど、お前も相当だな。

> コンパイラはgccをMS-DOS上(MinGW)で使っています。

素の MS-DOS はエラーログなんか記録しないだろうから、どうせ Windows の MS-DOS プロンプトじゃねーのか ?
どうせ MAP ファイルなんか見れないんだから、素直に か の2行目に従えよ。
106名無しさん、君に決めた!:03/01/31 18:00 ID:???
100desuyo
107名無しさん、君に決めた!:03/01/31 18:00 ID:???
> printf("-----ここは改行です-----\n");

printf("-----ここは空行です-----\n");
108名無しさん、君に決めた!:03/01/31 18:00 ID:???
厨質問で申し訳ないのですが

while(fgets(buf, 256, infp) !=NULL){
hoge = atoi(buf);
printf("hoge=%d\n",hoge);
}

とやりますと、全部のhogeが0となってしまいます。
読みこんだファイルは4行に渡る30バイトほどの
テキストファイルなのですが・・・

どなたかご教授オネガイイタシマス。
109名無しさん、君に決めた!:03/01/31 18:00 ID:???
入力ファイルの内容を晒してみ?
110名無しさん、君に決めた!:03/01/31 18:00 ID:???
printf("%s",buf);
でちゃんと、bufに文字列読み込まれてるか確認してみる。
103の言うとおり、どんな入力ファイルやねんやろ・・・
atoi関数の使い方もわかっていますか?
111名無しさん、君に決めた!:03/01/31 18:00 ID:???
103,104サソ
アリガdございます。

テキストファイルを
345504
45454
3920
5503
こんな感じに直したらできますた。
文字が入ってたのがいけなかったのでしょうか?
atoiを使う際に"x"などの文字が混入していた際に
無視する方法ってあるのでしょうか?

ほんと厨ですみませそ。。。
112名無しさん、君に決めた!:03/01/31 18:00 ID:???
あるプログラムを作成しました(長いので載せれません)。
そのプログラムはある配列変数の要素を小さく設定した時は
問題なく動いてくれるのですが、大きくするとsegmentation Failureがでます。

gdbをつかってデバッグしました。そしたら、
(gdb) core a.out.core
Core was generated by `a.out'.
Program terminated with signal 11, Segmentation fault.
Reading symbols from /usr/lib/libm.so.2...(no debugging symbols found)...done.
Reading symbols from /usr/lib/libc.so.4...(no debugging symbols found)...done.
Reading symbols from /usr/libexec/ld-elf.so.1...(no debugging symbols found)...
done.
#0 0x80489ab in main ()
(gdb) where
#0 0x80489ab in main ()
#1 0x8048506 in _start ()
となり、何行目に問題があるのか?という情報は教えてくれません。
どこがおかしいか、長年の経験のある皆様にお聴きしようと思ったしだいです。
助けて下さい。
113名無しさん、君に決めた!:03/01/31 18:00 ID:???
(gdb) where
#0 0x80489ab in main ()
#1 0x8048506 in _start ()
が問題なんですよね?
これってどういう意味ですか?
114名無しさん、君に決めた!:03/01/31 18:00 ID:???
どんなプログラムかも配列をどういうふうに使ってるのかも要素数をどの程度にしたのかもわからないのに答えろというのか・・・
115名無しさん、君に決めた!:03/01/31 18:01 ID:???
atoi()はスペースと+-以外の文字とぶつかるとそこで終了しちゃいますよ
もしかしたら、文字を取り除く関数があるかもしれないけど
自分で取り除くコード書いたほうが柔軟性あっていいかもしれないですね
116名無しさん、君に決めた!:03/01/31 18:01 ID:???
じゃーのせます。
連続投稿なるけどごめんなさい、どこが悪いか全く分りませんので
enumとmainだけとりあえず載せます

#include <unistd.h>
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

enum {
MAX_NODE = 87381, /* 自分で計算 (( pow(4,MAX_DEPTH) -1 ) / 3) */
MAX_RES = 81, /*ネットワーク内のリソースの種類*/
MAX_DEPTH = 9, /*木の深さ*/
MAX_SIM = 100, /*シミュレーション回数*/
REPEAT = 2 /*繰り返し数 シミュレーション数*/
};


117名無しさん、君に決めた!:03/01/31 18:01 ID:???
main()
{
int i,j,k,query,query_number,num_reg,sum_query_number,sim_num,sum_num_reg,num_resource[MAX_RES],node[MAX_NODE][MAX_RES],rt[MAX_NODE][4][MAX_RES];
double adv_num_reg,adv_query_number;
FILE *outp;

srand((unsigned int)time(NULL));
sum_query_number = 0;
sum_num_reg = 0;
for( sim_num = 0 ; sim_num < REPEAT ; sim_num++ ){
/*ノードの登録を初期化*/
node_initialize(node);
/*ルーチングテーブル初期化*/
rt_initialize(rt);
/*リソース数を決定*/
for(i=0; i<MAX_RES; i++){
num_resource[i]=(int)(num_normalcurve() + 0.50);
/*printf("%d\n",num_resource[i]);*/
}
/*各ノードごとの各リソースの登録情報をセット*/
distribute(node,num_resource);
/*MATRIX表示*/
/*print_matrix(node);*/
for(k=0;k<MAX_SIM;k++){
/*QUERY決定*/
query = query_produce();
/*printf("query %d\n\n",query);*/
/*routing開始*/
route(query,node,rt);}
118名無しさん、君に決めた!:03/01/31 18:01 ID:???
query = 3;

/*count the number of the query 3*/
query_number = count_qnum(query,rt);

/*rt表示*/
/*print_query(query,rt);*/
sum_query_number += query_number;
printf("query_number %d",query_number);

/*ノードAの登録数*/
num_reg = sum_reg_num(rt);
sum_num_reg += num_reg;
printf("registration_number %d",num_reg);
}
adv_query_number = (double)(sum_query_number) / (double)(REPEAT);
adv_num_reg = (double)(sum_num_reg) / (double)(REPEAT);

printf("adv_query_number %f",adv_query_number);
printf("adv_num_reg %f",adv_num_reg);

}
119名無しさん、君に決めた!:03/01/31 18:01 ID:???
70〜140MBもスタックに取るつもりかよ
120名無しさん、君に決めた!:03/01/31 18:01 ID:???
そこが問題ですか?enumんとこですよね?
121名無しさん、君に決めた!:03/01/31 18:01 ID:???
http://www6.ocn.ne.jp/~endou/index2.html
      ★こんなサイト見つけました★
122名無しさん、君に決めた!:03/01/31 18:01 ID:???
age
123名無しさん、君に決めた!:03/01/31 18:01 ID:???
何だよ、解決したんじゃなかったのか?
スタックに取りすぎだっつってんの

int i,j,k,query,query_number,num_reg,sum_query_number,sim_num,sum_num_reg,num_resource[MAX_RES],node[MAX_NODE][MAX_RES],rt[MAX_NODE][4][MAX_RES];

これがどれほど巨大なメモリを必要とするかわかる?
124名無しさん、君に決めた!:03/01/31 18:01 ID:???
どうやったらいいのでしょうか?
main関数から変数をおいだせばいいのでしょうか?
配列をなくせばいいのでしょうか?

enumは関係ないのですか?
125名無しさん、君に決めた!:03/01/31 18:01 ID:???
まず第一にバッファの使い方を見直すべし
んな巨大な配列が本当に必要なのか?
どうしても必要ならmallocなり何なりでヒープに取るべし

enumの値を配列サイズに使ってんだから関係あるに決まってる
126名無しさん、君に決めた!:03/01/31 18:01 ID:???
分かりました。
配列を変更するのは難しそうですので、
別の変数を直して行きます。
mallocとか勉強します
127名無しさん、君に決めた!:03/01/31 18:01 ID:???
ぷろぐらむの実行がいつまでたっても終らん。
実行を早くする基本は何?
128名無しさん、君に決めた!:03/01/31 18:01 ID:???
プロファイラ使え。
129名無しさん、君に決めた!:03/01/31 18:01 ID:???
さそ
ありがdございます

while(fgets(buf, 256, ifp) !=NULL){
for(i=0; i<strlen(buf); i++){
if(isalpha(buf[i])){
こんな感じでアルファベットだったらbufからその文字を省くといった
仕様にしたいのですが、bufからその文字だけ省くことなんて
可能なのでしょうか?

再度の糞厨質問ですいません。
ご教授オネガイイタシマス。
130名無しさん、君に決めた!:03/01/31 18:01 ID:???
VC++買おうと思って製品情報見てるとVisual Studio .NETのページに行っちゃうんですが
Visual Studio .NET て何ですか?
131名無しさん、君に決めた!:03/01/31 18:01 ID:???
VB,C#,VC++が全部入り
132名無しさん、君に決めた!:03/01/31 18:01 ID:???
11万円もするよぉ!うわぁーぁぁん
133名無しさん、君に決めた!:03/01/31 18:01 ID:???
ある4つほどの配列をファイルに書き込もうとして、
fwriteを使って書き込みました。
別のプログラムでそれを読み込もうとしてfreadで読み込んだのですが、
読み込んだ配列の中身が途中から0になってしまっています。
具体的には
a[130][100],b[100][30],c[100],d[30]を書き込んで
読み込んだaおよびbが途中から0になっていました。
けれどもcとdは正常に読み込めていました。
エラーチェックはしていますがエラーは出ていません。

プログラムも見直していますが、さっぱりわかりません。
どなたかご教授願いまつ。
134名無しさん、君に決めた!:03/01/31 18:01 ID:???
ほんとに全部要るのか?
135名無しさん、君に決めた!:03/01/31 18:01 ID:???
実際のものより小規模なモデルを作り、プログラムが正しく動作しているかを検証する。
各処理の実行時間を調べて、時間がかかっている部分を高速化する。
(但し、複雑になるような高速化は避ける。)
いくつかの規模のモデルを実行して、時間を測定し、実際のモデルでどれだけ時間が
かかるかを見積もる。
時間がかかり過ぎるようなら、別のアルゴリズムを探す。
別のアルゴリズムが見つからなければ、複雑な高速化に取り組む。
それでも時間がかかり過ぎるなら、プログラムを作ることの意義を見直す。
136名無しさん、君に決めた!:03/01/31 18:01 ID:???
省いた後、隙間を詰める。
もしくは、省く文字以外を別バッファにコピーする。
137名無しさん、君に決めた!:03/01/31 18:01 ID:???
#include <ctype.h>を追加して、

char tmp[256], *src, *dst ;

for ( src=buf, dst=tmp; *src; src++ ) {
  if ( isdigit( *src ) || *src=='-' || *src=='+' )
    *dst++ = *src ;
}
*dst= '\0' ;
hoge= atoi( tmp ) ;

但し、これだと "-1 2 +3" が "-12+3" になってしまうから
それいう可能性があるなら加工しる!

123で、"アルファベットだったらその文字を省く" って言ってるから、
if ( !isalpha( *src ) )
  *dst++ = *src ;
のほうがいいかな。
138名無しさん、君に決めた!:03/01/31 18:01 ID:???
先頭の空白は無視するというatoiの仕様を利用して、余計な文字をスペースに置き換えたら?
139名無しさん、君に決めた!:03/01/31 18:01 ID:???
ファイルサイズが期待した通りになっているかを確認。
ファイルの中を見てみて、0が書かれているようなら、
fwrite、そうでなければ読み込みがfreadを見直す。

たぶん、二次元配列のサイズ計算が間違えているんだと思う。
途中からとかではなくて、実際にどこから0が書かれているかを
調べるのもいいと思う。(地道なことをちゃんとやらんと)
140名無しさん、君に決めた!:03/01/31 18:01 ID:???
読み込むときも書き込むときもバイナリモードにした?
あ、UNIX系なら関係ないけど。
141名無しさん、君に決めた!:03/01/31 18:01 ID:???
全部いらなくても、商利用したいときとか…

ところで、シェアウェアって、やっぱ商利用?
142名無しさん、君に決めた!:03/01/31 18:01 ID:???
そりゃそうでつ。
143名無しさん、君に決めた!:03/01/31 18:02 ID:???
細かい訂正ですが、b[100][32]でd[32]でした。

カエレ!(・∀・)とか言われそうですが、
ファイルサイズの計算はどうすればいいのでしょうか・・・
バイナリファイルの中身はどうやって見ればいいのでしょうか・・・バイナリエディタですか?
二次元配列のサイズ計算というのがよく分からないのですが・・・
今いろいろと検索していますがよく分かりません・・・

aはa[30][0]から0になっていて、bはb[7][6]から0になっています。

WindowsのCygwinってやつでやってます。
一応fopenにはwbやrbはちゃんと書いているので
大丈夫だと思います・・・
144名無しさん、君に決めた!:03/01/31 18:02 ID:???
Visual C++ .NET Standard
買おうと思いますがどう思われますか?
VBは弄った事あります
145名無しさん、君に決めた!:03/01/31 18:02 ID:???
スレ違い祭りか?
146名無しさん、君に決めた!:03/01/31 18:02 ID:???
Visual C# .NET
Visual C++ .NETて何が違うんですか?
147名無しさん、君に決めた!:03/01/31 18:02 ID:???
Cygwin なら
ls -l ファイル名
でファイルサイズが見れますよ。

バイナリファイルの中身は
dump ファイル名 | less
(less でなく more でもいいです。お好きなほうを)
で見れます。
148名無しさん、君に決めた!:03/01/31 18:02 ID:???
C#とC++という時点で違う。
149名無しさん、君に決めた!:03/01/31 18:02 ID:???
> ファイルサイズの計算はどうすればいいのでしょうか・・・
printf("%d", sizeof a);
もしくは
sizeof(aの型) * 130 * 100
として計算。あとはバイナリなんで、a, b, c, dを全部足せばよい。

> バイナリファイルの中身はどうやって見ればいいのでしょうか・・・バイナリエディタですか?
バイナリエディタもしくは16進ダンプするツールを探す。
なければ作れ。(簡単だから)
予想では0は書かれていないと思う。

> 二次元配列のサイズ計算というのがよく分からないのですが・・・
> (略)
> aはa[30][0]から0になっていて、bはb[7][6]から0になっています。
c, dは大丈夫で、a, bが駄目というんで、二次元配列の扱いが間違えているんだと思う。
fwrite()のところで3000や1350という数を渡してしまっている。
3000は130 * 100 を 30 * 100にしてしまっているとか…
150名無しさん、君に決めた!:03/01/31 18:02 ID:???
いいんじゃない
151名無しさん、君に決めた!:03/01/31 18:02 ID:???
ありがd。
とりあえずプログラムもう一度見直して
ファイルの中身見たりしてみまつ。
152名無しさん、君に決めた!:03/01/31 18:02 ID:???
Visual C++ .NET Standard は
最適化が無くて、できた実行ファイルも配布禁止だったような。
完全に学習用なんで、それでもいいんなら買ったんでいいんでは?
153名無しさん、君に決めた!:03/01/31 18:03 ID:???
autoって書くのって時代遅れっぽぃ?
154名無しさん、君に決めた!:03/01/31 18:03 ID:???
>それって自動変数じゃねーだろ。
>(今時誰も書かないけど、auto ってキーワードもあるし...。)
そういわれたらそうかも(^^;
へんないいまわしだw
staticで宣言した瞬間にautoじゃなくなるもんね
>グローバル変数/関数のスコープには触れなくて良いのか ?
うーん、staticってなんでしか?って聞いてる人にあんまり難しいこといってもなぁ〜
って思いまして。

つまるところは内容が保持されるってことがいいたい。

そうすると、スコープの話になりますね・・・

>>(今時誰も書かないけど、auto ってキーワードもあるし...。)
う〜ん、C始めて、8年やけど、いまだかつてautoキーワード使ったこと無いわw
使うことってあるの?
155名無しさん、君に決めた!:03/01/31 18:03 ID:???
EXEとか言っているあたりWindows上でコンパイルしたな・・・・
xreaはLinux(CPUはIntel系)だから。
156名無しさん、君に決めた!:03/01/31 18:03 ID:???
printf("Content-type:text/html\n\n");
こんなん付けていましたが・・・ダメでした・・。
環境はVCなんです。・・うーぬ。
レスありがトン。
157名無しさん、君に決めた!:03/01/31 18:03 ID:???
トクトクでコンパイルしたものをXREAにアップすれば動くかも
158名無しさん、君に決めた!:03/01/31 18:03 ID:???
Windowsじゃだめなのですか!!
それは気付かなかった・・っていうか知らなかった〜
Linux対応にするにはどうすればいいか、わかります・・?
159名無しさん、君に決めた!:03/01/31 18:03 ID:???
strtok(バッファの内容を改変してもいいとき)
もしくは strchr(よくないとき)を使う。

: の後は空白を空ける。
printf("Content-type: text/html\n\n");

Linux 上でコンパイルする。
160名無しさん、君に決めた!:03/01/31 18:03 ID:???
他のバッファにコピーするならsscanf(src,"%[^#]",dest);こんな感じかな?
161名無しさん、君に決めた!:03/01/31 18:03 ID:???
自分とこでLinux環境整えてそこでコンパイル、が一番楽なんじゃないかなぁ…
Cygwin使えばWIN上でLinuxバイナリ作れる?
ttp://www.sixnine.net/cygwin/cygwin-doc/devel/cygwin-to-linux-cross-howto.html
162名無しさん、君に決めた!:03/01/31 18:03 ID:???
Linuxヵー自分全然わかんないッス・・・。
まだ遠い道なのかな・・。
163名無しさん、君に決めた!:03/01/31 18:03 ID:???
レンタル鯖でCGIするなら、やっぱperlとかの方がいいっしょ。
実験用に自前鯖つくるか
164名無しさん、君に決めた!:03/01/31 18:03 ID:???
*.cgi の中身ってどんな言語?
ってか、コンパイルされた状態なの?
テキストソースなの?
165名無しさん、君に決めた!:03/01/31 18:03 ID:???
実行できるなら何でも。
166名無しさん、君に決めた!:03/01/31 18:03 ID:???
のことならを読めば分かると思うけど・・・

> C言語で
> それをコンパイルして
167名無しさん、君に決めた!:03/01/31 18:03 ID:???
そういう意味か・・・

標準入出力と環境変数にアクセスする機能があれば言語は問わない。
Cで書かれたものならもちろんコンパイルしないとだめ
168名無しさん、君に決めた!:03/01/31 18:04 ID:???
確かにそういう意味かもしれんな...。

に補足するなら、サーバが許可してない形式のは実行できなかったと思う。
インタプリタ言語なら、もちろんインタプリタがサーバに置いてないと実行できない。
ホームでインタプリタを自前でコンパイルして使うという手もあるが...。
169名無しさん、君に決めた!:03/01/31 18:04 ID:???
const struct ABC {int i;} a;
struct ABC b;

ってすると、なんで a しか定数にならないのー?
型限定子なのに
170名無しさん、君に決めた!:03/01/31 18:04 ID:???
書き換え不能なstruct ABC型のaだからじゃない・・・
何がおかしいんだろ・・・
171名無しさん、君に決めた!:03/01/31 18:04 ID:???
int findpos(char s[], int lim)
{
int i;

for (i = 0; s[i] != '\0' && i < lim; i++)
{
;
}
if (i == lim)
{
while (i >= 0 && (s[i] == ' ' || s[i] == '\t'))/*@*/
{
i--;
}
}

return i;
}

@の条件が常に偽になるのはなぜなのでしょう?
172名無しさん、君に決めた!:03/01/31 18:04 ID:???
free()でsegmentation faultが発生するんですが考えられる原因は何でしょうか
173名無しさん、君に決めた!:03/01/31 18:04 ID:???
・mallocで得た領域でない。
・既にfree済み。
174名無しさん、君に決めた!:03/01/31 18:04 ID:???
const struct ABC {[?[struct]?] int i;} a;
175名無しさん、君に決めた!:03/01/31 18:04 ID:???
「困った1」ではなくて「困った」でした。スマソ。
176名無しさん、君に決めた!:03/01/31 18:04 ID:???
常に偽になるわけないでしょ。
findposに与える引数を工夫してみな。
177名無しさん、君に決めた!:03/01/31 18:04 ID:???
それ以外にも、ポインタとかの使い方間違えてて、メモリ管理がぐちゃぐちゃになってるとか...。
178名無しさん、君に決めた!:03/01/31 18:04 ID:???
>変数を後ろに宣言する何の必要があるのか?
関数でも変数でも定義や参照の後ろで宣言するのは意味無いし
179名無しさん、君に決めた!:03/01/31 18:04 ID:???
,263
1)でした...
静的に確保した領域を開放しようとしてました.
どうもありがとうございました.
180名無しさん、君に決めた!:03/01/31 18:04 ID:???
それで正常です。
構造体の定義の部分に const をつけても、
その構造体変数を作ろうとした場合に const になるわけではありません。
定義の部分でついでに定義した構造体変数が const になるのです。

常に const になって欲しいんならこんな感じで。
typedef const struct __ABC {int i;} ABC;
ABC a = { 0 };
ABC b = { 5 };
181名無しさん、君に決めた!:03/01/31 18:04 ID:???
ありがとうございます。
その方向で工夫してみます。
182名無しさん、君に決めた!:03/01/31 18:04 ID:???
再帰関数を書いたときにauto変数であることを明示するために書いたことがある。
183名無しさん、君に決めた!:03/01/31 18:04 ID:???
>const struct ABC {int i;} a;
だと
const struct ABC a;
でって、ABCがconstになるわけじゃないですからね。
そもそも、型を定数にしてなんかいいことある?

あえてするなら
struct ABC {const int i;};
かな?

184名無しさん、君に決めた!:03/01/31 18:04 ID:???
sizeof honyaraと、sizeof(honyara)って何か違いますか?
185名無しさん、君に決めた!:03/01/31 18:04 ID:???
don't worry.
186名無しさん、君に決めた!:03/01/31 18:04 ID:???
#define honyara honya + ra
後は自分で考えませう
187名無しさん、君に決めた!:03/01/31 18:04 ID:???
バトルタワースレもこれで潰されてたな・・・
188名無しさん、君に決めた!:03/01/31 18:04 ID:???
です。
んー、簡単なプログラムかいて、色々実験してみたんだけど、
結果は、同じになります。
あんまり悩む事じゃないのかな??
189名無しさん、君に決めた!:03/01/31 18:04 ID:???
それは、そんな定義する奴の方が悪いと思うけど。
190名無しさん、君に決めた!:03/01/31 18:04 ID:???
じゃ↓を試してみ
#define honyara 7 + 11
printf("%d\n",sizeof honyara );
printf("%d\n",sizeof(honyara));
191名無しさん、君に決めた!:03/01/31 18:04 ID:???
型に対してsizeofするときは括弧が必要なんじゃなかった?
192名無しさん、君に決めた!:03/01/31 18:04 ID:???
それは同意だが、は、何が違うのか聞いてるので…
193名無しさん、君に決めた!:03/01/31 18:04 ID:???
だからと言ってそんな変な例を出してどうする。

sizeof 単一式
sizoof(型名)

と言うだけのことだろ。規格書ぐらい読めよ。
194名無しさん、君に決めた!:03/01/31 18:06 ID:???
ごめん、コードはまた今度な。
195名無しさん、君に決めた!:03/01/31 18:06 ID:???
俺が思うに、1 6\n2 7\n3 8・・・と表示してゆくのではなく、
1から5までを表示したあとに一番上の行間で戻って少し右にずらし6から10までを表示したいんだと思う。
196名無しさん、君に決めた!:03/01/31 18:06 ID:???
× 行間で
○ 行まで
197名無しさん、君に決めた!:03/01/31 18:06 ID:???
1 6
2 7
3 8
4 9
5 10
↑これを
#include <stdio.h>
int main(void){
int a,b;
for(a=1;a<6;a++){
for(b=a;b<=10;b+=5)
printf("%3d",b);
printf("\n");
}
}
こうじゃなくてああ
198名無しさん、君に決めた!:03/01/31 18:06 ID:???
1 6
2 7
3 8
4 9
5 10
↑こういった出力結果が欲しいだけなんか?
だったら
int i;
for (i=1; i<=5; i++)
 printf("%d %d\n", i, i+5);
これでええやん。
199名無しさん、君に決めた!:03/01/31 18:06 ID:???
それだと1 -> 6 -> 2 -> 7という順で表示されるから嫌なんだと思う。
カーソルを移動させるための関数が必要だな。標準にはない。
200名無しさん、君に決めた!:03/01/31 18:06 ID:???
俺も当初そう思ったんだけど,
を見る限り1 -> 6 -> 2 -> 7と表示させようとしてるような。
201名無しさん、君に決めた!:03/01/31 18:06 ID:???
よう分からんけど、の環境で
同一プロセス内のスレッドが複数ある時の話じゃないか?
202名無しさん、君に決めた!:03/01/31 18:06 ID:???
「Java 謎+落とし穴」のp50参照
203名無しさん、君に決めた!:03/01/31 18:06 ID:???
C言語って関数内関数が使えないはずですよね?
gccだと通っちゃうんですが。何故?
204名無しさん、君に決めた!:03/01/31 18:06 ID:???
gccが独自拡張してるからだYO!
-ansi -pedantic-errors
の、「ANSI準拠以外認めない」オプション付けたらエラーになる筈

ところで
、61
の掛け合いに激しくワラタんだが、
反応ないのをみるに、これって激しく既知のネタ?
205名無しさん、君に決めた!:03/01/31 18:06 ID:???
Not Found.
206名無しさん、君に決めた!:03/01/31 18:06 ID:???
知らなんだ。イイ! ね。
特に作業用の引数が必要な再帰関数使うときとか。
207名無しさん、君に決めた!:03/01/31 18:06 ID:???
サンクス

というかなんで標準Cじゃ使えないんだよヽ(`Д´)ノ
スコープがちょっと違うだけだろうが!
208名無しさん、君に決めた!:03/01/31 18:06 ID:???
> #define honyara (honya + ra)

> って宣言するだろ。

このくだらないつっこみのために遅レスしたの?
209名無しさん、君に決めた!:03/01/31 18:06 ID:???
> #define honyara (honya + ra)

> って宣言するだろ。

#define honyara ((honya) + (ra))
210名無しさん、君に決めた!:03/01/31 18:06 ID:???
>このくだらないつっこみのために遅レスしたの?
規格書を読んでいた為ではないかと。
211名無しさん、君に決めた!:03/01/31 18:06 ID:???
あんたの意味なし煽り突っ込みよりマシかと。

趣味の差かと。
念には、念を入れると言う考え方もあるけど、俺はマクロ側で () 必須にするのが好み。

それもあるが、毎日 2ch 見てるわけじゃないし...。
212名無しさん、君に決めた!:03/01/31 18:06 ID:???
>俺はマクロ側で () 必須にするのが好み。

#define a(b) (b * 5)
printf("%d\n", a((4 + 8)));

という意味だったら死刑。
213名無しさん、君に決めた!:03/01/31 18:07 ID:???
早くこの荒らしアク禁に汁!
214名無しさん、君に決めた!:03/01/31 18:07 ID:???
煽ったつもりはないですけど。
煽っているのはの方でしょ。
215名無しさん、君に決めた!:03/01/31 18:08 ID:???
これ (=このくだらないつっこみのために遅レスしたの?) 書いといて...

> 煽ったつもりはないですけど。

と来たか...。

で煽りがないとは言わんけど、は見てんのかなぁ。
216名無しさん、君に決めた!:03/01/31 18:08 ID:???
驚いたので感想を書いただけです。
亀レスでなければ驚きもしないですけど。
くだらないという表現がまずかったでしょうか。
217名無しさん、君に決めた!:03/01/31 18:08 ID:???
> 驚いたので感想を書いただけです。

マジなのか、ネタ (だと思いたいが) なのかわからんけど。
まああんたみたいな奴も世の中にはいるということはわかった。

> 亀レスでなければ驚きもしないですけど。

自分で亀レスって書いといてなんだけど、2日と17時間ぐらいが、驚くほど亀レスか ?
君と違って、毎日 2ch 見てる香具師ばかりじゃないんだよ。

> くだらないという表現がまずかったでしょうか。

相手に対して、「くだらない」と言う表現がまずくない場合があるとでも思ってんの ?
218名無しさん、君に決めた!:03/01/31 18:08 ID:???
1.構造体のメンバが宣言順にアドレス増加方向で並ぶのは保証されている
2.配列内の要素はアドレス増加方向で並ぶことが保証されている
3.アドレス演算は+で増加方向、-で減少方向が保証されている
だが、
4.構造体の中身が隙間無く並ぶことは保証されていない
に引っかかって誤動作することがあると思われ。

sizeof(int)=4,sizeof(short)=2として、
struct mix{
 short a[1];
 int b[1];
 short c[1];
};
だと、恐らくmix.c[-3] != mix.a[0]になると思う。
ただそれよりも何よりも、そんな危険な匂いのするコード個人的に嫌だw
219名無しさん、君に決めた!:03/01/31 18:08 ID:???
あんな書き込みでは2日と17時間でも驚くよ。
大抵は思っても書き込んだりはしないんじゃないかな。
220名無しさん、君に決めた!:03/01/31 18:08 ID:???
要は2日と17時間経ってからレスしたことに驚いたんじゃなくて、あんなレスを2日と17時間も経ったあとにしたことに驚いたということ。
221名無しさん、君に決めた!:03/01/31 18:08 ID:???
ハイハイ、わかりました。
222名無しさん、君に決めた!:03/01/31 18:08 ID:???
二次元配列を引数にとるにはどうすればいいんですか?
int dat[100][100];
void func(int *param);
main(){
  func(dat);
}

のようにやっても、うまくいきません。
void func(int** param);でもだめでした。
教えてください。
223名無しさん、君に決めた!:03/01/31 18:08 ID:???
-3じゃなく-4かもね、それ。
224名無しさん、君に決めた!:03/01/31 18:08 ID:???
void func(int param[][100])
void func(int (*param)[100])

225名無しさん、君に決めた!:03/01/31 18:08 ID:???
void func(int param[][100]);
226名無しさん、君に決めた!:03/01/31 18:08 ID:???
限定される。
ポインタの指すものの大きさが分からないとだめだろ。
227名無しさん、君に決めた!:03/01/31 18:08 ID:???
そもそも配列の範囲外へのアクセスは保証されないよ。

しつこい、お前等ウザイからどっか逝け。

void func(int param[][100])

多次元配列の最上位の次元以外の範囲は省略できない。
228名無しさん、君に決めた!:03/01/31 18:08 ID:???
よくわかりました。どうもありがとうございました。
229名無しさん、君に決めた!:03/01/31 18:08 ID:???
int data[100 +2], *p;
p = data +2;

とすれば、p[-2], p[-1] が有効に使えるね。
230名無しさん、君に決めた!:03/01/31 18:08 ID:???
あ、コメント閉じるの忘れてた。
 param[n * 3 + 6] = 3; /* a[3][6] = 3; */
231名無しさん、君に決めた!:03/01/31 18:08 ID:???
それだと2次元配列の見易さや配列の大きさについての
情報が無くなるから・・
void func(int *param,int n){
/*nは1列の要素数*/
 *(param + 3 * n + 6) = 3;
}
と大差ないと思われ。
これなら通ることは恐らくも確認済みと思う。

関係ないが、関数の中にマジックナンバーを仕込むのは
サンプルコードでも止めて欲すぃ・・
232名無しさん、君に決めた!:03/01/31 18:08 ID:???
==413
>sizoof(型名)
>規格書ぐらい読めよ。
規格書読む前に、アルファベットの綴りを覚えろよ
233名無しさん、君に決めた!:03/01/31 18:08 ID:???
typo ぐらいでがたがた言うな。
234名無しさん、君に決めた!:03/01/31 18:08 ID:???
数字だと瞬間での同一性の確認が得られるから、
こういうサンプルではマジックナンバーもアリかと思って。

あと、もし第二要素数の異なる二次元配列を扱うのであれば、
それと大差ないのは仕方がないんじゃないかな。
まぁ、
#define INDEX2(n2, a, b) ((a) * (n2) + (b))
とかして
param[INDEX2(n, 3, 6)] = 3;
とでもすればいいかと。
もちろん要素数固定ならこんなことする必要ないんだけどね。
235名無しさん、君に決めた!:03/01/31 18:08 ID:???
が趣味の差かよ!!
236名無しさん、君に決めた!:03/01/31 18:08 ID:???
age
237名無しさん、君に決めた!:03/01/31 18:08 ID:???
ルパーン お前をタイポする〜〜
238名無しさん、君に決めた!:03/01/31 18:08 ID:???
#include<stdio.h>
#include<stdlib.h>
int main (void){
int k,nsize;
int *pnVar;
printf("確保する大きさ");
scanf("%d",&nsize);
pnVar= (int *)malloc(sizeof(int)* nsize);
printf("%dバイトの領域を確保しました\n",4*nsize);
for(k=0;k<nsize;k++);
pnVar[k]=k*10;
for(k=0;k<nsize;k++);
printf("pnVar+%d=%p pnVar[%d]=%d\n",pnVar+k,k,pnVar[k]);
free(pnVar);
return 0;
}
何故かエラーがでます。
授業の板所を間違えて写してしまったのでしょうか
どなたか対処法をおねがいします。
マロック関数です
239名無しさん、君に決めた!:03/01/31 18:08 ID:???
お前はその前に日本語を学びなおせ。
for文の後にいきなりセミコロンがあるが、それはどうなのよ?
240名無しさん、君に決めた!:03/01/31 18:08 ID:???
↑お前ね、煽り方がふるくせんだよ。 ジジイかよ
241名無しさん、君に決めた!:03/01/31 18:08 ID:???
Stack overflowと言うエラーは何ですか?
242名無しさん、君に決めた!:03/01/31 18:09 ID:???
大学の研究でいきずまってるんですけど。助けてください。
まず仕事の数を入力して次に仕事の内容を入力して次に仕事別に分けたいのだけどどうしたらいいの?
ちなみに仕事は丸ブローチ加工、角ブローチ加工、キーみぞ加工の3種類です。
243名無しさん、君に決めた!:03/01/31 18:09 ID:???
マロック関数ですか。
なんだか新鮮ですな。
244名無しさん、君に決めた!:03/01/31 18:09 ID:???
バカ?
245名無しさん、君に決めた!:03/01/31 18:09 ID:???
質問が漠然としてるな
いまいちわからない
研究にかかわってない人間でもわかるように質問して
246名無しさん、君に決めた!:03/01/31 18:09 ID:???
少しおちついて考えればすぐ解ると思うが、

for(k=0;k<nsize;k++);/* k が nsize になるまで空回り*/
pnVar[k]=k*10;/* ここでは k は nsize と同じ値になっている*/

となっている。
451じゃないが、for文直後のセミコロンはいったい何なんだと小3分ほど(w
247名無しさん、君に決めた!:03/01/31 18:09 ID:???
intの大きさをsizeof(int)と書いているところもあれば4と決めつけているところもあるね。
あ、エラーとはなんの関係もないよ。
248名無しさん、君に決めた!:03/01/31 18:09 ID:???
include<stdio.h>

void main()
{
long sum=0;
short ten[10],i,n;

printf(“仕事数の入力(10個以内):”);
scanf(“%2d,&n);
for(i=0;i<n;++i){
printf(“%2d個目の仕事の入力:”,i+1);
scanf(“%s”,&ten[i]);
sum=sum+ten[i];
}
if(?){
printf(“丸ブローチ加工です。\n”);
}
}
ここで()のなかの条件式がわかりません。仕事の内容を入力する時にmと入力されれば
”丸ブローチ加工”です。と表示したいのです。初心者なのでよろしくおねがいします。
249名無しさん、君に決めた!:03/01/31 18:09 ID:???
まずは全角のダブルクォーテーションをなんとかしろ。
次に、なんでshortに文字列を入れようとする?
250名無しさん、君に決めた!:03/01/31 18:09 ID:???
sumって何に使うの?
251名無しさん、君に決めた!:03/01/31 18:09 ID:???
アムロの(ry
252名無しさん、君に決めた!:03/01/31 18:09 ID:???
木下君のやりたいことを想像してみよう
253名無しさん、君に決めた!:03/01/31 18:09 ID:???
オリンピックで金メダルを取ること。
254名無しさん、君に決めた!:03/01/31 18:09 ID:???
するとsparcかな。エンディアンしらねえや(w
でも書いたファイルがヌルだらけという状況からいって、
ビッグエンディアンっぽいね。

ともかくその場面ではfwriteを使うんじゃなくて、fputcを使うべし。
fputcは文字をストリームに書く関数というよりは、
一バイトストリームに書く関数って感じなので、バイナリ書けるよ。
255名無しさん、君に決めた!:03/01/31 18:09 ID:???
サソ
アリガトウゴザイマス

確かに漏れバイナリわかってません。。。
32#more
44#baka
nanoka #utsuda
↑こんな感じのテキストファイル読み込んで
(#以降はコメントの扱いとして省く)
バイナリでファイルに書きこむっていう
プログラムを作っています。

putcでバイナリで書きこめるのであれば
私の仕様でもダイジョウブなんでしょうか?
最近夢にバイナリが出てきます。
鬱です。
256名無しさん、君に決めた!:03/01/31 18:09 ID:???
32 とか 44 とかをバイナリで書き込むんですね?
でも、nanoka とかバイナリもテキストもないと思いますが
どういう仕様にしたいのでしょうか。
257名無しさん、君に決めた!:03/01/31 18:09 ID:???
サソ
アリガdゴザイマス!

おっしゃる通りでして
"nanoka"はそのままカキコで
OKであります。

32やら44をバイナリで書きこみたい
のです。

ご教授お願い致します。
258名無しさん、君に決めた!:03/01/31 18:09 ID:???
300get#300geto-
という場合はどうなんでしょう?

何にせよ、fgets で一行読み込んでから処理する方が楽な気がします。
259名無しさん、君に決めた!:03/01/31 18:09 ID:???
サソ
fgetsのほうがよいですか。。。
while(fgets(buf, 256, ifp) !=NULL){
for(src=buf, dst=tmp; *src; src++){
if(*src == "#")
*dst++=*src;
}
*dst='\0';
こんな感じでいけますかねぇぇ。。。
260名無しさん、君に決めた!:03/01/31 18:09 ID:???
atoi って知ってる?
261名無しさん、君に決めた!:03/01/31 18:09 ID:???
aoiなら知ってる
262名無しさん、君に決めた!:03/01/31 18:09 ID:???
ぬ★ぽなら知ってる
263名無しさん、君に決めた!:03/01/31 18:10 ID:???
走査していって数字が見つかれば atoi、
見つからなければ1文字出力、
を続けていけばいいんじゃない?
264名無しさん、君に決めた!:03/01/31 18:10 ID:???
フセジ カコワルイ
265名無しさん、君に決めた!:03/01/31 18:10 ID:???
サソ
500ゲトの暁にそのコード書いて
くださひ。。。
もうアタマがオーヴァーヒートして
だめぽ。。。
266名無しさん、君に決めた!:03/01/31 18:10 ID:???
ヒント挙げすぎちゃったかなと思ってるくらいなのに...。
267名無しさん、君に決めた!:03/01/31 18:10 ID:???
ほらよ。行数多すぎとか言われたんで入るように手を加えた。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main(int argc, char * argv[]) {
char s[512], *p;
FILE *ifp, *ofp;
if (argc != 3) {
fputs("usage: hoge <in> <out>\n", stderr);
return 0;
}
ifp = fopen(argv[1], "rb"); ofp = fopen(argv[2], "wb");
if (!ifp || !ofp) {
perror(NULL);
return 3;
}
while (fgets(s, sizeof(s), ifp)) {
if (p = strchr(s, '#')) *p = '\0';
else if (p = strchr(s, '\n')) *p = '\0';
if (isdigit(*s)) {
int i = atoi(s);
fwrite(&i, sizeof(i), 1, ofp);
}
else
fputs(s, ofp);
fputc('\n', ofp);
}
fclose(ofp); fclose(ifp);
return 0;
}
268名無しさん、君に決めた!:03/01/31 18:10 ID:???
32 行までな。
269名無しさん、君に決めた!:03/01/31 18:10 ID:???
どなたか文字列指数をdouble型へ変換する最も効率の良い方法しりませんか?

"3e-5" を 0.00003とする場合など。

お願いします!!
270名無しさん、君に決めた!:03/01/31 18:10 ID:???
double a;
sscanf("3e-5", "%g", &a)
271名無しさん、君に決めた!:03/01/31 18:10 ID:???
ものすごくあっさりできるのですね。
ちなみに反対の変換はfcvt()でOKでしょうか?
272名無しさん、君に決めた!:03/01/31 18:10 ID:???
sprintf()
273名無しさん、君に決めた!:03/01/31 18:10 ID:???
了解しますた。
ありがとうございました。
274名無しさん、君に決めた!:03/01/31 18:10 ID:???
サソ・・・
ふぉんとにありがdございます。
家に着いたらそこには宝があったよー!!
(゚д゚)ウマー(゚д゚)ウマー(゚д゚)ウマー
とりあえずケコーンしてくだはい。
275名無しさん、君に決めた!:03/01/31 18:10 ID:???
あ、当方、29歳女、バツ2です。





・・・などとプロフィールを勝手に書いてみるテスト・・・
276名無しさん、君に決めた!:03/01/31 18:10 ID:???
printfをラップしたいのだが、訳あってvprintfは使えないとき、
int myprintf(const char *format, ...){
 return printf(?????);
}
こんなことは出来ないよねえ。
可変個引数をとる関数とva_listをとる関数はセットで用意しておくべき物なの?
277名無しさん、君に決めた!:03/01/31 18:10 ID:???
質問の趣旨がわからないんだけど・・・。
278名無しさん、君に決めた!:03/01/31 18:10 ID:???
29じゃ、すでに女じゃないな
279名無しさん、君に決めた!:03/01/31 18:10 ID:???
淑女です
280名無しさん、君に決めた!:03/01/31 18:10 ID:???
質問なのですが、
文字をそのままにして計算させることは可能でしょうか?たとえば、
double a=1.2, b=2.3, c, d;
d=a+b+c;
で、“d=3.5+c”と計算させたいのです。
281名無しさん、君に決めた!:03/01/31 18:10 ID:???
誰か教えてください!出来れば、leap=で始まっている2ヶ所を関数にしたいんですが、どうしたらいいでしょう?
そうじゃなくてもこれをもっと短くする方法ってありますかね?

#include <stdio.h>
main()
{
static int days_data[13]={0,31,28,31,30,31,30,31,31,30,31,30,31},Feb=28;
int i,days1,y1,m1,d1,days2,y2,m2,d2,leap,lapse,ydays;
printf("初めの年月日を入力してください : ");
scanf("%d %d %d",&y1,&m1,&d1);
printf("終りの年月日を入力してください : ");
scanf("%d %d %d",&y2,&m2,&d2);
leap=(y1%4==0 && y1%100!=0)|| y1%400==0;
days_data[2]=Feb+leap;
days1=d1;
for(i=1;i<m1;i++){
days1+=days_data[i];
}
leap=(y2%4==0 && y2%100!=0)|| y2%400==0;
days_data[2]=Feb+leap;
days2=d2;
for(i=1;i<m2;i++){
days2+=days_data[i];
}
ydays=0;
for(i=y1;i<y2;i++){
leap=(i%4==0 && i%100!=0)|| i%400==0;
ydays+=365+leap;
}
lapse=(ydays+days2)-days1;
printf("経過日数は%d日です\n",lapse);
}
282名無しさん、君に決めた!:03/01/31 18:10 ID:???
printfのラップはなかなか難しい。
ttp://swig-jp.dyndns.org/doc1314-2/Varargs.html
283名無しさん、君に決めた!:03/01/31 18:10 ID:???
一瞬ドキッとしたじゃねえかゴルァ(w
284名無しさん、君に決めた!:03/01/31 18:10 ID:???
int isleap(int y1)
{
 return (y1%4==0 && y1%100!=0)|| y1%400==0;
}
285名無しさん、君に決めた!:03/01/31 18:11 ID:???
放置??他スレで聞くYO!
286名無しさん、君に決めた!:03/01/31 18:11 ID:???
if(((y%4==0)&&(y%100!=0))||(y%400==0))d[2]=29;
c[1]=0;
for(i=1;i<11;++i){
c[i+1]=c[i]+d[i];
}

z=y-1601;
k=z/4 - z/100 + z/400 +1;
n=365*z+k+c[m];
r=n%7;

kara = 1-r;
while(kara<=d[m]){
made=kara+6;
if (made>d[m])
made=d[m];
for (i=kara; i<=made; ++i){
if (i<=0)
printf(" ");
else
printf(" %5d",i);
}
printf("n");
kara+=7;
}
printf("nn");
}

これを修正して欲しいのですが(全部表示されない月があります)
287名無しさん、君に決めた!:03/01/31 18:11 ID:???
事故解決しました

× d[10]=31; d[11]=28; d[12]=31;
○ d[10]=31; d[11]=30; d[12]=31;
288名無しさん、君に決めた!:03/01/31 18:11 ID:???
man 2 openでopen関数について調べてみると、同名の関数がふたつ出てくるんですが、
Cでも関数のオーバーロードができるんですか?

http://www.linux.or.jp/JM/html/LDP_man-pages/man2/open.2.html
289名無しさん、君に決めた!:03/01/31 18:11 ID:???
Cでは、いわゆるオーバーロードはできません。
これは可変長引数。printfみたいな。
290名無しさん、君に決めた!:03/01/31 18:11 ID:???
あーなるほど。可変個の引数ですか。
確かにfcntl.hでは三番目は...となっていますね。
flagsによって三番目の引数があるかないか判断しているのかな。

ありがとうございました。
291名無しさん、君に決めた!:03/01/31 18:11 ID:???
超超初心者です。
あるソフトのパッチを当てるのに
バイナリデータの変更で
0000E76A: 56 3b

と書いてあるのですがどういういみですか
292名無しさん、君に決めた!:03/01/31 18:11 ID:???
本当に初心者ですね。
聞くべきスレッドを間違えるなんて。

スレ違いどころか板違いか。
293名無しさん、君に決めた!:03/01/31 18:11 ID:???
追記 
別のパッチでは 
004167: 10 00
とADRESS部分が6文字なのですが?
エデッターでどう入れればいいのでしょうか
294名無しさん、君に決めた!:03/01/31 18:11 ID:???
エデッターって何ですか?
295名無しさん、君に決めた!:03/01/31 18:11 ID:???
int main(void) {
FILE *fp;
fp = fopen("hoge", "w+b");
fseek(fp, 0x4167, SEEK_SET);
fwrite("\x10\x00", 2, 1, fp);
fclose(fp);
return 0;
}
296名無しさん、君に決めた!:03/01/31 18:11 ID:???
30歳代。
会社員だと思っていたが、5万円程度でもう納得したい。
参加するためにはクレジットカード番号を入力したが、男性(約20万円)を購入する。そして、負けだと思っていた。
入金されるゲームということもあり、軽い気持ちでは解約できないし。
インターネット上でギャンブル。
どうすればよいか。
http://www.kokusen.go.jp/jirei/data/200112_3.html
297名無しさん、君に決めた!:03/01/31 18:11 ID:???
可変個の引数を取る関数の中で、与えられた引数の個数以上に読むのはまずいですけど、
少なく読むのはかまわないですよね?
298名無しさん、君に決めた!:03/01/31 18:11 ID:???
yes
299名無しさん、君に決めた!:03/01/31 18:11 ID:???
超怒素人です。
@のexeで取得した変数アドレスを
Aのexeから入力して変数の値を取得したいのですがうまくできません。
何故でしょうか?

@---------------------------------
#include<stdio.h>
int main(void)
{
int a;
long *pnt;
printf("数値を入力して下さい:");
scanf("%d",&a);
pnt = &a;
printf("変数のアドレス:%d\n",pnt);
printf("そのアドレスに格納されている値:%d\n",*pnt);
}
A---------------------------------
#include<stdio.h>
int main(void)
{
int a;
long *pnt;
printf("変数のアドレスを入力して下さい:");
scanf("%d",&a);
pnt = a;
printf("そのアドレスに格納されている値:%d\n",*pnt);
}
300名無しさん、君に決めた!:03/01/31 18:11 ID:???
ポインタ変数の値が別プロセスで有効な保証は無い、というかまず無効
301名無しさん、君に決めた!:03/01/31 18:11 ID:???
どうしよう...共有メモリとかの概念とか
物理アドレスと仮想アドレスとかの概念を教えた方がいいのだろうか...
302名無しさん、君に決めた!:03/01/31 18:11 ID:???
そもそも何がしたいんだろう・・・
303名無しさん、君に決めた!:03/01/31 18:11 ID:???
ありがとうございました。
304名無しさん、君に決めた!:03/01/31 18:11 ID:???
39という文字が書かれたテキストがあって
この場合の"39"って2バイトですよね?
これを1バイトの39にパックしろって
指令されたんですが、
1.パックってなんですか?
2.パックを実現する方法(関数等)
上記2つに関してご教授下さると幸いです。

以上、初心者ですが宜しくお願いします。

って
printf("変数のアドレス:%p\n",pnt);
じゃダメなんすかね?
305名無しさん、君に決めた!:03/01/31 18:11 ID:???
"39"という文字列を39という値にしろということだと思うけど・・・
atoi、strtol、sscanf

アドレスを手動で入力させるのってかなり無理がある。
306名無しさん、君に決めた!:03/01/31 18:11 ID:???
1バイトならsscanfだと面倒か・・・intの変数に入れた後にcharの変数に入れ直さなければならないから。
307名無しさん、君に決めた!:03/01/31 18:11 ID:???
fscanf(fp, "%2d", &inum);
は、いくらなんでも冗談として、

1の質問は指示した人間にするべきかと。
余りに一般的で汎用的な言葉だけに、
その相手がどんなつもりで「パック」と言ってるかわからん。
#尤も、「おまえそんなこともわからないのか」と言われる覚悟が必要だけど。
308名無しさん、君に決めた!:03/01/31 18:11 ID:???
Packed BCDにしろって意味ではないかと。
一桁4bitで表現するので、0x39となる。
C言語の標準関数にはないです。

とはいえ、の言う通り一度確かめた方が確実。
309名無しさん、君に決めた!:03/01/31 18:12 ID:???
パック十進数?
二桁なら12bit必要じゃない?
310名無しさん、君に決めた!:03/01/31 18:12 ID:???
ありがとうございました。
311名無しさん、君に決めた!:03/01/31 18:12 ID:???
成績処理プログラムの作り方を教えてください。できれば具体的に
プログラムを書いてくださるとありがたいです。
312名無しさん、君に決めた!:03/01/31 18:12 ID:???
#include <stdlib.h>

int main(int argc, char **argv);

void getSeisekiData(void);
void calcHyouka(void);
void putKekka(void);

int
main(int argc, char **argv)
{
getSeisekiData();
calcHyouka();
putKekka();
return EXIT_SUCCESS;
}
/* それぞれの処理をこの後に書けば完成w */
313名無しさん、君に決めた!:03/01/31 18:12 ID:???
サソ
ご回答ありがdです。
話しおわらさんといてや

int ENZAN (FILE *fp,char x,char y )
{
char z;
x&=0x0F;
x<<=4;
y&=0x0F;
z=x | y;
fwrite(&z, sizeof(z),1,fp );
}
↑こんな感じの処理をパックって
言うもんだと思ってました・・・
314名無しさん、君に決めた!:03/01/31 18:12 ID:???
もっと詳しく説明してくれ。
昔にも、それBCDちゃうみたいなこといわれて、
調べ直したことがあったんだけど、
結局、どう解釈が違っているのかわからんかったんで。
315名無しさん、君に決めた!:03/01/31 18:12 ID:???
>>565
ありがとうございます。
316名無しさん、君に決めた!:03/01/31 18:12 ID:???
二桁で8bit、それに符号4bit、併せて12bit。
違うかな。
317名無しさん、君に決めた!:03/01/31 18:12 ID:???
=562
1バイトにパックってことだから、符合は考慮しないんでないの?
#寡聞にして、符号付BCDの実例を知らないんだけど。
318名無しさん、君に決めた!:03/01/31 18:12 ID:???
・・すみません、これどうやるのですか?

キーボードをでたらめ出鱈目に打つとき、英字(A-Z, a-z)
、数字(0-9)、その他の文字の出現頻度を数えなさい。
Ex.) I am a student. Hello %Enter → a = 2, d = 1, e = 2

初心者であんまりわからないのですが
319名無しさん、君に決めた!:03/01/31 18:12 ID:???
/* 取り敢えず、こんなもんでどうでしょ。 */
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char**argv);
int
main(int argc, char **argv)
{
int count[256];
int ch;

while (ch = getc() != EOF) {
count[ch]++;
}
/* 問題は出力方法 */
return EXIT_SUCCESS;
}
320名無しさん、君に決めた!:03/01/31 18:12 ID:???
配列の0での初期化は?
321名無しさん、君に決めた!:03/01/31 18:12 ID:???
GUIアプリケーションをLinuxで開発したいと思うんですが、
どんなライブラリを使えばいいんでしょうか?
どれがお勧めのライブラリなんでしょうか?
322名無しさん、君に決めた!:03/01/31 18:12 ID:???
を読んでないだろ。
323名無しさん、君に決めた!:03/01/31 18:12 ID:???
スマソ。別スレに逝きます・・・
324名無しさん、君に決めた!:03/01/31 18:12 ID:???
あ、ぼけてた。
面倒だから
static int count[256];
で。
325名無しさん、君に決めた!:03/01/31 18:12 ID:???
出力方法はこんなんでどうでしょ。

for (i = 0; i < 256; i++) {
 if (isprint(i)) {
  printf("%c: %d", i, count[i]);
 }
}
326名無しさん、君に決めた!:03/01/31 18:12 ID:???
師ね
327名無しさん、君に決めた!:03/01/31 18:12 ID:???
改行しないと醜いかと。
328名無しさん、君に決めた!:03/01/31 18:12 ID:???
スレ違い。
329名無しさん、君に決めた!:03/01/31 18:12 ID:???
ごめん、ちょっと書いてみたくなっただけ。
330名無しさん、君に決めた!:03/01/31 18:12 ID:???
今ユーザー関数作成で困っております。
仕様:テキストファイルを読み込み
行数毎に異なった処理を行い
バッファにぶちこむ。

for(cnt=1; (fgets(tmp,256,ipt_fp)); cnt++)
上記のようにすれば行数は数えることが
可能ですよね?
int cntに代入された数値を利用し
switch (cnt){
case 1:
printf("(゚д゚)ウマー\n");
break;
case 2:
printf("(・A・)イクナイ\n");
break;
といった感じにしたのですが
cntを関数に引数で渡すにはどのように
すればよろしいのでしょうか?
初心者でご迷惑お掛けいたしますが
ご教授お願いいたします。
331名無しさん、君に決めた!:03/01/31 18:12 ID:???
関数の定義の仕方がわからんということか?

void uma(int cnt) {
 switch (cnt){
 case 1:
  printf("(゚д゚)ウマー\n");
  break;
 case 2:
  printf("(・A・)イクナイ\n");
  break;
 }
}

とか定義しといて

for(cnt=1; (fgets(tmp,256,ipt_fp)); cnt++) {
 uma(cnt);
}

でいいんじゃないの。それともこういうことじゃない?
 
332名無しさん、君に決めた!:03/01/31 18:12 ID:???
さん
ありがとーございます!
なるほど、こうやって定義するんですねぇ。
勉強になります。

cntが1だったら
(゚д゚)ウマーが出力されるのか。
すげー。関数すげー。
関数(゚д゚)ウマー
333名無しさん、君に決めた!:03/01/31 18:12 ID:???
forを
for(cnt=1; (fgets(tmp,256,ipt_fp)); cnt++)
という形で使えるやつが、

な ん で 関 数 定 義 が わ か ら な い ん だ ? !
334名無しさん、君に決めた!:03/01/31 18:12 ID:???
for は極めたが関数定義はまだ習っていないか理解が不十分。
で充分説明つくじゃないか。
335名無しさん、君に決めた!:03/01/31 18:12 ID:???
氏ね
336名無しさん、君に決めた!:03/01/31 18:12 ID:???
BASICからCに入ったので、(自分で定義する)関数というものを知らなかったに100ペリカ
したがって、mainはおまじないで、main以外の関数は一切なし。
しかもgotoを多用したスパゲッティプログラムだ!
337名無しさん、君に決めた!:03/01/31 18:12 ID:???
Cから始めたけど、2000行程度なら関数はmainだけにするYO!
338名無しさん、君に決めた!:03/01/31 18:12 ID:???
逝ってよし。
339名無しさん、君に決めた!:03/01/31 18:13 ID:???
オマエモナー
340名無しさん、君に決めた!:03/01/31 18:13 ID:???
そんな義理なし。
341名無しさん、君に決めた!:03/01/31 18:13 ID:???
義理チョコしかもらえないんですか
342名無しさん、君に決めた!:03/01/31 18:13 ID:???
義理チョコももらえませんが何か?
343名無しさん、君に決めた!:03/01/31 18:13 ID:???
。・゚・(ノД`)・゚・。
344名無しさん、君に決めた!:03/01/31 18:13 ID:???
氏ね屑
345名無しさん、君に決めた!:03/01/31 18:13 ID:???
int main(){
  //略
  return 0;
}

この最後に返してる0ってなんに使うの?
子プロセスとしてプログラム動かしたら
wait(&state)とかでstateに入る数値になるの?
346名無しさん、君に決めた!:03/01/31 18:13 ID:???
そこまで予想がついてるのなら、wait()のmanを見ればすぐ分かるよ。
statusの値そのものじゃなくて、#include <sys/wait.h> で定義されるマクロ
WEXITSTATUS(status) の値がmainの戻り値になる。
347名無しさん、君に決めた!:03/01/31 18:13 ID:???
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問してYO!
むしろ質問する前にWEBで検索するのが常識だYO!

GUIなどの標準Cではできない事の質問は使用している開発環境のスレへ行ってYO!
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへ行ってYO!

コンパイラを探しているなら を見てYO!

上記を逸した場合の結果は激しく未定義とするYO!

C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/

前スレだYO!
http://pc3.2ch.net/test/read.cgi/tech/1041127646/
348名無しさん、君に決めた!:03/01/31 18:13 ID:???
( ゜Д゜)ポカーン・・・
349名無しさん、君に決めた!:03/01/31 18:13 ID:???
      __     
     l⊆⊇`ヽ ≡ ヤホー----イ
     (´ァョLノ ≡   
    m=○=mノ) ≡ もうスレ立ってた気がしる〜
    _/_/(「_ノニコ ≡
     ( (0)=(__)0) ≡(´⌒(´⌒;;
350名無しさん、君に決めた!:03/01/31 18:13 ID:???
嘘だろ?
800以降は確認したけど・・・
351名無しさん、君に決めた!:03/01/31 18:13 ID:???
立てる前に確認しませう
http://pc3.2ch.net/test/read.cgi/tech/1042640474/l50
つーわけでは削除依頼だすやうに
352名無しさん、君に決めた!:03/01/31 18:13 ID:???
スレ立てたのなら現行スレに報告しろよ
353名無しさん、君に決めた!:03/01/31 18:13 ID:???
それは立てた香具師に言ってくれ
354名無しさん、君に決めた!:03/01/31 18:13 ID:???
sss
355名無しさん、君に決めた!:03/01/31 18:13 ID:???
=6
おまえのチェックミスを棚に上げんな
356名無しさん、君に決めた!:03/01/31 18:13 ID:???
禿同。はアフォ。早く削除依頼しなさい。
357名無しさん、君に決めた!:03/01/31 18:13 ID:???
=10
自作自演でした。テヘッ
358名無しさん、君に決めた!:03/01/31 18:13 ID:???
自作自演でした。
359名無しさん、君に決めた!:03/01/31 18:13 ID:???
見ればわかります
360名無しさん、君に決めた!:03/01/31 18:13 ID:???
void func(char **);

main()
{
char a[100][100];

func(a);

return 0;
}

void func(char **a)
{
}

↑のようにやったらプログラムが暴走したんですが
対処法はいかに?
361名無しさん、君に決めた!:03/01/31 18:13 ID:???
void func(char a[][100])
362名無しさん、君に決めた!:03/01/31 18:13 ID:???
363名無しさん、君に決めた!:03/01/31 18:13 ID:???
PHP
364名無しさん、君に決めた!:03/01/31 18:13 ID:???
PHPやったことないんですが・・ほんとに応用できるのですか?
365名無しさん、君に決めた!:03/01/31 18:13 ID:???
int a = 4.3;
abs(3.5);
とかのミスってlintで検出できますか?
366名無しさん、君に決めた!:03/01/31 18:13 ID:???
まあ、当然のことですけど
C++
367名無しさん、君に決めた!:03/01/31 18:13 ID:???
368名無しさん、君に決めた!:03/01/31 18:13 ID:???
C言語の感覚で書かれたC++はクソコード
369名無しさん、君に決めた!:03/01/31 18:13 ID:???
誰もそんなことは聞いていない。
370名無しさん、君に決めた!:03/01/31 18:13 ID:???
C++はオブジェクト指向なのになんでCが応用できるのかと小一時間(略
371名無しさん、君に決めた!:03/01/31 18:14 ID:???
逆にCに応用できる言語は何ですか?
372名無しさん、君に決めた!:03/01/31 18:14 ID:???
awk
373名無しさん、君に決めた!:03/01/31 18:14 ID:???
C++
374名無しさん、君に決めた!:03/01/31 18:14 ID:???
C++言語の感覚で書かれたCはクソコード
375名無しさん、君に決めた!:03/01/31 18:14 ID:???
誰もそんなことは聞いていない。
376名無しさん、君に決めた!:03/01/31 18:14 ID:???
結局、CとC++は、繰り返しや比較などが同じなだけであって
設計方法は全然違うわけだな。
377名無しさん、君に決めた!:03/01/31 18:14 ID:???
ありがとう。でもそこに書いてあることをほとんど
やってくれなかった。
378名無しさん、君に決めた!:03/01/31 18:14 ID:???
質問!!
C言語ってDVDなどにあるプロテクトもC言語に一種ですか?
379名無しさん、君に決めた!:03/01/31 18:14 ID:???
教えてください

Cでsnprintfを自作することになりました。
参考になる資料とかありましたら教えてください。
フリーで使えるソースが何処かに落ちていると良いのですが。
380名無しさん、君に決めた!:03/01/31 18:14 ID:???
VC++ならCRT\SRCフォルダに。
381名無しさん、君に決めた!:03/01/31 18:14 ID:???
レスどうもです。
VC++見てみたのですが、うーん難しい事してるんですね。
FILEポインタの中身なんて、いじった事無いです。
これprintf系で汎用的に使う為にこんな感じで実装してるのかなー?
そのまま使いたいところだけど、多分ライセンスで引っかかりそう・・・
382名無しさん、君に決めた!:03/01/31 18:14 ID:???
383名無しさん、君に決めた!:03/01/31 18:14 ID:???
マルチいくない!
384名無しさん、君に決めた!:03/01/31 18:14 ID:???
つーか、なんで...

> Cでsnprintfを自作することになりました。

なんてことやってんの ?
385名無しさん、君に決めた!:03/01/31 18:14 ID:???
win上でgccを使っているのですが、
*.libのファイルを*.oなんかに変換できますか?
386名無しさん、君に決めた!:03/01/31 18:14 ID:???
別に *.lib のままでいいのでは?
何か不都合でもあるのん?
387名無しさん、君に決めた!:03/01/31 18:14 ID:???
お答えありがとうございます。
ファイルフォーマットが認識されない、といわれたので。
単に対応していないだけなのでしょうね。
まあ、至急必要なものでもないですし。。。
388名無しさん、君に決めた!:03/01/31 18:14 ID:???
あ、すまん。
*.a じゃなくて *.lib か。
なるほど。
分離ってできたっけかな...。
389名無しさん、君に決めた!:03/01/31 18:14 ID:???
win 上の gcc とは何者で、その *.lib はどっから持ってきたものかを書けよ。
390名無しさん、君に決めた!:03/01/31 18:14 ID:???
これからC言語を始めてみようという初心者です。
LSI CってのをDLしてみたんですが、使い方がよく分かりません。
参考書買ってみたんですが動かし方については詳しく載ってませんでした。
どなたか詳しく教えていただけませんか?
391名無しさん、君に決めた!:03/01/31 18:14 ID:???
lsc ファイル名
以上
392名無しさん、君に決めた!:03/01/31 18:14 ID:???
ごめん、うそ>46
lcc ファイル名
lcc.exeにちゃんとパスを通すこと
あと、_lccも自分の環境に合わせて編集すること
あとは、read.me読めば書いてるよ
393名無しさん、君に決めた!:03/01/31 18:14 ID:???
えっと・・・
まだよくわからないんですが、
MS-DOSを開きますよね。
lcc filename
しますよね。
次は何をすれば動きますか?
394名無しさん、君に決めた!:03/01/31 18:14 ID:???
エラーメッセージが出なければ、もう何もしなくていい。
395名無しさん、君に決めた!:03/01/31 18:14 ID:???
やりかたは分かったんですが、
コマンドまたはファイル名が正しくありません
とでます。
どうすればいいですか?
しつこくてすいません。。。
396名無しさん、君に決めた!:03/01/31 18:14 ID:???
MS-DOSのコマンドラインから

SET PATH=%PATH%***

と入力して

lcc filename

としてみてください。***の部分はパス名(C:\...\LCC\BIN;)です。
ちなみにBINはBINARY(二進)の略で実行可能ファイルが入ったフォルダの
名前として常識です。わかりましたか?
397名無しさん、君に決めた!:03/01/31 18:14 ID:???
51ですが追伸です。参考になればいいのですが、_lccファイルです。

# LSI C-86 compiler's configuration file

-DLSI_C
-XC:\LSIC330C\BIN -LC:\LSIC330C\LIB -IC:\LSIC330C\INCLUDE -T -O
-acdos.obj $LSICOPTS
?Command line argument will be inserted here
-lknjlib -ldoslib -v
398名無しさん、君に決めた!:03/01/31 18:14 ID:???
うぜぇ
Cそのものとは関係ねえ事書くな
399名無しさん、君に決めた!:03/01/31 18:14 ID:???

    ∧ ∧___  ダッコ♪
   /(*゚ー゚) /\
 /| ̄∪∪ ̄|\/
   |        |/
     ̄ ̄ ̄ ̄

400名無しさん、君に決めた!:03/01/31 18:14 ID:???
大人しくしていなさい。
401名無しさん、君に決めた!:03/01/31 18:14 ID:???
セグメンテーション違反ですってなんですか?
402名無しさん、君に決めた!:03/01/31 18:15 ID:???
変なとこに書き込んだりしたときに良く出る。
403名無しさん、君に決めた!:03/01/31 18:15 ID:???
どこが間違ってるのかさっぱりわからんです...
404名無しさん、君に決めた!:03/01/31 18:15 ID:???
変なとこをかいたりしたときに良く出る。
405名無しさん、君に決めた!:03/01/31 18:15 ID:???
セグメンテーション違反は一番良く見るバグだと思うので、
頑張って間違った箇所を探しませう。

・配列の添え字が変な位置を指しているかどうか
・ポインタの扱いが間違っているかどうか

の2箇所を重点的に調べましょう。
406名無しさん、君に決めた!:03/01/31 18:15 ID:???
それはコアダンプ。
407名無しさん、君に決めた!:03/01/31 18:15 ID:???
ありがとうございます。
がんばって探してみます。
卒論間に合うか不安。。。
408名無しさん、君に決めた!:03/01/31 18:15 ID:???
・・・デバッガ使えよ・・・
409名無しさん、君に決めた!:03/01/31 18:15 ID:???
!?そ..それはいったい....?
emacsとかについてるやつですか?
410名無しさん、君に決めた!:03/01/31 18:15 ID:???
gdbとか
411名無しさん、君に決めた!:03/01/31 18:15 ID:???
emacs見てみたらgdbなるものを発見いたしました!
しかし英語表記のため使いかたがいまいちわからぬ。
調べてみます。。。
412名無しさん、君に決めた!:03/01/31 18:15 ID:???
memsetでdouble型の配列の値を全てdouble x;
にすることはできますか?
413名無しさん、君に決めた!:03/01/31 18:15 ID:???
できない。
414名無しさん、君に決めた!:03/01/31 18:15 ID:???
了解!!
415名無しさん、君に決めた!:03/01/31 18:15 ID:???
デバッガという言葉も知らない奴が卒論までにgdbを使えるわけがない。
416名無しさん、君に決めた!:03/01/31 18:15 ID:???
デバッガgdbの簡単な使い方。

まずプログラム作成 hoge.c
#include <stdio.h>

main(){
int *a = NULL;
*a = 0;
}


コンパイル時に -g オプションをつける
gcc -g -o hoge hoge.c
実行プログラムをgdbの引数に指定
gdb hoge

gdbのプロンプトが出たらrunを実行
(gdb) run
フォールトエラーなどが出たら、理由と場所を教えてくれる。
Program received signal SIGSEGV, Segmentation fault.
0x8048468 in main () at hoge.c:5
5 *a = 0;

終了するときはquit
(gdb) quit
417名無しさん、君に決めた!:03/01/31 18:15 ID:???
初歩的な質問で申し訳ない。

ファイルからコンソール画面に一行一行読み込んで表示するという、
超基本的なプログラムを書いてみました。
そこで質問なのですが、今のままでは、改行は何も表示されない空白で表されますよね。
この改行部分に「----ここは改行です-----」といったメッセージを表示したいのですが、
どうすればいんでしょう?とりあえず自分が書いたものを↓に。

#include <stdio.h>
void main(){

  FILE *fp;
  char a[20];
  fp = fopen("text.txt" ,"r");

  do{
    if (fgets(a ,20 ,fp) == NULL){
      printf("//////終わりです//////\n" );
      break;
    }else{
      if (a == ""){ ★★★問題の箇所です
        printf("-----ここは改行です-----");
        printf("%s\n" ,a);
      }else
        printf("%s\n" ,a);
      }
  }while(1);
    fclose(fp);
    return;
}
418名無しさん、君に決めた!:03/01/31 18:15 ID:???
if(a=="") を if(*a=='\0') に変更すればいいのでは?
419名無しさん、君に決めた!:03/01/31 18:15 ID:???
まず、fgets() って読み込んだ改行をそのまま a[] に入れちゃうから、

printf("%s\n", a) なんてやると、一行毎に空行が入るけどいいの ?

あと、要件として行が改行のみなら、"----ここは改行です-----" と表示すると言うのなら、でいいけど、「何も表示されない空白」の代わりに"----ここは改行です-----" と表示すると言うなら、ちょっと難しいぞ。
420名無しさん、君に決めた!:03/01/31 18:15 ID:???
if (strlen(a))
a[strlen(a) - 1] = '\0';

ってのを付け加えた方がいいかも。
421名無しさん、君に決めた!:03/01/31 18:15 ID:???
if (strcmp(a, "\n") == 0)
にすればええんでない?
まぁ簡単に
if (a[0] == '\n')
でもいいか。

あとは
・改行の場合はわざわざ a を表示しようとする必要は無い
・do-while じゃなくて、while 内で fgets を使ったので構わない。
・fp が NULL かどうかのチェックは入れる癖をつけておくが吉。
・最後の行にのみ改行が無い場合があることを考慮するべし。
ってとこでしょうか。
422名無しさん、君に決めた!:03/01/31 18:15 ID:???
#include <stdio.h>
int main()
{
 FILE *fp = fopen("text.txt", "r");
 char a[20];

 while (fgets(a, 20, fp) != NULL) {
  if (a[0]=='\n')
   printf("-----ここは改行です-----\n");
  else
   printf(a);
 }
 printf("//////終わりです//////\n" );
 fclose(fp);
 return 0;
}
423名無しさん、君に決めた!:03/01/31 18:15 ID:???
printf(a); と printf("%s", a); は違う。
424名無しさん、君に決めた!:03/01/31 18:15 ID:???
ごめんうっかりしてた。
printf(a)はprintf("%s", a)に読み替えて。

あなたのコードを見て思ったことを書きます。
だいたいさんが言ってくれてるけど。

・fgetsは改行も読み込むのでprintf("%s\n",a)でなくprintf("%s",a)。
・0回以上の繰り返しのときは基本的に, do-whileでなくwhileを使う。
・文字列の比較はstrcmpを使う。a==""としても文字列の比較ではなく
 文字列のアドレスの比較が行われるだけで無意味。

あとのコードでも19文字ジャストの行を読み込むと誤動作します。
19文字ジャストの行を読むと, 次回のfgetsで改行文字だけを読み込む
ので, 文末の改行と空行との区別がつかなくなるためです。
a[]の配列を十分大きくとることで簡単に解決します。
425名無しさん、君に決めた!:03/01/31 18:15 ID:???
> printf("%s", a)

漏れは fputs(a, stdout) のが好きだ。
426名無しさん、君に決めた!:03/01/31 18:15 ID:???
72です!皆さんのご指摘でうまく動くようになりました。
質問の箇所だけではなく、他の様々な部分まで指摘してもらって、感謝してます。
判定文ごとwhileの中に入れろとか、さんの19文字ジャストでおかしくなる・・・とかの話は、
読みながらハタと手を打ってしまいました。

速度面で有利とか、エラーでにくいとか、そういったことが何かあるんですかね?
単に好みの問題でしょうか。
427名無しさん、君に決めた!:03/01/31 18:15 ID:???
速度は大抵fputsのほうが速いだろう。
必ずじゃないけど。
428名無しさん、君に決めた!:03/01/31 18:15 ID:???
教えてください!
return (
x1 >= x2+width2 || x1+width1 <= x2 ||
y1 >= y2+height2 || y1+height1 <= y2
) ? false : true;
ってどういうことですか??
429名無しさん、君に決めた!:03/01/31 18:15 ID:???
if(x1 >= x2 + width2) return false;
if(x1 + width1 <= x2) return false;
if(y1 >= y2 + height2) return false;
if(y1 + height1 <= y2) return false;
return true;

と同じだよ。多分2つの領域の重なり判定と思う。

430名無しさん、君に決めた!:03/01/31 18:16 ID:???
ふむふむ
確かゲーム系で、当たり判定のところっぽい関数だったからそうなのかも!
「||」って、「OR」だったと思うのですが、三項演算子って順々に判定してfalseやtureを返すんですか?
なんか質問部分がわかりにくいーー・・・
431名無しさん、君に決めた!:03/01/31 18:16 ID:???
> 三項演算子って順々に判定してfalseやtureを返すんですか?

三項演算子 xxx ? yyy : zzz は、単に xxx の値の真/偽によって yyy か zzz を返すだけ。

順々に判定するのは、|| (論理 OR 演算子) の方。

xxx || yyy は、xxx が真なら yyy を実行しないで 真 を返す。
(短絡演算で、ググッてくれ。)
432名無しさん、君に決めた!:03/01/31 18:16 ID:???
ありがとう!ググってきましたー。なるほど。よくわかりました
お世話になりました!
433名無しさん、君に決めた!:03/01/31 18:16 ID:???
Cで書いたプログラムなんですが、コンパイルは通るのに実行するとエラーが起こります。
デバッグ(と呼んでいいのかどうか分かりませんが)したいのですが、
どのように行うのでしょうか。
コンパイラはgccをMS-DOS上(MinGW)で使っています。
434名無しさん、君に決めた!:03/01/31 18:16 ID:???
そんなのソースださないと分かるわけ無いだろ。
せめてどうエラー出るのか書けや。
435名無しさん、君に決めた!:03/01/31 18:16 ID:???
やはりソースによって変わってくるのですね。
一般的にどのようにやっていくのかお聞きしたくて、書き込みました。

エラーは、エラーログを作成しています。というメッセージと共に
プログラムが強制終了します。
436名無しさん、君に決めた!:03/01/31 18:16 ID:???
> エラーは、エラーログを作成しています。というメッセージと共に
> プログラムが強制終了します。

.... で、そのエラーログとやらはあるのか ?
437名無しさん、君に決めた!:03/01/31 18:16 ID:???
つーか、エラーログ出てるなら読めよとりあえず(w
438名無しさん、君に決めた!:03/01/31 18:16 ID:???
gdb(gcc用のデバッガ)ないの?
なければprintfとassertと根性でバグ捜せ。
439名無しさん、君に決めた!:03/01/31 18:16 ID:???
エラーログの読みかたわからないです。スマソ
実行したフォルダを探しても該当するようなファイルが見つかりません。
gdbというものは落としてすぐ使えるでしょうか?
探してみます。明日提出の課題なんです。
やはりそれですか・・・

皆さんどうもアリガd
440名無しさん、君に決めた!:03/01/31 18:16 ID:???
おいおい、システムのエラーログに記録されとるんだろ。
実行フォルダには無いぞ。
441名無しさん、君に決めた!:03/01/31 18:16 ID:???
見方教えてください。
お手数かけてほんとスマソ
442名無しさん、君に決めた!:03/01/31 18:16 ID:???
     ∧_∧∩ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    ( ´∀`)/< 先生! なぜそんなに粘着しするんですか?。
 _ / /   /   \________________
\⊂ノ ̄ ̄ ̄ ̄\
 ||\        \
 ||\|| ̄ ̄ ̄ ̄ ̄||
 ||  || ̄ ̄ ̄ ̄ ̄||
    .||          ||
443名無しさん、君に決めた!:03/01/31 18:16 ID:???
だから、OSは何なんだよ(藁
何も情報書かずに推測するスレか、ここは。
恐らくLinux系だろうけど、君じゃ無理だ多分。その様子だと。
444名無しさん、君に決めた!:03/01/31 18:16 ID:???
もアフォだけど、お前も相当だな。

> コンパイラはgccをMS-DOS上(MinGW)で使っています。

素の MS-DOS はエラーログなんか記録しないだろうから、どうせ Windows の MS-DOS プロンプトじゃねーのか ?
どうせ MAP ファイルなんか見れないんだから、素直に か の2行目に従えよ。
445名無しさん、君に決めた!:03/01/31 18:16 ID:???
100desuyo
446名無しさん、君に決めた!:03/01/31 18:16 ID:???
> printf("-----ここは改行です-----\n");

printf("-----ここは空行です-----\n");
447名無しさん、君に決めた!:03/01/31 18:16 ID:???
厨質問で申し訳ないのですが

while(fgets(buf, 256, infp) !=NULL){
hoge = atoi(buf);
printf("hoge=%d\n",hoge);
}

とやりますと、全部のhogeが0となってしまいます。
読みこんだファイルは4行に渡る30バイトほどの
テキストファイルなのですが・・・

どなたかご教授オネガイイタシマス。
448名無しさん、君に決めた!:03/01/31 18:16 ID:???
入力ファイルの内容を晒してみ?
449名無しさん、君に決めた!:03/01/31 18:16 ID:???
printf("%s",buf);
でちゃんと、bufに文字列読み込まれてるか確認してみる。
103の言うとおり、どんな入力ファイルやねんやろ・・・
atoi関数の使い方もわかっていますか?
450名無しさん、君に決めた!:03/01/31 18:16 ID:???
103,104サソ
アリガdございます。

テキストファイルを
345504
45454
3920
5503
こんな感じに直したらできますた。
文字が入ってたのがいけなかったのでしょうか?
atoiを使う際に"x"などの文字が混入していた際に
無視する方法ってあるのでしょうか?

ほんと厨ですみませそ。。。
451名無しさん、君に決めた!:03/01/31 18:16 ID:???
あるプログラムを作成しました(長いので載せれません)。
そのプログラムはある配列変数の要素を小さく設定した時は
問題なく動いてくれるのですが、大きくするとsegmentation Failureがでます。

gdbをつかってデバッグしました。そしたら、
(gdb) core a.out.core
Core was generated by `a.out'.
Program terminated with signal 11, Segmentation fault.
Reading symbols from /usr/lib/libm.so.2...(no debugging symbols found)...done.
Reading symbols from /usr/lib/libc.so.4...(no debugging symbols found)...done.
Reading symbols from /usr/libexec/ld-elf.so.1...(no debugging symbols found)...
done.
#0 0x80489ab in main ()
(gdb) where
#0 0x80489ab in main ()
#1 0x8048506 in _start ()
となり、何行目に問題があるのか?という情報は教えてくれません。
どこがおかしいか、長年の経験のある皆様にお聴きしようと思ったしだいです。
助けて下さい。
452名無しさん、君に決めた!:03/01/31 18:16 ID:???
(gdb) where
#0 0x80489ab in main ()
#1 0x8048506 in _start ()
が問題なんですよね?
これってどういう意味ですか?
453名無しさん、君に決めた!:03/01/31 18:16 ID:???
どんなプログラムかも配列をどういうふうに使ってるのかも要素数をどの程度にしたのかもわからないのに答えろというのか・・・
454名無しさん、君に決めた!:03/01/31 18:16 ID:???
atoi()はスペースと+-以外の文字とぶつかるとそこで終了しちゃいますよ
もしかしたら、文字を取り除く関数があるかもしれないけど
自分で取り除くコード書いたほうが柔軟性あっていいかもしれないですね
455名無しさん、君に決めた!:03/01/31 18:16 ID:???
じゃーのせます。
連続投稿なるけどごめんなさい、どこが悪いか全く分りませんので
enumとmainだけとりあえず載せます

#include <unistd.h>
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

enum {
MAX_NODE = 87381, /* 自分で計算 (( pow(4,MAX_DEPTH) -1 ) / 3) */
MAX_RES = 81, /*ネットワーク内のリソースの種類*/
MAX_DEPTH = 9, /*木の深さ*/
MAX_SIM = 100, /*シミュレーション回数*/
REPEAT = 2 /*繰り返し数 シミュレーション数*/
};


456名無しさん、君に決めた!:03/01/31 18:16 ID:???
main()
{
int i,j,k,query,query_number,num_reg,sum_query_number,sim_num,sum_num_reg,num_resource[MAX_RES],node[MAX_NODE][MAX_RES],rt[MAX_NODE][4][MAX_RES];
double adv_num_reg,adv_query_number;
FILE *outp;

srand((unsigned int)time(NULL));
sum_query_number = 0;
sum_num_reg = 0;
for( sim_num = 0 ; sim_num < REPEAT ; sim_num++ ){
/*ノードの登録を初期化*/
node_initialize(node);
/*ルーチングテーブル初期化*/
rt_initialize(rt);
/*リソース数を決定*/
for(i=0; i<MAX_RES; i++){
num_resource[i]=(int)(num_normalcurve() + 0.50);
/*printf("%d\n",num_resource[i]);*/
}
/*各ノードごとの各リソースの登録情報をセット*/
distribute(node,num_resource);
/*MATRIX表示*/
/*print_matrix(node);*/
for(k=0;k<MAX_SIM;k++){
/*QUERY決定*/
query = query_produce();
/*printf("query %d\n\n",query);*/
/*routing開始*/
route(query,node,rt);}
457名無しさん、君に決めた!:03/01/31 18:16 ID:???
query = 3;

/*count the number of the query 3*/
query_number = count_qnum(query,rt);

/*rt表示*/
/*print_query(query,rt);*/
sum_query_number += query_number;
printf("query_number %d",query_number);

/*ノードAの登録数*/
num_reg = sum_reg_num(rt);
sum_num_reg += num_reg;
printf("registration_number %d",num_reg);
}
adv_query_number = (double)(sum_query_number) / (double)(REPEAT);
adv_num_reg = (double)(sum_num_reg) / (double)(REPEAT);

printf("adv_query_number %f",adv_query_number);
printf("adv_num_reg %f",adv_num_reg);

}
458名無しさん、君に決めた!:03/01/31 18:16 ID:???
70〜140MBもスタックに取るつもりかよ
459名無しさん、君に決めた!:03/01/31 18:16 ID:???
そこが問題ですか?enumんとこですよね?
460名無しさん、君に決めた!:03/01/31 18:16 ID:???
http://www6.ocn.ne.jp/~endou/index2.html
      ★こんなサイト見つけました★
461名無しさん、君に決めた!:03/01/31 18:16 ID:???
age
462名無しさん、君に決めた!:03/01/31 18:17 ID:???
何だよ、解決したんじゃなかったのか?
スタックに取りすぎだっつってんの

int i,j,k,query,query_number,num_reg,sum_query_number,sim_num,sum_num_reg,num_resource[MAX_RES],node[MAX_NODE][MAX_RES],rt[MAX_NODE][4][MAX_RES];

これがどれほど巨大なメモリを必要とするかわかる?
463名無しさん、君に決めた!:03/01/31 18:17 ID:???
どうやったらいいのでしょうか?
main関数から変数をおいだせばいいのでしょうか?
配列をなくせばいいのでしょうか?

enumは関係ないのですか?
464名無しさん、君に決めた!:03/01/31 18:17 ID:???
まず第一にバッファの使い方を見直すべし
んな巨大な配列が本当に必要なのか?
どうしても必要ならmallocなり何なりでヒープに取るべし

enumの値を配列サイズに使ってんだから関係あるに決まってる
465名無しさん、君に決めた!:03/01/31 18:17 ID:???
分かりました。
配列を変更するのは難しそうですので、
別の変数を直して行きます。
mallocとか勉強します
466名無しさん、君に決めた!:03/01/31 18:17 ID:???
ぷろぐらむの実行がいつまでたっても終らん。
実行を早くする基本は何?
467名無しさん、君に決めた!:03/01/31 18:17 ID:???
プロファイラ使え。
468名無しさん、君に決めた!:03/01/31 18:17 ID:???
さそ
ありがdございます

while(fgets(buf, 256, ifp) !=NULL){
for(i=0; i<strlen(buf); i++){
if(isalpha(buf[i])){
こんな感じでアルファベットだったらbufからその文字を省くといった
仕様にしたいのですが、bufからその文字だけ省くことなんて
可能なのでしょうか?

再度の糞厨質問ですいません。
ご教授オネガイイタシマス。
469名無しさん、君に決めた!:03/01/31 18:17 ID:???
VC++買おうと思って製品情報見てるとVisual Studio .NETのページに行っちゃうんですが
Visual Studio .NET て何ですか?
470名無しさん、君に決めた!:03/01/31 18:17 ID:???
VB,C#,VC++が全部入り
471名無しさん、君に決めた!:03/01/31 18:17 ID:???
11万円もするよぉ!うわぁーぁぁん
472名無しさん、君に決めた!:03/01/31 18:17 ID:???
ある4つほどの配列をファイルに書き込もうとして、
fwriteを使って書き込みました。
別のプログラムでそれを読み込もうとしてfreadで読み込んだのですが、
読み込んだ配列の中身が途中から0になってしまっています。
具体的には
a[130][100],b[100][30],c[100],d[30]を書き込んで
読み込んだaおよびbが途中から0になっていました。
けれどもcとdは正常に読み込めていました。
エラーチェックはしていますがエラーは出ていません。

プログラムも見直していますが、さっぱりわかりません。
どなたかご教授願いまつ。
473名無しさん、君に決めた!:03/01/31 18:17 ID:???
ほんとに全部要るのか?
474名無しさん、君に決めた!:03/01/31 18:17 ID:???
実際のものより小規模なモデルを作り、プログラムが正しく動作しているかを検証する。
各処理の実行時間を調べて、時間がかかっている部分を高速化する。
(但し、複雑になるような高速化は避ける。)
いくつかの規模のモデルを実行して、時間を測定し、実際のモデルでどれだけ時間が
かかるかを見積もる。
時間がかかり過ぎるようなら、別のアルゴリズムを探す。
別のアルゴリズムが見つからなければ、複雑な高速化に取り組む。
それでも時間がかかり過ぎるなら、プログラムを作ることの意義を見直す。
475名無しさん、君に決めた!:03/01/31 18:17 ID:???
省いた後、隙間を詰める。
もしくは、省く文字以外を別バッファにコピーする。
476名無しさん、君に決めた!:03/01/31 18:17 ID:???
#include <ctype.h>を追加して、

char tmp[256], *src, *dst ;

for ( src=buf, dst=tmp; *src; src++ ) {
  if ( isdigit( *src ) || *src=='-' || *src=='+' )
    *dst++ = *src ;
}
*dst= '\0' ;
hoge= atoi( tmp ) ;

但し、これだと "-1 2 +3" が "-12+3" になってしまうから
それいう可能性があるなら加工しる!

123で、"アルファベットだったらその文字を省く" って言ってるから、
if ( !isalpha( *src ) )
  *dst++ = *src ;
のほうがいいかな。
477名無しさん、君に決めた!:03/01/31 18:17 ID:???
先頭の空白は無視するというatoiの仕様を利用して、余計な文字をスペースに置き換えたら?
478名無しさん、君に決めた!:03/01/31 18:17 ID:???
「アルファベットだったら」じゃなくて「数字か+,-でなかったら」の方がいいと思うけど。
479名無しさん、君に決めた!:03/01/31 18:17 ID:???
ファイルサイズが期待した通りになっているかを確認。
ファイルの中を見てみて、0が書かれているようなら、
fwrite、そうでなければ読み込みがfreadを見直す。

たぶん、二次元配列のサイズ計算が間違えているんだと思う。
途中からとかではなくて、実際にどこから0が書かれているかを
調べるのもいいと思う。(地道なことをちゃんとやらんと)
480名無しさん、君に決めた!:03/01/31 18:17 ID:???
読み込むときも書き込むときもバイナリモードにした?
あ、UNIX系なら関係ないけど。
481名無しさん、君に決めた!:03/01/31 18:17 ID:???
全部いらなくても、商利用したいときとか…

ところで、シェアウェアって、やっぱ商利用?
482名無しさん、君に決めた!:03/01/31 18:17 ID:???
そりゃそうでつ。
483名無しさん、君に決めた!:03/01/31 18:17 ID:???
細かい訂正ですが、b[100][32]でd[32]でした。

カエレ!(・∀・)とか言われそうですが、
ファイルサイズの計算はどうすればいいのでしょうか・・・
バイナリファイルの中身はどうやって見ればいいのでしょうか・・・バイナリエディタですか?
二次元配列のサイズ計算というのがよく分からないのですが・・・
今いろいろと検索していますがよく分かりません・・・

aはa[30][0]から0になっていて、bはb[7][6]から0になっています。

WindowsのCygwinってやつでやってます。
一応fopenにはwbやrbはちゃんと書いているので
大丈夫だと思います・・・
484名無しさん、君に決めた!:03/01/31 18:17 ID:???
Visual C++ .NET Standard
買おうと思いますがどう思われますか?
VBは弄った事あります
485名無しさん、君に決めた!:03/01/31 18:17 ID:???
スレ違い祭りか?
486名無しさん、君に決めた!:03/01/31 18:17 ID:???
Visual C# .NET
Visual C++ .NETて何が違うんですか?
487名無しさん、君に決めた!:03/01/31 18:17 ID:???
Cygwin なら
ls -l ファイル名
でファイルサイズが見れますよ。

バイナリファイルの中身は
dump ファイル名 | less
(less でなく more でもいいです。お好きなほうを)
で見れます。
488名無しさん、君に決めた!:03/01/31 18:17 ID:???
C#とC++という時点で違う。
489名無しさん、君に決めた!:03/01/31 18:17 ID:???
> ファイルサイズの計算はどうすればいいのでしょうか・・・
printf("%d", sizeof a);
もしくは
sizeof(aの型) * 130 * 100
として計算。あとはバイナリなんで、a, b, c, dを全部足せばよい。

> バイナリファイルの中身はどうやって見ればいいのでしょうか・・・バイナリエディタですか?
バイナリエディタもしくは16進ダンプするツールを探す。
なければ作れ。(簡単だから)
予想では0は書かれていないと思う。

> 二次元配列のサイズ計算というのがよく分からないのですが・・・
> (略)
> aはa[30][0]から0になっていて、bはb[7][6]から0になっています。
c, dは大丈夫で、a, bが駄目というんで、二次元配列の扱いが間違えているんだと思う。
fwrite()のところで3000や1350という数を渡してしまっている。
3000は130 * 100 を 30 * 100にしてしまっているとか…
490名無しさん、君に決めた!:03/01/31 18:17 ID:???
いいんじゃない
491名無しさん、君に決めた!:03/01/31 18:17 ID:???
ありがd。
とりあえずプログラムもう一度見直して
ファイルの中身見たりしてみまつ。
492名無しさん、君に決めた!:03/01/31 18:17 ID:???
Visual C++ .NET Standard は
最適化が無くて、できた実行ファイルも配布禁止だったような。
完全に学習用なんで、それでもいいんなら買ったんでいいんでは?
493名無しさん、君に決めた!:03/01/31 18:18 ID:???
自明というわけでは無い気がしますけども…
494名無しさん、君に決めた!:03/01/31 18:18 ID:???
フリーなら配布可でつ。
495名無しさん、君に決めた!:03/01/31 18:18 ID:???
デキタ━(゚∀゚)━!!!!
,両氏指摘のように、
原因はfwriteおよびfreadの書き込み、読み込み数指定が間違っていたようです。
プログラムでは
fwrite(a,sizeof(double),input*middle,fp)
といったように書いていたのです。
inputとmiddleはdefineであらかじめ定義してありました。
特にinputは
#define input aho+bakaといった形で・・・
今まで本当に知らなかったのが恥ずかしいくらいなのですが、
この状態でinput*middleってやるとaho+baka*middleってことになるんですね・・・
てっきりahoとbakaの和がinputに入るんだとばかり思ってました・・・
#define input (aho+baka)で解決しますた。(´・ω・`)

書き込みから間違ってることが判明したので、
25時間かけたデータを取り直しまつ・・・(´・ω・`)

氏の言うとおり、出力ファイルのサイズはsizeof(double)が8だったので
8*(130*100+100*32+100+32)=130656Byte が正しかったのですが、
質問時の出力ファイルは28kByteくらいでした・・・
今考えると8*(31*100+7*32+6+100+32)=27696Byte だったのですね・・・

みなさまありがとうございますた。ご迷惑おかけしますた。逝ってきまつ。
496名無しさん、君に決めた!:03/01/31 18:18 ID:???
お疲れ様
497名無しさん、君に決めた!:03/01/31 18:18 ID:???
(´-`).。oO 150は経験値が1上がった
498名無しさん、君に決めた!:03/01/31 18:18 ID:???
ありがとうございます。
Visual C++ と Visual C++ .NET の違いは何でしょうか?
499名無しさん、君に決めた!:03/01/31 18:18 ID:???
マジで!?
箱には・・・

「学習用を目的とした製品となります。
 商用製品など、本格的なアプリケーションの開発は、
 Visual Studio .NET Professional 以上の製品をお勧めいたします。」

・・・と、あるけど・・・?
あくまで、お勧めであって・・・
ダメとはどこにも書いてないっぽい。
今から、もうちょっとマニュアル読んでみる。
500名無しさん、君に決めた!:03/01/31 18:18 ID:???
staticってなんれすか?
501名無しさん、君に決めた!:03/01/31 18:18 ID:???
静電気
502名無しさん、君に決めた!:03/01/31 18:18 ID:???
自動変数をstatic領域に配置することだよ
static int a;
とかって宣言すると、その関数終了しても内容の保持が保証されるのです
503名無しさん、君に決めた!:03/01/31 18:18 ID:???
( ゚д゚)
504名無しさん、君に決めた!:03/01/31 18:18 ID:???
つーことは
static int foo(void);
と言う関数は、static領域に配置されるから内容の保持が保証されるけど
int foo(void);
と言う関数は、内容の保持が保証されないのですね?
505名無しさん、君に決めた!:03/01/31 18:18 ID:???
void analysis(int ch)
{
static int repeat_count = -1; /* < 0 は無効値 */
int i;
if (ch == 'F' || ch == 'R' || ch == 'L') {
if (repeat_count < 0) repeat_count = 1;
for (i = 0; i < repeat_count; i++) {
switch(ch){
case 'F': forward(); break;
case 'R': right_turn(); break;
case 'L': left_turn(); break;
}
}
repeat_count = -1;
} else if (isdigit(ch)) {
if (repeat_count < 0) repeat_count = ch - '0';
else repeat_count = repeat_count * 10 + ch - '0';
}
}

丁寧に説明してくらさい。
506名無しさん、君に決めた!:03/01/31 18:18 ID:???
関数は変数なんですね?
507名無しさん、君に決めた!:03/01/31 18:18 ID:???
ってことで、ザッと見てみたが・・・
どこにも、作ったバイナリの配布を禁止してる下りもないし、
また、商用アプリを作ってはダメって下りもない。
あくまで推奨。お勧め。

作ったバイナリ配布しても、
シェアソフト作ってもOKっぽいぞ。
508名無しさん、君に決めた!:03/01/31 18:18 ID:???
( ゚д゚)< ポカーン
509名無しさん、君に決めた!:03/01/31 18:18 ID:???
サンクス!
510名無しさん、君に決めた!:03/01/31 18:18 ID:???
たとえば"15FR160L"という文字列があったとき,
それを先頭から一文字づつanalysisに渡すと,
forwoard()が15回, right_turn()が1回,
left_turnが160回, の順で実行される。

staticの解釈はこの場合で合ってるから, あとは自分で追ってみれ。
511名無しさん、君に決めた!:03/01/31 18:18 ID:???
static の関数は同じファイルの中からしか
直接呼び出すことが出来ないんじゃなかったっけ?
512名無しさん、君に決めた!:03/01/31 18:18 ID:???

>/* < 0 は無効値 */
ってコメントは的外れと思うのは気のせい?
513名無しさん、君に決めた!:03/01/31 18:18 ID:???
if (repeat_count < 0) repeat_count = 1;  ここか?
514名無しさん、君に決めた!:03/01/31 18:18 ID:???
サンクス!!
515名無しさん、君に決めた!:03/01/31 18:18 ID:???
else if (isdigit(ch)) {
if (repeat_count < 0) repeat_count = ch - '0';
else repeat_count = repeat_count * 10 + ch - '0';

コメント風に解説おながいします。
516名無しさん、君に決めた!:03/01/31 18:18 ID:???
ん?なんで?
数字が何桁続くかわからないから、下から4行目の
if ( repeat_count < 0 )
の行で1桁目なのか2桁目以降なのかを判定するためでしょ?

カキコする前にreloadしてみたら の答えにもなってた。
517名無しさん、君に決めた!:03/01/31 18:18 ID:???
>isdigit(ch)
chのアスキーコード値が数字の文字かどうかの判別

>ch - '0' 
文字0のコード値で引く
518名無しさん、君に決めた!:03/01/31 18:18 ID:???
あたりまえじゃん
519名無しさん、君に決めた!:03/01/31 18:18 ID:???
520名無しさん、君に決めた!:03/01/31 18:18 ID:???
サンクス!!!
521名無しさん、君に決めた!:03/01/31 18:18 ID:???
横突っ込みでスマソが
そんなコメントは書くなよ
522名無しさん、君に決めた!:03/01/31 18:19 ID:???
スマソ、完全にボケてました
コピペしたから気づかんかったけど
/* 0 は無効値 */
ではなく
/* < 0 は無効値 */
だったんですね…首吊ってきます
523名無しさん、君に決めた!:03/01/31 18:19 ID:???
まだ生きてる?
なるほど。
確かに -1 ってハードコーディングしてるんだから
/* -1 は無効値 */
のほうが読みやすいかも知れませんね。
524名無しさん、君に決めた!:03/01/31 18:19 ID:???
見間違えは誰でもあるYO まあまあ気を落とすなw
525名無しさん、君に決めた!:03/01/31 18:19 ID:???
これってこの前オレが書いたやつじゃん。
ちなみにあのコメントはrepeat_countが負の値をとらないよって意味。
だから-1かどうかではなく、負かどうかの判定になっている。
526名無しさん、君に決めた!:03/01/31 18:19 ID:???
つか、NULL を無効値にすればいんじゃ・・・?
数字検出時に何桁目なのかを意識しなくても

if ( isdigit(ch) )
  repeat_count = repeat_count * 10 + ch - '0' ;

で済むし。
但し、入力が "0R"とかの場合にとは挙動が変わってしまうが。

まぁ、他人の課題にそこまで考えてやる必要ないし。気ぃ悪くしたらスマソ。
527名無しさん、君に決めた!:03/01/31 18:19 ID:???
>但し、入力が "0R"とかの場合にとは挙動が変わってしまうが。

まさにこれが負値を無効値にしてる理由じゃないの?
528名無しさん、君に決めた!:03/01/31 18:19 ID:???
どこから突っ込んで欲しいの?
529名無しさん、君に決めた!:03/01/31 18:19 ID:???
理由は、さんの言っている通りです。
-の入力は流石にないだろうけど、0はあるだろうと思って。
質問には書いてなかったんで、どちらでもいいと思いますが。

あと、同じ人?って書いたのもオレです。
530名無しさん、君に決めた!:03/01/31 18:19 ID:???
まぁ前処理で0はカットできるけどね。
ちゃんとassertなりで0を受け付けないと表明するなら
もアリかも。あと0->NULLだけど逆は必ずしも真ならず。
531名無しさん、君に決めた!:03/01/31 18:19 ID:???
何でNULLは突っ込んで
挙動が変わるのは"R"等であって
"0R"等ではない事に突っ込まないかな…
532名無しさん、君に決めた!:03/01/31 18:19 ID:???
gccのライブラリファイルのリンクトラブルは
どうやって解決するのがいいんでしょうか?
よく,-L,-lのオプションが足りないと,
undefined reference to `xxxxx'
と文句いわれるけど,
そのファイルがどのライブラリにあるとか,
どうやって調べたらいいんでしょう?
533名無しさん、君に決めた!:03/01/31 18:19 ID:???
nm
534名無しさん、君に決めた!:03/01/31 18:19 ID:???
grep
535名無しさん、君に決めた!:03/01/31 18:19 ID:???
0を無効値にするってことは, ふつう無効値チェック部分の,
if (repeat_count < 0) repeat_count = 1;
を,
if (repeat_count == 0) repeat_count = 1;
と書き換えることを含意するんじゃないの?
536名無しさん、君に決めた!:03/01/31 18:19 ID:???
130-133サソ
アリガトウゴザイマシタ

while(fgets(buf, 256, ifp) !=NULL){
for(src=buf, dst=tmp; *src; src++){
if(! isalpha(*src))
*dst++=*src;
}
*dst='\0';
hoge = atoi(tmp);
printf("hoge = %d",hoge);
fprintf(ofp, "%d\n", hoge);
}
ご教授頂いたように修正したところ
無事仕様とおりに動きました。
537名無しさん、君に決めた!:03/01/31 18:19 ID:???
fopen() で "wb" モードで開け。
char 型の変数に 32 を代入して fwrite() で書け。
終わったら fclose() で閉じろ。
538名無しさん、君に決めた!:03/01/31 18:19 ID:???
とりあえず あたりを読んでください。
539名無しさん、君に決めた!:03/01/31 18:19 ID:???
そうだったんだ...。
VC5の頃はダメって書いてあったと思うので、
特にいいって書いてないだけでも
ダメなんだと思い込んでしまったのかも。
540名無しさん、君に決めた!:03/01/31 18:19 ID:???
age
541名無しさん、君に決めた!:03/01/31 18:19 ID:???
> 自動変数をstatic領域に配置することだよ

それって自動変数じゃねーだろ。
(今時誰も書かないけど、auto ってキーワードもあるし...。)

> static int a;
> とかって宣言すると、その関数終了しても内容の保持が保証されるのです

グローバル変数/関数のスコープには触れなくて良いのか ?
542名無しさん、君に決めた!:03/01/31 18:19 ID:???
auto って書いてた時期ってそもそもあるの?
K&R の時代のことはよー知らんのだが。

1.関数の外に書いた変数や関数につけた場合
その変数や関数の名前がそのファイル内でしか通用しなくなる。

2.関数の中の変数につけた場合
その名前が関数の中でしか通用しないことを除いて
グローバル変数と同様の扱いになる。
(つまり、初期化は実行前に決まる値でしか行えず、
 初期化を省略すれば 0 で初期化される。
543名無しさん、君に決めた!:03/01/31 18:19 ID:???
staticとグローバルはメモリまわりでちょっと違うんじゃなかったか?忘れたが
544名無しさん、君に決めた!:03/01/31 18:19 ID:???
> auto って書いてた時期ってそもそもあるの?
> K&R の時代のことはよー知らんのだが。

最近の香具師は、規格も知らんのか ?
(まあ、普通は省略できるから気にしなくてもいいんだが。)

の 2. の意味では、まず同じ。(よほどひねくれた実装は除くが...。)
逆に、同じ静的変数でも初期化指定子がない (or 0 で初期化) 場合と、0 以外で初期化する場合で異なるメモリセクションに配置する処理系は多い。
545名無しさん、君に決めた!:03/01/31 18:19 ID:???
そもそも、日本語で自動変数って
autoを直訳しただけだからね…
546名無しさん、君に決めた!:03/01/31 18:19 ID:???
auto ってのがあることくらい知ってるけどさ、
でも、使ったことないんで。
いや、とりあえず使ってみたことはあるが。
register もそうだなー。
VCとか無視するって書いてるし。
547名無しさん、君に決めた!:03/01/31 18:19 ID:???
autoって書くのって時代遅れっぽぃ?
548名無しさん、君に決めた!:03/01/31 18:19 ID:???
>それって自動変数じゃねーだろ。
>(今時誰も書かないけど、auto ってキーワードもあるし...。)
そういわれたらそうかも(^^;
へんないいまわしだw
staticで宣言した瞬間にautoじゃなくなるもんね
>グローバル変数/関数のスコープには触れなくて良いのか ?
うーん、staticってなんでしか?って聞いてる人にあんまり難しいこといってもなぁ〜
って思いまして。

つまるところは内容が保持されるってことがいいたい。

そうすると、スコープの話になりますね・・・

>>(今時誰も書かないけど、auto ってキーワードもあるし...。)
う〜ん、C始めて、8年やけど、いまだかつてautoキーワード使ったこと無いわw
使うことってあるの?
549名無しさん、君に決めた!:03/01/31 18:19 ID:???
registerは要るよ! ほんとに速くなるか良く知らないけど
550名無しさん、君に決めた!:03/01/31 18:19 ID:???
volatileは要るよ!
551名無しさん、君に決めた!:03/01/31 18:20 ID:???
ん〜大概のコンパイラは最適化の段階で勝手にregisterつかってくれるんじゃないの?
552名無しさん、君に決めた!:03/01/31 18:20 ID:???
registerは最適化のヒントにしかならない。本当にレジスタ使って
くれるかどうかはわからない。
x86のようなレジスタが少ないCPUならなおさらその傾向が強い。
553名無しさん、君に決めた!:03/01/31 18:20 ID:???
ソースを見やすくする為に使う
取り敢えず、最優先したい変数はregisterを使い
レジスタに割り当てて欲しくない変数はvolatileを使い(←正しい使い方と違うけど)
レジスタが余ってる場合にはレジスタに割り当てて欲しい場合はautoを使えば
ソースを見た時に、明示的に優先するべき変数が分かるようになる
ちなみに、省略された変数は、一時的なもので最終的には使わない予定の変数
554名無しさん、君に決めた!:03/01/31 18:20 ID:???
そんなにごちゃごちゃ書いてたら
鬱陶しいことこの上ない(w
555名無しさん、君に決めた!:03/01/31 18:20 ID:???
見やすくするためにautoやvolatileなどの機能を伴う(とされている)
修飾子を使うのは誤り。するべきは変数名の工夫、コードの構成。
556名無しさん、君に決めた!:03/01/31 18:20 ID:???
autoは使わない w
registerは優秀なコンパイラを使っていれば必要ないんじゃない?
volatileは・・・・それを必要とするほど高度なプログラムを俺は書いたことがないw

俺は上の三つは使ったことないな。signedも使ったことないかも
557名無しさん、君に決めた!:03/01/31 18:20 ID:???
みんなは外部のファイルから参照される関数の頭にexternをつける?
俺はデフォルトでexternになっているからつけないんだけど。
プロトタイプにはつける人もいるみたいだから。
558名無しさん、君に決めた!:03/01/31 18:20 ID:???
漏れはつけない。無駄だと思ふ。
559名無しさん、君に決めた!:03/01/31 18:20 ID:???
無意味といえば単項演算子の+もauto同様、無意味だよな。
560名無しさん、君に決めた!:03/01/31 18:20 ID:???
extern int i; /* 宣言 */
void foo()
{

i++; /* 参照 */

}
int i ; /* 定義 */

これをstaticでやりたい場合はどうするの?
ファイル内でしか通用しないのだから
普段は宣言無しで定義を一番上に書く事にしてるんだけど
出来たら、それは、それで少し便利かなと…
561名無しさん、君に決めた!:03/01/31 18:20 ID:???
int* p;
p=malloc(sizof(int), 100);
で動的に確保したpの配列要素数を調べるにはどうすればいいでしょう?

sizeof(p)ならsizeof(int *)がもとまってしまいます...
もちろんサイズ100ってわかってるのになんで?ってのは
なしでおねがいします.
562名無しさん、君に決めた!:03/01/31 18:20 ID:???
出来ない。いじょ。
563名無しさん、君に決めた!:03/01/31 18:20 ID:???
その100を覚えておけばいいだろ
564名無しさん、君に決めた!:03/01/31 18:20 ID:???
565名無しさん、君に決めた!:03/01/31 18:20 ID:???
そうですか...

そういわれると基も子もありません...

今からよんできます.
566名無しさん、君に決めた!:03/01/31 18:20 ID:???
一応
static int i; /* 定義 */
にすればできる。

でも、そういうのはできるだけ一箇所で済ませたいと思うけどね。
2箇所で整合性とらなあかんのは面倒。
関数の場合は前方参照問題とかあるから
static でもプロトタイプ宣言するのは有意義だけど、
変数では滅多にそういう問題ないから不必要っしょ。
567名無しさん、君に決めた!:03/01/31 18:20 ID:???
要するに、何か変数に保存しときんしゃいってこと。
568名無しさん、君に決めた!:03/01/31 18:20 ID:???
どうもありがとうございます.

単純に考えたら...
お恥ずかしい限りです

569名無しさん、君に決めた!:03/01/31 18:20 ID:???
覚えておけばいいってのは、変数に入れておけばいいという意味なんだが、伝わらなかったか。
570名無しさん、君に決めた!:03/01/31 18:20 ID:???
ところで、mallocの引数はひとつだよ。
callocでも意味上では引数の順番が逆だな
571名無しさん、君に決めた!:03/01/31 18:20 ID:???
ありがとうございます
関数だと駄目なので、変数も駄目だと思い込んでたんですけど
変数の宣言はexternで良かったんですね
572名無しさん、君に決めた!:03/01/31 18:20 ID:???
> 関数だと駄目なので、変数も駄目だと思い込んでたんですけど

何で駄目だと思ったんだ?
プロトタイプに extern とか書いたのか?

#include <stdio.h>
static void hoge();
int main()
{
puts("main");
hoge();
puts("main");
return 0;
}
static void hoge()
{
puts("hoge");
}
573名無しさん、君に決めた!:03/01/31 18:20 ID:???
> 変数の宣言はexternで良かったんですね

よくない。
いや、悪くないが、気持ち悪い。
関数内でも、変数は頭に宣言するだろう。
変数を後ろに宣言する何の必要があるのか?
574名無しさん、君に決めた!:03/01/31 18:20 ID:???
「元も子も」じゃなかったけ?勘違い?
575名無しさん、君に決めた!:03/01/31 18:20 ID:???
元金と利子だからな
576名無しさん、君に決めた!:03/01/31 18:20 ID:???
032 #なんだかnandaka
038 #あそこがasokoga
214 #むず痒いmuzugayui
314 #なんでだろnanndedaro
286 #なんだか切ないnanndakasetsnai

↑こんな感じの複数行のテキストファイルがあり、
このファイルを引数で渡すと
数字のみファイルに書きこむプログラム
(#以降はコメントのようにみなす)を
作成していたのですが、変更があって
032 #なんだかnandaka
ne #あそこがasokoga
214 #むず痒いmuzugayui
↑のように数字以外のものがあっても
変換する必要性が出てきました。
今まではisdigit()で済ませていたのですが
それでは2行目の"ne"が弾かれてしまいます。

そこでどのようにすれば#以降を弾きつつ
先頭行の数字以外のデータを書きこむように
できるのかをお教え頂きたくカキコしております。

ほんと厨房で長々と乱文でスイマセソ
5教授お願い致します。。。
577名無しさん、君に決めた!:03/01/31 18:20 ID:???
書き込むって何に書き込むんだ?
文脈から判断できない
メモリーか?
578名無しさん、君に決めた!:03/01/31 18:20 ID:???
ああ、わるい。ファイルか。
579名無しさん、君に決めた!:03/01/31 18:21 ID:???
strchrで#までの長さを求める。
なければ行末までとする。
580名無しさん、君に決めた!:03/01/31 18:21 ID:???
言い方が悪いな。
strchrをうまく使って長さを求める。
strcspnを使ってもいいけど
581名無しさん、君に決めた!:03/01/31 18:21 ID:???
isdigitの代わりにisgraphをつかう
582名無しさん、君に決めた!:03/01/31 18:21 ID:???
C言語でいまCGI作ろうとしているんですが
とりあえず文字表示するだけとかやってみたわけなの
printf("<HTML>");みたいに。
それをコンパイルしてXREAってトコロにUPしてみたの
だけど・・動かないの・・・EXEをCGIにリネームしてUPしたのに。
・・・・なにがわるいんでしょう・・・??
583名無しさん、君に決めた!:03/01/31 18:21 ID:???
・コンパイルした環境がxreaと違うから
・Content-Typeヘッダーを出力していないから
584名無しさん、君に決めた!:03/01/31 18:21 ID:???
EXEとか言っているあたりWindows上でコンパイルしたな・・・・
xreaはLinux(CPUはIntel系)だから。
585名無しさん、君に決めた!:03/01/31 18:21 ID:???
printf("Content-type:text/html\n\n");
こんなん付けていましたが・・・ダメでした・・。
環境はVCなんです。・・うーぬ。
レスありがトン。
586名無しさん、君に決めた!:03/01/31 18:21 ID:???
トクトクでコンパイルしたものをXREAにアップすれば動くかも
587名無しさん、君に決めた!:03/01/31 18:21 ID:???
Windowsじゃだめなのですか!!
それは気付かなかった・・っていうか知らなかった〜
Linux対応にするにはどうすればいいか、わかります・・?
588名無しさん、君に決めた!:03/01/31 18:21 ID:???
strtok(バッファの内容を改変してもいいとき)
もしくは strchr(よくないとき)を使う。

: の後は空白を空ける。
printf("Content-type: text/html\n\n");

Linux 上でコンパイルする。
589名無しさん、君に決めた!:03/01/31 18:21 ID:???
他のバッファにコピーするならsscanf(src,"%[^#]",dest);こんな感じかな?
590名無しさん、君に決めた!:03/01/31 18:21 ID:???
自分とこでLinux環境整えてそこでコンパイル、が一番楽なんじゃないかなぁ…
Cygwin使えばWIN上でLinuxバイナリ作れる?
ttp://www.sixnine.net/cygwin/cygwin-doc/devel/cygwin-to-linux-cross-howto.html
591名無しさん、君に決めた!:03/01/31 18:21 ID:???
Linuxヵー自分全然わかんないッス・・・。
まだ遠い道なのかな・・。
592名無しさん、君に決めた!:03/01/31 18:21 ID:???
レンタル鯖でCGIするなら、やっぱperlとかの方がいいっしょ。
実験用に自前鯖つくるか
593名無しさん、君に決めた!:03/01/31 18:21 ID:???
*.cgi の中身ってどんな言語?
ってか、コンパイルされた状態なの?
テキストソースなの?
594名無しさん、君に決めた!:03/01/31 18:21 ID:???
実行できるなら何でも。
595名無しさん、君に決めた!:03/01/31 18:21 ID:???
のことならを読めば分かると思うけど・・・

> C言語で
> それをコンパイルして
596名無しさん、君に決めた!:03/01/31 18:21 ID:???
そういう意味か・・・

標準入出力と環境変数にアクセスする機能があれば言語は問わない。
Cで書かれたものならもちろんコンパイルしないとだめ
597名無しさん、君に決めた!:03/01/31 18:21 ID:???
確かにそういう意味かもしれんな...。

に補足するなら、サーバが許可してない形式のは実行できなかったと思う。
インタプリタ言語なら、もちろんインタプリタがサーバに置いてないと実行できない。
ホームでインタプリタを自前でコンパイルして使うという手もあるが...。
598名無しさん、君に決めた!:03/01/31 18:21 ID:???
const struct ABC {int i;} a;
struct ABC b;

ってすると、なんで a しか定数にならないのー?
型限定子なのに
599名無しさん、君に決めた!:03/01/31 18:21 ID:???
書き換え不能なstruct ABC型のaだからじゃない・・・
何がおかしいんだろ・・・
600名無しさん、君に決めた!:03/01/31 18:21 ID:???
int findpos(char s[], int lim)
{
int i;

for (i = 0; s[i] != '\0' && i < lim; i++)
{
;
}
if (i == lim)
{
while (i >= 0 && (s[i] == ' ' || s[i] == '\t'))/*@*/
{
i--;
}
}

return i;
}

@の条件が常に偽になるのはなぜなのでしょう?
601名無しさん、君に決めた!:03/01/31 18:21 ID:???
free()でsegmentation faultが発生するんですが考えられる原因は何でしょうか
602名無しさん、君に決めた!:03/01/31 18:21 ID:???
・mallocで得た領域でない。
・既にfree済み。
603名無しさん、君に決めた!:03/01/31 18:21 ID:???
const struct ABC {[?[struct]?] int i;} a;
604名無しさん、君に決めた!:03/01/31 18:21 ID:???
「困った1」ではなくて「困った」でした。スマソ。
605名無しさん、君に決めた!:03/01/31 18:21 ID:???
常に偽になるわけないでしょ。
findposに与える引数を工夫してみな。
606名無しさん、君に決めた!:03/01/31 18:21 ID:???
それ以外にも、ポインタとかの使い方間違えてて、メモリ管理がぐちゃぐちゃになってるとか...。
607名無しさん、君に決めた!:03/01/31 18:21 ID:???
>変数を後ろに宣言する何の必要があるのか?
関数でも変数でも定義や参照の後ろで宣言するのは意味無いし
608名無しさん、君に決めた!:03/01/31 18:21 ID:???
,263
1)でした...
静的に確保した領域を開放しようとしてました.
どうもありがとうございました.
609名無しさん、君に決めた!:03/01/31 18:21 ID:???
それで正常です。
構造体の定義の部分に const をつけても、
その構造体変数を作ろうとした場合に const になるわけではありません。
定義の部分でついでに定義した構造体変数が const になるのです。

常に const になって欲しいんならこんな感じで。
typedef const struct __ABC {int i;} ABC;
ABC a = { 0 };
ABC b = { 5 };
610名無しさん、君に決めた!:03/01/31 18:22 ID:???
ありがとうございます。
その方向で工夫してみます。
611名無しさん、君に決めた!:03/01/31 18:22 ID:???
再帰関数を書いたときにauto変数であることを明示するために書いたことがある。
612名無しさん、君に決めた!:03/01/31 18:22 ID:???
>const struct ABC {int i;} a;
だと
const struct ABC a;
でって、ABCがconstになるわけじゃないですからね。
そもそも、型を定数にしてなんかいいことある?

あえてするなら
struct ABC {const int i;};
かな?

613名無しさん、君に決めた!:03/01/31 18:22 ID:???
sizeof honyaraと、sizeof(honyara)って何か違いますか?
614名無しさん、君に決めた!:03/01/31 18:22 ID:???
don't worry.
615名無しさん、君に決めた!:03/01/31 18:22 ID:???
#define honyara honya + ra
後は自分で考えませう
616名無しさん、君に決めた!:03/01/31 18:22 ID:???
です。
んー、簡単なプログラムかいて、色々実験してみたんだけど、
結果は、同じになります。
あんまり悩む事じゃないのかな??
617名無しさん、君に決めた!:03/01/31 18:22 ID:???
それは、そんな定義する奴の方が悪いと思うけど。
618名無しさん、君に決めた!:03/01/31 18:22 ID:???
じゃ↓を試してみ
#define honyara 7 + 11
printf("%d\n",sizeof honyara );
printf("%d\n",sizeof(honyara));
619名無しさん、君に決めた!:03/01/31 18:22 ID:???
型に対してsizeofするときは括弧が必要なんじゃなかった?
620名無しさん、君に決めた!:03/01/31 18:22 ID:???
だからと言ってそんな変な例を出してどうする。

sizeof 単一式
sizoof(型名)

と言うだけのことだろ。規格書ぐらい読めよ。
621名無しさん、君に決めた!:03/01/31 18:22 ID:???
さん、どうもです。
なるほど、この場合だと結果は違いますね。

自分の環境だと、
printf("%d\n",sizeof honyara );
これは、15になって、
こちらは、
printf("%d\n",sizeof(honyara));
4になりました。

後者は、sizeof(int)をあらわしてると思うのだけど、
前者はなんだろう?
うーむ、、、、考え中...
622名無しさん、君に決めた!:03/01/31 18:22 ID:???
>sizoof(型名)
>規格書ぐらい読めよ。
プッ
623名無しさん、君に決めた!:03/01/31 18:22 ID:???
型名に()が必要と言うのは
#define honyara int

typedef int honyara;
の場合
624名無しさん、君に決めた!:03/01/31 18:22 ID:???
そうか?俺は勉強になる良い例だと思うが・・・

ところで単一式なんて単語定義されてたっけ?
625名無しさん、君に決めた!:03/01/31 18:22 ID:???
sizeof 7 + 11 は ( sizeof 7 ) + 11
sizeof( 7 + 11 ) は sizeof( 18 )
で、あなたの環境の場合 sizeof 7 も sizeof 18 も4だったって事
626名無しさん、君に決めた!:03/01/31 18:22 ID:???
つまり、一般的には(typedefしない時などは)、両者は同じであるというわけですか?

正直、わかったような、わからないような。
なんだか釈然としないですょ。
627名無しさん、君に決めた!:03/01/31 18:22 ID:???
なるほど!
非常によくわかりました。

カッコつけることで、優先順位あげてるわけか。
理解しますた。
みなさん、どうもありがとうございました。
628名無しさん、君に決めた!:03/01/31 18:22 ID:???
いつでも括弧をつけていれば間違いない。
俺は変数に対してはあまり括弧をつけないけど・・・
629名無しさん、君に決めた!:03/01/31 18:22 ID:???
要は、honyaraの正体を知ってる時は、どっちを使っても構わないが
honyaraの正体を知らない時は()使えって事
また、honyaraの正体を知ってても変更する(される)
可能性がある場合も()使えって事
630名無しさん、君に決めた!:03/01/31 18:22 ID:???
俺はいつもつけるようにしてるな、
つけないとワードとワードが2つ連続して並んじゃってなんか居心地が悪い

hage + sizeof hoge + huge
        ↑ここに何も無いのがキモイ
631名無しさん、君に決めた!:03/01/31 18:22 ID:???
ところで
sizeof(i++)
のように、変数を変化させる事を書いた場合の
ふるまいって、どうなってるの?
632名無しさん、君に決めた!:03/01/31 18:22 ID:???
sizeofの中味は評価されないんじゃなかった?
i++の型だけが使われて、iの値は変化しないと
633名無しさん、君に決めた!:03/01/31 18:22 ID:???
変数の大きさに変数の中身は関係ないんじゃ?
634名無しさん、君に決めた!:03/01/31 18:22 ID:???
手持ちのコンパイラは全て変化しないけど
これが、保証済みだったら良いけど
未定義や処理系定義だったら怖いでふ…
まぁ
#define i j++
とかアホな宣言しなければ良いんですけどね…
635名無しさん、君に決めた!:03/01/31 18:22 ID:???
C++/C99の規格では、(C99の可変長配列を除いて)オペランドは評価されない。
となってる。
636名無しさん、君に決めた!:03/01/31 18:22 ID:???
#include<stdio.h>
main()
{
putchar(126);
}

だと ~ が表示される.(~のコードが126だから)
しかし 。 のコードは130のはずなのに,

#include<stdio.h>
main()
{
putchar(130);
}

と打っても結果が表示されません.これに関して,130〜159までが表示されないみたいなんですが,なぜなんでつかー??おせーてくらさい.
637名無しさん、君に決めた!:03/01/31 18:22 ID:???
130のコードが'。'では無かったから
638名無しさん、君に決めた!:03/01/31 18:22 ID:???
isgraph()で調べてみたら。
スペース以外の表示可能文字なら0以外を返す。
639名無しさん、君に決めた!:03/01/31 18:22 ID:???
。 は 161(0xA1) だと思います。

129(0x81) 〜 159(0x9F) はSJISでは2バイト文字用の
文字コードなので、単独では何も表示されません。
640名無しさん、君に決めた!:03/01/31 18:23 ID:???
putchar はコードを文字に変換出力しますが,その逆(文字をコードに)をしてくれる命令はありますか??
641名無しさん、君に決めた!:03/01/31 18:23 ID:???
誰も突っ込んでくれない…鬱
642名無しさん、君に決めた!:03/01/31 18:23 ID:???
勉強になります.ここはレベル高杉ですね
643名無しさん、君に決めた!:03/01/31 18:23 ID:???
助けて下さい。
#include <iostream.h>
#include<stdio.h>

void main()
{
FILE *fp;
fp=fopen("素数−実行結果.txt","a");
int i, j ,f,n=1000,c=0;
// 1から1000までの数の素数を求める
// i, jはループ変数
// fは一回でも割り切れたら1。
// 一度も割り切れなかったら0。
for(i = 2; i <= n; i++) // i(==2,3,4,..,1000)について調べる。
{
f = 0;
for(j = 2; j < i; j++) // j(==2,3,...,i)で割ってみる。
{
if(i % j == 0) // あるjで割り切れたらfは1。
f = 1;
}
644名無しさん、君に決めた!:03/01/31 18:23 ID:???
if(f == 0){// iを割り切るjがなかった場合
cout << i << "は素数です。" << endl;
c++;
}
}
printf("%d個です。",c);
}

素数を表示するプログラムなんですが、
実行結果をテキストファイルに出力するにはどうしたら良いですか?
教えて下さい。御願いします。
ちなみに、コレを実行しても、作成されたテキストファイルは白紙になってしまいます。

645名無しさん、君に決めた!:03/01/31 18:23 ID:???
printf( "A=0x%02x\n", 'A' ) ;
646名無しさん、君に決めた!:03/01/31 18:23 ID:???
てっとり早くやるなら、そのプログラムの名前をtestとしたら、
test > hoge.txt
ってしたら、いいんじゃねーか?
面倒くせーから、まともなやりかたは、他の人に聞いてくれ。
647名無しさん、君に決めた!:03/01/31 18:23 ID:???
お前最悪。
マルチポストかよ。

氏ね。
648名無しさん、君に決めた!:03/01/31 18:23 ID:???
実行結果をテキストファイルに出力する仕方を教えて下さい。
御願いします。
なかなかうまくいかないんです。
649名無しさん、君に決めた!:03/01/31 18:23 ID:???
マルチポストなのでIP抜いて通報しますた
650名無しさん、君に決めた!:03/01/31 18:23 ID:???
マルチポストってなんですか?
651名無しさん、君に決めた!:03/01/31 18:23 ID:???
複数のスレッドに同じことを投稿する違法行為。
知らなかったじゃ済まされないのが犯罪。
652名無しさん、君に決めた!:03/01/31 18:23 ID:???
すいません。
いえ、あちらの方に、MFC限定と書いてあったので、
書き込んだ後で、違うかも知れないと思って、こっちに来たんです。
だから、他には投稿してないです。
653名無しさん、君に決めた!:03/01/31 18:23 ID:???
ム板はやたらスレが細分化されてるからなあ。
マルチポストと移動の違いが分からない罠。
654名無しさん、君に決めた!:03/01/31 18:23 ID:???
ならそう書けよ……
655名無しさん、君に決めた!:03/01/31 18:23 ID:???
迷惑掛けてしまったみたいで恐縮なんですが、
どうしたら、うまくテキストファイルに出力できるか、
教えて下さい。御願いします。
656名無しさん、君に決めた!:03/01/31 18:23 ID:???
マルチポストが何故いけないのかちゃんと調べておこうな。

移動はちゃんと移動したと書いてある。
マルチポストと勘違いされるのを防ぐのにな。
657名無しさん、君に決めた!:03/01/31 18:23 ID:???
「レゴは
 素直に
 単位を
 落とせ。」
658名無しさん、君に決めた!:03/01/31 18:23 ID:???
向こうにレス付いてたよん。
659名無しさん、君に決めた!:03/01/31 18:23 ID:???
>書き込んだ後で、違うかも知れないと思って、こっちに来たんです。
1、書き込む前に確認する
2、移動する時は、必ず、移動すると元スレに書き込んでから移動する
以上、基本ですので憶えて置きなはれ

追記
反省してるならMFC限定スレにも謝っておく事
660名無しさん、君に決めた!:03/01/31 18:23 ID:???
それは C++ だが、ここは 「C 限定」 なんだよな。
661名無しさん、君に決めた!:03/01/31 18:23 ID:???
316>>
はい、分かりました。

317>>
単位というか、研究室に入れなくなってしまうんです。

662名無しさん、君に決めた!:03/01/31 18:23 ID:???
fprintfの使い方分かる方、教えて下さい。
663名無しさん、君に決めた!:03/01/31 18:23 ID:???
読んだ?
664名無しさん、君に決めた!:03/01/31 18:23 ID:???
読んだんですけど、C言語というと、C++も入ってるんですかね?
違うけど、言葉的に入ってると思ったんですが。違うのでしょうか?
間違ってたら、すいません。
665名無しさん、君に決めた!:03/01/31 18:23 ID:???
FILE *fp,*fc;
fp=fopen("素数−実行結果.txt","w");
int i, j ,f,n=1000,c=0;
// 1から1000までの数の素数を求める
// i, jはループ変数
// fは一回でも割り切れたら1。
// 一度も割り切れなかったら0。
for(i = 2; i <= n; i++) // i(==2,3,4,..,1000)について調べる。
{
f = 0;
for(j = 2; j < i; j++) // j(==2,3,...,i)で割ってみる。
{
if(i % j == 0) // あるjで割り切れたらfは1。
f = 1;
}
if(f == 0){// iを割り切るjがなかった場合
cout << i << "は素数です。" << endl;
c++;
}
}
printf("%d個です。",c);
fc=fclose("素数−実行結果.txt","w");
と入力したのですが、エラーが出てしまいました。
666名無しさん、君に決めた!:03/01/31 18:23 ID:???
はっきり言われないとわからないか。
の 2 行目は呼んだか?

あと、C と C++ は全然別言語だ。
667名無しさん、君に決めた!:03/01/31 18:23 ID:???
326>>
はい。
自分で色々調べたり、先輩に聞いたんですけど、
ここまでしか分からなくて。
本当に頭悪くて、すみません。
668名無しさん、君に決めた!:03/01/31 18:24 ID:???
それでは、失礼します。
669名無しさん、君に決めた!:03/01/31 18:24 ID:???
まずfopenとfprintfとfcloseの使い方をおぼえたほうがいいな。

なんでfpにファイルをオープンしたポインタを代入してるのにcoutに出力してんだ?
fpをまったく使わない時点でおかしいと思わないのか?
670名無しさん、君に決めた!:03/01/31 18:24 ID:???
えっ?
fpに出力ですか?
coutは、使わないんですかね?
初めに素数を表示するプログラムが完成した後で、
テキストファイルに出力出来るようにしようとしたので、
分からなくなったんです。
ちょっと、いじってみます。
671名無しさん、君に決めた!:03/01/31 18:24 ID:???
優しいね…
C++として組みたいならXXstream使え(XXは自分で探せ)
何が簡単で、何が簡単ではないかは、使う人の考え方次第
それにネットで検索すればfprintf()の使い方なんて簡単に見つかる
そして、ルールは守れ。
何処で聞けば分からなければ、この板のルールの↓を守って
>あらゆる質問はまずすれ立てるまでもない質問はここでスレにしてください。
http://pc3.2ch.net/test/read.cgi/tech/1043159083/
に書きこんでれば、一発で誰かが答えてくれる問題だった
まぁ、今更書いたところで、答えてくれる香具師がいるかは分からんが…
取り敢えず、が付き合ってくれてるので
Cに直した答えを教えてくれるかも知れないが
C++にしたいのなら明日あたり↑のスレで聞いてみ
672名無しさん、君に決めた!:03/01/31 18:24 ID:???
今日は優しい人が多いね…
673名無しさん、君に決めた!:03/01/31 18:24 ID:???
いつからレゴはC++になったんだ?
674名無しさん、君に決めた!:03/01/31 18:24 ID:???
の 「助けて下さい。」 のすぐ次の行から。
675名無しさん、君に決めた!:03/01/31 18:24 ID:???
サソ
アリガdございますた。

アドバイス頂いておいて何なんですが、
正直strchrを使って"#"以降を弾くのかわかりません。。。
ほんと糞厨ですみませんが、もう少し
5教授頂きたく思います。
お手数お掛け致しますが宜しくお願い致します。
676名無しさん、君に決めた!:03/01/31 18:24 ID:???
C言語の、多分基礎のところだと思うんですけど質問します。

int AAA = BBB != CCC ? DDD:EEE ;

この1行を要約すると、

if( BBB==CCC ) int AAA = DDD ;
else int AAA = EEE ;

ということでよろしいのでしょうか?
677名無しさん、君に決めた!:03/01/31 18:24 ID:???
int AAA;
if( BBB!=CCC ) AAA = DDD ;
else AAA = EEE ;
678名無しさん、君に決めた!:03/01/31 18:24 ID:???
>340さま
ありがとうございました。m(__)m
679名無しさん、君に決めた!:03/01/31 18:24 ID:???
1. 一行読み出す
2. #の位置を探す
3. 見つかれば、そこまでを書き出す
4. 見つからなければ、全部書き出す

でできます。
一文字ずつ読み出す場合はこういうことできないんですけどね。
一文字ずつ読み出すと何度も読み出し作業があって遅くなるので、
一度にある程度読み出すことが多いです。

まぁ、一文字ずつ読み出す場合であれば、
isdigit とかの関数を使わずに
'#' かどうか判定するのが一番真っ当なやり方でしょうね。
680名無しさん、君に決めた!:03/01/31 18:24 ID:???
C言語の長所と短所を教えてください。
681名無しさん、君に決めた!:03/01/31 18:24 ID:???
長所: 簡潔であること。
短所: 簡潔すぎること。
682名無しさん、君に決めた!:03/01/31 18:24 ID:???
サソ
アリガdございます

相変わらず糞厨なもので。。。
3. 見つかれば、そこまでを書き出す
4. 見つからなければ、全部書き出す
上記3.4のコーディング方がわかりませぬ・・・
まじオワッテルって感じなんですけど、
御教授願いたく再度ペコーリでございます。
683名無しさん、君に決めた!:03/01/31 18:24 ID:???
3. 位置の差を使って fwrite
4. fputs
何で分岐するかは strchr のヘルプを見れば分かるはず。

fgets で一行読み出そうとしても、
バッファが小さいと一度に一行全部読み出せるとは限らないので、
その対処をする必要があります。
全部読み出せたかどうかは最後が改行かどうかで分かります。

具体的な形については、全部自分でやってください。
684名無しさん、君に決めた!:03/01/31 18:24 ID:???
じゃだめ?確認していないけど。
一行読んだものを格納するバッファとは別にもうひとつバッファをつくってそこにsscanf
685名無しさん、君に決めた!:03/01/31 18:24 ID:???
位置の差を取るくらいならstrcspnを使えばいいじゃん
686名無しさん、君に決めた!:03/01/31 18:24 ID:???
'#'を探して見つかったらその位置とその次に'\n'と'\0'を置く。
687名無しさん、君に決めた!:03/01/31 18:24 ID:???
行バッファなんか要らないじゃん。
fopen(fpin=入力、fpout=出力)
while(!feof(fpin)) {
fgetc(cに1文字読む);
if(c=='#') {
fputc('\n',fpout);
while(!feof(fpin)) {
fgetc(cに1文字読む);
if(c=='\n') break;
}
}
else {
fputc(cの1文字を書き込む,fpout);
}
}
両file close
exit(0);
688名無しさん、君に決めた!:03/01/31 18:24 ID:???
689名無しさん、君に決めた!:03/01/31 18:24 ID:???
氏ね
690名無しさん、君に決めた!:03/01/31 18:24 ID:???
(^^)
691名無しさん、君に決めた!:03/01/31 18:24 ID:???
山崎渉も氏ね
692名無しさん、君に決めた!:03/01/31 18:24 ID:???
(××)
693名無しさん、君に決めた!:03/01/31 18:24 ID:???
ワロタ
694名無しさん、君に決めた!:03/01/31 18:25 ID:???
C言語が全然分かりません(>_<)
どうしたらいいですか(>_<)
695名無しさん、君に決めた!:03/01/31 18:25 ID:???
ほうじ茶を飲むといいですよ (-:
696名無しさん、君に決めた!:03/01/31 18:25 ID:???
C言語でほうじ茶のプログラムを書く方法を教えてください(>_<)
697名無しさん、君に決めた!:03/01/31 18:25 ID:???
         /
∋8ノハヽ8∈ | 
  ( ´ァョ) < こーするのれす
          | 

printf("ほうじ茶のプログラム");
698名無しさん、君に決めた!:03/01/31 18:25 ID:???
C言語でいい参考書ありませんか?やさしいCとC言語スタートブックは読んだのですが
次になにを読めばいいのか迷っています、それともはやめにC++の方に移った方がいい
のでしょうか?
699名無しさん、君に決めた!:03/01/31 18:25 ID:???
ありがとう
700名無しさん、君に決めた!:03/01/31 18:25 ID:???
ど素人な質問でスミマセン。
ファイルから1バイトおきにデータを読み込みたいのですがうまくいきません
なぜこれではダメなのでしょうか?

FILE *fp;
char ch;
.......

while(!feof(fp)){
ch=fgetc(fp);
putchar(ch);
fseek(fp, 1L, SEEK_CUR);
}
701名無しさん、君に決めた!:03/01/31 18:25 ID:???
FILE *fp;
char ch;
.......

while(!feof(fp)){
ch=fgetc(fp);
putchar(ch);
fgetc(fp);
//fseek(fp, 1L, SEEK_CUR);
}
702名無しさん、君に決めた!:03/01/31 18:25 ID:???
> while(!feof(fp))

終了条件がこれはマズイだろ。
703名無しさん、君に決めた!:03/01/31 18:25 ID:???
文字を数値に変えるのはatoiとわかりました。
数値を文字に変えるのはitoaですか?
704名無しさん、君に決めた!:03/01/31 18:25 ID:???
はい
705名無しさん、君に決めた!:03/01/31 18:25 ID:???
aprintf()
706名無しさん、君に決めた!:03/01/31 18:25 ID:???
間違い。
sprintf()
707名無しさん、君に決めた!:03/01/31 18:25 ID:???
fgetc の戻り値で終わってるかどうか確かめましょう。
また、fgetc の戻り値は int なので int で受け取りましょう。
708名無しさん、君に決めた!:03/01/31 18:25 ID:???
FILE *stream;
char buffer[81];
int i, ch;
................

/* 最初の 80 バイト文字を読み出し、"buffer" に格納します。*/
ch = fgetc( stream );
for( i=0; (i < 80 ) && ( feof( stream ) == 0 ); i++ )
{
 buffer[i] = ch;
 ch = fgetc( stream );
}
...................
709名無しさん、君に決めた!:03/01/31 18:25 ID:???

1週間位前から、snprintfを実装してた者です。
本日作成終了しました。とりあえず感想等を書いてみます。

文字列フォーマット後のサイズを計算して、
オーバーフローしないなら、
内部でvsprintfを呼ぶ様に実装しました。
でも、何箇所か精度の甘い部分が残りました。
変換指定子g,Gはeかfのどちらかに変換されるらしいけど、
どちらに変換されるか判らないからサイズは大きい方で
計算したり、フラグ#は最小フィールドが指定された時には、
サイズがフィールド幅足す2なのか、最小フィールド幅内に含めるのか等

他の人には簡単なのかも知れないけど、
私には難しかったです。そしてめんどくさかった。
710名無しさん、君に決めた!:03/01/31 18:25 ID:???
strtok使ってみたら?
711名無しさん、君に決めた!:03/01/31 18:25 ID:???
ヌヒよ、それは実装とは言わないぞ。
ヌヒよ、それは単に作成というぞ。それは単なる関数だからな。
ヌヒよ、実装というのは関数ではなくインターフェイスを定義することだ。
712名無しさん、君に決めた!:03/01/31 18:25 ID:???
なんでfread使わないんだろう…
713名無しさん、君に決めた!:03/01/31 18:25 ID:???
CRLF -> LF
714名無しさん、君に決めた!:03/01/31 18:25 ID:???
勘違いした。
715名無しさん、君に決めた!:03/01/31 18:25 ID:???
377 の言う通りだ。
お前それじゃ、本物の沢村より DQN だぞ。
716名無しさん、君に決めた!:03/01/31 18:25 ID:???
が本物であるかも知れない罠
717名無しさん、君に決めた!:03/01/31 18:25 ID:???
本物ならあんな文の書き方しないよ。
修行が足りないね。
718名無しさん、君に決めた!:03/01/31 18:25 ID:???
1 6
2 7
3 8
4 9
5 10
↑これを
(a=1;a<6;a++){
(b=a;b<=10;b+=5)
printf("%d",b);
printf("\n");

こうじゃなくて12345と数字の順番に表示させていくにはどうしたらいいですか
719名無しさん、君に決めた!:03/01/31 18:25 ID:???
聞く前に動くコードを出せ
720名無しさん、君に決めた!:03/01/31 18:25 ID:???
printf("12345\n678910");
721名無しさん、君に決めた!:03/01/31 18:25 ID:???
何をやりたいのか見当がつかん。
どういう出力結果が欲しいんだ?
722名無しさん、君に決めた!:03/01/31 18:26 ID:???
ごめん、コードはまた今度な。
723名無しさん、君に決めた!:03/01/31 18:26 ID:???
俺が思うに、1 6\n2 7\n3 8・・・と表示してゆくのではなく、
1から5までを表示したあとに一番上の行間で戻って少し右にずらし6から10までを表示したいんだと思う。
724名無しさん、君に決めた!:03/01/31 18:26 ID:???
× 行間で
○ 行まで
725名無しさん、君に決めた!:03/01/31 18:26 ID:???
1 6
2 7
3 8
4 9
5 10
↑これを
#include <stdio.h>
int main(void){
int a,b;
for(a=1;a<6;a++){
for(b=a;b<=10;b+=5)
printf("%3d",b);
printf("\n");
}
}
こうじゃなくてああ
726名無しさん、君に決めた!:03/01/31 18:26 ID:???
1 6
2 7
3 8
4 9
5 10
↑こういった出力結果が欲しいだけなんか?
だったら
int i;
for (i=1; i<=5; i++)
 printf("%d %d\n", i, i+5);
これでええやん。
727名無しさん、君に決めた!:03/01/31 18:26 ID:???
俺も当初そう思ったんだけど,
を見る限り1 -> 6 -> 2 -> 7と表示させようとしてるような。
728名無しさん、君に決めた!:03/01/31 18:26 ID:???
1 2
3 4
5 6
7 8
9 10
729名無しさん、君に決めた!:03/01/31 18:26 ID:???
「こうじゃなくてああ」と書いているから違うコードがほしいんじゃない?
730名無しさん、君に決めた!:03/01/31 18:26 ID:???
エスケープシーケンス
http://kasai86.infoseek.livedoor.com/dos/esc.htm
731名無しさん、君に決めた!:03/01/31 18:26 ID:???
あ, そっか。ごめん。
732名無しさん、君に決めた!:03/01/31 18:26 ID:???
strtokはワークエリアが一つしかないので、だぶって使ったら
ダメだということです
733名無しさん、君に決めた!:03/01/31 18:26 ID:???
なんの話だ
734名無しさん、君に決めた!:03/01/31 18:26 ID:???
よう分からんけど、の環境で
同一プロセス内のスレッドが複数ある時の話じゃないか?
735名無しさん、君に決めた!:03/01/31 18:26 ID:???
「Java 謎+落とし穴」のp50参照
736名無しさん、君に決めた!:03/01/31 18:26 ID:???
C言語って関数内関数が使えないはずですよね?
gccだと通っちゃうんですが。何故?
737名無しさん、君に決めた!:03/01/31 18:26 ID:???
gccが独自拡張してるからだYO!
-ansi -pedantic-errors
の、「ANSI準拠以外認めない」オプション付けたらエラーになる筈

ところで
、61
の掛け合いに激しくワラタんだが、
反応ないのをみるに、これって激しく既知のネタ?
738名無しさん、君に決めた!:03/01/31 18:26 ID:???
知らなんだ。イイ! ね。
特に作業用の引数が必要な再帰関数使うときとか。
739名無しさん、君に決めた!:03/01/31 18:26 ID:???
サンクス

というかなんで標準Cじゃ使えないんだよヽ(`Д´)ノ
スコープがちょっと違うだけだろうが!
740名無しさん、君に決めた!:03/01/31 18:26 ID:???
配列の範囲チェックを省きたいんですけど、
こんなのありなんでしょうか?

struct aaa
{
int d1[10];
int data[10];
int d2[10];
};

aaa l;
l.data[-1]=1; //d1[9] //anti bad_alloc
l.data[-2]=222; //d1[8] //anti bad_alloc
741名無しさん、君に決めた!:03/01/31 18:26 ID:???
添え字に負数入れてもコンパイラはエラー吐かないんだな。びっくりした
a[n] == *(a+n) と解釈されるから当然といえば当然か。
742名無しさん、君に決めた!:03/01/31 18:26 ID:???
-pedanticまでつけなくてもいいんじゃないか?(笑)
以前試しにつけたら、//コメントはおろか標準にない関数をつかっただけでもエラーになった気がする。
743名無しさん、君に決めた!:03/01/31 18:26 ID:???
C++使い?
744名無しさん、君に決めた!:03/01/31 18:26 ID:???
>というかなんで標準Cじゃ使えないんだよヽ(`Д´)ノ
一見簡単そうだが、意外に厄介な問題が潜んでいるので・・・
745名無しさん、君に決めた!:03/01/31 18:26 ID:???
まともな関数内関数の実装はスタックフレームにも影響あるからね。
C++やJavaのメソッド内クラスみたいな制限つきでも十分便利なのにな。
746名無しさん、君に決めた!:03/01/31 18:26 ID:???
亀レスで悪いが...

> 要は、honyaraの正体を知ってる時は、どっちを使っても構わないが
> honyaraの正体を知らない時は()使えって事

と言うより、

#define honyara honya + ra

なんて宣言する奴が悪い。普通...

#define honyara (honya + ra)

って宣言するだろ。

規格書も読めないんだね。 ぷぷっ。
747名無しさん、君に決めた!:03/01/31 18:26 ID:???
> #define honyara (honya + ra)

> って宣言するだろ。

このくだらないつっこみのために遅レスしたの?
748名無しさん、君に決めた!:03/01/31 18:26 ID:???
> #define honyara (honya + ra)

> って宣言するだろ。

#define honyara ((honya) + (ra))
749名無しさん、君に決めた!:03/01/31 18:26 ID:???
>このくだらないつっこみのために遅レスしたの?
規格書を読んでいた為ではないかと。
750名無しさん、君に決めた!:03/01/31 18:26 ID:???
あんたの意味なし煽り突っ込みよりマシかと。

趣味の差かと。
念には、念を入れると言う考え方もあるけど、俺はマクロ側で () 必須にするのが好み。

それもあるが、毎日 2ch 見てるわけじゃないし...。
751名無しさん、君に決めた!:03/01/31 18:27 ID:???
>俺はマクロ側で () 必須にするのが好み。

#define a(b) (b * 5)
printf("%d\n", a((4 + 8)));

という意味だったら死刑。
752名無しさん、君に決めた!:03/01/31 18:27 ID:???
まあ、話の流れからわかるでしょ ?

「マクロの定義側で」と書いた方がいいか...。
753名無しさん、君に決めた!:03/01/31 18:27 ID:???
煽ったつもりはないですけど。
煽っているのはの方でしょ。
754名無しさん、君に決めた!:03/01/31 18:27 ID:???
これ (=このくだらないつっこみのために遅レスしたの?) 書いといて...

> 煽ったつもりはないですけど。

と来たか...。

で煽りがないとは言わんけど、は見てんのかなぁ。
755名無しさん、君に決めた!:03/01/31 18:27 ID:???
驚いたので感想を書いただけです。
亀レスでなければ驚きもしないですけど。
くだらないという表現がまずかったでしょうか。
756名無しさん、君に決めた!:03/01/31 18:27 ID:???
> 驚いたので感想を書いただけです。

マジなのか、ネタ (だと思いたいが) なのかわからんけど。
まああんたみたいな奴も世の中にはいるということはわかった。

> 亀レスでなければ驚きもしないですけど。

自分で亀レスって書いといてなんだけど、2日と17時間ぐらいが、驚くほど亀レスか ?
君と違って、毎日 2ch 見てる香具師ばかりじゃないんだよ。

> くだらないという表現がまずかったでしょうか。

相手に対して、「くだらない」と言う表現がまずくない場合があるとでも思ってんの ?
757名無しさん、君に決めた!:03/01/31 18:27 ID:???
2chだからね。
758名無しさん、君に決めた!:03/01/31 18:27 ID:???
1.構造体のメンバが宣言順にアドレス増加方向で並ぶのは保証されている
2.配列内の要素はアドレス増加方向で並ぶことが保証されている
3.アドレス演算は+で増加方向、-で減少方向が保証されている
だが、
4.構造体の中身が隙間無く並ぶことは保証されていない
に引っかかって誤動作することがあると思われ。

sizeof(int)=4,sizeof(short)=2として、
struct mix{
 short a[1];
 int b[1];
 short c[1];
};
だと、恐らくmix.c[-3] != mix.a[0]になると思う。
ただそれよりも何よりも、そんな危険な匂いのするコード個人的に嫌だw
759名無しさん、君に決めた!:03/01/31 18:27 ID:???
あんな書き込みでは2日と17時間でも驚くよ。
大抵は思っても書き込んだりはしないんじゃないかな。
760名無しさん、君に決めた!:03/01/31 18:27 ID:???
要は2日と17時間経ってからレスしたことに驚いたんじゃなくて、あんなレスを2日と17時間も経ったあとにしたことに驚いたということ。
761名無しさん、君に決めた!:03/01/31 18:27 ID:???
ハイハイ、わかりました。
762名無しさん、君に決めた!:03/01/31 18:27 ID:???
わかればいい。
763名無しさん、君に決めた!:03/01/31 18:27 ID:???
二次元配列を引数にとるにはどうすればいいんですか?
int dat[100][100];
void func(int *param);
main(){
  func(dat);
}

のようにやっても、うまくいきません。
void func(int** param);でもだめでした。
教えてください。
764名無しさん、君に決めた!:03/01/31 18:27 ID:???
-3じゃなく-4かもね、それ。
765名無しさん、君に決めた!:03/01/31 18:27 ID:???
void func(int param[][100])
void func(int (*param)[100])

766名無しさん、君に決めた!:03/01/31 18:27 ID:???
void func(int param[][100]);
767名無しさん、君に決めた!:03/01/31 18:27 ID:???
ありがとうございます。
でもそれだと、要素数が100に限定されてしまいませんか?
768名無しさん、君に決めた!:03/01/31 18:27 ID:???
限定される。
ポインタの指すものの大きさが分からないとだめだろ。
769名無しさん、君に決めた!:03/01/31 18:27 ID:???
そもそも配列の範囲外へのアクセスは保証されないよ。

しつこい、お前等ウザイからどっか逝け。

void func(int param[][100])

多次元配列の最上位の次元以外の範囲は省略できない。
770名無しさん、君に決めた!:03/01/31 18:27 ID:???
よくわかりました。どうもありがとうございました。
771名無しさん、君に決めた!:03/01/31 18:27 ID:???
int data[100 +2], *p;
p = data +2;

とすれば、p[-2], p[-1] が有効に使えるね。
772名無しさん、君に決めた!:03/01/31 18:27 ID:???
こうやればできる。

#include <stdio.h>

#define ELEMOF(array) (sizeof (array) / sizeof *(array))

void func(int* param, int n)
{
 param[n * 3 + 6] = 3; /* a[3][6] = 3;
}

main()
{
 int a[10][20];
 func(*a, ELEMOF(*a));
 printf("%d\n", a[3][6]);
}
773名無しさん、君に決めた!:03/01/31 18:27 ID:???
あ、コメント閉じるの忘れてた。
 param[n * 3 + 6] = 3; /* a[3][6] = 3; */
774名無しさん、君に決めた!:03/01/31 18:27 ID:???
それだと2次元配列の見易さや配列の大きさについての
情報が無くなるから・・
void func(int *param,int n){
/*nは1列の要素数*/
 *(param + 3 * n + 6) = 3;
}
と大差ないと思われ。
これなら通ることは恐らくも確認済みと思う。

関係ないが、関数の中にマジックナンバーを仕込むのは
サンプルコードでも止めて欲すぃ・・
775名無しさん、君に決めた!:03/01/31 18:27 ID:???
==413
>sizoof(型名)
>規格書ぐらい読めよ。
規格書読む前に、アルファベットの綴りを覚えろよ
776名無しさん、君に決めた!:03/01/31 18:27 ID:???
typo ぐらいでがたがた言うな。
777名無しさん、君に決めた!:03/01/31 18:27 ID:???
エラそーに能書きを垂れる時にミスったらアカンやろ
778名無しさん、君に決めた!:03/01/31 18:27 ID:???
数字だと瞬間での同一性の確認が得られるから、
こういうサンプルではマジックナンバーもアリかと思って。

あと、もし第二要素数の異なる二次元配列を扱うのであれば、
それと大差ないのは仕方がないんじゃないかな。
まぁ、
#define INDEX2(n2, a, b) ((a) * (n2) + (b))
とかして
param[INDEX2(n, 3, 6)] = 3;
とでもすればいいかと。
もちろん要素数固定ならこんなことする必要ないんだけどね。
779名無しさん、君に決めた!:03/01/31 18:27 ID:???
が趣味の差かよ!!
780名無しさん、君に決めた!:03/01/31 18:28 ID:???
ルパーン お前をタイポする〜〜
781名無しさん、君に決めた!:03/01/31 18:28 ID:???
タイポしてないじゃん
782名無しさん、君に決めた!:03/01/31 18:28 ID:???
#include<stdio.h>
#include<stdlib.h>
int main (void){
int k,nsize;
int *pnVar;
printf("確保する大きさ");
scanf("%d",&nsize);
pnVar= (int *)malloc(sizeof(int)* nsize);
printf("%dバイトの領域を確保しました\n",4*nsize);
for(k=0;k<nsize;k++);
pnVar[k]=k*10;
for(k=0;k<nsize;k++);
printf("pnVar+%d=%p pnVar[%d]=%d\n",pnVar+k,k,pnVar[k]);
free(pnVar);
return 0;
}
何故かエラーがでます。
授業の板所を間違えて写してしまったのでしょうか
どなたか対処法をおねがいします。
マロック関数です
783名無しさん、君に決めた!:03/01/31 18:29 ID:???
お前はその前に日本語を学びなおせ。
for文の後にいきなりセミコロンがあるが、それはどうなのよ?
784名無しさん、君に決めた!:03/01/31 18:29 ID:???
↑お前ね、煽り方がふるくせんだよ。 ジジイかよ
785名無しさん、君に決めた!:03/01/31 18:29 ID:???
Stack overflowと言うエラーは何ですか?
786名無しさん、君に決めた!:03/01/31 18:29 ID:???
ヒソヒソ( ゚o゚)ヤダァ(゚o゚ )ネェ、キイタ?( ゚o゚)オクサン(゚o゚ )アラヤダワァ
787名無しさん、君に決めた!:03/01/31 18:29 ID:???
大学の研究でいきずまってるんですけど。助けてください。
まず仕事の数を入力して次に仕事の内容を入力して次に仕事別に分けたいのだけどどうしたらいいの?
ちなみに仕事は丸ブローチ加工、角ブローチ加工、キーみぞ加工の3種類です。
788名無しさん、君に決めた!:03/01/31 18:29 ID:???
マロック関数ですか。
なんだか新鮮ですな。
789名無しさん、君に決めた!:03/01/31 18:29 ID:???
バカ?
790名無しさん、君に決めた!:03/01/31 18:29 ID:???
質問が漠然としてるな
いまいちわからない
研究にかかわってない人間でもわかるように質問して
791名無しさん、君に決めた!:03/01/31 18:29 ID:???
マイコンで旋盤制御でもやるつもりか?
お手製のNC旋盤
792名無しさん、君に決めた!:03/01/31 18:29 ID:???
少しおちついて考えればすぐ解ると思うが、

for(k=0;k<nsize;k++);/* k が nsize になるまで空回り*/
pnVar[k]=k*10;/* ここでは k は nsize と同じ値になっている*/

となっている。
451じゃないが、for文直後のセミコロンはいったい何なんだと小3分ほど(w
793名無しさん、君に決めた!:03/01/31 18:29 ID:???
intの大きさをsizeof(int)と書いているところもあれば4と決めつけているところもあるね。
あ、エラーとはなんの関係もないよ。
794名無しさん、君に決めた!:03/01/31 18:29 ID:???
include<stdio.h>

void main()
{
long sum=0;
short ten[10],i,n;

printf(“仕事数の入力(10個以内):”);
scanf(“%2d,&n);
for(i=0;i<n;++i){
printf(“%2d個目の仕事の入力:”,i+1);
scanf(“%s”,&ten[i]);
sum=sum+ten[i];
}
if(?){
printf(“丸ブローチ加工です。\n”);
}
}
ここで()のなかの条件式がわかりません。仕事の内容を入力する時にmと入力されれば
”丸ブローチ加工”です。と表示したいのです。初心者なのでよろしくおねがいします。
795名無しさん、君に決めた!:03/01/31 18:29 ID:???
まずは全角のダブルクォーテーションをなんとかしろ。
次に、なんでshortに文字列を入れようとする?
796名無しさん、君に決めた!:03/01/31 18:29 ID:???
charにすればいいんですか?
797名無しさん、君に決めた!:03/01/31 18:29 ID:???
sumって何に使うの?
798名無しさん、君に決めた!:03/01/31 18:29 ID:???
アムロの(ry
799名無しさん、君に決めた!:03/01/31 18:29 ID:???
木下君のやりたいことを想像してみよう
800名無しさん、君に決めた!:03/01/31 18:29 ID:???
オリンピックで金メダルを取ること。
801名無しさん、君に決めた!:03/01/31 18:29 ID:???
下記のようなプログラムを作成中の厨房です。
/* int hoge */
while((hoge = fgetc(fpin)) !=EOF){
if(hoge=='#'){
fputc('\n',fpout);
while(!feof(fpin)){
hoge=fgetc(fpin);
if(hoge=='\n') break;
}
}
else {
fputc(hoge,fpout);
}
}

*fpoutの示すファイルにバイナリで書きこみたいので
fwriteを使いたいのですが、いまいち使い方が
わかりません。特にfputc('\n',fpout);のところです。
'\n'をどのように引数で渡せばよいのでしょうか?
糞みたいな質問で申し訳ありませんがよろしくお願い
致します。
802名無しさん、君に決めた!:03/01/31 18:29 ID:???
803名無しさん、君に決めた!:03/01/31 18:29 ID:???
> fputc('\n',fpout);
fwrite(&'\n', 1, 1, fpout);
でも、1文字書き込みたいだけならfputcの方がいいと思うが...
804名無しさん、君に決めた!:03/01/31 18:29 ID:???
> &'\n'
これはCなのか?
てか、"\n"でええやん。
805名無しさん、君に決めた!:03/01/31 18:30 ID:???
スタックがオーバーフローするエラー。

スタックってのは
自動変数(関数内で普通に定義した変数)、
関数の引数、関数の呼び出し元のアドレスなどを
保存しておくところ。

オーバーフローってのは、容量オーバーすること。

つまり、
1. 自動変数が大きすぎる・多すぎる
2. 関数呼び出しが深すぎる
って時に起こるエラーです。
普通は再帰関数の終了条件が満たされなくなるようなバグがあったときか、
3次元以上の配列を確保したが予想以上に大きくなってしまった、という時に起こります。
806名無しさん、君に決めた!:03/01/31 18:30 ID:???
初心者で,数値計算[円周率]のプログラムをC言語でつくりたいのですが
何をしたらいいかわからず,何か参考になるネタはありますか?
807名無しさん、君に決めた!:03/01/31 18:30 ID:???
808名無しさん、君に決めた!:03/01/31 18:30 ID:???
809名無しさん、君に決めた!:03/01/31 18:30 ID:???
検索すればその手の例題は結構あります。
810名無しさん、君に決めた!:03/01/31 18:30 ID:???
みなさんありがとうございやす。
811名無しさん、君に決めた!:03/01/31 18:30 ID:???
言うと殴られちゃうぬるぽってC言語のNULLのことじゃないんですよね??
812名無しさん、君に決めた!:03/01/31 18:30 ID:???
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /<<479
813名無しさん、君に決めた!:03/01/31 18:30 ID:???
ミナサン
ご回答ありがdございます。

while((s = fgetc(ifp)) !=EOF){
if(s=='#'){
fwrite("\n", 1, 1,ofp);
while(!feof(ifp)){
s=fgetc(ifp);
if(s=='\n') break;
}
}
else {
fwrite (&s, 1, 1, ofp);
}
}
上記のように直したのですが
ファイルにはNULLしか入ってないっす・・・
まじ厨でもうしわけないのですが
ご教授お願い致します。
814名無しさん、君に決めた!:03/01/31 18:30 ID:???
fwrite を使うか fputc を使うかで
バイナリかテキストかは切り替わらないので、
どっちを使っても問題ありません。

というか、
 fwrite (&s, 1, 1, ofp);
は危険な(環境依存な)コードなので
fputc 使って下ちぃ。
815名無しさん、君に決めた!:03/01/31 18:30 ID:???
サソ
ご丁寧な回答ありがdございます。

fputcを使うべしとのことですが
fputcはバイナリで書きこむことが
可能なのでしょうか??
816名無しさん、君に決めた!:03/01/31 18:30 ID:???
環境依存なの?
817名無しさん、君に決めた!:03/01/31 18:30 ID:???
CPUはなんだ? なんとなくx86系じゃないような香りがする。
818名無しさん、君に決めた!:03/01/31 18:30 ID:???
int型のs(多分fgetcを受ける変数なんでintなんだろう)を
*(char*)&s;
と評価したときの値は環境に依存するよ。
fwrite(&s, 1, 1, ofp);
なんてやってる場面はまさにそれ。
819名無しさん、君に決めた!:03/01/31 18:30 ID:???
ぐぉーーなんか複雑だぁ。
CPUは・・・?よくわかりますぇん。。。
OSはUNIX、ソラリスであることは
間違いないっす。

fputcじゃーバイナリでカキコは無理なんで
しょうか・・・
820名無しさん、君に決めた!:03/01/31 18:30 ID:???
するとsparcかな。エンディアンしらねえや(w
でも書いたファイルがヌルだらけという状況からいって、
ビッグエンディアンっぽいね。

ともかくその場面ではfwriteを使うんじゃなくて、fputcを使うべし。
fputcは文字をストリームに書く関数というよりは、
一バイトストリームに書く関数って感じなので、バイナリ書けるよ。
821名無しさん、君に決めた!:03/01/31 18:30 ID:???
何か「バイナリ」という言葉を勘違いしている予感。
というか、何をしたいの?
#があるとその行のそれ以降のものを消すコード、
というのなら最初ので合ってるような気が。
822名無しさん、君に決めた!:03/01/31 18:30 ID:???
サソ
アリガトウゴザイマス

確かに漏れバイナリわかってません。。。
32#more
44#baka
nanoka #utsuda
↑こんな感じのテキストファイル読み込んで
(#以降はコメントの扱いとして省く)
バイナリでファイルに書きこむっていう
プログラムを作っています。

putcでバイナリで書きこめるのであれば
私の仕様でもダイジョウブなんでしょうか?
最近夢にバイナリが出てきます。
鬱です。
823名無しさん、君に決めた!:03/01/31 18:30 ID:???
32 とか 44 とかをバイナリで書き込むんですね?
でも、nanoka とかバイナリもテキストもないと思いますが
どういう仕様にしたいのでしょうか。
824名無しさん、君に決めた!:03/01/31 18:30 ID:???
サソ
アリガdゴザイマス!

おっしゃる通りでして
"nanoka"はそのままカキコで
OKであります。

32やら44をバイナリで書きこみたい
のです。

ご教授お願い致します。
825名無しさん、君に決めた!:03/01/31 18:30 ID:???
300get#300geto-
という場合はどうなんでしょう?

何にせよ、fgets で一行読み込んでから処理する方が楽な気がします。
826名無しさん、君に決めた!:03/01/31 18:30 ID:???
age
827名無しさん、君に決めた!:03/01/31 18:30 ID:???
サソ
fgetsのほうがよいですか。。。
while(fgets(buf, 256, ifp) !=NULL){
for(src=buf, dst=tmp; *src; src++){
if(*src == "#")
*dst++=*src;
}
*dst='\0';
こんな感じでいけますかねぇぇ。。。
828名無しさん、君に決めた!:03/01/31 18:31 ID:???
atoi って知ってる?
829名無しさん、君に決めた!:03/01/31 18:31 ID:???
ぬ★ぽなら知ってる
830名無しさん、君に決めた!:03/01/31 18:31 ID:???
hoge = atoi(tmp);
でしか?
831名無しさん、君に決めた!:03/01/31 18:31 ID:???
走査していって数字が見つかれば atoi、
見つからなければ1文字出力、
を続けていけばいいんじゃない?
832名無しさん、君に決めた!:03/01/31 18:32 ID:???
フセジ カコワルイ
833名無しさん、君に決めた!:03/01/31 18:32 ID:???
サソ
500ゲトの暁にそのコード書いて
くださひ。。。
もうアタマがオーヴァーヒートして
だめぽ。。。
834名無しさん、君に決めた!:03/01/31 18:32 ID:???
ヒント挙げすぎちゃったかなと思ってるくらいなのに...。
835名無しさん、君に決めた!:03/01/31 18:32 ID:???
ソウナンデスヨネェ
まだC言語触って2週間なのに・・・
こんなん漏れに与えるヤシがおかすぃ。
ほんとおながいしますっ!
836名無しさん、君に決めた!:03/01/31 18:32 ID:???
ほらよ。行数多すぎとか言われたんで入るように手を加えた。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main(int argc, char * argv[]) {
char s[512], *p;
FILE *ifp, *ofp;
if (argc != 3) {
fputs("usage: hoge <in> <out>\n", stderr);
return 0;
}
ifp = fopen(argv[1], "rb"); ofp = fopen(argv[2], "wb");
if (!ifp || !ofp) {
perror(NULL);
return 3;
}
while (fgets(s, sizeof(s), ifp)) {
if (p = strchr(s, '#')) *p = '\0';
else if (p = strchr(s, '\n')) *p = '\0';
if (isdigit(*s)) {
int i = atoi(s);
fwrite(&i, sizeof(i), 1, ofp);
}
else
fputs(s, ofp);
fputc('\n', ofp);
}
fclose(ofp); fclose(ifp);
return 0;
}
837名無しさん、君に決めた!:03/01/31 18:32 ID:???
32 行までな。
838名無しさん、君に決めた!:03/01/31 18:32 ID:???
どなたか文字列指数をdouble型へ変換する最も効率の良い方法しりませんか?

"3e-5" を 0.00003とする場合など。

お願いします!!
839名無しさん、君に決めた!:03/01/31 18:32 ID:???
double a;
sscanf("3e-5", "%g", &a)
840名無しさん、君に決めた!:03/01/31 18:32 ID:???
ものすごくあっさりできるのですね。
ちなみに反対の変換はfcvt()でOKでしょうか?
841名無しさん、君に決めた!:03/01/31 18:32 ID:???
sprintf()
842名無しさん、君に決めた!:03/01/31 18:33 ID:???
サソ・・・
ふぉんとにありがdございます。
家に着いたらそこには宝があったよー!!
(゚д゚)ウマー(゚д゚)ウマー(゚д゚)ウマー
とりあえずケコーンしてくだはい。
843名無しさん、君に決めた!:03/01/31 18:33 ID:???
あ、当方、29歳女、バツ2です。





・・・などとプロフィールを勝手に書いてみるテスト・・・
844名無しさん、君に決めた!:03/01/31 18:33 ID:???
printfをラップしたいのだが、訳あってvprintfは使えないとき、
int myprintf(const char *format, ...){
 return printf(?????);
}
こんなことは出来ないよねえ。
可変個引数をとる関数とva_listをとる関数はセットで用意しておくべき物なの?
845名無しさん、君に決めた!:03/01/31 18:33 ID:???
質問の趣旨がわからないんだけど・・・。
846名無しさん、君に決めた!:03/01/31 18:33 ID:???
29じゃ、すでに女じゃないな
847名無しさん、君に決めた!:03/01/31 18:33 ID:???
淑女です
848名無しさん、君に決めた!:03/01/31 18:33 ID:???
質問なのですが、
文字をそのままにして計算させることは可能でしょうか?たとえば、
double a=1.2, b=2.3, c, d;
d=a+b+c;
で、“d=3.5+c”と計算させたいのです。
849名無しさん、君に決めた!:03/01/31 18:33 ID:???
誰か教えてください!出来れば、leap=で始まっている2ヶ所を関数にしたいんですが、どうしたらいいでしょう?
そうじゃなくてもこれをもっと短くする方法ってありますかね?

#include <stdio.h>
main()
{
static int days_data[13]={0,31,28,31,30,31,30,31,31,30,31,30,31},Feb=28;
int i,days1,y1,m1,d1,days2,y2,m2,d2,leap,lapse,ydays;
printf("初めの年月日を入力してください : ");
scanf("%d %d %d",&y1,&m1,&d1);
printf("終りの年月日を入力してください : ");
scanf("%d %d %d",&y2,&m2,&d2);
leap=(y1%4==0 && y1%100!=0)|| y1%400==0;
days_data[2]=Feb+leap;
days1=d1;
for(i=1;i<m1;i++){
days1+=days_data[i];
}
leap=(y2%4==0 && y2%100!=0)|| y2%400==0;
days_data[2]=Feb+leap;
days2=d2;
for(i=1;i<m2;i++){
days2+=days_data[i];
}
ydays=0;
for(i=y1;i<y2;i++){
leap=(i%4==0 && i%100!=0)|| i%400==0;
ydays+=365+leap;
}
lapse=(ydays+days2)-days1;
printf("経過日数は%d日です\n",lapse);
}
850名無しさん、君に決めた!:03/01/31 18:33 ID:???
printfのラップはなかなか難しい。
ttp://swig-jp.dyndns.org/doc1314-2/Varargs.html
851名無しさん、君に決めた!:03/01/31 18:33 ID:???
一瞬ドキッとしたじゃねえかゴルァ(w
852名無しさん、君に決めた!:03/01/31 18:33 ID:???
放置??他スレで聞くYO!
853名無しさん、君に決めた!:03/01/31 18:33 ID:???
2 時間もしないうちにそれを言うか?
可能か不可能かと言われれば可能だろうけど、自分でインタープリタ作る事になるよ。
854名無しさん、君に決めた!:03/01/31 18:33 ID:???
元年1日(西暦)を1日(延べ日数)とした時の
西暦から延べ日数(i)への変換法(y=year,m=month,d=day)
if(++m<4)y--,m+=12;
i=365*y+y/4-y/100+y/400+306*m/10-428+d;
855名無しさん、君に決めた!:03/01/31 18:33 ID:???
書きこんだ時点では結構回転早そうだったので・・。
朝までにプログラム作る必要があったので急いでたのでつ。
他スレ逝って来ました。レスサンクスでした。
856名無しさん、君に決めた!:03/01/31 18:33 ID:???
そろそろテストが始まるのでage
857名無しさん、君に決めた!:03/01/31 18:33 ID:???
ヒロユキ氏ね 俺が、のスレでプロキシー奇声すんな〜
     int
      ┏━━━━━┳━━━━━┳━━━━━┳━━━━━┓
char    ┃           ┃           ┃           ┃           ┃
      ┃     1     ┃     2     ┃     3     ┃     4     ┃
      ┃           ┃           ┃           ┃           ┃
      ┠─────╂━━━━━┻━━━━━┻━━━━━┛
      ┃           ┃
      ┃     2     ┃
      ┃           ┃
      ┃     3     ┃
      ┃           ┃
      ┃     4     ┃
      ┃           ┃
      ┗━━━━━┛
       列*
      ┏━━━━━┳━━━━━┳━━━━━┳━━━━━┓
行**   ┃  [0] [0]  │  [0]  [1]  │  [0] [2]  │  [0] [3]  ┃
      ┠─────┼─────┼─────┼─────┨
       ┃           │           │           │           ┃
      ┠─────┼─────┼─────┼─────┨
       ┃           │           │           │           ┃
      ┠─────┼─────┼─────┼─────┨
       ┃           │           │           │           ┃
      ┗━━━━━┷━━━━━┷━━━━━┷━━━━━┛
 
858名無しさん、君に決めた!:03/01/31 18:33 ID:???
お前のせいでな〜大事なヒトと話できなかったんだYO!
       列*
      ┏━━━━━┳━━━━━┳━━━━━┳━━━━━┓
行**   ┃  [0] [0]  │  [0]  [1]  │  [0] [2]  │  [0] [3]  ┃
      ┠─────┼─────┼─────┼─────┨
       ┃  [1] [0]  │  [1]  [1]  │  [1] [2]  │  [1] [3]  ┃
      ┠─────┼─────┼─────┼─────┨
       ┃  [2] [1]  │  [2]  [1]  │  [2] [2]  │  [2] [3]  ┃
      ┠─────┼─────┼─────┼─────┨
       ┃  [3] [1]  │  [3]  [1]  │  [3] [2]  │  [3] [3]  ┃
      ┗━━━━━┷━━━━━┷━━━━━┷━━━━━┛




       列*
      ┏━━━━━┳━━━━━┳━━━━━┳━━━━━┓
行**   ┃  [0] [0]  │  [0]  [1]  │  [0] [2]  │  [0] [3]  ┃
      ┠─────┼─────┼─────┼─────┨
       ┃  [0] [4]  │  [0]  [5]  │  [0] [6]  │  [0] [7]  ┃
      ┠─────┼─────┼─────┼─────┨
       ┃  [0] [8]  │  [0]  [9]  │ [0] [10] │  [0] [11] ┃
      ┠─────┼─────┼─────┼─────┨
       ┃  [0] [12] │ [0] [13] │ [0] [14] │  [0] [15] ┃
      ┗━━━━━┷━━━━━┷━━━━━┷━━━━━┛

859名無しさん、君に決めた!:03/01/31 18:33 ID:???
 折れが、作ったアスキーアートだ・・・。使ってくれ
860名無しさん、君に決めた!:03/01/31 18:33 ID:???
1:事実に対して仮定を持ち出す
    「犬は子供を産むが、もし卵を生む犬がいたらどうだろうか?」
2:ごくまれな反例をとりあげる
    「だが、時として尻尾が2本ある犬が生まれることもある」
3:自分に有利な将来像を予想する
    「何年か後、犬に羽が生えないという保証は誰にもできない」
4:主観で決め付ける
    「犬自身が哺乳類であることを望むわけがない」
5:資料を示さず自論が支持されていると思わせる
    「世界では、犬は哺乳類ではないという見方が一般的だ」
6:一見関係ありそうで関係ない話を始める
    「ところで、カモノハシが卵を産むのは知っているか?」
7:陰謀であると力説する
    「それは、犬を哺乳類と認めると都合の良いアメリカが画策した陰謀だ」
8:知能障害を起こす
    「何、犬ごときにマジになってやんの、バーカバーカ」
9:自分の見解を述べずに人格批判をする
    「犬が哺乳類なんて言う奴は、社会に出てない証拠。現実をみてみろよ」
10:ありえない解決策を図る
    「結局、犬が卵を産めるようになれば良いって事だよね」
11:レッテル貼りをする
    「犬が哺乳類だなんて過去の概念にしがみつく右翼はイタイね」
12:決着した話を経緯を無視して蒸し返す
    「ところで、犬がどうやったら哺乳類の条件をみたすんだ?」
13:勝利宣言をする
    「犬が哺乳類だという論はすでに何年も前に論破されてる事なのだが」
14:細かい部分のミスを指摘し相手を無知と認識させる
    「犬って言っても大型犬から小型犬までいる。もっと勉強しろよ」
15:新しい概念が全て正しいのだとミスリードする
    「犬が哺乳類ではないと認めない限り生物学に進歩はない」
16:反論の代わりに詭弁ということにしてすます。
    「それは詭弁です。いいから詭弁なんです。」
861名無しさん、君に決めた!:03/01/31 18:33 ID:???
質問ですが、文字列

"\t\t\tABCD\t\t\t\t1234"

とあって、
char *buf1;
char *buf2;
sscanf("\t\t\tABCD\t\t\t\t1234\t\t","%s%s",buf1,buf2);

とするようなコーディングでbuf1にABCD、buf2に1234と入りますか?
他に簡単に格納する方法がありますか?
862名無しさん、君に決めた!:03/01/31 18:33 ID:???
> buf2に1234と入りますか?

試してみればわかる。
863名無しさん、君に決めた!:03/01/31 18:33 ID:???
sscanfを使う前に、mallocでも使って領域を確保しておけよ。
864名無しさん、君に決めた!:03/01/31 18:33 ID:???
今コンパイラがなく、机上でコーディング考えてるんで…。
お願いします。
865名無しさん、君に決めた!:03/01/31 18:34 ID:???
入るけど、。
866名無しさん、君に決めた!:03/01/31 18:34 ID:???
了解しました。
ありがとうございました。
867名無しさん、君に決めた!:03/01/31 18:34 ID:???
#include <stdio.h>
main()
{
int y,m;
int c[13],d[13];
long z,n,k,r;
int kara,made,i;
printf("A.D. ");
scanf("%d",&y);
printf("Month ");
scanf("%d",&m);
printf("n");
printf(" SUN");
printf(" MON");
printf(" TUE");
printf(" WED");
printf(" THU");
printf(" FRI");
printf(" SATn");

d[1]=31; d[2]=28; d[3]=31;
d[4]=30; d[5]=31; d[6]=30;
d[7]=31; d[8]=30; d[9]=30;
d[10]=31; d[11]=28; d[12]=31;

868名無しさん、君に決めた!:03/01/31 18:34 ID:???
if(((y%4==0)&&(y%100!=0))||(y%400==0))d[2]=29;
c[1]=0;
for(i=1;i<11;++i){
c[i+1]=c[i]+d[i];
}

z=y-1601;
k=z/4 - z/100 + z/400 +1;
n=365*z+k+c[m];
r=n%7;

kara = 1-r;
while(kara<=d[m]){
made=kara+6;
if (made>d[m])
made=d[m];
for (i=kara; i<=made; ++i){
if (i<=0)
printf(" ");
else
printf(" %5d",i);
}
printf("n");
kara+=7;
}
printf("nn");
}

これを修正して欲しいのですが(全部表示されない月があります)
869名無しさん、君に決めた!:03/01/31 18:34 ID:???
事故解決しました

× d[10]=31; d[11]=28; d[12]=31;
○ d[10]=31; d[11]=30; d[12]=31;
870名無しさん、君に決めた!:03/01/31 18:34 ID:???
man 2 openでopen関数について調べてみると、同名の関数がふたつ出てくるんですが、
Cでも関数のオーバーロードができるんですか?

http://www.linux.or.jp/JM/html/LDP_man-pages/man2/open.2.html
871名無しさん、君に決めた!:03/01/31 18:34 ID:???
Cでは、いわゆるオーバーロードはできません。
これは可変長引数。printfみたいな。
872名無しさん、君に決めた!:03/01/31 18:34 ID:???
あーなるほど。可変個の引数ですか。
確かにfcntl.hでは三番目は...となっていますね。
flagsによって三番目の引数があるかないか判断しているのかな。

ありがとうございました。
873名無しさん、君に決めた!:03/01/31 18:34 ID:???
超超初心者です。
あるソフトのパッチを当てるのに
バイナリデータの変更で
0000E76A: 56 3b

と書いてあるのですがどういういみですか
874名無しさん、君に決めた!:03/01/31 18:34 ID:???
本当に初心者ですね。
聞くべきスレッドを間違えるなんて。

スレ違いどころか板違いか。
875名無しさん、君に決めた!:03/01/31 18:34 ID:???
追記 
別のパッチでは 
004167: 10 00
とADRESS部分が6文字なのですが?
エデッターでどう入れればいいのでしょうか
876名無しさん、君に決めた!:03/01/31 18:34 ID:???
エデッターって何ですか?
877名無しさん、君に決めた!:03/01/31 18:34 ID:???
int main(void) {
FILE *fp;
fp = fopen("hoge", "w+b");
fseek(fp, 0x4167, SEEK_SET);
fwrite("\x10\x00", 2, 1, fp);
fclose(fp);
return 0;
}
878名無しさん、君に決めた!:03/01/31 18:34 ID:???
30歳代。
会社員だと思っていたが、5万円程度でもう納得したい。
参加するためにはクレジットカード番号を入力したが、男性(約20万円)を購入する。そして、負けだと思っていた。
入金されるゲームということもあり、軽い気持ちでは解約できないし。
インターネット上でギャンブル。
どうすればよいか。
http://www.kokusen.go.jp/jirei/data/200112_3.html
879名無しさん、君に決めた!:03/01/31 18:34 ID:???
可変個の引数を取る関数の中で、与えられた引数の個数以上に読むのはまずいですけど、
少なく読むのはかまわないですよね?
880名無しさん、君に決めた!:03/01/31 18:34 ID:???
yes
881名無しさん、君に決めた!:03/01/31 18:34 ID:???
超怒素人です。
@のexeで取得した変数アドレスを
Aのexeから入力して変数の値を取得したいのですがうまくできません。
何故でしょうか?

@---------------------------------
#include<stdio.h>
int main(void)
{
int a;
long *pnt;
printf("数値を入力して下さい:");
scanf("%d",&a);
pnt = &a;
printf("変数のアドレス:%d\n",pnt);
printf("そのアドレスに格納されている値:%d\n",*pnt);
}
A---------------------------------
#include<stdio.h>
int main(void)
{
int a;
long *pnt;
printf("変数のアドレスを入力して下さい:");
scanf("%d",&a);
pnt = a;
printf("そのアドレスに格納されている値:%d\n",*pnt);
}
882名無しさん、君に決めた!:03/01/31 18:34 ID:???
ポインタ変数の値が別プロセスで有効な保証は無い、というかまず無効
883名無しさん、君に決めた!:03/01/31 18:34 ID:???
どうしよう...共有メモリとかの概念とか
物理アドレスと仮想アドレスとかの概念を教えた方がいいのだろうか...
884名無しさん、君に決めた!:03/01/31 18:34 ID:???
そもそも何がしたいんだろう・・・
885名無しさん、君に決めた!:03/01/31 18:34 ID:???
ありがとうございました。
886名無しさん、君に決めた!:03/01/31 18:34 ID:???
"39"という文字列を39という値にしろということだと思うけど・・・
atoi、strtol、sscanf

アドレスを手動で入力させるのってかなり無理がある。
887名無しさん、君に決めた!:03/01/31 18:35 ID:???
1バイトならsscanfだと面倒か・・・intの変数に入れた後にcharの変数に入れ直さなければならないから。
888名無しさん、君に決めた!:03/01/31 18:35 ID:???
fscanf(fp, "%2d", &inum);
は、いくらなんでも冗談として、

1の質問は指示した人間にするべきかと。
余りに一般的で汎用的な言葉だけに、
その相手がどんなつもりで「パック」と言ってるかわからん。
#尤も、「おまえそんなこともわからないのか」と言われる覚悟が必要だけど。
889名無しさん、君に決めた!:03/01/31 18:35 ID:???
ありがとうございました。
890名無しさん、君に決めた!:03/01/31 18:35 ID:???
成績処理プログラムの作り方を教えてください。できれば具体的に
プログラムを書いてくださるとありがたいです。
891名無しさん、君に決めた!:03/01/31 18:35 ID:???
#include <stdlib.h>

int main(int argc, char **argv);

void getSeisekiData(void);
void calcHyouka(void);
void putKekka(void);

int
main(int argc, char **argv)
{
getSeisekiData();
calcHyouka();
putKekka();
return EXIT_SUCCESS;
}
/* それぞれの処理をこの後に書けば完成w */
892名無しさん、君に決めた!:03/01/31 18:35 ID:???
サソ
ご回答ありがdです。
話しおわらさんといてや

int ENZAN (FILE *fp,char x,char y )
{
char z;
x&=0x0F;
x<<=4;
y&=0x0F;
z=x | y;
fwrite(&z, sizeof(z),1,fp );
}
↑こんな感じの処理をパックって
言うもんだと思ってました・・・
893名無しさん、君に決めた!:03/01/31 18:35 ID:???
もっと詳しく説明してくれ。
昔にも、それBCDちゃうみたいなこといわれて、
調べ直したことがあったんだけど、
結局、どう解釈が違っているのかわからんかったんで。
894名無しさん、君に決めた!:03/01/31 18:35 ID:???
>>565
ありがとうございます。
895名無しさん、君に決めた!:03/01/31 18:35 ID:???
二桁で8bit、それに符号4bit、併せて12bit。
違うかな。
896名無しさん、君に決めた!:03/01/31 18:35 ID:???
=562
1バイトにパックってことだから、符合は考慮しないんでないの?
#寡聞にして、符号付BCDの実例を知らないんだけど。
897名無しさん、君に決めた!:03/01/31 18:35 ID:???
/* 取り敢えず、こんなもんでどうでしょ。 */
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char**argv);
int
main(int argc, char **argv)
{
int count[256];
int ch;

while (ch = getc() != EOF) {
count[ch]++;
}
/* 問題は出力方法 */
return EXIT_SUCCESS;
}
898名無しさん、君に決めた!:03/01/31 18:35 ID:???
配列の0での初期化は?
899名無しさん、君に決めた!:03/01/31 18:35 ID:???
GUIアプリケーションをLinuxで開発したいと思うんですが、
どんなライブラリを使えばいいんでしょうか?
どれがお勧めのライブラリなんでしょうか?
900名無しさん、君に決めた!:03/01/31 18:35 ID:???
を読んでないだろ。
901名無しさん、君に決めた!:03/01/31 18:35 ID:???
スマソ。別スレに逝きます・・・
902名無しさん、君に決めた!:03/01/31 18:35 ID:???
出力方法はこんなんでどうでしょ。

for (i = 0; i < 256; i++) {
 if (isprint(i)) {
  printf("%c: %d", i, count[i]);
 }
}
903名無しさん、君に決めた!:03/01/31 18:35 ID:???
改行しないと醜いかと。
904名無しさん、君に決めた!:03/01/31 18:35 ID:???
今ユーザー関数作成で困っております。
仕様:テキストファイルを読み込み
行数毎に異なった処理を行い
バッファにぶちこむ。

for(cnt=1; (fgets(tmp,256,ipt_fp)); cnt++)
上記のようにすれば行数は数えることが
可能ですよね?
int cntに代入された数値を利用し
switch (cnt){
case 1:
printf("(゚д゚)ウマー\n");
break;
case 2:
printf("(・A・)イクナイ\n");
break;
といった感じにしたのですが
cntを関数に引数で渡すにはどのように
すればよろしいのでしょうか?
初心者でご迷惑お掛けいたしますが
ご教授お願いいたします。
905名無しさん、君に決めた!:03/01/31 18:36 ID:???
関数の定義の仕方がわからんということか?

void uma(int cnt) {
 switch (cnt){
 case 1:
  printf("(゚д゚)ウマー\n");
  break;
 case 2:
  printf("(・A・)イクナイ\n");
  break;
 }
}

とか定義しといて

for(cnt=1; (fgets(tmp,256,ipt_fp)); cnt++) {
 uma(cnt);
}

でいいんじゃないの。それともこういうことじゃない?
 
906名無しさん、君に決めた!:03/01/31 18:36 ID:???
さん
ありがとーございます!
なるほど、こうやって定義するんですねぇ。
勉強になります。

cntが1だったら
(゚д゚)ウマーが出力されるのか。
すげー。関数すげー。
関数(゚д゚)ウマー
907名無しさん、君に決めた!:03/01/31 18:36 ID:???
forを
for(cnt=1; (fgets(tmp,256,ipt_fp)); cnt++)
という形で使えるやつが、

な ん で 関 数 定 義 が わ か ら な い ん だ ? !
908名無しさん、君に決めた!:03/01/31 18:36 ID:???
for は極めたが関数定義はまだ習っていないか理解が不十分。
で充分説明つくじゃないか。
909名無しさん、君に決めた!:03/01/31 18:36 ID:???
BASICからCに入ったので、(自分で定義する)関数というものを知らなかったに100ペリカ
したがって、mainはおまじないで、main以外の関数は一切なし。
しかもgotoを多用したスパゲッティプログラムだ!
910名無しさん、君に決めた!:03/01/31 18:36 ID:???
Cから始めたけど、2000行程度なら関数はmainだけにするYO!
911名無しさん、君に決めた!:03/01/31 18:36 ID:???
逝ってよし。
912名無しさん、君に決めた!:03/01/31 18:36 ID:???
そんな義理なし。
913名無しさん、君に決めた!:03/01/31 18:36 ID:???
義理チョコしかもらえないんですか
914名無しさん、君に決めた!:03/01/31 18:36 ID:???
義理チョコももらえませんが何か?
915名無しさん、君に決めた!:03/01/31 18:36 ID:???
。・゚・(ノД`)・゚・。
916名無しさん、君に決めた!:03/01/31 18:36 ID:???
int main(){
  //略
  return 0;
}

この最後に返してる0ってなんに使うの?
子プロセスとしてプログラム動かしたら
wait(&state)とかでstateに入る数値になるの?
917名無しさん、君に決めた!:03/01/31 18:36 ID:???
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問してYO!
むしろ質問する前にWEBで検索するのが常識だYO!

GUIなどの標準Cではできない事の質問は使用している開発環境のスレへ行ってYO!
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへ行ってYO!

コンパイラを探しているなら を見てYO!

上記を逸した場合の結果は激しく未定義とするYO!

C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/

前スレだYO!
http://pc3.2ch.net/test/read.cgi/tech/1041127646/
918名無しさん、君に決めた!:03/01/31 18:36 ID:???
( ゜Д゜)ポカーン・・・
919名無しさん、君に決めた!:03/01/31 18:36 ID:???
      __     
     l⊆⊇`ヽ ≡ ヤホー----イ
     (´ァョLノ ≡   
    m=○=mノ) ≡ もうスレ立ってた気がしる〜
    _/_/(「_ノニコ ≡
     ( (0)=(__)0) ≡(´⌒(´⌒;;
920名無しさん、君に決めた!:03/01/31 18:36 ID:???
立てる前に確認しませう
http://pc3.2ch.net/test/read.cgi/tech/1042640474/l50
つーわけでは削除依頼だすやうに
921名無しさん、君に決めた!:03/01/31 18:36 ID:???
スレ立てたのなら現行スレに報告しろよ
922名無しさん、君に決めた!:03/01/31 18:36 ID:???
それは立てた香具師に言ってくれ
923名無しさん、君に決めた!:03/01/31 18:36 ID:???
sss
924名無しさん、君に決めた!:03/01/31 18:37 ID:???
=6
おまえのチェックミスを棚に上げんな
925名無しさん、君に決めた!:03/01/31 18:37 ID:???
禿同。はアフォ。早く削除依頼しなさい。
926名無しさん、君に決めた!:03/01/31 18:37 ID:???
=10
自作自演でした。テヘッ
927名無しさん、君に決めた!:03/01/31 18:37 ID:???
自作自演でした。
928名無しさん、君に決めた!:03/01/31 18:37 ID:???
見ればわかります
929名無しさん、君に決めた!:03/01/31 18:37 ID:???
void func(char **);

main()
{
char a[100][100];

func(a);

return 0;
}

void func(char **a)
{
}

↑のようにやったらプログラムが暴走したんですが
対処法はいかに?
930名無しさん、君に決めた!:03/01/31 18:37 ID:???
void func(char a[][100])
931名無しさん、君に決めた!:03/01/31 18:37 ID:???
932名無しさん、君に決めた!:03/01/31 18:37 ID:???
PHP
933名無しさん、君に決めた!:03/01/31 18:37 ID:???
int a = 4.3;
abs(3.5);
とかのミスってlintで検出できますか?
934名無しさん、君に決めた!:03/01/31 18:37 ID:???
まあ、当然のことですけど
C++
935名無しさん、君に決めた!:03/01/31 18:37 ID:???
936名無しさん、君に決めた!:03/01/31 18:37 ID:???
C言語の感覚で書かれたC++はクソコード
937名無しさん、君に決めた!:03/01/31 18:37 ID:???
誰もそんなことは聞いていない。
938名無しさん、君に決めた!:03/01/31 18:37 ID:???
C++はオブジェクト指向なのになんでCが応用できるのかと小一時間(略
939名無しさん、君に決めた!:03/01/31 18:37 ID:???
逆にCに応用できる言語は何ですか?
940名無しさん、君に決めた!:03/01/31 18:37 ID:???
awk
941名無しさん、君に決めた!:03/01/31 18:37 ID:???
C++
942名無しさん、君に決めた!:03/01/31 18:37 ID:???
C++言語の感覚で書かれたCはクソコード
943名無しさん、君に決めた!:03/01/31 18:37 ID:???
誰もそんなことは聞いていない。
944名無しさん、君に決めた!:03/01/31 18:38 ID:???
結局、CとC++は、繰り返しや比較などが同じなだけであって
設計方法は全然違うわけだな。
945名無しさん、君に決めた!:03/01/31 18:38 ID:???
ありがとう。でもそこに書いてあることをほとんど
やってくれなかった。
946名無しさん、君に決めた!:03/01/31 18:38 ID:???
質問!!
C言語ってDVDなどにあるプロテクトもC言語に一種ですか?
947名無しさん、君に決めた!:03/01/31 18:38 ID:???
教えてください

Cでsnprintfを自作することになりました。
参考になる資料とかありましたら教えてください。
フリーで使えるソースが何処かに落ちていると良いのですが。
948名無しさん、君に決めた!:03/01/31 18:38 ID:???
VC++ならCRT\SRCフォルダに。
949名無しさん、君に決めた!:03/01/31 18:38 ID:???
レスどうもです。
VC++見てみたのですが、うーん難しい事してるんですね。
FILEポインタの中身なんて、いじった事無いです。
これprintf系で汎用的に使う為にこんな感じで実装してるのかなー?
そのまま使いたいところだけど、多分ライセンスで引っかかりそう・・・
950名無しさん、君に決めた!:03/01/31 18:38 ID:???
951名無しさん、君に決めた!:03/01/31 18:38 ID:???
マルチいくない!
952名無しさん、君に決めた!:03/01/31 18:38 ID:???
つーか、なんで...

> Cでsnprintfを自作することになりました。

なんてことやってんの ?
953名無しさん、君に決めた!:03/01/31 18:38 ID:???
win上でgccを使っているのですが、
*.libのファイルを*.oなんかに変換できますか?
954名無しさん、君に決めた!:03/01/31 18:38 ID:???
別に *.lib のままでいいのでは?
何か不都合でもあるのん?
955名無しさん、君に決めた!:03/01/31 18:38 ID:???
お答えありがとうございます。
ファイルフォーマットが認識されない、といわれたので。
単に対応していないだけなのでしょうね。
まあ、至急必要なものでもないですし。。。
956名無しさん、君に決めた!:03/01/31 18:38 ID:???
あ、すまん。
*.a じゃなくて *.lib か。
なるほど。
分離ってできたっけかな...。
957名無しさん、君に決めた!:03/01/31 18:38 ID:???
win 上の gcc とは何者で、その *.lib はどっから持ってきたものかを書けよ。
958名無しさん、君に決めた!:03/01/31 18:38 ID:???
これからC言語を始めてみようという初心者です。
LSI CってのをDLしてみたんですが、使い方がよく分かりません。
参考書買ってみたんですが動かし方については詳しく載ってませんでした。
どなたか詳しく教えていただけませんか?
959名無しさん、君に決めた!:03/01/31 18:38 ID:???
lsc ファイル名
以上
960名無しさん、君に決めた!:03/01/31 18:38 ID:???
ごめん、うそ>46
lcc ファイル名
lcc.exeにちゃんとパスを通すこと
あと、_lccも自分の環境に合わせて編集すること
あとは、read.me読めば書いてるよ
961名無しさん、君に決めた!:03/01/31 18:38 ID:???
えっと・・・
まだよくわからないんですが、
MS-DOSを開きますよね。
lcc filename
しますよね。
次は何をすれば動きますか?
962名無しさん、君に決めた!:03/01/31 18:39 ID:???
エラーメッセージが出なければ、もう何もしなくていい。
963名無しさん、君に決めた!:03/01/31 18:39 ID:???
やりかたは分かったんですが、
コマンドまたはファイル名が正しくありません
とでます。
どうすればいいですか?
しつこくてすいません。。。
964名無しさん、君に決めた!:03/01/31 18:39 ID:???
MS-DOSのコマンドラインから

SET PATH=%PATH%***

と入力して

lcc filename

としてみてください。***の部分はパス名(C:\...\LCC\BIN;)です。
ちなみにBINはBINARY(二進)の略で実行可能ファイルが入ったフォルダの
名前として常識です。わかりましたか?
965名無しさん、君に決めた!:03/01/31 18:39 ID:???
51ですが追伸です。参考になればいいのですが、_lccファイルです。

# LSI C-86 compiler's configuration file

-DLSI_C
-XC:\LSIC330C\BIN -LC:\LSIC330C\LIB -IC:\LSIC330C\INCLUDE -T -O
-acdos.obj $LSICOPTS
?Command line argument will be inserted here
-lknjlib -ldoslib -v
966名無しさん、君に決めた!:03/01/31 18:39 ID:???
うぜぇ
Cそのものとは関係ねえ事書くな
967名無しさん、君に決めた!:03/01/31 18:39 ID:???

    ∧ ∧___  ダッコ♪
   /(*゚ー゚) /\
 /| ̄∪∪ ̄|\/
   |        |/
     ̄ ̄ ̄ ̄

968名無しさん、君に決めた!:03/01/31 18:39 ID:???
大人しくしていなさい。
969名無しさん、君に決めた!:03/01/31 18:39 ID:???
セグメンテーション違反ですってなんですか?
970名無しさん、君に決めた!:03/01/31 18:39 ID:???
変なとこに書き込んだりしたときに良く出る。
971名無しさん、君に決めた!:03/01/31 18:39 ID:???
どこが間違ってるのかさっぱりわからんです...
972名無しさん、君に決めた!:03/01/31 18:39 ID:???
変なとこをかいたりしたときに良く出る。
973名無しさん、君に決めた!:03/01/31 18:39 ID:???
セグメンテーション違反は一番良く見るバグだと思うので、
頑張って間違った箇所を探しませう。

・配列の添え字が変な位置を指しているかどうか
・ポインタの扱いが間違っているかどうか

の2箇所を重点的に調べましょう。
974名無しさん、君に決めた!:03/01/31 18:39 ID:???
それはコアダンプ。
975名無しさん、君に決めた!:03/01/31 18:39 ID:???
ありがとうございます。
がんばって探してみます。
卒論間に合うか不安。。。
976名無しさん、君に決めた!:03/01/31 18:39 ID:???
・・・デバッガ使えよ・・・
977名無しさん、君に決めた!:03/01/31 18:39 ID:???
!?そ..それはいったい....?
emacsとかについてるやつですか?
978名無しさん、君に決めた!:03/01/31 18:39 ID:???
gdbとか
979名無しさん、君に決めた!:03/01/31 18:39 ID:???
emacs見てみたらgdbなるものを発見いたしました!
しかし英語表記のため使いかたがいまいちわからぬ。
調べてみます。。。
980名無しさん、君に決めた!:03/01/31 18:39 ID:???
memsetでdouble型の配列の値を全てdouble x;
にすることはできますか?
981名無しさん、君に決めた!:03/01/31 18:39 ID:???
できない。
982名無しさん、君に決めた!:03/01/31 18:39 ID:???
了解!!
983名無しさん、君に決めた!:03/01/31 18:39 ID:???
デバッガという言葉も知らない奴が卒論までにgdbを使えるわけがない。
984名無しさん、君に決めた!:03/01/31 18:39 ID:???
デバッガgdbの簡単な使い方。

まずプログラム作成 hoge.c
#include <stdio.h>

main(){
int *a = NULL;
*a = 0;
}


コンパイル時に -g オプションをつける
gcc -g -o hoge hoge.c
実行プログラムをgdbの引数に指定
gdb hoge

gdbのプロンプトが出たらrunを実行
(gdb) run
フォールトエラーなどが出たら、理由と場所を教えてくれる。
Program received signal SIGSEGV, Segmentation fault.
0x8048468 in main () at hoge.c:5
5 *a = 0;

終了するときはquit
(gdb) quit
985名無しさん、君に決めた!:03/01/31 18:39 ID:???
初歩的な質問で申し訳ない。

ファイルからコンソール画面に一行一行読み込んで表示するという、
超基本的なプログラムを書いてみました。
そこで質問なのですが、今のままでは、改行は何も表示されない空白で表されますよね。
この改行部分に「----ここは改行です-----」といったメッセージを表示したいのですが、
どうすればいんでしょう?とりあえず自分が書いたものを↓に。

#include <stdio.h>
void main(){

  FILE *fp;
  char a[20];
  fp = fopen("text.txt" ,"r");

  do{
    if (fgets(a ,20 ,fp) == NULL){
      printf("//////終わりです//////\n" );
      break;
    }else{
      if (a == ""){ ★★★問題の箇所です
        printf("-----ここは改行です-----");
        printf("%s\n" ,a);
      }else
        printf("%s\n" ,a);
      }
  }while(1);
    fclose(fp);
    return;
}
986名無しさん、君に決めた!:03/01/31 18:39 ID:???
if(a=="") を if(*a=='\0') に変更すればいいのでは?
987名無しさん、君に決めた!:03/01/31 18:39 ID:???
まず、fgets() って読み込んだ改行をそのまま a[] に入れちゃうから、

printf("%s\n", a) なんてやると、一行毎に空行が入るけどいいの ?

あと、要件として行が改行のみなら、"----ここは改行です-----" と表示すると言うのなら、でいいけど、「何も表示されない空白」の代わりに"----ここは改行です-----" と表示すると言うなら、ちょっと難しいぞ。
988名無しさん、君に決めた!:03/01/31 18:40 ID:???
if (strlen(a))
a[strlen(a) - 1] = '\0';

ってのを付け加えた方がいいかも。
989名無しさん、君に決めた!:03/01/31 18:40 ID:???
if (strcmp(a, "\n") == 0)
にすればええんでない?
まぁ簡単に
if (a[0] == '\n')
でもいいか。

あとは
・改行の場合はわざわざ a を表示しようとする必要は無い
・do-while じゃなくて、while 内で fgets を使ったので構わない。
・fp が NULL かどうかのチェックは入れる癖をつけておくが吉。
・最後の行にのみ改行が無い場合があることを考慮するべし。
ってとこでしょうか。
990名無しさん、君に決めた!:03/01/31 18:40 ID:???
#include <stdio.h>
int main()
{
 FILE *fp = fopen("text.txt", "r");
 char a[20];

 while (fgets(a, 20, fp) != NULL) {
  if (a[0]=='\n')
   printf("-----ここは改行です-----\n");
  else
   printf(a);
 }
 printf("//////終わりです//////\n" );
 fclose(fp);
 return 0;
}
991名無しさん、君に決めた!:03/01/31 18:40 ID:???
printf(a); と printf("%s", a); は違う。
992名無しさん、君に決めた!:03/01/31 18:40 ID:???
> printf("%s", a)

漏れは fputs(a, stdout) のが好きだ。
993名無しさん、君に決めた!:03/01/31 18:40 ID:???
72です!皆さんのご指摘でうまく動くようになりました。
質問の箇所だけではなく、他の様々な部分まで指摘してもらって、感謝してます。
判定文ごとwhileの中に入れろとか、さんの19文字ジャストでおかしくなる・・・とかの話は、
読みながらハタと手を打ってしまいました。

速度面で有利とか、エラーでにくいとか、そういったことが何かあるんですかね?
単に好みの問題でしょうか。
994名無しさん、君に決めた!:03/01/31 18:40 ID:???
速度は大抵fputsのほうが速いだろう。
必ずじゃないけど。
995名無しさん、君に決めた!:03/01/31 18:40 ID:???
教えてください!
return (
x1 >= x2+width2 || x1+width1 <= x2 ||
y1 >= y2+height2 || y1+height1 <= y2
) ? false : true;
ってどういうことですか??
996名無しさん、君に決めた!:03/01/31 18:40 ID:???
if(x1 >= x2 + width2) return false;
if(x1 + width1 <= x2) return false;
if(y1 >= y2 + height2) return false;
if(y1 + height1 <= y2) return false;
return true;

と同じだよ。多分2つの領域の重なり判定と思う。

997名無しさん、君に決めた!:03/01/31 18:40 ID:???
ふむふむ
確かゲーム系で、当たり判定のところっぽい関数だったからそうなのかも!
「||」って、「OR」だったと思うのですが、三項演算子って順々に判定してfalseやtureを返すんですか?
なんか質問部分がわかりにくいーー・・・
998名無しさん、君に決めた!:03/01/31 18:40 ID:???
> 三項演算子って順々に判定してfalseやtureを返すんですか?

三項演算子 xxx ? yyy : zzz は、単に xxx の値の真/偽によって yyy か zzz を返すだけ。

順々に判定するのは、|| (論理 OR 演算子) の方。

xxx || yyy は、xxx が真なら yyy を実行しないで 真 を返す。
(短絡演算で、ググッてくれ。)
999名無しさん、君に決めた!:03/01/31 18:40 ID:???
ありがとう!ググってきましたー。なるほど。よくわかりました
お世話になりました!
1000名無しさん、君に決めた!:03/01/31 18:40 ID:???
Cで書いたプログラムなんですが、コンパイルは通るのに実行するとエラーが起こります。
デバッグ(と呼んでいいのかどうか分かりませんが)したいのですが、
どのように行うのでしょうか。
コンパイラはgccをMS-DOS上(MinGW)で使っています。