首先要做的是,这是作业,是的,我一直试图弄清楚自己,是的,我读过类似的问题,但没有找到我需要的帮助。了解sscanf格式
我有一个.txt文件,我正在读入一个结构,我真的很难理解sscanf的格式。我现在正处在一个地方,我只是在尝试任何一切,所以我担心,如果我确实做对了,那将是因为我很幸运,而不是因为我实际上明白我在做什么,希望你的好人可以提供帮助。
下面是从.TXT
4, Ben Appleseed, 1587 Apple Street, Salt Lake City, UT, 80514
2, Terri Lynn Smith, 1234 Slate Street, Cincinnati, OH, 45242
注样本数据:每个“字段”是由空格,逗号或制表符分隔。一些条目没有中间名,其他条目都遵循相同的模式。 (如果任何人有如何处理线W/O的所有8个字段我愿意帮助咨询)
这是我的结构:
typedef struct
{
long lngRecordID;
char strFirstName[50];
char strMiddleName[50];
char strLastName[50];
char strStreet[100];
char strCity[50];
char strState[50];
char strZipCode[50];
} udtAddressType;
这是我的家常便饭,填补结构
void AddAddressToArray(char strBuffer[], udtAddressType audtAddressList[])
{
int intIndex = 0;
for (intIndex = 0; intIndex < strBuffer[intIndex]; intIndex += 1)
{
if(sscanf(strBuffer, "%d, %s %s %s %s %s %s %s ",
&audtAddressList[intIndex].lngRecordID,
&audtAddressList[intIndex].strFirstName,
&audtAddressList[intIndex].strMiddleName,
&audtAddressList[intIndex].strLastName,
&audtAddressList[intIndex].strStreet,
&audtAddressList[intIndex].strCity,
&audtAddressList[intIndex].strState,
&audtAddressList[intIndex].strZipCode) != 8)
{
break;
}
}
}
这给了我的输出:
Address #50 -------------------------
Address ID: 4
First Name: Ben
Middle Name: Appleseed,
Last Name: 1587
Street Address: Apple
City: Street,
State: Salt
Zip Code: Lake
而这是不正确的。
我不明白如何指定我希望三个地址字段在一行上。 我一直在阅读的很多内容只是让我更加困惑。
功能将文件加载到数组:
void PopulateAddressList(udtAddressType audtAddressList[])
{
// Declare a file pointer
FILE* pfilInput = 0;
int intResultFlag = 0;
char strBuffer[50] = "";
char chrLetter = 0;
int intIndex = 0;
// Try to open the file for reading
intResultFlag = OpenInputFile("c:\\temp\\Addresses1.txt", &pfilInput);
// Was the file opened?
if (intResultFlag == 1)
{
// Yes, read in records until end of file(EOF)
while (feof(pfilInput) == 0)
{
// Read next line from file
fgets(strBuffer, sizeof(strBuffer), pfilInput);
AddAddressToArray(strBuffer, &audtAddressList[intIndex]);
intIndex += 1;
}
// Clean up
fclose(pfilInput);
}
}
任何帮助,非常感谢!
第一分割由逗号输入,和治疗的名称作为一个字段。然后根据空格拆分名称。 –
显示的代码片段中没有输出功能。请阅读[问]并提供[mcve]。 – Olaf
@Olaf输出功能添加 – user3691838