Ich habe eine Struktur, eine TXT-Datei, die ich lesen möchte und den folgenden Code, der gut funktioniert. Ich versuche, eine Funktion zu machen, die meisten der gelesenen Dateifunktionen dort sind aber scheinen Probleme mit lokalen Variablen zu haben, etc ..Eine Datei über eine Funktion + Struktur lesen
#include <stdio.h>
#include <string.h>
int i,j,numberofseats,temp;
char platenr[8],selection,buff[60];
char firstname[20];
char lastname[20];
char phone[11];
char *p;
typedef struct
{
char fullname[40];
unsigned short phonenr[10];
unsigned int seatnr;
}PASSENGERS;
int main(void)
{
FILE *businfo;
businfo = fopen ("bus.txt","r");
if (businfo == NULL)
{
printf("Error Opening File, check if file bus.txt is present");
exit(1);
}
fscanf(businfo,"%s %d",platenr, &numberofseats);
printf("Bus Licence plate Nr is: %s and number of seats is: %d", platenr, numberofseats);
PASSENGERS passenger[numberofseats];
for (j=0;j<numberofseats;j++)
{passenger[j].seatnr=j+1;
strcpy(passenger[j].fullname,"\0");
}
while (fgets(buff,sizeof(buff),businfo))
{sscanf(buff, "%s %s %d %s", firstname, lastname, &temp,phone);
strcpy(passenger[temp-1].fullname,firstname);
strcat (passenger[temp-1].fullname, " ");
strcat(passenger[temp-1].fullname,lastname);
i=0;
for (p=phone;*p!='\0';p++)
{
(passenger[temp-1].phonenr[i])=*p -'0';
i++;
}
}
So nach dem Code, der funktioniert, ist dies die Funktion, die ich erstellt,
wo Ziel definiert werden sollte,
die Struktur zu aktualisieren, aber das * Ziel ist noch nicht bekannt, da sie in der txt-Datei (die temporäre Variable) ist, die durch die Funktion gelesen werden, wird sich ..
Das ist macht mich verrückt!
void readfile(PASSENGERS *target, FILE *businfo){
while (fgets(buff,sizeof(buff),businfo))
{sscanf(buff, "%s %s %d %s", firstname, lastname, &temp,phone);
strcpy(target->fullname,firstname);
strcat (target->fullname, " ");
strcat(target->fullname,lastname);
i=0;
for (p=phone;*p!='\0';p++)
{
(target->phonenr[i])=*p -'0';
i++;
}
}}
Bitte erläutern Sie, warum Sie eine ASCII-Anpassung an die Telefonnummer vornehmen, anstatt sie als Zeichenfolge zu belassen. Sie haben die Endmarkierung verloren, da jede "0" in der Telefonnummer zu einer Endmarkierung wird. –
Ich weiß, dass es eine Zeichenfolge sein könnte, aber es ist Teil der Übung, die ich versuche zu lösen, in einer Struktur die Telefonnummer als eine unsignierte kurze Reihe [10] zu speichern .. Also kein Grund dafür .. aber es funktioniert gut, wie es ist .. Die Probleme beginnen, wenn ich versuche, meinen Arbeitscode in eine Funktion zu konvertieren, die ich im Hauptteil aufrufen. Die Funktion im zweiten Fenster zum Beispiel funktioniert nicht .. – baskon1
Sie müssen speichern die * Länge * der Telefonnummer auch. –