Archived

This topic is now archived and is closed to further replies.

Draxis

WHAT is up with this?

Recommended Posts

I have this simple little program that does nothing but creates ''saved files'' of entered data. The flow is pretty self explanitory, however, a problem arises at the line reading scanf("%c", &choose2); is reached. It seems to bypass this scanf altogether and continues on through the loop. Why?! It works if I use an int instead of a character for the scanf and condition. But why should I have to? Thanks ahead of time
  
#include <iostream.h>
#include <stdio.h>

typedef struct FileData
{
	int a;
	int b;
	char string[80];
}data, *data_ptr;

FILE *SaveState;
FILE *LoadState;
char FileName[80];
const char SIGNATUREW[5] = "SAVE";
char SIGNATURER[5];
char choose;
char choose2;

int main(void)
{
	data Save;
	data Load;
	
	while(choose != ''q'')
	{
		printf("l: Load File\nq: Quit\n");
		scanf("%c", &choose);
		if(choose == ''l'')
		{
			printf("Enter filename: ");
			scanf("%s", FileName);
			LoadState = fopen(FileName, "rb");
			if(LoadState == NULL)
			{
				printf("File does not exist. Make new? y/n\n");
				scanf("%c", &choose2);
				if(choose2 == ''y'')
				{
					printf("Enter Interger: ");
					scanf("%d", &Save.a);
					printf("Enter Interger: ");
					scanf("%d", &Save.b);
					printf("Enter Word: ");
					scanf("%s", Save.string);

					SaveState = fopen(FileName, "wb");
					if(SaveState == NULL)
					{
						printf("Could not create new file.\n");
					};
					fwrite(SIGNATUREW, sizeof(const char), sizeof(SIGNATUREW), SaveState);
					fwrite(&Save, sizeof(FileData), 1, SaveState);
					fclose(SaveState);
				};
			}
			else
			{
				fread(SIGNATURER, sizeof(char), 5, LoadState);
				if(*SIGNATURER == *SIGNATUREW)
				{
					fread(&Load, sizeof(FileData), 1, LoadState);
				}
				else
				{
					printf("Could not fild valid Save file!\n");
				};
				fclose(LoadState);
				printf("\n\nLoad.a: %d\n", Load.a);
				printf("Load.b: %d\n", Load.b);
				printf("Load.string: %s\n\n\n", Load.string);
			};
		};
	};
	return 0;
}
  

Share this post


Link to post
Share on other sites
Guest Anonymous Poster
I would initalizing your variables. I know it sounds simple but it normally the simple stuff that causes all the trouble.

Share this post


Link to post
Share on other sites
No, no, intializing the variables didn''t help.
I''ve tried that.
I probably need to flush an io buffer or SOMETHING. I dunno.

Share this post


Link to post
Share on other sites