Мне очень тяжело правильно форматировать значения данных из программы. Смысл программы заключается в отображении значений из файла данных при пакетной обработке в формате, подобном 5 столбцам с 5 целыми числами в каждом, и создании еще одной строки из 5 целых чисел, если в файле данных содержится более 5 целых чисел.
Однако мой код не работает таким образом, хотя кажется, что это должно
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int data;// the data which will be inputted from the file
int count = 0;
int amount; // number of data integers in a column
cout << "Values read from file" << endl;
while (cin >> data)
{
for (int i = 0; i < 5; i++)
{
amount++;
cin >> data;
cout << setw(7) << data;
if (amount == 5)
{
i = 0;
cout << endl;
}
}
}
return 0;
}
Это то, что я имею до сих пор, и код компилируется, но вывод, который я получаю, очень уродлив, и целые числа в конце повторяются.
Вот как выглядит формат, который я получаю
Значения читаются из файла
32 -4 707 22 33 -70000 370000 -43 17 0 96 96 96 96 96
Используйте модульную арифметику!
Оператор ‘мод’, %
сделаем деление и вернем остаток Вы можете использовать это, чтобы выяснить, когда печатать новые строки:
while(stuff) {
if(amount % 5 == 0) {
cout << endl;
}
amount++;
//more stuff
}
примечание: причина того, что ваш код не работает сейчас, вероятно, потому что ваш код i=0
должен был быть amount = 0
, но модульная арифметика позволит вам сохранить сумму как промежуточный итог.
int main()
{
int data; // the data which will be inputted from the file
int count = 0; // number of values written so far
cout << "Values read from file" << endl;
while (cin >> data) {
cout << setw(7) << data;
if (++count % 5 == 0)
cout << endl;
}
}
#include<iostream>
#include<fstream>
#include <iomanip>
using namespace std;
int read(istream & in)
{
int data; // the data which will be inputted from the file
int amount = 5; // number of data integers in a column
cout << "Values read from file" << endl;
while (in >> data) //only need one cin. This will catch most of the errors you'll
// care about.
{
cout << setw(7) << data;
if (--amount == 0) // % 5 will screw up at max int.
// This won't and is probably quicker.
{
amount = 5;
cout << endl;
}
}
if (amount != 5)
{ // spit out EOL if there are any left-overs.
cout << endl;
}
return 0;
}
int main(int argsc, char ** argsv)
{
// ifstream in("name of file");
// read(in);
read(cin);
}
РЕДАКТИРОВАТЬ: Обобщено, чтобы сделать его немного более удобным. OP, кажется, хочет прочитать из файла в какой-то момент.
Вы не инициализировали переменную суммы:
int data;
int count = 0;
int amount = 0;
должен решить вашу проблему.