-1

Hi Again,

Well i'm bored and i've decided to do some coding just for practice and i've decided to work on a text based RPG, its only going to be basic due to my own knowledge but i think its doable. unfortunatly i've come accros a problem already and i've only writen a few lines of code.

The code deals with creating new character data, i plan to have all the character data stored in a text file, when the user starts a new game the program will ask for the character name then create a text file with this name write the players name and then close the text file.

heres the code that i have so far, this will eventualy be put into its own seperate function but for now its all in main().

#include <string.h>
#include <stdio.h>
#include "input.c"

FILE *playerdata;

int main(void)
{
	int buffer = 11;
	char name[buffer];
	printf("Please Enter Your Name\n");
	printf("Maximum Length 10 characters\n");
		
	fgets(name,buffer,stdin); 
	playerdata = fopen(name, "W+"); /*create the new file*/
	fgets(name,buffer,playerdata); /*write the players name to the file*/
	fclose(playerdata); /*close the file*/
}

thanks in advance for any help,

-Matt

4
Contributors
14
Replies
49
Views
8 Years
Discussion Span
Last Post by WaltP
Featured Replies
  • 1
    WaltP 2,905   8 Years Ago

    It's because you can't create a buffer using a variable as the size: [Code=c] int buffer = 11; char name[buffer]; [/code] You need something like: [Code=c] #include <string.h> #include <stdio.h> #include "input.c" #define BUFFERSIZE 11 FILE *playerdata; int main(void) { char name[BUFFERSIZE]; printf("Please Enter Your Name\n"); printf("Maximum Length 10 characters\n"); … Read More

0

Hi Again,

Well i'm bored and i've decided to do some coding just for practice and i've decided to work on a text based RPG, its only going to be basic due to my own knowledge but i think its doable. unfortunatly i've come accros a problem already and i've only writen a few lines of code.

The code deals with creating new character data, i plan to have all the character data stored in a text file, when the user starts a new game the program will ask for the character name then create a text file with this name write the players name and then close the text file.

heres the code that i have so far, this will eventualy be put into its own seperate function but for now its all in main().

#include <string.h>
#include <stdio.h>
#include "input.c"

FILE *playerdata;

int main(void)
{
	int buffer = 11;
	char name[buffer];
	printf("Please Enter Your Name\n");
	printf("Maximum Length 10 characters\n");
		
	fgets(name,buffer,stdin); 
	playerdata = fopen(name, "W+"); /*create the new file*/
	fgets(name,buffer,playerdata); /*write the players name to the file*/
	fclose(playerdata); /*close the file*/
}

thanks in advance for any help,

-Matt

should be fputs to write to a file

0

Thanks Gerard, but my program still crashes after the input of the data. so i assume there must still be problems in the code :(

0

You should check playerdata to be sure its valid

i.e is it NULL or valid

if (!playerdata)
{
        do something if not valid
}

plus you should return 0 in the main function

Edited by Dani: Formatting fixed

0

You should check playerdata to be sure its valid

i.e is it NULL or valid

if (!playerdata)
{
        do something if not valid
}

plus you should return 0 in the main function

surely playerdata shouldn't be null because i'm asking the C program to create the file.

the "W+" command opens the file for reading and writing, if it doesnt exist creates new if it does makes it blank.

and thanks for the return, totally forgot about that :)

Edited by mike_2000_17: Fixed formatting

0

i swear i'm still half asleep lol, another error fixed but, still crashes soon as i press enter after typing in name.

Just a thought though, could it be that the string being recorded is "Name (return key)" and thats whats causing the error?

-Matt

0
#include <string.h>
#include <stdio.h>

FILE *playerdata;


int main(void)
{
	int buffer = 11;	
	char name[buffer];
	printf("Please Enter Your Name\n");
	printf("Maximum Length 10 characters\n");
	fgets(name,buffer,stdin);
	playerdata = fopen(name, "w+"); /*create the new file*/
	if (!playerdata)
	{
		printf("it failed!\n");
	}
	else
	{
		fputs(name,playerdata); /*write the players name to the file*/
		fclose(playerdata); /*close the file*/
	
	}

	
	
	return 0;
}

I copied your code and ran it like this...and it worked!

0

How very peculiar, thanks gerard. I'm still wondering what i'd done wrong but it compiles and doesnt crash now so i'm happy :)

Thank you very much

-Matt

EDIT: 1 last problem, i dont know where its saved the file, its not in the project folder any ideas?

EDIT2: Stupid me :( its not saved the file because its not creating the file.

1

It's because you can't create a buffer using a variable as the size:

int buffer = 11;
	char name[buffer];

You need something like:

#include <string.h>
#include <stdio.h>
#include "input.c"

#define BUFFERSIZE  11

FILE *playerdata;

int main(void)
{
	char name[BUFFERSIZE];
	printf("Please Enter Your Name\n");
	printf("Maximum Length 10 characters\n");

And what if her name is Elizabethany? :)

Comments
Thanks for making me realise the problem :)
0

>So Walt what you are saying...is that C doesn't support dynamic arrays????
Not in that way. If you want to dynamically allocate memory, you would have to use malloc or calloc to allocate a chunk of memory, and then once done using it, deallocate it with free().

0

Well John A what about

#include <stdio.h>

void myfunc(int x);

int main (int argc, char**argv)
{
	int x = 123;
	myfunc(x);
	return 0;
}

void myfunc(int x)
{
	int iarray[x];
}
0

And what if her name is Elizabethany? :)

it would work lol, if the name is 10 characters long or more it creates the file perfectly. So my guess is that when i press return to store the name it also stores the rtn character which is what is making the program crash


Thanks walt :)


EDIT

int newgame()
{
	char name[BUFFER];
	int length;
	
	printf("Please Enter Your Name\n");
	printf("Maximum Length 10 characters\n");
	fgets(name,BUFFER,stdin);
	length = strlen(name); /*find the length of the name*/
	if (name[length-1] == '\n') /*check if last character is new line char*/
	{
		name[length-1] = 0; /*remove the newline char*/
	}
	playerdata = fopen(name, "w+"); /*create the new file*/
	if (!playerdata)
	{
		printf("Unable to Create File\n");
		return 1;
	}
	else
	{
		fputs(name,playerdata); /*write the players name to the file*/
		fclose(playerdata); /*close the file*/

	}
}

thats solved it :)

0

So after you read a name, check the last character in the name and if it's a \n change it to \0.

This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.