How Can I Correctly Sort and Output Arrays from a Single File in C++?

Click For Summary

Discussion Overview

The discussion revolves around a C++ programming problem where participants are trying to sort integers read from a file into three groups: odd numbers, even numbers, and negative numbers. The scope includes code debugging and improvement suggestions related to file input/output and array manipulation.

Discussion Character

  • Technical explanation
  • Homework-related
  • Debate/contested

Main Points Raised

  • One participant points out the need to initialize the variable "index" before use.
  • Another participant suggests separating the grouping of numbers from the file writing process, recommending to group first and write later.
  • A third participant corrects the assignment logic, stating that the assignment should be from "numbers[index]" to "negative[spotneg]", rather than the reverse.
  • A later reply seeks clarification on where to adjust the reference to "index" to "index-1" in the loop, indicating confusion about the suggestion.

Areas of Agreement / Disagreement

Participants express differing views on the best approach to handle the sorting and output process, with no consensus reached on the optimal solution or the specific adjustments needed in the code.

Contextual Notes

There are unresolved issues regarding the proper indexing of arrays and the sequence of operations in the code, which may affect the program's functionality.

kahless2005
Messages
44
Reaction score
0
The Problem (from the handout, word for word):
Write a program that reads a list of integers from the file "numbers.in" into an array, which I will call numbers. Then sort the numbers into 3 groups, a group of odd numbers, a group of even numbers, and a group of negative numbers, use an array to hold the numbers in each group. Finally, you are to output the three groups per the example below. There could be up to 150 numbers in the file numbers.in, which is located in the folder:


My Code ( no functions):
Code:
# include <iostream>
# include <cmath>
# include <fstream>
# include <iomanip>
using namespace std;
const int MAX = 150;
int main ()
{
    cout << "Lab 8\t\t\tKevin O'Grady\n\n";
	ifstream fin("numbers.in");
	if(fin.fail())
	{
		cerr << "Error opening input file. \n\n";
		exit(1);
	}
	ofstream fout("lab8a.out");
	if(fout.fail())
	{
		cerr << "Error opening output file.\n\n";
		exit(1);
	}
    int even[MAX];
    int odd[MAX];
    int negative[MAX];
    int numbers[MAX];
    int index;
    int spotneg = 0;
    int spoteve = 0;
    int spotod = 0;
    fout << "Lab 8\t\t\tKevin O'Grady\n\n";
    fout << "This program sorts numbers into odd, even and negative groups. \n"
         << "The arrays are: \n"
         << setw(5) << "Even"
         << setw(5) << "Odd"
         << setw(10) << "Negative" << endl;
    fin >> numbers[index];
    while (!fin.fail() && index < MAX)
    {
          if (numbers[index] < 0)
          {
             numbers[index] = negative[spotneg];
             spotneg++;
          }
          else if (numbers[index]% 2 == 0)
          {
             numbers[index] = even[spoteve];
             spoteve++;
          }
          else
          {
             numbers[index] = odd[spotod];
             spotod++;
          }
          fout << setw(5) << even[index]
               << setw(5) << odd[index]
               << setw(10) << negative[index] << endl;
          fin >> numbers[index++];
    }
    fin.close();
    fout.close();
    system ("pause");
    return 0;
}

Where am I going wrong?
 
Physics news on Phys.org
1. You need to initialize "index", something like "int index = 0;" would be fine.
2. I don't think it is a good idea to group the numbers and write onto file in the same loop. Group first and write later.
3. The use of "even[index]", "odd[index]" and "negative[index]" will all return garbage since "index" is not the proper index for the three arrays.
 
when you assign values into variables, it should read:

negative[spotneg] = numbers[index];

not the other way around (you aren't putting values from negative[] into numbers[], you want to sort the negative ones from numbers[] into negative[]
 
Thanks to both of you!

I was also told that my reference to index in the loop should be index-1, where would I put that?
 
kahless2005 said:
I was also told that my reference to index in the loop should be index-1, where would I put that?

I am not sure what you meant by that.
 

Similar threads

  • · Replies 3 ·
Replies
3
Views
3K
  • · Replies 6 ·
Replies
6
Views
3K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 9 ·
Replies
9
Views
3K
  • · Replies 3 ·
Replies
3
Views
8K
  • · Replies 6 ·
Replies
6
Views
2K
Replies
10
Views
2K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 1 ·
Replies
1
Views
6K
  • · Replies 66 ·
3
Replies
66
Views
6K