←検索窓の楽しみ方
  ショッピングモール  掲示板ランキング


【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※返信付き投稿の削除は禁止!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら


 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板1こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧

No.4209

テキストファイルを読み込んで和を計算するプログラムについてを教えてください
投稿者---kusumoto(2005/07/06 15:44:42)


縦に2列になっているテキストの数値データを読み込んで,
○行の数
○2列目の数値の和
を集計するプログラムを作ろうとしています.

<読み込むテキストデータの中味は,こんな感じ>
24533 2.6198225
24534 0.98811519
24535 5.2718258
24536 2.0105658
24537 1.9294223
     ↑
    この列の総和を求めたい

 excelで読み込んで表計算してしまえばいいのですが,
65536行以上あるので,excelで集計できず,必要に駆られて
なんとか,下記のプログラムを書きました.

 でも,きちんと動いてくれません.
始めたばかりで,どこがおかしくて,どう直せばいいのやら,
まったくわからず,困り果てています.

 初歩的な質問で大変恐縮なのですが,どなたか,教えていただけませんでしょうか.


#include <stdio.h>

int main( )
{
    FILE *fp;
    char buf[128];
    int person = 0;
    double h, hsum = 0.0;
    double w, wsum = 0.0;

    while(fscanf(fp,"lf\t%lf",&h,&w)!=EOF){
        person++;
        hsum += h; wsum += w;
    }

    fclose(fp);

    printf("行データの数は %f\n",person);
    printf("2列目の総和は %f\n",wsum);
}




この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:テキストファイルを読み込んで和を計算するプログラムについてを教えてください 4210 まきじ 2005/07/06 15:54:12
<子記事> Re:テキストファイルを読み込んで和を計算するプログラムについてを教えてください 4211 επιστημη 2005/07/06 15:57:04


No.4210

Re:テキストファイルを読み込んで和を計算するプログラムについてを教えてください
投稿者---まきじ(2005/07/06 15:54:12)


>while(fscanf(fp,"lf\t%lf",&h,&w)!=EOF){

最初のlfの前に、% が抜けてる。

>hsum += h;

h は行番号?
だとしたら、合計する必要ないと思うのですが。


この投稿にコメントする

削除パスワード

No.4214

Re:テキストファイルを読み込んで和を計算するプログラムについてを教えてください
投稿者---kusumoto(2005/07/06 16:42:08)


確かに,抜けていました.
ありがとうございました.

>>while(fscanf(fp,"lf\t%lf",&h,&w)!=EOF){
>
>最初のlfの前に、% が抜けてる。
>
>>hsum += h;
>
>h は行番号?
>だとしたら、合計する必要ないと思うのですが。



この投稿にコメントする

削除パスワード

No.4211

Re:テキストファイルを読み込んで和を計算するプログラムについてを教えてください
投稿者---επιστημη(2005/07/06 15:57:04)


ファイルをオープンしていません。
fscanfのフォーマットもヘン。



この投稿にコメントする

削除パスワード

No.4215

Re:テキストファイルを読み込んで和を計算するプログラムについてを教えてください
投稿者---kusumoto(2005/07/06 16:46:52)


>ファイルをオープンしていません。
>fscanfのフォーマットもヘン。

ありがとうございました.
確かに,ファイルをオープンしていませんでした.
がんばって直してみたのですが,まだ,問題があるようです.
何度もお手数をおかけしまして申し訳ありませんが,教えていただけませんでしょうか.

#include <stdio.h>

int main(char *argv[])
{
    FILE *fp;
    char buf[128];
    int person = 0;
    double w, wsum = 0.0;
    double h;

    fp = fopen(argv[1],"r");

    while(fscanf(fp,"%lf\t%lf",&h,&w)!=EOF){
        person++;
        wsum += w;
    }

    fclose(fp);

    printf("テトラメッシュの数は %f\n",person);
    printf("体積は %f\n",wsum);
}










この投稿にコメントする

削除パスワード

No.4217

Re:テキストファイルを読み込んで和を計算するプログラムについてを教えてください
投稿者---επιστημη(2005/07/06 16:57:58)


>がんばって直してみたのですが,まだ,問題があるようです.

どこが? なにが?
回答者にそれを探させるおつもりか?




この投稿にコメントする

削除パスワード

No.4221

Re:テキストファイルを読み込んで和を計算するプログラムについてを教えてください
投稿者---まきじ(2005/07/06 17:06:16)


>int main(char *argv[])

main() の引数は、2 つです。

int main(int argc,char *argv[])


この投稿にコメントする

削除パスワード

No.4223

Re:テキストファイルを読み込んで和を計算するプログラムについてを教えてください
投稿者---επιστημη(2005/07/06 17:17:24)


int main(char *argv[])

なんだこりゃ?




この投稿にコメントする

削除パスワード

No.4231

Re:テキストファイルを読み込んで和を計算するプログラムについてを教えてください
投稿者---RiSK(2005/07/06 23:02:26)


>int main(char *argv[])

引数確認

> int person = 0;

「65536行以上ある」ならオーバーフローする可能性あり
unsigned にしたり,精度が long 以上の型にしたりしましょう。

> char buf[128];

どこで使用されているか確認

> while(fscanf(fp,"%lf\t%lf",&h,&w)!=EOF){

fscanf("%*lf%lf", &w) == 1) でも OK.
# そうすれば h は不要。

> printf("テトラメッシュの数は %f\n",person);

変換指定子と引数の型を確認
#include <stdio.h>
int main(int argc, char *argv[]) {
    FILE * f;
    unsigned long int count;
    double w, sum = 0.0;
    if (argc < 2) return 1;
    if ((f = fopen(argv[1], "r")) == NULL) return 1;
    for (count = 0; fscanf(f, "%*lf%lf", &w) == 1; ++count) sum += w;
    fclose(f);
    printf("count : %lu\n", count);
    printf("wsum  : %f\n", sum);
    return 0;
}



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧




掲示板提供:Real Integrity