ループが1回で終わってしまいます。
ファイルから文字列を一行ずつ読み込んで、文字列内の整数を比較してMIDI出力するようにしてるのですが、ループが一回で終わってしまっているらしく、ファイル内の文字列の初めの行しか読み込めていません。どこがおかしいのか自分では分からないので、わかる方教えてください!
ちなみに、Visual C++ 2008 Express Edition、Win32APIです。
以下が問題のソースです。
while(_fgetts(buf, 30, fp)){
if(feof(fp)){
break;
}else{
_tcstok(buf, TEXT("\n"));
_stscanf(buf, _T("- { x:%d, y:%d }"), &m, &n);
if(n<200){
if((m>=0 && m<110)){
midiOutShortMsg(hMidOut , MIDIMSG(0x90 , 0x48 , 40));
return 0;
}else if((m>=110 && m<220)){
midiOutShortMsg(hMidOut , MIDIMSG(0x90 , 0x50 , 40));
return 0;
}else if((m>=220 && m<330)){
midiOutShortMsg(hMidOut , MIDIMSG(0x90 , 0x52 , 40));
return 0;
}else if((m>=330 && m<440)){
midiOutShortMsg(hMidOut , MIDIMSG(0x90 , 0x53 , 40));
return 0;
}else if((m>=440 && m<550)){
midiOutShortMsg(hMidOut , MIDIMSG(0x90 , 0x55 , 40));
return 0;
}else if((m>=550 && m<660)){
midiOutShortMsg(hMidOut , MIDIMSG(0x90 , 0x57 , 40));
return 0;
}else if((m>=660 && m<770)){
midiOutShortMsg(hMidOut , MIDIMSG(0x90 , 0x59 , 40));
return 0;
}else{
break;
}
}else if(n>=200 && n<400){
if((m>=0 && m<110)){
midiOutShortMsg(hMidOut , MIDIMSG(0x90 , 0x36 , 40));
return 0;
}else if((m>=110 && m<220)){
midiOutShortMsg(hMidOut , MIDIMSG(0x90 , 0x38 , 40));
return 0;
}else if((m>=220 && m<330)){
midiOutShortMsg(hMidOut , MIDIMSG(0x90 , 0x40 , 40));
return 0;
}else if((m>=330 && m<440)){
midiOutShortMsg(hMidOut , MIDIMSG(0x90 , 0x41 , 40));
return 0;
}else if((m>=440 && m<550)){
midiOutShortMsg(hMidOut , MIDIMSG(0x90 , 0x43 , 40));
return 0;
}else if((m>=550 && m<660)){
midiOutShortMsg(hMidOut , MIDIMSG(0x90 , 0x45 , 40));
return 0;
}else if((m>=660 && m<770)){
midiOutShortMsg(hMidOut , MIDIMSG(0x90 , 0x47 , 40));
return 0;
}else{
break;
}
}
}
ファイルの中身
- { x:543, y:62 }
- { x:561, y:177 }
- { x:26, y:375 }
- { x:265, y:220 }
.
.
.
です。
お礼
早速のアドバイス有り難うございました。 HSPプログラミング・マニュアルでは見つかりませんでしたが、「インクリメント、デクリメント」をヒントにスクリプトを次のとおりにしましたらActiveBasicでもちゃんと計算してくれました。 if (m1-3)>=0 then m1=m1+1 else m1=m1+13 : y1=y1-1 temp1=((36525*y1)/100)+((306*m1)/10)+d1 temp1=temp1-(y1/100)+(y1/400)-306-122 有り難うございました。