私の C++ プロジェクトの目的は、単純な文字から作成された画像を含むファイルを出力することです。
私のプロジェクトの最初の部分では、「入力ファイルからコマンドを読み取り、読み取ったコマンドを表す整数値を返す関数を含める」必要があります。それが私の takeCommand 関数です。恐ろしく非効率に思えますが、正しく理解できれば必要だと思います。
現在の問題は、メイン関数の while ループが無限ループを実行することです。テキスト「Works」を出力すると、常に繰り返されます。私の意図は、ファイルの終わりで制御されたループを作成することでした。takeCommand 関数の内部では、最後の行を読み取ると、takeCommand 関数の実行が停止するため、while ループが終了します。
while ループを常に繰り返さずに機能させる方法についてのアイデアが必要です。
私が現在持っているものは次のとおりです。
int takeCommand(int& num, int& cmd);
ifstream infile;
ofstream outfile;
int main()
{
const int MAX_FOR = 3;
string str;
int num, cmd;
infile.open("DrawingInput_01.txt");
outfile.open("DrawingOutput_01.txt");
for (int i = 0; i < MAX_FOR; i++)
{
getline(infile,str);
}
takeCommand(num,cmd);
while(infile)
{
cout << "Works";
/*switch(cmd)
{
case '1': printSpace(infile, outfile); break;
case '2': printChar(infile, outfile); break;
case '3': printNewline(infile, outfile); break;
case '0': break;
}*/
takeCommand(num, cmd);
}
infile.close();
outfile.close();
return 0;
}
int takeCommand(int& num, int& cmd)
{
string str;
char firstChar;
infile.open("DrawingInput_01.txt");
for (int i = 0; i < 3; i++)
{
getline(infile.str);
}
infile >> firstChar >> str >> num;
switch(firstChar)
{
case 's': cmd = 1; break;
case 'p': cmd = 2; break;
case 'n': cmd = 3; break;
case 'q': cmd = 0; break;
}
return cmd;
}
入力ファイルの 1 つは次のようになります。
; CS 1044 Fall 2010
; Project 4
; Basic Cat
space 1
print 1 /
print 1 \
print 1 _
print 1 /
print 1 \
newline
print 1 (
space 1
print 1 o
print 1 .
print 1 o
space 1
print 1 )
newline
space 1
print 1 >
space 1
print 1 ^
space 1
print 1 <
newline
quit
出力ファイルはバニーを作成することになっています。
void 関数は私のコードにありますが、それは今のところ問題ではありません。