# 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;

static void Main(string[] args)
{
}

{
string fileName = "input.txt";

string sLine;

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)
{
}
else
{

Numbers();
}
}
}

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();
}

{
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();
}
}
}
###### Who is Participating?

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();
}

{
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

Senior 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

Commented:
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 void Main(string[] args)
{

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

fileWriter.Close();
}

{

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)
{
}
else
{

Numbers();
}
}
}

public static void Numbers()
{

for(int i = 1; i <= number1; i++)
{
num1 = i;

if((num1 % number2) == 0)
{
fileWriter.Write(num1+ " ");
}

}
fileWriter.WriteLine();
}

{

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.