I'd like your help with understanding how should I do the following:
I have a file that contains integers separated by spaces ' '. I need to read all integers, sort them and write them as a strings to another file. I wrote a code, but I read char by char, put the word in an char sub_arr [Max_Int] and when I met ' ', I put these chars, now one string, after atoi-ing it into another Main int array,until reaching the end of the file, string by string, and then I sorted and itoa-ing them and wrote them in another file.
But then I remembered that there's a fscanf function:I read about it and still I didn't understand completely what does it do and how to use it.
In my case, where all integers separated by space, can I write fscanf(myFile,"%s",word)
? would it know not to consider ' ' and stop at the end of the specific string?! How?
More than that, Can I write fscanf(myFile,"%d",number)
and it would give me the next number itself? (I must have misunderstood it. Feels like magic).
You are right, fscanf
can give you the next integer. However, you need to provide it with a pointer. Therefore, you need an &
behind number:
fscanf(myFile, "%d", &number);
*scanf
family of functions also automatically skip whitespace (except when given %c
, %[
or %n
).
Your loop with reading file will eventually look like this:
while (you_have_space_in_your_array_or_whatever)
{
int number;
if (fscanf(myFile, "%d", &number) != 1)
break; // file finished or there was an error
add_to_your_array(number);
}
Side note: you may think of writing like this:
while (!feof(myFile))
{
int number;
fscanf(myFile, "%d", &number);
add_to_your_array(number);
}
This, although looks nice, has a problem. If you are indeed reaching the end of file, you will have read a garbage number and added to your data before testing the end of file. That is why you should use the while
loop I mentioned first.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With