2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 работа с файлами и структурами С++
Сообщение22.05.2012, 01:28 
Доброго времени суток. Написала программу,она работает,все замечательно,но в выходном файле( да и в исходном) создается строка со смайликами и ненужными символами. Преподаватель сказала,что возможно в файлах есть пустая строка,которая забивается ненужностями. Необходимо избавиться от этой строки,т.к. портит вид,да и преподаватель не хочет принимать такую программку :( пожалуйста,подскажите,если сталкивались с такой проблемой,что делать?
Вот код программы:

код: [ скачать ] [ спрятать ]
Используется синтаксис C++
  1. #include <iostream>
  2. #include <fstream>
  3. #include <cstring>
  4. #include <iomanip>
  5. using namespace std;
  6. ifstream in("input.txt");
  7. ofstream out("output.txt");
  8.  
  9. struct vkladchik                                            //структура из вкладчиков в банке
  10. {char familiya[30], imya[30],otchestvo[30];
  11. int nomer,summa,god;
  12. void schow();                                 //функция для вывода информации на экран
  13. void print();                                  //функция для вывода информации в выходной файл
  14. };
  15. void vkladchik::schow()
  16. {cout<<setw(10)<<familiya<<setw(10)<<imya<<setw(10)
  17. <<otchestvo<<setw(10)<<nomer<<setw(10)<<summa<<setw(10)<<god<<endl;}
  18. void vkladchik::print()
  19. {out<<setw(10)<<familiya<<setw(10)<<imya<<setw(10)<<otchestvo<<setw(10)<<nomer<<
  20. setw(10)<<summa<<setw(10)<<god<<endl;}
  21.  
  22. int main()
  23.   {vkladchik man[30];
  24.         int k,n=0;
  25.         if (!in) cout<<"oshibka pri otkritii input.txt"<<endl;
  26.         else
  27.              while (in.peek()!=EOF)
  28.              { in>>man[n].familiya;
  29.              in>>man[n].imya;
  30.              in>>man[n].otchestvo;
  31.              in>>man[n].nomer;
  32.              in>>man[n].summa;
  33.              in>>man[n].god;
  34.              man[n].schow();
  35.              n++;}
  36.   cout<<"Kakoi seychas god?";                                       cin>>k;                                                                         // программа выводит все правильно,вот только
  37.                                                                                          //строка с непонятными символами появляется
  38.                                                                                           //  в       конце
  39.   if (!out) cout<<"oshibka pri otkritii outnput.txt"<<endl;
  40.   else {
  41.         for (int i=0;i<n;i++)
  42.        if (man[i].god==k)
  43.        {man[i].schow();
  44.       man[i].print();
  45.    } }
  46.        in.close();
  47.        out.close();
  48.   return 0;}
  49.  


-- 22.05.2012, 01:32 --

Само задание : На основе данных входного файла составить список вкладчиков банка,включив следующие данные : ФИО,№ счета,сумма,год открытия счета. Вывести в новый файл информацию о тех вкладчиках,которые открыли вклад в текущем году.

 
 
 
 Re: работа с файлами и структурами С++
Сообщение22.05.2012, 12:14 
Проблема в 27-й строке программы. Ваш исходный файл (input.txt) выглядит скорее всего так:
Код:
"Иванов Иван Иванович 1 100 2012\nПетров Пётр Петрович 2 200 2012\n\n\n\n\n"
Поэтому, после чтения последней строки данных, очередной вызов метода peek() вернёт '\n', что не равно EOF, как хотелось бы. В результате имеем "лишний" элемент массива структур с неинициализированными членами.
Что делать? Проще всего — отредактировать исходный файл, удалив в конце все символы '\n'(новая строка), но лучше изменить условие цикла (27 строка) на while (in>>man[n].familiya).

 
 
 
 Re: работа с файлами и структурами С++
Сообщение22.05.2012, 13:27 
Спасибо большое,Вы очень помогли))))

 
 
 [ Сообщений: 3 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group