【初心者歓迎】C/C++室 Ver.40【環境依存OK】

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:2007/08/06(月) 00:39:39
普通の使い方なら充分なくらいのバッファはあるはず・・・
10文字程度で満杯とかそんなことはまずない。
953デフォルトの名無しさん:2007/08/06(月) 00:45:25
ストリーム入出力ってのは、バッファリングされる入出力のことだ。
954デフォルトの名無しさん:2007/08/06(月) 03:34:18
すみません質問させてください。
txtファイルから、例えば40.123/42.591/43.569という文字列を読み込んで、
真中の42.591だけを数値として変数に格納したいのですが、
どうにも巧い方法が思いつきませんorz
何卒お力をお貸し頂けますようお願い致します。
955909:2007/08/06(月) 03:35:24
     / ̄ ̄ ̄ ̄\
   / ( ( (  ) .) )\
  / ( ( / ̄ ̄ ̄”\ .) )
  / ( ( |.        | ) )
  ( ( (  |   \ハ/ | ) )
  ( ( (  |  ゚ ̄ 〈 ゚ ̄ | ) )
  ( ( (  |      >   | ) )
  (. ( (  |    /へ)  /  ) )
  \_/|\   ー //\/
  / ̄ ̄\ ゛ーー/ ̄ ̄\
./     \ ̄ ̄ ”/     \
|       ●|・|  ||/       |
|   |    ●|・|  ||/       |
|   \_ ●|・|   ||/       |
.\   》||つ【♪1076】___/
956デフォルトの名無しさん:2007/08/06(月) 03:40:07
>>954
C なのか C++ なのか、まずはそれからだ。
957954:2007/08/06(月) 03:41:45
ごめんなさい、Cでお願いします。
後、sage禁止だったのですね。重ね重ねすみませんorz
958デフォルトの名無しさん:2007/08/06(月) 03:49:30
自己判断で
~~~~~~~~~~~~
寧ろage禁止
959デフォルトの名無しさん:2007/08/06(月) 03:50:58
sage禁止とはなんという斬新なルールなのか
960954:2007/08/06(月) 04:01:48
すみません、以後下げるようにしますorz
961デフォルトの名無しさん:2007/08/06(月) 04:22:28
どっちでもいいよ。自分で判断しる。
962デフォルトの名無しさん:2007/08/06(月) 04:28:03
>>957
いろいろ方法はある。

scanf 系関数を使うなら、
%*f のように書式に * を挟むことで
変数に格納しなくなるようにできるのを利用するとか。

あとは1行取得して、
それを strtok で "/" をデリミタにして処理した2番目の文字列を atof するとか。
strtok を使うのが気持ち悪いなら strchr を使ってもいいかもしんない。
963957:2007/08/06(月) 04:48:30
了解です、状況で判断しますorz

>>962
ご解答頂きありがとうございます。
教えていただいた通り、今回はstrtokを使ってみたいと思います。
%*fという表記は知らなかったので勉強になりました。
本当にどうもありがとうございましたm(_ _)m
また皆様のお力をお借りすることがあるかと思いますが、その時はどうぞよろしくお願い致します。
964デフォルトの名無しさん:2007/08/06(月) 04:52:45
strtok()は癖が強すぎるのでお勧めしない。
scanf()でフォーマットを'%*f/%f/%*f"にしてはいけないのか?
965957:2007/08/06(月) 05:55:20
>>964
strtok()は癖が強いのですか。
strtok()を使ったことが無かったので使ってみようかと思ったのですが、
そういうことであれば素直に%*fを使ってみたいと思います。
アドバイスありがとうございましたm(_ _)m
966デフォルトの名無しさん:2007/08/06(月) 05:56:20
test
967デフォルトの名無しさん:2007/08/06(月) 08:26:44
for(int i=0;i<n1;i++) {                          ←ここに飛びたい場合どうするのが一般的でしょうか?
  // 処理                            ↑
    for(int j=0;j<n2;j++) {                      ↑
        if (a[j] == b)    // 条件が成立したらループを抜けて↑
    }
    //処理
}
968デフォルトの名無しさん:2007/08/06(月) 08:35:09
>>967
つ[goto]

まぁ、アルゴリズムを見直してbreakだな。
969デフォルトの名無しさん:2007/08/06(月) 10:36:46
中のループをboolを返す関数にしてしまって
trueだったらcontinueとかね
970デフォルトの名無しさん:2007/08/06(月) 12:31:43
void f()
{
static char *theTxt;

strcpy(theTxt,"TEST¥n");
printf("%s",theTxt);
}
これってtheTxt;がstaticでnull初期化されているから
駄目なんですか?
971デフォルトの名無しさん:2007/08/06(月) 12:38:10
>>970
theTxtはポインタ。
strcpyはポインタの指すアドレスにデータをコピーする関数。

問題は、theTxtがどこも指していないこと。
mallocで確保するとか、配列にするとか、データの領域をまず用意
972デフォルトの名無しさん:2007/08/06(月) 12:39:01
どこも指してない、つーかNULLで初期化されてっからアドレス0を指してる、とも言えるか。
まあ同じだけど。
973デフォルトの名無しさん:2007/08/06(月) 12:41:58
理解出来ました。
有り難うございます
974デフォルトの名無しさん:2007/08/06(月) 13:35:12
>>972
>アドレス0を指してる、とも言えるか。
いえない。
因みに、初期化されていないポインタは
「何処を指しているかわからない」
975デフォルトの名無しさん:2007/08/06(月) 13:35:58
>>974
staticがついてると0に初期化される
976デフォルトの名無しさん:2007/08/06(月) 13:36:57
static だから = 0 で初期化されている。
ただ、アドレス 0 だとは限らない。
977デフォルトの名無しさん:2007/08/06(月) 13:40:29
もうヌルポインタが0じゃない話はいいから
978デフォルトの名無しさん:2007/08/06(月) 13:57:16
>>977
「ぬるぽはどこも指していない話」じゃないのか?
979デフォルトの名無しさん:2007/08/06(月) 14:04:28
NULLが0なんじゃない、0がNULLなんだよ。
980デフォルトの名無しさん:2007/08/06(月) 15:01:18
        ぬるぽ! ぬるぽ!
    ぬるぽ! ぬるぽ!  ぬるぽ!
  ぬるぽ!  ∩   ∩ ノ)   ぬるぽ!
 ぬるぽ!   川 ∩ 川彡'三つ  ぬるぽ!
ぬるぽ!  ⊂ミ∩、⊂ミ∩彡⊃    ぬるぽ!
ぬるぽ! ⊂三ミ( ゚∀゚)彡三彡三⊃ ぬるぽ!
ぬるぽ!  ⊂彡川⊂彡川ミ⊃    ぬるぽ!
ぬるぽ! ⊂彡川∪⊃ U川彡⊃   ぬるぽ!
 ぬるぽ!  (ノ ∪  川 ∪ミ)  ぬるぽ!
  ぬるぽ!       ∪     ぬるぽ!
    ぬるぽ!  ぬるぽ!  ぬるぽ!
       ぬるぽ!  ぬるぽ!
           ぬるぽ!
981デフォルトの名無しさん:2007/08/06(月) 21:47:18
#define NULL ぬるぽ
#define 0 NULL
982デフォルトの名無しさん:2007/08/06(月) 22:40:13
fopenやifstreamがどういう処理をしているか気になります。
遠回しにAPIを呼んでたりするんですか?
983デフォルトの名無しさん:2007/08/06(月) 22:47:34
そりゃシステムコール呼ばないとファイル開けまへんがな(´・ω・`)
そこらのOS毎の差異を吸収するのも標準ライブラリの役目
984デフォルトの名無しさん:2007/08/06(月) 22:48:24
そう。 遠まわしに、WindowsならCreateFileとかのAPIを呼んでる。
985デフォルトの名無しさん:2007/08/06(月) 22:51:22
まー結局、細部まで一致しないからWINDOWS API使うのが賢い
かなり単純なものでないとCのみでしょり出来ないからな
986デフォルトの名無しさん:2007/08/06(月) 22:53:31
×>>972,>>974
>>976

C言語の仕様によれば、staticな変数は『定数ゼロ』(K&R第2版)で初期化される。
だから
static char *theTxt;
は、
static char *theTxt = 0;
と置き換える。
ここで、定数ゼロは整数型に代入されれば整数0であり、ポインタに代入されればヌルポインタになる。
ヌルポインタは、(アドレス0を指す処理系もあるかもしれないが、)
『どこも指していないポインタ』が正解。実際のbit列がゼロの連続とも限らない。

従って、ヌルポインタはprintf()の引数として処理できない。

ちなみに、『ぬるぽ』はNullPointerExceptionの略で、ヌルポインタではない。
987デフォルトの名無しさん:2007/08/06(月) 22:54:54
BCCで書いているのですが、突然ファイルオープンができなくなりました。
#include<stdio.h>

main(void){
int i,j,k,t;
int No1,No2;
int Rs[3500][20],Hn[3500]={0};
double u,x,y;
double Odds[3500][20],Poll[3500][20],Poll_S[3500][20],Poll_T[3500][20];
FILE *fpr,*fpw;
fpr=fopen("horse.txt","r");
fpw=fopen("r.txt","w");
while(fscanf(fpr,"%d %d %lf %d",&No1,&No2,&u,&k)!=EOF){
Odds[No1][No2-1]=u;
Rs[No1][No2-1]=k;
Poll[No1][No2-1]=0.788/(u-1.0);
Hn[No1]++;
Poll_T[No1][No2]=0;
Poll_S[No1][No2]=0;
}
何か問題はありますか?教えてください。
988gotoです:2007/08/06(月) 22:55:51
たまには私を思い出してください。
ほら、try-catch句がなかったあの頃を思い出してください・・・
989デフォルトの名無しさん:2007/08/06(月) 22:58:45
>>987
釣り?
990デフォルトの名無しさん:2007/08/06(月) 23:02:37
マジです
991デフォルトの名無しさん:2007/08/06(月) 23:03:22
>>987
とりあえずmainの'{'に対応する'}'と、fcloseが足りない。
992987:2007/08/06(月) 23:07:22
すみません。
ソースが長いので省略しています。
コンパイルエラーはないんですが
テキストファイルが読み込めないんです。
993デフォルトの名無しさん:2007/08/06(月) 23:09:38
>>993
実行方法は?
まさか、カレントディレクトリにファイルがないって落ちじゃないよな?
994デフォルトの名無しさん:2007/08/06(月) 23:10:31
horse.txtが無いんじゃね?
995デフォルトの名無しさん:2007/08/06(月) 23:11:32
errno調べてみ
996987:2007/08/06(月) 23:16:06
horse.txtはあります。
今まで動いていたプログラムもファイルが開かなくなりました。
ライトファイルはできます。
997デフォルトの名無しさん:2007/08/06(月) 23:18:07
どっか別のアプリケーションがファイルを開いてるんじゃない?
アプリケーションを全部終了するか、最悪OS再起動したら直るんじゃないかね。
998987:2007/08/06(月) 23:19:45
と思って再起動したんですが直りませんでした。
999デフォルトの名無しさん:2007/08/06(月) 23:22:17
errno !!!
1000デフォルトの名無しさん:2007/08/06(月) 23:26:49
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。