将输入写入文件并从C ++中读取文件

时间:2016-09-17 03:32:16

标签: c++ string io

我能够最终生成一个有关输入和显示n个学生详细信息(学生ID#,姓名和年龄)的工作代码...虽然名称不是全名,但我想将这些输入写入文本文件,然后从文本文件中读取。我将非常感谢您的帮助:

#include <stdio.h>
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <fstream>

using namespace std;

struct student

{
    int sno, sage;
    char sname[100];
};

  int main(int e, char* argv[])   
{

    struct student s[e];
    int i;

    ofstream outfile;
    outfile.open("info.txt");

printf("How many entries are you making?: ");
scanf("%d",&e);

printf(" \n");


 printf("Please enter Student Information:\n");

      for(i=0;i<e;++i)
{
    s[i].sno=i+1;

    printf("\nEnter Information for student %d\n",s[i]);
    printf("================================\n");


    cout<<"\nEnter (4 digits) student ID No: ";
    cin>>s[i].sno;

    cout<<"\nEnter student's name: ";
    cin>>s[i].sname;


    cout<<"\nAge of student: ";
    cin>>s[i].sage;

    printf("\n");

//If i do this, I get only first set of data 
 outfile <<s[i].sno<<" "<<s[i].sname<<" "<<s[i].sage<<endl;

/*I am trying to get data into txt file using the loop below but it looks odd and it collects some of the first set of data, and completes it like this: 1212 kop 23
1627953384  1629646589*/

    /*for(i=0;i<e;++i)
     {
        outfile <<s[i].sno<<" "<<s[i].sname<<" "<<s[i].sage<<endl;
     }*/

     outfile.close();
}

printf("Displaying information of student(s):\n");
printf("==================================\n");

for(i=0;i<e;++i)
{
     printf("\nInformation for Student %d:\n",i+1);

     cout<<"\nStudent ID:"<<s[i].sno;

     cout<<"\nStudent name: "<<s[i].sname;

     cout<<"\nAge of student: "<<s[i].sage;

     printf("\n\n");

}

return 0;

}

2 个答案:

答案 0 :(得分:0)

我建议从一个写入文件的简单程序开始:

#include <fstream>
#include <iostream>
#include <cstdlib>

int main(void)
{
  std::ofstream output_file("text.txt");
  std::cout << "Writing to output file.\n";
  output_file << "This is my text.\n";
  output_file.flush();
  std::cout << "Finished writing to file.\n";
  output_file.close();

  std::cout << "Paused. Press Enter to continue.\n";
  std::cin.ignore(100000, '\n');
  return EXIT_SUCCESS;
}

执行上述程序后,您应该验证文本文件是否包含正确的文本。

接下来,您可以添加其他代码,例如提示用户并获取输入。

答案 1 :(得分:0)

我认为您不知道如何通过文件读取或写入。这就是你遇到问题的原因。人们通常使用两种方式。通过这两个示例教程,以便很好地理解这些方法。   - c methods   - c++ methods

这是我修改过的代码,可以使用这两种方法从文件中读取和写入 -

Given Input file - student.txt. //first line No. of input 
2
1234    manish      34
4321    mukesh      43

Code
#include <iostream>
#include <cstdio>
#include <fstream>

using namespace std;

struct student
{
int sno, sage;
char sname[50];
};

//Read data using C Method
void ReadAndWriteCMethod(){
    student s[100];


    FILE* f;
    f = fopen("student.txt","r");
    int N;
    fscanf(f,"%d",&N);

    **//Reading from file**
    for(int i=0; i<N; i++){
      fscanf(f,"%d %s %d",&s[i].sno, &s[i].sname, &s[i].sage);  
    }
    fclose(f);

    **//Writing over file**
    f = fopen("wstudent1.txt","w+");
    for(int i=0; i<N; i++){
      cout<<s[i].sno<<" "<<s[i].sname<<" "<<s[i].sage<<endl;
      fprintf(f,"%d %s %d\n",s[i].sno,s[i].sname,s[i].sage);
    }
    fclose(f);
}

//Reading and writing using C++
void ReadAndWriteCPlusPlusMethod(){
  student s[100];

  **// Reading data**
  std::ifstream fin("student.txt");

  char s2[100];
  int N; fin>>N;
  for(int i=0; i<N; i++){
    fin>>s[i].sno>>s[i].sname>>s[i].sage;
    cout<<s[i].sno<<" "<<s[i].sname<<" "<<s[i].sage<<endl;
  }
  fin.close();

  **//Writing data**
  std::ofstream fout("wstudent2.txt");
  for(int i=0; i<N; i++){
    fout<<s[i].sno<<" "<<s[i].sname<<" "<<s[i].sage<<endl;
  }      
  fout.close();
}

int main()
{
  ReadAndWriteCMethod();
  ReadAndWriteCPlusPlusMethod();
}

运行后,这将生成两个文件wstudent1.txt和wstudent2.txt文件。