954,496 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

Reading characters from a file

I am wondering how to read a file in c... this requires some more background information before you give me something useless

What I have so far:

#include <stdio.h>

int main(void)
{
	FILE *fpr,*fpw;
	char C;
	int I;
	
	fpr = fopen("cwM.dat","r");
	fpw = fopen("echocwM.dat","w");
	
	while (C != EOF)
	{
		fscanf(fpr,"%c",&C);
		fprintf(fpw,"%c",C);
		I = C;
		printf("%d\n",I);
	}

	fclose(fpr);fclose(fpw);
	
	return 0;
}


my real question is what if the file I'm trying to read is: ÿdÿ

before you post a solution, check your code against the above file.

TMDG
Newbie Poster
2 posts since Feb 2012
Reputation Points: 10
Solved Threads: 0
 

use "wb" and "rb" for writing and reading in data files

zeroliken
Veteran Poster
1,106 posts since Nov 2011
Reputation Points: 201
Solved Threads: 162
 

For me the question would be why would you use fscanf() to read a single character when fgetc() does it much more efficiently?

WaltP
Posting Sage w/ dash of thyme
Moderator
10,505 posts since May 2006
Reputation Points: 3,348
Solved Threads: 944
 

Thank You WaltP for pointing me to fgetc()

I was looking through the MAN pages and was able to fix my problem by using ftell() to see if the offset stopped changing after each read as follows:

#include <stdio.h>

int main(void)
{
	FILE *fpr,*fpw;
	char C;
	int I, i, EC, t, tl;
	
	fpr = fopen("cwM.dat","r");
	fpw = fopen("echocwM.dat","w");
	EC=0;
	t = ftell(fpr);
	printf("%d\n",t);
	tl=t;
	for(;;)
	{
		C = fgetc(fpr);
		t=ftell(fpr);
		printf("%d\n",t);
		if (t == tl)
		{
			break;
		}
		else
		{
			tl = t;
		}
		fprintf(fpw,"%c",C);
		I = C;
		if (I < 0)
		{
			I += 256;
		}
	}

	fclose(fpr);fclose(fpw);
	
	return 0;
}
TMDG
Newbie Poster
2 posts since Feb 2012
Reputation Points: 10
Solved Threads: 0
 
Thank You WaltP for pointing me to fgetc()


You're welcome....I was looking through the MAN pages and was able to fix my problem by using ftell() to see if the offset stopped changing after each read as follows:
Terrible idea. Why not just test the return of fgetc() and process the error or EOF?

WaltP
Posting Sage w/ dash of thyme
Moderator
10,505 posts since May 2006
Reputation Points: 3,348
Solved Threads: 944
 

This question has already been solved

Post: Markdown Syntax: Formatting Help
You
View similar articles that have also been tagged: