Tom's Hardware > Forum > Applications > Other Software > C Programming Question
Word :    Username :           
 

Thought I would post this here as it is the forum closest to this topic that I could find.

 

I'm trying to write this program for class, and I'm having trouble doing part of it.

 

What it needs to do is read a file and put the data into arrays. The file has 4 lines, with double variables on each line, separated by spaces (2 spaces for some reason). Each line needs to be entered into a separate array, so that there are 7 numbers in the first array, 7 in the second, 3 in the 3rd, and 3 in the fourth. He says we are supposed to use fscanf in order to read in the data, but I thought I read that it did not work with spaces. We are using loops to enter each variable, so there will be 4 loops total, 1 for each array/line.

 

The text file looks like:

 

xxxx xxxx xxxx xxx xxx xxxx xxxx
xxxx xxx xxxx xxx xxx xxxx xxxx
xxx xx xxx
xxxx xx xxxx

 

With the x's being numbers.

 

It has to be using C, no C++ commands.

 

THanks for any help in advance.

Sponsored Links
Register or log in to remove.

Do you know, in advance, the number of doubles per line? If so you could use a sequence of reads like:

fscanf(%d %d %d %d %d %d %d, &var1, &var2, &var3, &var4, &var5, &var6, &var7);
fscanf(%d %d %d %d %d %d %d, &var1, &var2, &var3, &var4, &var5, &var6, &var7);
fscanf(%d %d %d, &var1, &var2, &var3);
fscanf(%d %d %d, &var1, &var2, &var3);

with appropriate code between the reads to put the variables into your arrays.

If you don't know the format of the file in advance things are a little more tricky if you're restricted to fscanf().

Reply to ijack

I would edit my previous post, but this %^&*$% forum software won't let me.

I'm sure you noticed the elementary mistakes that I made in my hasty post! The fscanf calls should read:

fscanf(f, "%d ...", &var1, ...)

Reply to ijack

Thanks for the reply, but I need to try to read in that data using for loops. I know how times each one has to iterate though, so it should be easier.
I have tried this so far:

double Tpres[NP], Psat[NP], Tsat[NH], HGsat[NH];

FILE *data;
data = fopen("me30-proj10-data.txt","r" );
if(data == NULL)
{ printf("There was an error opening the file.\n" );

}
for(int count1 = 0; count1 <= NP; count1++)
{
fscanf(data, "%lf", Tpres[count1]);
}
for(int count2 = 0; count2 <= NP; count2++)
{
fscanf(data, "%lf", Psat[count2]);
}
for(int count3 = 0; count3 <= NH; count3++)
{
fscanf(data, "%lf", Tsat[count3]);
}
for(int count4 = 0; count4 <= NH; count4++)
{
fscanf(data, "%lf", HGsat[count4]);
}


But, every time I run it, I get an error: "An Access Violation (Segmentation Fault) raised in your program", during the first for loop.
Any ideas?

Reply to Monbackey

Ok, ignore my last post, i think i fixed it. (Missing & on variables).
:ange:

Reply to Monbackey

That's easy (I think!). You're counting from 0 to NP (i.e. NP + 1 times) but your array only has NP elements. Classic C mistake. Try changing the "<=" to "<" in the for loops.

Just seen your second post - that too!

Reply to ijack
Tom's Hardware > Forum > Applications > Other Software > C Programming Question
Go to:

There are 1201 identified and unidentified users. To see the list of identified users, Click here.

Please mind

You are about to answer a thread that has been inactive for more than 6 months.
If you still wish to proceed, please ensure that your posting is original and does not duplicate or overlap any prior responses to this thread.

Add a reply Cancel
Sponsored links
  • Ask the community now
  • Publish
Ad
They won a badge
Join us in greeting them