Opening files with while loop - C [closed]
Hello fellow programmers.
I have little problem. I cannot figure out how to open files with different numbers (in the filename) going from 1 to whatever number of files exist.
For example, I have two (or eventually n) files named game_1.txt
and game_2.txt
. This loop should open these two files (or eventually all with this pattern, in that folder).
I am getting errors, namely:
passing argument 2 of 'fopen' makes pointer from integer without a
cast.
Here is what I have:
main()
{
FILE *fr;
int i=1;
char b;
while(fr=fopen("game_%d.txt",i) != NULL)
{
while(fscanf(fr,"%c",&b) > 0)
{
printf("%c",b);
}
i++;
}
return 0;
}
c file fopen
closed as too broad by too honest for this site, AdrianHHH, Makyen, Machavity, eyllanesc Nov 26 '18 at 4:35
Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. Avoid asking multiple distinct questions at once. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.
|
show 1 more comment
Hello fellow programmers.
I have little problem. I cannot figure out how to open files with different numbers (in the filename) going from 1 to whatever number of files exist.
For example, I have two (or eventually n) files named game_1.txt
and game_2.txt
. This loop should open these two files (or eventually all with this pattern, in that folder).
I am getting errors, namely:
passing argument 2 of 'fopen' makes pointer from integer without a
cast.
Here is what I have:
main()
{
FILE *fr;
int i=1;
char b;
while(fr=fopen("game_%d.txt",i) != NULL)
{
while(fscanf(fr,"%c",&b) > 0)
{
printf("%c",b);
}
i++;
}
return 0;
}
c file fopen
closed as too broad by too honest for this site, AdrianHHH, Makyen, Machavity, eyllanesc Nov 26 '18 at 4:35
Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. Avoid asking multiple distinct questions at once. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.
you should try to read the man of fopen, the second argument is not for the file numbering (whatever it means) see systutorials.com/docs/linux/man/3-fopen for example
– OznOg
Nov 25 '18 at 19:39
Sorry, cannot get what do you mean, please explain to fellow starting programmer in simplier words. Many thanks
– Dušo Morháč
Nov 25 '18 at 19:40
the second parameter iis for the mode, I guess it should be "r" in your case, see stackoverflow.com/questions/41407318/… for another example
– OznOg
Nov 25 '18 at 19:43
Okay, but how else do I make it to open files with %d as variable such as game_1.txt & game_2.txt and else..
– Dušo Morháč
Nov 25 '18 at 19:48
1
sprintf
could be used to create a filename from text and an integer. Then try tofopen
that filename.
– xing
Nov 25 '18 at 19:49
|
show 1 more comment
Hello fellow programmers.
I have little problem. I cannot figure out how to open files with different numbers (in the filename) going from 1 to whatever number of files exist.
For example, I have two (or eventually n) files named game_1.txt
and game_2.txt
. This loop should open these two files (or eventually all with this pattern, in that folder).
I am getting errors, namely:
passing argument 2 of 'fopen' makes pointer from integer without a
cast.
Here is what I have:
main()
{
FILE *fr;
int i=1;
char b;
while(fr=fopen("game_%d.txt",i) != NULL)
{
while(fscanf(fr,"%c",&b) > 0)
{
printf("%c",b);
}
i++;
}
return 0;
}
c file fopen
Hello fellow programmers.
I have little problem. I cannot figure out how to open files with different numbers (in the filename) going from 1 to whatever number of files exist.
For example, I have two (or eventually n) files named game_1.txt
and game_2.txt
. This loop should open these two files (or eventually all with this pattern, in that folder).
I am getting errors, namely:
passing argument 2 of 'fopen' makes pointer from integer without a
cast.
Here is what I have:
main()
{
FILE *fr;
int i=1;
char b;
while(fr=fopen("game_%d.txt",i) != NULL)
{
while(fscanf(fr,"%c",&b) > 0)
{
printf("%c",b);
}
i++;
}
return 0;
}
c file fopen
c file fopen
edited Nov 26 '18 at 0:22
MarredCheese
2,81111731
2,81111731
asked Nov 25 '18 at 19:35
Dušo MorháčDušo Morháč
267
267
closed as too broad by too honest for this site, AdrianHHH, Makyen, Machavity, eyllanesc Nov 26 '18 at 4:35
Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. Avoid asking multiple distinct questions at once. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.
closed as too broad by too honest for this site, AdrianHHH, Makyen, Machavity, eyllanesc Nov 26 '18 at 4:35
Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. Avoid asking multiple distinct questions at once. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.
you should try to read the man of fopen, the second argument is not for the file numbering (whatever it means) see systutorials.com/docs/linux/man/3-fopen for example
– OznOg
Nov 25 '18 at 19:39
Sorry, cannot get what do you mean, please explain to fellow starting programmer in simplier words. Many thanks
– Dušo Morháč
Nov 25 '18 at 19:40
the second parameter iis for the mode, I guess it should be "r" in your case, see stackoverflow.com/questions/41407318/… for another example
– OznOg
Nov 25 '18 at 19:43
Okay, but how else do I make it to open files with %d as variable such as game_1.txt & game_2.txt and else..
– Dušo Morháč
Nov 25 '18 at 19:48
1
sprintf
could be used to create a filename from text and an integer. Then try tofopen
that filename.
– xing
Nov 25 '18 at 19:49
|
show 1 more comment
you should try to read the man of fopen, the second argument is not for the file numbering (whatever it means) see systutorials.com/docs/linux/man/3-fopen for example
– OznOg
Nov 25 '18 at 19:39
Sorry, cannot get what do you mean, please explain to fellow starting programmer in simplier words. Many thanks
– Dušo Morháč
Nov 25 '18 at 19:40
the second parameter iis for the mode, I guess it should be "r" in your case, see stackoverflow.com/questions/41407318/… for another example
– OznOg
Nov 25 '18 at 19:43
Okay, but how else do I make it to open files with %d as variable such as game_1.txt & game_2.txt and else..
– Dušo Morháč
Nov 25 '18 at 19:48
1
sprintf
could be used to create a filename from text and an integer. Then try tofopen
that filename.
– xing
Nov 25 '18 at 19:49
you should try to read the man of fopen, the second argument is not for the file numbering (whatever it means) see systutorials.com/docs/linux/man/3-fopen for example
– OznOg
Nov 25 '18 at 19:39
you should try to read the man of fopen, the second argument is not for the file numbering (whatever it means) see systutorials.com/docs/linux/man/3-fopen for example
– OznOg
Nov 25 '18 at 19:39
Sorry, cannot get what do you mean, please explain to fellow starting programmer in simplier words. Many thanks
– Dušo Morháč
Nov 25 '18 at 19:40
Sorry, cannot get what do you mean, please explain to fellow starting programmer in simplier words. Many thanks
– Dušo Morháč
Nov 25 '18 at 19:40
the second parameter iis for the mode, I guess it should be "r" in your case, see stackoverflow.com/questions/41407318/… for another example
– OznOg
Nov 25 '18 at 19:43
the second parameter iis for the mode, I guess it should be "r" in your case, see stackoverflow.com/questions/41407318/… for another example
– OznOg
Nov 25 '18 at 19:43
Okay, but how else do I make it to open files with %d as variable such as game_1.txt & game_2.txt and else..
– Dušo Morháč
Nov 25 '18 at 19:48
Okay, but how else do I make it to open files with %d as variable such as game_1.txt & game_2.txt and else..
– Dušo Morháč
Nov 25 '18 at 19:48
1
1
sprintf
could be used to create a filename from text and an integer. Then try to fopen
that filename.Nov 25 '18 at 19:49
sprintf
could be used to create a filename from text and an integer. Then try to fopen
that filename.Nov 25 '18 at 19:49
|
show 1 more comment
2 Answers
2
active
oldest
votes
Use sprintf()
to build the filename:
#include <stdio.h>
// the c standard requires, that main() returns int
int main(void) // you should put void in the parameter list if a
{ // when a function takes no parameters.
char filename_format = "game_%d.txt";
char filename[sizeof(filename_format) + 3]; // for up to 4 digit numbers
for (int i = 1; i < 1000; ++i) {
snprintf(filename, sizeof(filename), filename_format, i);
FILE *fr = fopen(filename, "r"); // open for reading
if(!fr) // if the file couldn't be opened
break; // break the loop
int ch;
while ((ch = fgetc(fr)) != EOF)
putchar(ch);
fclose(fr); // close the file when no longer needed.
} // since fr will be overwritten in the next
// iteration, this is our last chance.
return 0;
}
2
Do not use nor recommendsprintf
. Usesnprintf
.
– jamesdlin
Nov 25 '18 at 20:09
1
@jamesdlin it doesn't really make a difference since the values are limited in this case, but in general you are right, of course, changed.
– Swordfish
Nov 25 '18 at 20:13
add a comment |
You may need something like this:
#include <stdio.h>
int main()
{
FILE *fr;
int i = 1;
char b;
while (1) // infinite loop, until broken out of
{
char to_open[32];
snprintf(to_open, 32, "game_%d.txt", i);
if ((fr = fopen(to_open, "r")) == NULL)
{
break;
}
while (fscanf(fr, "%c", &b) > 0)
{
printf("%c",b);
}
fclose(fr); // close the file after work is done
i++;
}
return 0;
}
In the original code, the API call to fopen
would fail, because the second argument it requires is a string, containing the modes that should be used when opening a file (in this case I chose "r"
- Open file for input operations).
The call to snprintf
into an intermediate temporary array is required, because fopen
does not support string formatting (such as using %d
).
Afterwards, the main loop can be finished, when the next file cannot be opened anymore using the break
statement.
It is also a good idea to include a call to fclose
after the necessary work is done (in this case, the "work" would be the inner while
loop), so that there are no unnecessary memory and resource leaks.
What year is this? Why does everyone keep recommendingsprintf
? Usesnprintf
. It was standardized almost 20 years ago.
– jamesdlin
Nov 25 '18 at 20:10
add a comment |
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
Use sprintf()
to build the filename:
#include <stdio.h>
// the c standard requires, that main() returns int
int main(void) // you should put void in the parameter list if a
{ // when a function takes no parameters.
char filename_format = "game_%d.txt";
char filename[sizeof(filename_format) + 3]; // for up to 4 digit numbers
for (int i = 1; i < 1000; ++i) {
snprintf(filename, sizeof(filename), filename_format, i);
FILE *fr = fopen(filename, "r"); // open for reading
if(!fr) // if the file couldn't be opened
break; // break the loop
int ch;
while ((ch = fgetc(fr)) != EOF)
putchar(ch);
fclose(fr); // close the file when no longer needed.
} // since fr will be overwritten in the next
// iteration, this is our last chance.
return 0;
}
2
Do not use nor recommendsprintf
. Usesnprintf
.
– jamesdlin
Nov 25 '18 at 20:09
1
@jamesdlin it doesn't really make a difference since the values are limited in this case, but in general you are right, of course, changed.
– Swordfish
Nov 25 '18 at 20:13
add a comment |
Use sprintf()
to build the filename:
#include <stdio.h>
// the c standard requires, that main() returns int
int main(void) // you should put void in the parameter list if a
{ // when a function takes no parameters.
char filename_format = "game_%d.txt";
char filename[sizeof(filename_format) + 3]; // for up to 4 digit numbers
for (int i = 1; i < 1000; ++i) {
snprintf(filename, sizeof(filename), filename_format, i);
FILE *fr = fopen(filename, "r"); // open for reading
if(!fr) // if the file couldn't be opened
break; // break the loop
int ch;
while ((ch = fgetc(fr)) != EOF)
putchar(ch);
fclose(fr); // close the file when no longer needed.
} // since fr will be overwritten in the next
// iteration, this is our last chance.
return 0;
}
2
Do not use nor recommendsprintf
. Usesnprintf
.
– jamesdlin
Nov 25 '18 at 20:09
1
@jamesdlin it doesn't really make a difference since the values are limited in this case, but in general you are right, of course, changed.
– Swordfish
Nov 25 '18 at 20:13
add a comment |
Use sprintf()
to build the filename:
#include <stdio.h>
// the c standard requires, that main() returns int
int main(void) // you should put void in the parameter list if a
{ // when a function takes no parameters.
char filename_format = "game_%d.txt";
char filename[sizeof(filename_format) + 3]; // for up to 4 digit numbers
for (int i = 1; i < 1000; ++i) {
snprintf(filename, sizeof(filename), filename_format, i);
FILE *fr = fopen(filename, "r"); // open for reading
if(!fr) // if the file couldn't be opened
break; // break the loop
int ch;
while ((ch = fgetc(fr)) != EOF)
putchar(ch);
fclose(fr); // close the file when no longer needed.
} // since fr will be overwritten in the next
// iteration, this is our last chance.
return 0;
}
Use sprintf()
to build the filename:
#include <stdio.h>
// the c standard requires, that main() returns int
int main(void) // you should put void in the parameter list if a
{ // when a function takes no parameters.
char filename_format = "game_%d.txt";
char filename[sizeof(filename_format) + 3]; // for up to 4 digit numbers
for (int i = 1; i < 1000; ++i) {
snprintf(filename, sizeof(filename), filename_format, i);
FILE *fr = fopen(filename, "r"); // open for reading
if(!fr) // if the file couldn't be opened
break; // break the loop
int ch;
while ((ch = fgetc(fr)) != EOF)
putchar(ch);
fclose(fr); // close the file when no longer needed.
} // since fr will be overwritten in the next
// iteration, this is our last chance.
return 0;
}
edited Nov 25 '18 at 20:12
answered Nov 25 '18 at 19:54
SwordfishSwordfish
10.2k11437
10.2k11437
2
Do not use nor recommendsprintf
. Usesnprintf
.
– jamesdlin
Nov 25 '18 at 20:09
1
@jamesdlin it doesn't really make a difference since the values are limited in this case, but in general you are right, of course, changed.
– Swordfish
Nov 25 '18 at 20:13
add a comment |
2
Do not use nor recommendsprintf
. Usesnprintf
.
– jamesdlin
Nov 25 '18 at 20:09
1
@jamesdlin it doesn't really make a difference since the values are limited in this case, but in general you are right, of course, changed.
– Swordfish
Nov 25 '18 at 20:13
2
2
Do not use nor recommend
sprintf
. Use snprintf
.– jamesdlin
Nov 25 '18 at 20:09
Do not use nor recommend
sprintf
. Use snprintf
.– jamesdlin
Nov 25 '18 at 20:09
1
1
@jamesdlin it doesn't really make a difference since the values are limited in this case, but in general you are right, of course, changed.
– Swordfish
Nov 25 '18 at 20:13
@jamesdlin it doesn't really make a difference since the values are limited in this case, but in general you are right, of course, changed.
– Swordfish
Nov 25 '18 at 20:13
add a comment |
You may need something like this:
#include <stdio.h>
int main()
{
FILE *fr;
int i = 1;
char b;
while (1) // infinite loop, until broken out of
{
char to_open[32];
snprintf(to_open, 32, "game_%d.txt", i);
if ((fr = fopen(to_open, "r")) == NULL)
{
break;
}
while (fscanf(fr, "%c", &b) > 0)
{
printf("%c",b);
}
fclose(fr); // close the file after work is done
i++;
}
return 0;
}
In the original code, the API call to fopen
would fail, because the second argument it requires is a string, containing the modes that should be used when opening a file (in this case I chose "r"
- Open file for input operations).
The call to snprintf
into an intermediate temporary array is required, because fopen
does not support string formatting (such as using %d
).
Afterwards, the main loop can be finished, when the next file cannot be opened anymore using the break
statement.
It is also a good idea to include a call to fclose
after the necessary work is done (in this case, the "work" would be the inner while
loop), so that there are no unnecessary memory and resource leaks.
What year is this? Why does everyone keep recommendingsprintf
? Usesnprintf
. It was standardized almost 20 years ago.
– jamesdlin
Nov 25 '18 at 20:10
add a comment |
You may need something like this:
#include <stdio.h>
int main()
{
FILE *fr;
int i = 1;
char b;
while (1) // infinite loop, until broken out of
{
char to_open[32];
snprintf(to_open, 32, "game_%d.txt", i);
if ((fr = fopen(to_open, "r")) == NULL)
{
break;
}
while (fscanf(fr, "%c", &b) > 0)
{
printf("%c",b);
}
fclose(fr); // close the file after work is done
i++;
}
return 0;
}
In the original code, the API call to fopen
would fail, because the second argument it requires is a string, containing the modes that should be used when opening a file (in this case I chose "r"
- Open file for input operations).
The call to snprintf
into an intermediate temporary array is required, because fopen
does not support string formatting (such as using %d
).
Afterwards, the main loop can be finished, when the next file cannot be opened anymore using the break
statement.
It is also a good idea to include a call to fclose
after the necessary work is done (in this case, the "work" would be the inner while
loop), so that there are no unnecessary memory and resource leaks.
What year is this? Why does everyone keep recommendingsprintf
? Usesnprintf
. It was standardized almost 20 years ago.
– jamesdlin
Nov 25 '18 at 20:10
add a comment |
You may need something like this:
#include <stdio.h>
int main()
{
FILE *fr;
int i = 1;
char b;
while (1) // infinite loop, until broken out of
{
char to_open[32];
snprintf(to_open, 32, "game_%d.txt", i);
if ((fr = fopen(to_open, "r")) == NULL)
{
break;
}
while (fscanf(fr, "%c", &b) > 0)
{
printf("%c",b);
}
fclose(fr); // close the file after work is done
i++;
}
return 0;
}
In the original code, the API call to fopen
would fail, because the second argument it requires is a string, containing the modes that should be used when opening a file (in this case I chose "r"
- Open file for input operations).
The call to snprintf
into an intermediate temporary array is required, because fopen
does not support string formatting (such as using %d
).
Afterwards, the main loop can be finished, when the next file cannot be opened anymore using the break
statement.
It is also a good idea to include a call to fclose
after the necessary work is done (in this case, the "work" would be the inner while
loop), so that there are no unnecessary memory and resource leaks.
You may need something like this:
#include <stdio.h>
int main()
{
FILE *fr;
int i = 1;
char b;
while (1) // infinite loop, until broken out of
{
char to_open[32];
snprintf(to_open, 32, "game_%d.txt", i);
if ((fr = fopen(to_open, "r")) == NULL)
{
break;
}
while (fscanf(fr, "%c", &b) > 0)
{
printf("%c",b);
}
fclose(fr); // close the file after work is done
i++;
}
return 0;
}
In the original code, the API call to fopen
would fail, because the second argument it requires is a string, containing the modes that should be used when opening a file (in this case I chose "r"
- Open file for input operations).
The call to snprintf
into an intermediate temporary array is required, because fopen
does not support string formatting (such as using %d
).
Afterwards, the main loop can be finished, when the next file cannot be opened anymore using the break
statement.
It is also a good idea to include a call to fclose
after the necessary work is done (in this case, the "work" would be the inner while
loop), so that there are no unnecessary memory and resource leaks.
edited Nov 25 '18 at 20:10
answered Nov 25 '18 at 19:52
KirkoKirko
343
343
What year is this? Why does everyone keep recommendingsprintf
? Usesnprintf
. It was standardized almost 20 years ago.
– jamesdlin
Nov 25 '18 at 20:10
add a comment |
What year is this? Why does everyone keep recommendingsprintf
? Usesnprintf
. It was standardized almost 20 years ago.
– jamesdlin
Nov 25 '18 at 20:10
What year is this? Why does everyone keep recommending
sprintf
? Use snprintf
. It was standardized almost 20 years ago.– jamesdlin
Nov 25 '18 at 20:10
What year is this? Why does everyone keep recommending
sprintf
? Use snprintf
. It was standardized almost 20 years ago.– jamesdlin
Nov 25 '18 at 20:10
add a comment |
you should try to read the man of fopen, the second argument is not for the file numbering (whatever it means) see systutorials.com/docs/linux/man/3-fopen for example
– OznOg
Nov 25 '18 at 19:39
Sorry, cannot get what do you mean, please explain to fellow starting programmer in simplier words. Many thanks
– Dušo Morháč
Nov 25 '18 at 19:40
the second parameter iis for the mode, I guess it should be "r" in your case, see stackoverflow.com/questions/41407318/… for another example
– OznOg
Nov 25 '18 at 19:43
Okay, but how else do I make it to open files with %d as variable such as game_1.txt & game_2.txt and else..
– Dušo Morháč
Nov 25 '18 at 19:48
1
sprintf
could be used to create a filename from text and an integer. Then try tofopen
that filename.– xing
Nov 25 '18 at 19:49