We're a community of 1077K IT Pros here for help, advice, solutions, professional growth and fun. Join us!
1,076,379 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Start New Discussion Reply to this Discussion

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.

3
Contributors
4
Replies
16 Hours
Discussion Span
1 Year Ago
Last Updated
6
Views
Question
Answered
TMDG
Newbie Poster
2 posts since Feb 2012
Reputation Points: 10
Solved Threads: 0
Skill Endorsements: 0

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

zeroliken
Nearly a Posting Virtuoso
1,346 posts since Nov 2011
Reputation Points: 214
Solved Threads: 205
Skill Endorsements: 14

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
Team Colleague
11,404 posts since May 2006
Reputation Points: 3,421
Solved Threads: 1,055
Skill Endorsements: 37

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
Skill Endorsements: 0
Question Answered as of 1 Year Ago by WaltP and zeroliken

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
Team Colleague
11,404 posts since May 2006
Reputation Points: 3,421
Solved Threads: 1,055
Skill Endorsements: 37

This question has already been solved: Start a new discussion instead

Post: Markdown Syntax: Formatting Help
 
You
View similar articles that have also been tagged:
 
© 2013 DaniWeb® LLC
Page rendered in 0.0674 seconds using 2.67MB