2013-07-23 2 views
0

안녕하세요 모두 .dat 파일을 만들어야합니다. 사용자가 넣은 파일의 이름을 지정해야하며이 파일에는 이름이 포함되어 있어야합니다 (이름이 모두 함께 사용되는 경우 중요하지 않음).), 날짜 및 그/그녀의 체중. 이제 문제는 파일 "name".dat가 만들어 지지만 파일 안에는 내 프로그램 대신 사용자 이름이어야한다는 것입니다. 파일 이름과 확장명처럼 "이름".dat로 표시됩니다. 나는 이런 식으로 퍼 팅 시도했습니다C++에서 .dat 파일 만들기

strcat(nombre,".dat"); 

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

:

#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; 
} 

나는 내가이 부분 틀렸다 위치를 생각 : 여기 나에게 코드

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

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

위의 두 thout the

strcat(nombre,".dat"); 

여러분 께 진심으로 감사드립니다.

+1

문자 배열 대신 문자열을 사용하십시오. 그리고 당신과 함께 일관되게하기 위해서는 cin을 사용해야합니다. 또한 FILE *은 C 코드에서 사용되는 것으로, fstream (더 자주 쓰는 이래로 파일의 읽기가 아닌)의 사용을 제안합니다. – Borgleader

+0

@Borgleader 실제로 프로그램 끝에서 파일에 얼마나 많은 레지스트리가 있는지 계산해야하기 때문에 파일을 읽어야한다고 생각합니다. – Gustavo

+0

미안하지만, 나는 정말로 당신의 문제 또는 당신이 달성하기를 원하는 것을 undestand하지 않았다. – Amadeus

답변

1

봐 :

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

당신은 내부 nombre 사람의 이름을 넣어. 그럼 당신은이 작업을 수행 : nombre.dat을하고 그런데 아카이브

로 작성하는 것을 사용 이상이 훨씬 더에 'C'질문을주의 :

strcat(nombre,".dat"); 

그래서 당신이 .dat 효과적으로 될 것 nombre에 추가

이 대다수의 'C'함수에서 'C++'질문을 사용하면됩니다. 이 문제를 해결하려면

, 그냥 새 변수를 만들고 같이 채 웁니다 :

char filename[100]; 

strcpy(filename, nombre); 
strcat(filename, ".dat"); 
+0

좋아, 그럼 basiclly 사용자 이름과 파일 이름을 두 fot 2 변수가 있어야합니다. – Gustavo

+0

그래, 기본적으로 ... – Amadeus

+0

이 점을 명확히 해 주셔서 감사합니다. 이제이 차이점을 배우기 만하면됩니다. 다시 감사합니다. – Gustavo

0

사용자 이름이 포함 된 변수에 .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

당신의 포스트가 정말 도움이되어 주셔서 감사합니다. 그리고 이것이 기능이 작동하는 방법이 지금까지 그것에 매달릴 수 없음을 보여 주셨습니다. 그리고 저것을 위해 나는 너를 더욱 고맙게 생각한다. – Gustavo