Writing numbers to a file C#

Read all pairs (x, y) from in.txt, one in each line.
In each line of out.txt, write the list of all positive integers that are less than or equal to x and are dividable by y.
If y is equal to 0, write all the primes less than or equal to x.
If you do not find any positive integers, leave the line blank.

out.txt is the answer i need to get.

in.txt
7 2
20 4
6 9
18 0

out.txt
2 4 6
4 8 12 16 20

2 3 5 7 11 13 17


Here is what i have written.  For some reason it doesn't output the "Numers" method but only the "PrimeNumbers" Method.

using System;
using System.IO;

namespace PMTTEST1
{
      class Class1
      {
            static int number1;
            static int number2;
            static int num1;
            static int num2;

            [STAThread]
            static void Main(string[] args)
            {
                  ReadFile();
            }

            public static void ReadFile()
            {
                  string fileName = "input.txt";

                  StreamReader fileReader;
             
                  fileReader = new StreamReader(fileName);
                  string sLine;
      
                  sLine = fileReader.ReadLine();

                  string [] split;
                  const char delm = ' ';

                  while(sLine != null)
                  {
                        split = sLine.Split(delm);

                        number1 = int.Parse(split[0]);
                        number2 = int.Parse(split[1]);

                        if(number2 == 0)
                        {
                              PrimeNumbers();
                        }
                        else
                        {
                              
                              Numbers();
                        }
                        sLine = fileReader.ReadLine();
                  }
            }

            public static void Numbers()
            {
                  StreamWriter fileWriter = new StreamWriter("out.txt");

                  for(int i = 1; i <= number1; i++)
                  {      
                        num1 = i;
                        
                        if((num1 % number2) == 0)
                        {
                              fileWriter.Write(num1+ " ");
                        }
                  }
                  fileWriter.Close();
            }

            public static void PrimeNumbers()
            {
                  StreamWriter fileWriter = new StreamWriter("out.txt");

                  for(int j = 1; j <= number1; j++)
                  {      
                        num2 = j;
                        
                        if((Math.Pow(2, num2) % num2) == 2)
                        {
                              fileWriter.Write(num2+ " ");
                        }
                  }
                  fileWriter.Close();
            }
      }
}
jmkotmanAsked:
Who is Participating?
 
Ravi SinghConnect With a Mentor Senior Software EngineerCommented:
Hi, you need to append to the out.txt not overwrite it each time (you can specify a boolean in the constructor for StreamWriter to append), and also you want a WriteLine before calling fileWriter.Close(), the following methods have the modifications:

            public static void Numbers()
            {
                  StreamWriter fileWriter = new StreamWriter("out.txt", true);

                  for(int i = 1; i <= number1; i++)
                  {    
                        num1 = i;
                   
                        if((num1 % number2) == 0)
                        {
                              fileWriter.Write(num1+ " ");
                        }
                  }
                  fileWriter.WriteLine();
                  fileWriter.Close();
            }

            public static void PrimeNumbers()
            {
                  StreamWriter fileWriter = new StreamWriter("out.txt", true);

                  for(int j = 1; j <= number1; j++)
                  {    
                        num2 = j;
                   
                        if((Math.Pow(2, num2) % num2) == 2)
                        {
                              fileWriter.Write(num2+ " ");
                        }
                  }

                  fileWriter.WriteLine();
                  fileWriter.Close();
            }
0
 
Ravi SinghSenior Software EngineerCommented:
obviously the program will continue appending to the file across multiple runs, you can delete the output file if it exists - on your program startup... so that the output only contains the results of the current run:

if (File.Exists("out.txt"))
    File.Delete("out.txt");
0
 
Arthur_WoodCommented:
You were very close.  I took the liberty of re-writing some of your code.  See if you understand why.-


using System;
using System.IO;

namespace PMTTEST1
{
      class Class1
      {
            static int number1;
            static int number2;
            static int num1;
            static int num2;
        static StreamWriter fileWriter;
            static StreamReader fileReader;

            [STAThread]
            static void Main(string[] args)
            {

                  string fileName = "input.txt";
                  fileReader = new StreamReader(fileName);
                  fileWriter = new StreamWriter("out.txt");

                  ReadFile();

                  fileWriter.Close();
            }

            public static void ReadFile()
            {
                                    
                  string sLine = fileReader.ReadLine();
     
                  string [] split;
                  const char delm = ' ';

                  while(sLine != null)
                  {
                        split = sLine.Split(delm);

                        number1 = int.Parse(split[0]);
                        number2 = int.Parse(split[1]);

                        if(number2 == 0)
                        {
                              PrimeNumbers();
                        }
                        else
                        {
                         
                              Numbers();
                        }
                        sLine = fileReader.ReadLine();
                  }
            }

            public static void Numbers()
            {
                  

                  for(int i = 1; i <= number1; i++)
                  {    
                        num1 = i;
                   
                        if((num1 % number2) == 0)
                        {
                              fileWriter.Write(num1+ " ");
                        }
                        
                  }
                  fileWriter.WriteLine();
            }

            public static void PrimeNumbers()
            {

                  for(int j = 1; j <= number1; j++)
                  {    
                        num2 = j;
                   
                        if((Math.Pow(2, num2) % num2) == 2)
                        {
                              fileWriter.Write(num2+ " ");
                        }
                  }
                  fileWriter.WriteLine();
                  
            }
      }
}


However, your PrimeNumbers procedure is not quite right.  It skips 2 (which is a Prime number) - see if you can figure out why it is skipping 2

AW
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.