我在fscanf
函数中遇到了一些问题。我是C的新手,我想从文件中创建阅读线并将其保存到结构中,但似乎我不太了解它^^。
PATIENT *patientTab;
int tabSize = 0;
int patientCount = 0;
PATIENT temp;
int tempIndex = 0;
if (openFile()){
printf("Plik otworzony!\n\n");
while(fscanf(dataBase, "%s %f",
&temp.patientNumber,
&temp.patientGender,
&temp.patientLength,
&temp.patientWeigth,
&temp.patientHeadCircuit,
&temp.patientApperance,
&temp.patientPulse,
&temp.patientGrimace,
&temp.patientActivity,
&temp.patientRespiration)
!= EOF){
if (patientCount + 1 >= tabSize){
tabSize += 5;
patientTab = realloc(patientTab, sizeof(int) * tabSize);
}
for (tempIndex; tempIndex < 5; tempIndex++){
patientTab[patientCount].patientNumber[tempIndex] = temp.patientNumber[tempIndex];
}
patientTab[patientCount].patientGender = temp.patientGender;
patientTab[patientCount].patientLength = temp.patientLength;
patientTab[patientCount].patientWeigth = temp.patientLength;
patientTab[patientCount].patientHeadCircuit = temp.patientHeadCircuit;
patientTab[patientCount].patientApperance = temp.patientApperance;
patientTab[patientCount].patientPulse = temp.patientPulse;
patientTab[patientCount].patientGrimace = temp.patientGrimace;
patientTab[patientCount].patientActivity = temp.patientActivity;
patientTab[patientCount].patientRespiration = temp.patientRespiration;
patientCount++;
}
//free(temp);
fclose(dataBase);
}
else endProgram();
dataBase是全球性的。
问题在于程序试图循环&#34;而#34;包括&#34; fscanf&#34;函数,程序正在抛出错误而唯一的想法,我能做的就是关闭程序。我在互联网上找到了一个例子,但这是一个带有一个变量的简单例子。我确定问题是我的声明,包含许多参数&#34;&amp; temp&#34;。
结构是:
typedef struct Patient {
char patientNumber[5];
char patientGender;
double patientLength;
float patientWeigth;
float patientHeadCircuit;
int patientApperance;
int patientPulse;
int patientGrimace;
int patientActivity;
int patientRespiration;
}PATIENT;
...这是内容文件的片段: txt link
答案 0 :(得分:0)
我知道您指的是链接http://www.beetxt.com/BMB/
中的内容请改变 1)
while(fscanf(dataBase, "%s %f",
&temp.patientNumber,
&temp.patientGender,
&temp.patientLength,
&temp.patientWeigth,
&temp.patientHeadCircuit,
&temp.patientApperance,
&temp.patientPulse,
&temp.patientGrimace,
&temp.patientActivity,
&temp.patientRespiration)
与
while(fscanf(dataBase, "%s %c %lf %f %f %d %d %d %d %d",
temp.patientNumber,
&temp.patientGender,
&temp.patientLength,
&temp.patientWeigth,
&temp.patientHeadCircuit,
&temp.patientApperance,
&temp.patientPulse,
&temp.patientGrimace,
&temp.patientActivity,
&temp.patientRespiration)
2)
if (patientCount + 1 >= tabSize){
tabSize += 5;
patientTab = realloc(patientTab, sizeof(int) * tabSize);
}
使用
if (patientCount + 1 >= tabSize){
tabSize += 5;
patientTab = realloc(patientTab, sizeof(PATIENT) * tabSize);
}
3)
for (tempIndex; tempIndex < 5; tempIndex++){
patientTab[patientCount].patientNumber[tempIndex] = temp.patientNumber[tempIndex];
}
patientTab[patientCount].patientGender = temp.patientGender;
patientTab[patientCount].patientLength = temp.patientLength;
patientTab[patientCount].patientWeigth = temp.patientLength;
patientTab[patientCount].patientHeadCircuit = temp.patientHeadCircuit;
patientTab[patientCount].patientApperance = temp.patientApperance;
patientTab[patientCount].patientPulse = temp.patientPulse;
patientTab[patientCount].patientGrimace = temp.patientGrimace;
patientTab[patientCount].patientActivity = temp.patientActivity;
patientTab[patientCount].patientRespiration = temp.patientRespiration;
patientCount++;
与
for (tempIndex; tempIndex < 5; tempIndex++){
strcpy(patientTab[patientCount].patientNumber[tempIndex] = temp.patientNumber[tempIndex]);
patientTab[patientCount].patientGender = temp.patientGender;
patientTab[patientCount].patientLength = temp.patientLength;
patientTab[patientCount].patientWeigth = temp.patientLength;
patientTab[patientCount].patientHeadCircuit = temp.patientHeadCircuit;
patientTab[patientCount].patientApperance = temp.patientApperance;
patientTab[patientCount].patientPulse = temp.patientPulse;
patientTab[patientCount].patientGrimace = temp.patientGrimace;
patientTab[patientCount].patientActivity = temp.patientActivity;
patientTab[patientCount].patientRespiration = temp.patientRespiration;
patientCount++;
}
希望这项工作正常..并将char patientNumber[5];
更改为char patientNumber[6];