ファイルの入出力

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
まっさん

ファイルの入出力

#1

投稿記事 by まっさん » 12年前

fgetcを使って文字を得て、strcmpを使って他の文字と比較しようとしたのですが
引数が違ったためできませんでした。文字同士を比較するのはどうやるのですか?

YuO
記事: 947
登録日時: 13年前
住所: 東京都世田谷区

Re: ファイルの入出力

#2

投稿記事 by YuO » 12年前

文字の比較は,単純に==や!=などで可能です。


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

まっさん

Re: ファイルの入出力

#3

投稿記事 by まっさん » 12年前

やっぱりできません。fgetcの戻り値であるint型とchar型をどうやって比較するのですか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: ファイルの入出力

#4

投稿記事 by softya(ソフト屋) » 12年前

まっさん さんが書きました:やっぱりできません。fgetcの戻り値であるint型とchar型をどうやって比較するのですか?
作っている問題のあるプログラムコードを提示して下さいね。
その時、どう出来無いかも詳細に書いて下さい。

あとソースコードはcodeタグをご利用下さい。 いろんなことを含めて詳しくは、フォーラムルールを。 http://dixq.net/board/board.html
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

まっさん

Re: ファイルの入出力

#5

投稿記事 by まっさん » 12年前

コード:

#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;
}
 
これで「へ」という文字がたくさん出てきます。

nil
記事: 428
登録日時: 12年前

Re: ファイルの入出力

#6

投稿記事 by nil » 12年前

fopenの第二引数に"a"は追加書き込みのようですが?

まっさん

Re: ファイルの入出力

#7

投稿記事 by まっさん » 12年前

”w+”でもだめでした

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: ファイルの入出力

#8

投稿記事 by softya(ソフト屋) » 12年前

ポインタが不要な所でポインタを使っていまいた。%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;
}
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

まっさん

Re: ファイルの入出力

#9

投稿記事 by まっさん » 12年前

できました!!!ありがとうございました

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: ファイルの入出力

#10

投稿記事 by softya(ソフト屋) » 12年前

まっさん さんが書きました:できました!!!ありがとうございました
えーと比較の話は何処にいったのでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

まっさん

Re: ファイルの入出力

#11

投稿記事 by まっさん » 12年前

最後にひとついいですか

コード:


#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*変えられない
とエラーがでます。
どうしたらよいでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: ファイルの入出力

#12

投稿記事 by softya(ソフト屋) » 12年前

本題の比較ですね。
if("+"==word)num++;
だと"+"は文字列です。wordは文字ですよね。比較対象が違うのでエラーが出て当然です。
'+'なら文字なので比較できますよ。

文字列と文字を混同しているので、今一度入門書や文法書の確認をされたほうが良いと思います。
文字列は文字の配列か文字列のポインタです。文字は数値データです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

まっさん

Re: ファイルの入出力

#13

投稿記事 by まっさん » 12年前

できました!!!色々ありがとうございました

閉鎖

“C言語何でも質問掲示板” へ戻る