はじめまして。 長文になりますが失礼いたします。
strchrとstrtokについて思うように動作しなかったため、
自分のプログラムに不備がないかどうか、質問させていただきます。
使用したバージョンはVer 3.16bです。
コントローラーなどのボタンを押すと音が鳴る「サンプラー」を再現しようと思っています。
プログラムをいじらずにtxtファイルと素材ファイルの入れ替えで自由に音が変えれる物を想定しています。
まず、txtファイルに
サウンド(パンチ1).mp3|サウンド(パンチ2).mp3|サウンド(パンチ3).mp3
サウンド(キック).mp3
サウンド(ばさっ).mp3
サウンド(斬る).mp3
と用意し、
@ FileRead_gets()で1行づつ読み込む
A 変数にその1行を代入
B if文にてstrchrで'|'が含まれているかを確認
C 含まれているならstrtokで分割を行い、含まれていないなら分割を行わない
D 配列にそれぞれをいれる(分割しないなら[0]だけ、するなら[0]〜[2]のように)
E LoadSoundMemでそれぞれの音を読み込む
上のようにしたかったのですが、
Bでstrchrの条件の「|」が「ッ」でも反応しているような挙動をします。
同様にCのstrtokでも「|」だけで分割したいのに「ッ」でも分割されてしまいました。
私の組んだプログラムを下にのせますので、確認をお願いできますでしょうか?
----------------------------------------------------------------------------------------------
#define MAXKEY 16
#define NUM 3
char se_Name[MAXKEY][NUM][256];
int se_Handle[MAXKEY][NUM];
int handle = FileRead_open("音/SE/SE_List.txt");
for( int i = 0; i < MAXKEY; i++ ){
char data[256];
if( FileRead_eof( handle ) != 0 ){
break;
}
FileRead_gets( data, 256, handle );
if( strchr( data, '|' ) == NULL ){
strcpy( se_Name[i][0], data );
}else{
for( int j = 0; j < NUM; j++ ){
if( j == 0 ){
strcpy( se_Name[i][j], strtok( data, "|" ) );
}else{
strcpy( se_Name[i][j], strtok( NULL, "|" ) );
}
}
}
for( int j = 0; j < NUM; j++ ){
se_Handle[i][j] = LoadSoundMem( strcat( "音/SE/" , se_Name[i][j] );
}
}
FileRead_close(handle);
----------------------------------------------------------------------------------------------
読み込みの部分のみ一部抜粋