- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个以逗号分隔的船及其规范列表,我需要将其读入结构。每行包含不同的船及其规范,因此我必须逐行阅读文件。
示例输入文件(我将使用的文件超过 20 行):
pontoon,Crest,Carribean RS 230 SLC,1,Suzuki,115,Blue,26,134595.00,135945.00,1,200,0,250,450,450,0
fishing,Key West,239 FS,1,Mercury,250,Orange,24,86430.00,87630.00,0,0,250,200,500,250,0
sport boat,Tahoe,T16,1,Yamaha,300,Yellow,22,26895.00,27745.00,0,250,0,0,350,250,0
我有一个链表 watercraft_t:
typedef struct watercraft {
char type[15]; // e.g. pontoon, sport boat, sailboat, fishing,
// canoe, kayak, jetski, etc.
char make[20];
char model[30];
int propulsion; // 0 = none; 1 = outBoard; 2 = inBoard;
char engine[15]; // Suzuki, Yamaha, etc.
int hp; // horse power
char color[25];
int length; // feet
double base_price;
double total_price;
accessories_t extras;
struct watercraft *next;
} watercraft_t;
我的主要功能打开文件并将其存储在指针中:
FILE * fp = fopen(argv[1], "r"); // Opens file got from command line arg
然后将此文件传递给一个函数,该函数应准确解析 1 行,然后返回该节点以放置在链表中。
// Create watercrafts from the info in file
watercraft_t *new_waterCraft( FILE *inFile )
{
watercraft_t *newNode;
newNode = (watercraft_t*)malloc(sizeof(watercraft_t));
fscanf(inFile, "%s %s %s %d %s %d %s %d %lf %lf", newNode->type, newNode->make, newNode->model, &(newNode->propulsion), newNode->engine, &(newNode->hp), newNode->color, &(newNode->length), &(newNode->base_price), &(newNode->total_price));
return newNode;
}
当调用函数仅打印每艘船的类型时,结果如下:
1. pontoon,Crest,CRS
2. SLC,1,Suzuki,11fishing,Key
3. SLC,1,Suzuki,11fishing,Key
4. SLC,1,Suzuki,11fishing,Key
5. SLC,1,Suzuki,11fishing,Key
6. SLC,1,Suzuki,11fishing,Key
7. SLC,1,Suzuki,11fishing,Key
8. SLC,1,Suzuki,11fishing,Key
9. SLC,1,Suzuki,11fishing,Key
10. SLC,1,Suzuki,11fishing,Key
11. SLC,1,Suzuki,11fishing,Key
12. SLC,1,Suzuki,11fishing,Key
13. SLC,1,Suzuki,11fishing,Key
14. SLC,1,Suzuki,11fishing,Key
15. SLC,1,Suzuki,11fishing,Key
16. SLC,1,Suzuki,11fishing,Key
17. SLC,1,Suzuki,11fishing,Key
我已将问题缩小到如何使用 fscanf 从文件中读取值。
我尝试的第一件事是在我所有的占位符之间使用 %*c 但在运行之后,我的输出看起来完全一样。接下来我意识到我将无法使用 fscanf,因为文本文件将包含需要读取的空白。
我的下一个想法是使用 fgets,但我认为我也无法使用它,因为我不确定每次需要读取多少字符。我只需要它在行尾停止阅读,同时用逗号分隔值。
我已经搜索了几个小时的答案,但到目前为止似乎没有任何效果。
最佳答案
当您使用 %s
时,文本将被解析直到找到空格或换行符,例如,对于文件的第一行,fscanf
将将 "pontoon,Crest,Carribean"
存储在 make
中,当找到空格时解析停止。
fscanf
说明符必须匹配文件中的行,包括逗号,因此您需要这样的东西:
" %14[^,], %19[^,], %29[^,], %d , %14[^,], %d , %24[^,], %d , %lf , %lf /*...*/"
(注意格式说明符开头的空格,这样可以避免解析之前读取的剩余空白)
格式说明符 [^,]
使 fscanf
读取直到找到逗号或达到限制大小,它还会解析空格而不是 %s
,此外,使用 %14[^,]
避免了缓冲区溢出导致的潜在未定义行为,因为它将读取限制为 14
个字符加上空终止符匹配缓冲区的大小为 15
。
使用fgets
来解析行似乎是个好主意,然后您可以使用sscanf
来转换值,它的工作方式类似于fscanf
.
我建议您验证 *scanf
的返回,以确保读取了正确数量的字段。
关于c - 将逗号分隔的文本文件读入结构 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66312981/
我有一个字符串 "1,23,45,448.00",我想用小数点替换所有逗号,用逗号替换所有小数点。 我需要的输出是“1.23.45.448,00” 我尝试用 . 替换 , 如下: var mystri
我刚刚开始阅读 C。 情况: x = ( y = 3, ( z = ++y + 2 ) + 5 ) 它首先评估y = 3,然后评估( z =++y + 2) 我的问题: 它应该首先评估( z =++y
我是 VIM 初学者,我有一个奇怪的问题。我开始在终端模拟器中使用 vim,但今天我转向了 gVim。然后我意识到我不能在插入模式下写逗号!我试过 :map , , :imap ,都说没有找到映射。然
我上面有一个 JavaScript 正则表达式函数代码: function AcceptDigits(objtextbox) { var exp = /[^\d{1,3}]/g; ob
我需要使用 Java 的 split() 方法分割字符串。如何编写某个单词的分隔符的正则表达式模式?例如“和”? 我得到了分割空格和逗号的模式,即 [,\\s] 但我想添加单词 and ,以便它也成为
我们通常使用逗号来强调句子中的某些内容。但是说到搜索引擎优化,我只是想知道这是否有用,尤其是当标题标签或页面标题中所需的字符数有限(65到70个)以便爬虫读取时。我们是否需要使用逗号? 最佳答案 页面
我想找出每个学科学期的学生上课人数。以下是给出正确答案的查询 select semester,subject,count(stdId) from tblSubjectMaster group by s
int m = 5, d = 12, y = 1975, val; // May 12, 1975 谁能解释一下下面代码行中逗号运算符的功能/用途: val = (d+=m<3?y--:y-2
我不能在 Visual Studio 2013 中使用 Ctrl+, 和在 Windows 8.1 中使用 Pycharm。有没有办法找到哪个应用程序占用了这个快捷方式/热键? 我试过 Windows
我发现很难用谷歌搜索 powershell 中这两种执行方法调用的区别的答案。 : $member = "1.2.3.4:567" # IPaddress + port for demonstrati
谁能建议我如何在 emacs 中通过 n 逗号前进(或后退)? 我正在尝试浏览 CSV 文件 我知道我可以做类似的事情: C-u 100 M-f 但是能够在逗号上做更多的正则表达式会更准确 最佳答案
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
这是一个棘手的问题,我会尽力描述它。 我有一个文本输入,用户可以在标签中输入。 用户在输入中键入标签(例如“starcraft”)并按下逗号键后,我希望逗号之前的所有字符(即单词“starcraft”
我如何打印 csv 文件中逗号后的最后一个值,我想循环遍历该文件并打印出最后一个值: 数据: 20181016135716, 00-00-00-00-00-04, 10.0.0.1, 10.0.0.8
这个问题在这里已经有了答案: How to format the HH:mm:ss separators of a TimeSpan in a culture-aware manner? (3 个答
我想去掉除数字、$、逗号 (,) 之外的所有内容。 这只是 strip 字母 string Cadena; Cadena = tbpatronpos6.Text;
我已经在我的 xml 文件中创建了一个编辑文本。这是我的代码: 问题是在我的输出项目中它只能工作其中一个。只有点或只有逗号。怎么了 ?在模拟器中工作正常,只有在我的版本中没有。 最佳答案 我用不同
我正在尝试编写一个正则表达式来提取由空格分隔的单词(可选逗号 + 空格),从单词中删除“堆栈”前缀(如果有的话)。我正在尝试找到一个纯正则表达式解决方案,而无需对结果进行任何后处理或类似(如果可能)。
我正在尝试在数据库中插入一些数据,但遇到了一些麻烦。目前我无法将数据添加到我的表中,我不知道为什么。 我正在使用一些您不需要理解的通用方法,这适用于我的所有项目,并且在任何项目中都没有任何错误。 以下
我想从 json 中删除尾随逗号, { "key1": "value1", "object": { "key2": "value2", // <- remove comma },
我是一名优秀的程序员,十分优秀!