gpt4 book ai didi

c - sscanf() 返回部分前几行数据

转载 作者:太空宇宙 更新时间:2023-11-04 04:33:44 25 4
gpt4 key购买 nike

给定一个 4 行的文本文件:以逗号 (,) 作为分隔符分隔。我通过使用 fgets 获取每一行并将 ISBN (978-xxxxxxxxxx) 与用户提供的 ISBN 进行比较来定位特定的 ISBN。这很好用。

即使 fgets() 到文件的最后一行。它仍然返回正确的信息。但是,当我试图将字符串的每个元素过滤到其受尊重的结构成员中以通过套接字发送时。最后一个元素返回所有正确的内容,直到最后 4 个元素/字段。除了文件的最后一行,此错误不会发生。

我认为这是一个 EOF 错误,但是我不太精通 sscanf() 以理解为什么会这样。

如果我要打印出 linebuf,它会返回正确的(未解析的)行。但是如果我打印出我所有的数据。它返回第三行数据的一部分。具体来说,版本份数可用份数

9780132126953,Andrew Tanenbaum & David Wetherall,Computer Networks,5,2011,Prentice-Hall,5,2
9780123745408,Michael Donahoo & Kenneth Calvert,TCP/IP Sockets in C,2,2009,Morgan Kaufman,3,0
9780133354690,William Stallings,Cryptography and Network Security,6,2014,Prentice-Hall,3,3
9780072467505,Yale Patt & Sanjay Patel,Introduction to Computing Systems from bits & gates to C & beyond 2,2004,McGraw-Hill,1,0

我的代码:

while (fgets(linebuf, 1024, file) != NULL) {
sscanf(linebuf, "%[^,], %[^,], %[^,], %u, %u, %[^,], %u, %u\n",
bufferISBN, bufferAuthor, bufferTitle,
&bufferEdition, &bufferYear, bufferPublisher,
&bufferInventory, &bufferAvailable
);

if (strcmp(temp->isbn, bufferISBN) == 0) { // found correct line, add data to struct
mssg.respType = Okay; // enum
mssg.requestID = temp->requestID;
strcpy(mssg.isbn, bufferISBN); // needs fixing
strcpy(mssg.authors, bufferAuthor);
strcpy(mssg.title, bufferTitle);
strcpy(mssg.publisher, bufferPublisher);
mssg.edition = bufferEdition;
mssg.year = bufferYear;
mssg.inventory = bufferInventory;
mssg.available = bufferAvailable;
}

注意 sscanf() 的格式,我也不确定它是否正确:

"%[^,], %[^,], %[^,], %u, %u, %[^,], %u, %u\n"

我也知道我正在使用大量的缓冲区变量。

编辑:当我限制标题的长度时。它返回正常。这是为什么?

最佳答案

有时换行符会离开文本文件的最后一行。要检查,请执行 od -t x1 <filename>最后一个字符应该是 0a

如果不是,您可以使用文本编辑器清理文件并添加换行符。

或者,您可以稍微更改代码来处理此问题:

while (fgets(linebuf, 1024, file) != NULL) {
char *cp = strchr(linebuf, '\n');
if (cp != NULL)
*cp = 0;
sscanf(linebuf, "%[^,], %[^,], %[^,], %u, %u, %[^,], %u, %u",

关于c - sscanf() 返回部分前几行数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33404620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com