【问题标题】:Creating a .dat file in C++在 C++ 中创建 .dat 文件
【发布时间】:2013-07-23 03:34:30
【问题描述】:

大家好,我必须创建一个 .dat 文件,无论用户输入什么名称,该文件都应命名,并且该文件包含人名(全名是否在一起无关紧要)、日期和他/她重量。现在的问题是创建了文件“name”.dat,但在文件内部它应该只是用户名,而不是在我的程序中显示为“name”.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");

先谢谢大家了。

【问题讨论】:

  • 请使用字符串而不是字符数组。为了与 cout 保持一致,您应该使用 cin。 FILE* 也是 C 代码中使用的东西,我建议使用 fstream (更具体地说是 ofstream,因为你正在写入它而不是从文件中读取)。
  • @Borgleader 实际上我认为我必须阅读该文件,因为在程序结束时我必须计算文件中有多少个注册表。
  • 对不起,我真的不明白你的问题是什么,或者你想要达到什么目的
  • @Gustavo 为什么在你写它们的时候不计算它们?
  • @TomásBadan 我的问题是在文件中它应该是用户名,例如“TomasBadan”,但它却显示为“TomasBadan.dat”。现在我想保存用户名、他/她注册体重的日期和他/她的体重。最后应该会在屏幕上显示该文件有多少注册表。

标签: c++ file stdio createfile strcat


【解决方案1】:

看看这段代码:

 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");

【讨论】:

  • 好的,所以基本上需要有 2 个变量 1 用于用户名,另一个用于文件名。
  • 感谢您澄清这一点,现在我只需要开始学习这些差异。再次感谢您。
【解决方案2】:

您将.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+");

【讨论】:

  • 刚看到你的帖子,谢谢你,它真的很有帮助,它展示了这个函数是如何工作的,直到现在才能掌握它。为此,我更加感谢你。
猜你喜欢
  • 2014-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-06
  • 1970-01-01
相关资源
最近更新 更多