テキストの文字列を配列に格納したとき・・・

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

テキストの文字列を配列に格納したとき・・・

#1

投稿記事 by パン粉茄子 » 14年前

DXライブラリで、テキストファイル内の文字列を画面に描画するプログラムを書いたのですが、実行してみると文字列の最後尾に「Hello World!!・」と、点がついています。
どうすれば・を消すことができるでしょうか?

テキストファイル内の改行、それとDrawFormatString()の仕様「エスケープシーケンスが使えない」というのが原因だろうというのは分かっているのですが、
テキストファイルの文字列の改行は無くせないし、DrawFormatStringの変わりにprintfDx()を使うべきなのでしょうか?

質問が初歩的なうえに文がめちゃくちゃで申し訳ないのですが、アドバイスをお願いします。

//test.txt///////////////////////////////////////////////////////////////////////////////////
Hello World!!
ハローワールド!!
////////////////////////////////////////////////////////////////////////////////////////////

コード:

#include "DxLib.h"

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
	ChangeWindowMode(TRUE),DxLib_Init(),SetDrawScreen(DX_SCREEN_BACK);

	char str[2][30];
	FILE *fp;

	if((fp=fopen("test.txt","r"))==NULL){
		DrawString(0,0,"なにやらエラーのようでございます。",GetColor(255,255,255));
		WaitKey();
		DxLib_End();
		return 0;
	}

	fgets(str[0],30,fp);
	fgets(str[1],30,fp);

	fclose(fp);

	DrawFormatString(0, 0,GetColor(255,255,255),"%s",str[0]);
	DrawFormatString(0,24,GetColor(255,255,255),"%s",str[1]);
	ScreenFlip();
	
	WaitKey();
	
	DxLib_End();
	return 0;
}

beatle
記事: 1281
登録日時: 14年前
住所: 埼玉
連絡を取る:

Re: テキストの文字列を配列に格納したとき・・・

#2

投稿記事 by beatle » 14年前

fgetsは改行文字('\n')またはファイルの終端(EOF)まで読み込みます.読み込んだ改行文字はバッファの後ろに残りますので,その改行文字をDrawFormatStringが点として表示してしまっている気がします.
fgetsで一行読み込んだ後,バッファに格納されている文字列のナル文字の一文字手前が改行文字だったら削除する,という手順で回避できると思います.

コード:

fgets(s, s_size, fp);
if (s[strlen(s) - 1] == '\n')
{
    s[strlen(s) - 1] = '\0';
}

パン粉茄子

Re: テキストの文字列を配列に格納したとき・・・

#3

投稿記事 by パン粉茄子 » 14年前

なるほど、消すだけでよかったなんて何で気づかなかったのか・・・orz
その方法で行こうと思います。ありがとうございました!

閉鎖

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