【初心者歓迎】C/C++室 Ver.40【環境依存OK】
普通の使い方なら充分なくらいのバッファはあるはず・・・
10文字程度で満杯とかそんなことはまずない。
ストリーム入出力ってのは、バッファリングされる入出力のことだ。
すみません質問させてください。
txtファイルから、例えば40.123/42.591/43.569という文字列を読み込んで、
真中の42.591だけを数値として変数に格納したいのですが、
どうにも巧い方法が思いつきませんorz
何卒お力をお貸し頂けますようお願い致します。
955 :
909:2007/08/06(月) 03:35:24
/ ̄ ̄ ̄ ̄\
/ ( ( ( ) .) )\
/ ( ( / ̄ ̄ ̄”\ .) )
/ ( ( |. | ) )
( ( ( | \ハ/ | ) )
( ( ( | ゚ ̄ 〈 ゚ ̄ | ) )
( ( ( | > | ) )
(. ( ( | /へ) / ) )
\_/|\ ー //\/
/ ̄ ̄\ ゛ーー/ ̄ ̄\
./ \ ̄ ̄ ”/ \
| ●|・| ||/ |
| | ●|・| ||/ |
| \_ ●|・| ||/ |
.\ 》||つ【♪1076】___/
>>954 C なのか C++ なのか、まずはそれからだ。
957 :
954:2007/08/06(月) 03:41:45
ごめんなさい、Cでお願いします。
後、sage禁止だったのですね。重ね重ねすみませんorz
自己判断で
~~~~~~~~~~~~
寧ろage禁止
sage禁止とはなんという斬新なルールなのか
960 :
954:2007/08/06(月) 04:01:48
すみません、以後下げるようにしますorz
どっちでもいいよ。自分で判断しる。
>>957 いろいろ方法はある。
scanf 系関数を使うなら、
%*f のように書式に * を挟むことで
変数に格納しなくなるようにできるのを利用するとか。
あとは1行取得して、
それを strtok で "/" をデリミタにして処理した2番目の文字列を atof するとか。
strtok を使うのが気持ち悪いなら strchr を使ってもいいかもしんない。
963 :
957:2007/08/06(月) 04:48:30
了解です、状況で判断しますorz
>>962 ご解答頂きありがとうございます。
教えていただいた通り、今回はstrtokを使ってみたいと思います。
%*fという表記は知らなかったので勉強になりました。
本当にどうもありがとうございましたm(_ _)m
また皆様のお力をお借りすることがあるかと思いますが、その時はどうぞよろしくお願い致します。
strtok()は癖が強すぎるのでお勧めしない。
scanf()でフォーマットを'%*f/%f/%*f"にしてはいけないのか?
965 :
957:2007/08/06(月) 05:55:20
>>964 strtok()は癖が強いのですか。
strtok()を使ったことが無かったので使ってみようかと思ったのですが、
そういうことであれば素直に%*fを使ってみたいと思います。
アドバイスありがとうございましたm(_ _)m
test
for(int i=0;i<n1;i++) { ←ここに飛びたい場合どうするのが一般的でしょうか?
// 処理 ↑
for(int j=0;j<n2;j++) { ↑
if (a[j] == b) // 条件が成立したらループを抜けて↑
}
//処理
}
>>967 つ[goto]
まぁ、アルゴリズムを見直してbreakだな。
中のループをboolを返す関数にしてしまって
trueだったらcontinueとかね
void f()
{
static char *theTxt;
strcpy(theTxt,"TEST¥n");
printf("%s",theTxt);
}
これってtheTxt;がstaticでnull初期化されているから
駄目なんですか?
>>970 theTxtはポインタ。
strcpyはポインタの指すアドレスにデータをコピーする関数。
問題は、theTxtがどこも指していないこと。
mallocで確保するとか、配列にするとか、データの領域をまず用意
どこも指してない、つーかNULLで初期化されてっからアドレス0を指してる、とも言えるか。
まあ同じだけど。
理解出来ました。
有り難うございます
>>972 >アドレス0を指してる、とも言えるか。
いえない。
因みに、初期化されていないポインタは
「何処を指しているかわからない」
>>974 staticがついてると0に初期化される
static だから = 0 で初期化されている。
ただ、アドレス 0 だとは限らない。
もうヌルポインタが0じゃない話はいいから
>>977 「ぬるぽはどこも指していない話」じゃないのか?
NULLが0なんじゃない、0がNULLなんだよ。
ぬるぽ! ぬるぽ!
ぬるぽ! ぬるぽ! ぬるぽ!
ぬるぽ! ∩ ∩ ノ) ぬるぽ!
ぬるぽ! 川 ∩ 川彡'三つ ぬるぽ!
ぬるぽ! ⊂ミ∩、⊂ミ∩彡⊃ ぬるぽ!
ぬるぽ! ⊂三ミ( ゚∀゚)彡三彡三⊃ ぬるぽ!
ぬるぽ! ⊂彡川⊂彡川ミ⊃ ぬるぽ!
ぬるぽ! ⊂彡川∪⊃ U川彡⊃ ぬるぽ!
ぬるぽ! (ノ ∪ 川 ∪ミ) ぬるぽ!
ぬるぽ! ∪ ぬるぽ!
ぬるぽ! ぬるぽ! ぬるぽ!
ぬるぽ! ぬるぽ!
ぬるぽ!
981 :
デフォルトの名無しさん:2007/08/06(月) 21:47:18
#define NULL ぬるぽ
#define 0 NULL
fopenやifstreamがどういう処理をしているか気になります。
遠回しにAPIを呼んでたりするんですか?
そりゃシステムコール呼ばないとファイル開けまへんがな(´・ω・`)
そこらのOS毎の差異を吸収するのも標準ライブラリの役目
そう。 遠まわしに、WindowsならCreateFileとかのAPIを呼んでる。
985 :
デフォルトの名無しさん:2007/08/06(月) 22:51:22
まー結局、細部まで一致しないからWINDOWS API使うのが賢い
かなり単純なものでないとCのみでしょり出来ないからな
×
>>972,
>>974 ○
>>976 C言語の仕様によれば、staticな変数は『定数ゼロ』(K&R第2版)で初期化される。
だから
static char *theTxt;
は、
static char *theTxt = 0;
と置き換える。
ここで、定数ゼロは整数型に代入されれば整数0であり、ポインタに代入されればヌルポインタになる。
ヌルポインタは、(アドレス0を指す処理系もあるかもしれないが、)
『どこも指していないポインタ』が正解。実際のbit列がゼロの連続とも限らない。
従って、ヌルポインタはprintf()の引数として処理できない。
ちなみに、『ぬるぽ』はNullPointerExceptionの略で、ヌルポインタではない。
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;
}
何か問題はありますか?教えてください。
たまには私を思い出してください。
ほら、try-catch句がなかったあの頃を思い出してください・・・
マジです
>>987 とりあえずmainの'{'に対応する'}'と、fcloseが足りない。
992 :
987:2007/08/06(月) 23:07:22
すみません。
ソースが長いので省略しています。
コンパイルエラーはないんですが
テキストファイルが読み込めないんです。
>>993 実行方法は?
まさか、カレントディレクトリにファイルがないって落ちじゃないよな?
horse.txtが無いんじゃね?
995 :
デフォルトの名無しさん:2007/08/06(月) 23:11:32
errno調べてみ
996 :
987:2007/08/06(月) 23:16:06
horse.txtはあります。
今まで動いていたプログラムもファイルが開かなくなりました。
ライトファイルはできます。
どっか別のアプリケーションがファイルを開いてるんじゃない?
アプリケーションを全部終了するか、最悪OS再起動したら直るんじゃないかね。
998 :
987:2007/08/06(月) 23:19:45
と思って再起動したんですが直りませんでした。
errno !!!
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。