пакетная обработка — В C ++ Как сделать так, чтобы целые числа из файла данных были равномерно разделены на 5 столбцов?

Мне очень тяжело правильно форматировать значения данных из программы. Смысл программы заключается в отображении значений из файла данных при пакетной обработке в формате, подобном 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

0

Решение

Используйте модульную арифметику!

Оператор ‘мод’, % сделаем деление и вернем остаток Вы можете использовать это, чтобы выяснить, когда печатать новые строки:

while(stuff) {
if(amount % 5 == 0) {
cout << endl;
}
amount++;

//more stuff
}

примечание: причина того, что ваш код не работает сейчас, вероятно, потому что ваш код i=0 должен был быть amount = 0, но модульная арифметика позволит вам сохранить сумму как промежуточный итог.

2

Другие решения

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;
}
}
  • вам нужен только один цикл
  • всегда проверить результат чтения чего-либо, чтобы проверить, сработало ли это.
1

#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, кажется, хочет прочитать из файла в какой-то момент.

1

Вы не инициализировали переменную суммы:

int data;
int count = 0;
int amount = 0;

должен решить вашу проблему.

-1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector