У меня есть входной файл с именем animals.dat, что мне нужна моя программа для чтения и вывода файлов в блочном формате. Например, файл читает:
TIGER DOG CAT
Он должен выводить
TTTTTTTTTTTTTTTTTTTT (T будет 1x20, поскольку это первый символ в слове и 20-я буква в алфавите)
IIIIIIIII IIIIIIIII (I 2x9 как 2-й символ и 9-й в алфавите)
Я попытался настроить функции для этого, но мой вывод выглядит безумным, выводя только TONS одного символа за раз, и я уверен, что даже не делал строк. Что я делаю не так?
#include "stdafx.h"
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin;
ofstream fout;
void rectangle(char ch, int alphacount,int count) {
int height=1, width=0;
while(width <= alphacount && height <= count) {
while(width <= alphacount) {
fout << ch;
cout << ch;
width++;
}
cout << endl;
if(height <= count) {
fout << ch << endl;
cout << ch << endl;
height++;
}
}
}
int main(void) {
fin.open("animals.dat");
fout.open("out.dat");
int count=0, alphacount=0;
char ch, x='A';
while(!fin.eof()) {
fin >> ch;
while(x!=ch) {
x++;
alphacount++;
}
rectangle(ch, alphacount, count);
count++;
if(ch =='\n') {
alphacount = 0;
count = 0;
x = 0;
}
}
system("pause");
}
Вещи, которые я вижу:
rectangle
функции может быть легко упрощен. Вам просто нужно два for
петель.
void rectangle(char ch, int alphacount,int count)
{
for ( int height = 0; height < count; ++height )
{
for ( int width = 0; width < alphacount; ++width )
{
fout << ch;
cout << ch;
}
cout << endl;
}
}
Вам совсем не нужно x
потому что вы можете вычислить alphacount
напрямую, используя арифметику.
Вы можете перемещать alphacount
внутри в while
цикла.
Код внутри в while
цикла может быть упрощен до:
while(!fin.eof())
{
int alphacount = 0;
count++;
char ch;
fin >> ch;
if ( isalpha(ch) )
{
if ( ch > 'Z' )
{
// It a lower case letter.
alphacount = ch - 'a' + 1;
}
else
{
// It an upper case letter.
alphacount = ch - 'A' + 1;
}
rectangle(ch, alphacount, count);
}
if(ch =='\n')
{
count = 0;
}
}
Вы не alphacount
инициализируете x
и alphacount
внутри внешнего цикла. Ваш код должен выглядеть так:
while(!fin.eof())
{
int alphacount=0;
char ch, x='A';
fin >> ch;
.
.
.
Отладчик нашел бы эту проблему для вас за гораздо меньшее время, чем потребовалось бы, чтобы написать свой вопрос.
x
до разумного значения в некоторых случаях ...