我有2个结构:医生和患者。我必须从2个不同的.txt文档中读取数据,然后在控制台中显示它 我正在使用CodeBlocks。当我尝试调试时,我发现在{strong> citireM 执行后发生了this。我问过我的老师,并做了一些谷歌搜索,但无济于事。
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
struct date
{
int d,m,y;
};
struct medic
{
int cod;
char name[50],specs[50];
};
struct patient
{
int cod;
date bd;
char name[50],adress[50];
};
struct consultatie
{
int codp,codm;
date dc;
char diag[100];
};
void citireM(medic M[], int &n)
{
int i; char * p; char l[50];
ifstream f("medics.txt");
f>>n;
for(i=0;i<n;i++)
{
strcpy(l,"");
f>>M[i].cod;
f.getline(l,50);
p=strtok(l,";");
strcpy(M[i].name,p);
p=strtok(NULL,";");
strcpy(M[i].specs,p);
}
}
void citireP(patient P[], int &n)
{
char * p; char l[50];
ifstream ff("patients.txt");
ff>>n;
for(int i=0;i<n;i++)
{
ff>>P[i].cod;
strcpy(l,"");
ff.getline(l,50);
p=strtok(l,";");
strcpy(P[i].name,p);
p=strtok(NULL,";");
strcpy(P[i].adress,p);
ff>>P[i].bd.d>>P[i].bd.m>>P[i].bd.y;
}
}
void printM(medic M[], int n)
{
for (int i=0;i<n;i++)
cout<<M[i].cod<<" "<<M[i].name<<" "<<M[i].specs;
}
void printP(patient P[], int n)
{
int i;
for (i=0;i<n;i++)
cout<<P[i].cod<<" "<<P[i].name<<" "<<P[i].adress<<" "<<P[i].bd.d<<"/"<<P[i].bd.m<<"/"<<P[i].bd.y;
}
int main()
{
medic m[30];
patient p[300];
int nm,np;
citireM(m,nm);
citireP(p,np);
printM(m,nm);
printP(p,np);
return 0;
}
medics.txt
3 007 J.J. Jouleau; medic stomatolog; 32 Michael Bush; medic chirurg; 88 Ceva Nume Lung Aici; medic neidentificat;
patients.txt
2 321 Insert Name Here; Timisoara, judetul Timis; 2 5 1991 123 Insert Some Other Name Here; Nu se stie unde traieste; 1 6 1654
答案 0 :(得分:1)
我正在努力使你的功能与你的功能尽可能接近。尽管如此,有更清洁的方法可以做到这一点。这也没有考虑输入文件的错误,但我只是想让你走上正确的轨道。
int char_to_int(char* src)
{
int res = 0;
for(int i = 0; src[i] != '\0'; ++i) {
res = res * 10 + src[i] - '0';
}
return res;
}
void citireP(patient P[], int &n)
{
const int BUFFER_SIZE = 256;
char* p; char l[BUFFER_SIZE];
char* date;
ifstream ff("patients.txt",ios_base::skipws);
ff >> n;
char input[3][BUFFER_SIZE];
for(int i = 0; i<n; i++) {
ff >> P[i].cod;
strcpy(l, "");
ff.getline(l,BUFFER_SIZE);
p = strtok(l, ";");
strcpy(P[i].name, p);
p = strtok(NULL, ";");
strcpy(P[i].adress, p);
p = strtok(NULL, ";");
date = strtok(p, " ");
P[i].bd.d = char_to_int(date);
date = strtok(NULL, " ");
P[i].bd.m = char_to_int(date);
date = strtok(NULL, " ");
P[i].bd.y = char_to_int(date);
}
}
...编辑
我刚刚为你编写了一个atoi类型的函数,所以你没有在项目中包含额外的东西。