ページ 11

C言語によるテキストファイルからデータの読み込みについて

Posted: 2015年11月07日(土) 16:36
by ほげお
こんにちは。
C言語初心者で、現在学習中のほげおと申します。

テキストファイルから座標データを読み込み、特定の行のみ出力するプログラムを作製しているのですが、うまくいきません。

テキストデータの例
1.000 2.055 i
2.000 3.050 i
1.500 0.000 n
4.000 3.000 i
(以下略)

というx,y座標のテキストデータがあり、行末にiかnが書いてあります。
このファイルから、行末にiのある行のみを出力したいのですが、うまくいきません。

#include<stdio.h>
#include<string.h>
int main()
{
FILE *fp;
char *filename = "coord.txt";
double f,g;
char h,str;
int ret;

fp = fopen(filename,"r");

if(fp == NULL)
{
printf("Couldn't open\n");
return -1;
}

while(fscanf(fp,"%lf %lf %c\n",&f,&g,&h) != EOF)
{
/*ret = strcmp(h,judge);
if(ret == 0)
{
printf("%lf %lf %c\n",f,g,h);
}
*/
printf("%lf %lf %c\n",f,g,h);
}

fclose(fp);

return 0;
}

このようなプログラムを作製したのですが、実行しても何も出力されません。
どこが間違っていて、どうすれば良いのか教えて頂けると助かります。
よろしくお願いします。

Re: C言語によるテキストファイルからデータの読み込みについて

Posted: 2015年11月07日(土) 16:45
by ほげお
すいません、訂正があります。
コメントアウトされている部分がありますが、そこのコメントアウトは間違ってつけてしまったものです。
よろしくお願いします。

Re: C言語によるテキストファイルからデータの読み込みについて

Posted: 2015年11月07日(土) 17:53
by box
ほげお さんが書きました: コメントアウトされている部分がありますが、そこのコメントアウトは間違ってつけてしまったものです。
で、結局、うまくいっていない「現在の」コードはどうなっているのですか?

Re: C言語によるテキストファイルからデータの読み込みについて

Posted: 2015年11月07日(土) 17:55
by かずま
strcmp は文字列の比較です。h は char ですから、== で比較しましょう。

コード:

    while(fscanf(fp,"%lf %lf %c",&f,&g,&h) != EOF)
    {
        if(h == 'i')
        {
            printf("%f %f %c\n",f,g,h);
        }
    }
scanf の書式の '\n' は ' ' と全く同じ意味であり、
scanf の書式の ' ' には特別な意味があります。
それを理解した上で書いていますか?
scanf の書式の "%lf" は double に、"%f" は float に適用しますが、
printf の書式の "%f" は double です。"%lf" でも出力できますが。

Re: C言語によるテキストファイルからデータの読み込みについて

Posted: 2015年11月07日(土) 22:39
by ほげお
boxさん

訂正等加えた現在のプログラムはこちらになります。
しかし実行してみても何も出力されず困っております。
心当たりがあればご指摘いただきたいです。


#include<stdio.h>
int main()
{
FILE *fp;
char *filename = "coord.txt";
double f,g;
char h;

fp = fopen(filename,"r");

if(fp == NULL)
{
printf("Couldn't open\n");
return -1;
}

while(fscanf(fp,"%lf %lf %s\n",&f,&g,&h) != EOF)
{
if(h == 'i')
{
printf("%f %f %s\n",f,g,h);
}
}

fclose(fp);

return 0;
}

Re: C言語によるテキストファイルからデータの読み込みについて

Posted: 2015年11月07日(土) 22:41
by ほげお
かずまさん

scanfにおける\nなど、理解できていませんでした。
勉強していきたいと思います。
ご指摘ありがとうございました。

プログラムを修正してみたのですが、実行しても何も出力されず困っております。
アドバイス等いただけると助かります。
よろしくお願いします。

Re: C言語によるテキストファイルからデータの読み込みについて

Posted: 2015年11月07日(土) 22:55
by box
char型の変数を入出力するときの書式文字列が
%s
というのは間違ってるような気がします。
%c
では?

Re: C言語によるテキストファイルからデータの読み込みについて

Posted: 2015年11月07日(土) 23:00
by ほげお
boxさん

講義で習った%cと%sの使い方があやふやになっていたようです。
ご指摘ありがとうございました。

Re: C言語によるテキストファイルからデータの読み込みについて

Posted: 2015年11月07日(土) 23:04
by ほげお
無事解決できました!
アドバイスしてくださった方々、本当にありがとうございました。
C言語についての知識がまだまだなのでこれからも勉強していきたいと思います。