Создание файла .dat в переполнении стека

Привет всем, я должен создать файл с расширением .dat, который должен быть назван в соответствии с тем, что вводит пользователь, и этот файл содержит имя человека (не важно, полное ли имя вместе), дату и его вес. Теперь проблема в том, что файл «имя» .dat создан, но внутри файла это должно быть просто имя пользователя, а в моей программе я обозначаю его как «имя» .dat (так же, как имя и расширение файла).
Вот мне код:

#include <cstdlib>
#include <iostream>
#include <stdio.h>
using namespace std;

struct Registro
{
int dia,mes,anio; //day,month,year
float peso; //weight
};
int main(int argc, char** argv) {
FILE* archivo;
int  numero=0;
char nombre[100],c;
Registro regis;

cout<<"Nombre del paciente: ";
scanf("%s", &nombre);
getchar();

strcat(nombre,".dat");

archivo = fopen(nombre, "a+");

if(archivo)
{
cout<<"En que dia estamos?(dd): ";
scanf ("%d",&regis.dia);
cout<<"En que mes estamos?: ";
scanf ("%d",&regis.mes);
cout<<"En que anio estamos?(aaaa): ";
scanf ("%d",&regis.anio);
cout<<"Cual es su peso?: ";
scanf ("%a",&regis.peso);
fprintf(archivo,"\r\n# ");
fprintf(archivo, " Nombre: %s  " " Dia: %d" " Mes: %d" " Anio: %d" " Peso: %g", nombre, regis.dia, regis.mes, regis.anio , regis.peso );rewind(archivo);
do
{
c = fgetc(archivo);
if ( c == '#' )
{
numero++;
}

}while(c != EOF);

cout<<"El numero de registros es de "<<numero;

fclose(archivo);
}
else
printf("Error al crear archivo.");

return 0;
}

Я думаю, где я не прав в этой части:

strcat(nombre,".dat");

archivo = fopen(nombre, "a+");

Я попытался изложить это так:

archivo = fopen(nombre".dat", "a+");

а также

archivo = fopen(nombre,".dat", "a+");

оба из них без

strcat(nombre,".dat");

Спасибо ребята заранее.

0

Решение

Посмотрите на эти кусочки кода:

 cout<<"Nombre del paciente: ";
scanf("%s", &nombre);

вы положили внутрь nombre имя человека. Затем вы делаете это:

 strcat(nombre,".dat");

так ты добавляешь .dat в nombre что эффективно становится: nombre.dat и использует это для записи в ваш архив

Кстати, обратите внимание, что это гораздо больше вопрос «C», чем вопрос «C ++», когда вы используете в этом большинстве функции «C».

Чтобы решить эту проблему, просто создайте новую переменную и заполните ее, например:

char filename[100];

strcpy(filename, nombre);
strcat(filename, ".dat");
1

Другие решения

Вы добавляете .dat к переменной, содержащей имя пользователя, так что у вас больше нет имени само по себе. Вам нужно использовать разные переменные для имени пользователя и имени файла.

 char nombre[100], filename[100], c;

cout<<"Nombre del paciente: ";
scanf("%s", &nombre);
getchar();

strcpy(filename, nombre);
strcat(filename,".dat");
archivo = fopen(filename, "a+");
0

По вопросам рекламы [email protected]