ページ 11

ファイルの入出力

Posted: 2012年4月05日(木) 13:52
by まっさん
fgetcを使って文字を得て、strcmpを使って他の文字と比較しようとしたのですが
引数が違ったためできませんでした。文字同士を比較するのはどうやるのですか?

Re: ファイルの入出力

Posted: 2012年4月05日(木) 14:12
by YuO
文字の比較は,単純に==や!=などで可能です。


ところで,質問の内容とタイトルが一致していません。
この内容だと,「文字の比較方法」等の方が適切です。

Re: ファイルの入出力

Posted: 2012年4月05日(木) 14:22
by まっさん
やっぱりできません。fgetcの戻り値であるint型とchar型をどうやって比較するのですか?

Re: ファイルの入出力

Posted: 2012年4月05日(木) 14:25
by softya(ソフト屋)
まっさん さんが書きました:やっぱりできません。fgetcの戻り値であるint型とchar型をどうやって比較するのですか?
作っている問題のあるプログラムコードを提示して下さいね。
その時、どう出来無いかも詳細に書いて下さい。

あとソースコードはcodeタグをご利用下さい。 いろんなことを含めて詳しくは、フォーラムルールを。 http://dixq.net/board/board.html

Re: ファイルの入出力

Posted: 2012年4月05日(木) 14:36
by まっさん

コード:

#include<string.h>
#include<stdio.h>

int main(){
	int num=0,word;
	char *formula="3x^2+4x-2+6y+1";
	FILE *fp;


//ファイルオープン
	fp=fopen("brain.txt","a");
//数式の書き込み
	fprintf(fp,"%s\n",formula);
	while((word=fgetc(fp))!=EOF){
		printf("%c",(char *)word);
	}
	fclose(fp);
	return 0;
}
 
これで「へ」という文字がたくさん出てきます。

Re: ファイルの入出力

Posted: 2012年4月05日(木) 14:49
by nil
fopenの第二引数に"a"は追加書き込みのようですが?

Re: ファイルの入出力

Posted: 2012年4月05日(木) 14:50
by まっさん
”w+”でもだめでした

Re: ファイルの入出力

Posted: 2012年4月05日(木) 14:51
by softya(ソフト屋)
ポインタが不要な所でポインタを使っていまいた。%cは文字用でポインタを使う%sの文字列ではありません。

入出力を分けたバージョン。

コード:

#include<string.h>
#include<stdio.h>

int main()
{
	int num = 0, word;
	char *formula = "3x^2+4x-2+6y+1";
	FILE *fp;


	//ファイルを書き込みオープン
	fp = fopen( "brain.txt", "wt" );
	//数式の書き込み
	fprintf( fp, "%s\n", formula );
	fclose( fp );
	
	//ファイルを読み込みオープン
	fp = fopen( "brain.txt", "rt" );
	while( ( word = fgetc( fp ) ) != EOF ) {
		printf( "%c", word );	//wordはポインタでは無いのでchar*にキャストしてはいけません。ただの値です。
	}
	fclose( fp );
	return 0;
}
append(追加)である"a"を使ったバージョン。読み込むので"a+"にする必要があります。
後どんどんファイルが膨らみます。読み込むときはファイル先頭にシークも必要です。

コード:

#include<string.h>
#include<stdio.h>

int main()
{
	int num = 0, word;
	char *formula = "3x^2+4x-2+6y+1";
	FILE *fp;


	//ファイルを書き込みオープン
	fp = fopen( "brain.txt", "a+" );
	//数式の書き込み
	fprintf( fp, "%s\n", formula );
	fseek(fp,0,SEEK_SET);	//ファイル先頭をポイント
	while( ( word = fgetc( fp ) ) != EOF ) {
		printf( "%c", word );	//wordはポインタでは無いのでchar*にキャストしてはいけません。ただの値です。
	}
	fclose( fp );
	return 0;
}

Re: ファイルの入出力

Posted: 2012年4月05日(木) 14:59
by まっさん
できました!!!ありがとうございました

Re: ファイルの入出力

Posted: 2012年4月05日(木) 15:01
by softya(ソフト屋)
まっさん さんが書きました:できました!!!ありがとうございました
えーと比較の話は何処にいったのでしょうか?

Re: ファイルの入出力

Posted: 2012年4月05日(木) 15:09
by まっさん
最後にひとついいですか

コード:


#include<string.h>
#include<stdio.h>
 
int main()
{
    int num = 0, word;
    char *formula = "3x^2+4x-2+6y+1";
    FILE *fp;
 
 
//ファイルを書き込みオープン
    fp = fopen( "brain.txt", "w+" );
//数式の書き込み
    fprintf( fp, "%s\n", formula );
    fseek(fp,0,SEEK_SET);
    while( ( word = fgetc( fp ) ) != EOF ) {
        if("+"==word)num++;
    }
    fclose( fp );
	printf( "%d",num);
    return 0;
} 

+の数が知りたいんですけど、これだと==のところでintからconst char*変えられない
とエラーがでます。
どうしたらよいでしょうか?

Re: ファイルの入出力

Posted: 2012年4月05日(木) 15:16
by softya(ソフト屋)
本題の比較ですね。
if("+"==word)num++;
だと"+"は文字列です。wordは文字ですよね。比較対象が違うのでエラーが出て当然です。
'+'なら文字なので比較できますよ。

文字列と文字を混同しているので、今一度入門書や文法書の確認をされたほうが良いと思います。
文字列は文字の配列か文字列のポインタです。文字は数値データです。

Re: ファイルの入出力

Posted: 2012年4月05日(木) 15:20
by まっさん
できました!!!色々ありがとうございました