- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的作业遇到了问题。我需要将文本文件中的一些数据扫描到结构中。文本文件如下所示。
012345678;danny;cohen;22;M;danny1993;123;1,2,4,8;Nice person
223325222;or;dan;25;M;ordan10;1234;3,5,6,7;Singer and dancer
203484758;shani;israel;25;F;shaninush;12345;4,5,6,7;Happy and cool girl
349950234;nadav;cohen;50;M;nd50;nadav;3,6,7,8;Engineer very smart
345656974;oshrit;hasson;30;F;osh321;111;3,4,5,7;Layer and a painter
每一项数据与其匹配的变量。ID = 012345678名字 = 丹尼等等……
现在我不能使用 fscanf,因为没有间距,而且 fgets 会扫描所有行。
我用 %[^;]s 找到了一些解决方案,但是我需要编写一个代码块,然后为每项数据复制并粘贴 9 次。
在不更改文本文件的情况下是否还有其他选项,类似于我用 fscanf 编写的代码,如果每个数据项之间有间距?
*************** 更新 **************
您好,首先,非常感谢大家的帮助。我不明白你所有的答案,但这里我确实使用了一些东西。
这是我的代码:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{
char *idP, *firstNameP, *lastNameP;
int age;
char gender, *userNameP, *passwordP, hobbies, *descriptionP;
}user;
void main() {
FILE *fileP;
user temp;
char test[99];
temp.idP = (char *)malloc(99);
temp.firstNameP = (char *)malloc(99);
temp.lastNameP = (char *)malloc(99);
temp.age = (int )malloc(4);
temp.gender = (char )malloc(sizeof(char));
temp.userNameP = (char *)malloc(99);
fileP = fopen("input.txt", "r");
fscanf(fileP, "%9[^;];%99[^;];%99[^;];%d;%c", temp.idP,temp.firstNameP,temp.lastNameP,&temp.age, temp.gender);
printf("%s\n%s\n%s\n%d\n%c", temp.idP, temp.firstNameP, temp.lastNameP, temp.age, temp.gender);
fgets(test, 60, fileP); // Just testing where it stop scanning
printf("\n\n%s", test);
fclose(fileP);
getchar();
}
一切正常,直到我扫描 int 变量,之后它不扫描任何东西,我得到一个错误。
非常感谢。
最佳答案
如评论中所述,fscanf
可能是最短的选项(尽管 fgets
后跟 strtok
,手动解析是可行的选项) .
您需要为字符串字段使用 %[^;]
说明符(意思是:字符串不同于 ;
) ,字段由 ;
分隔以使用实际的分号(我们特别要求不要将其作为字符串字段的一部分使用)。最后一个字段应该是 %[^\n]
以消耗到换行符,因为输入没有终止分号。
您还应该(始终)将使用 scanf
系列函数读取的每个字符串字段的长度限制为比可用空间少一个(终止 NUL 字节是 +1)。因此,例如,如果第一个字段的长度最多为 9 个字符,则您需要 char field1[10]
并且格式为 %9[^;]
。
在格式字符串的开头放置一个空格通常是个好主意,以消耗任何空格(例如前面的换行符)。
当然,您应该检查 fscanf
的返回值,例如,如果按照示例有 9 个字段,则它应该返回 9
。
所以,最终的结果应该是这样的:
if (fscanf(file, " %9[^;];%99[^;];%99[^;];%d;%c;%99[^;];%d;%99[^;];%99[^\n]",
s.field1, s.field2, s.field3, &s.field4, …, s.field9) != 9) {
// error
break;
}
(或者,用逗号分隔数字的字段可以读作四个单独的字段,如 %d,%d,%d,%d
,在这种情况下,计数将达到 12 .)
关于c - 从文本文件中扫描数据,每个数据项之间没有间距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53937287/
这个问题在这里已经有了答案: Why should there be spaces around '[' and ']' in Bash? (4 个回答) 3年前关闭。 作为初学者,我没有在任何地方找
我有一个程序,我在其中输入 Java 程序来检查输入的字符串是否为回文。我有 2 个问题正在发生,我似乎一辈子都无法解决。 我已经输入了代码,这样它会告诉我它是否是一个回文,当所有小写字母不涉及空格时
table { border: 0; padding: 0; border-collapse: collapse;
我有 10 个单元格,其中第 6 个单元格的宽度必须与其他单元格不同。我试图在流委托(delegate)方法中更改它。但是从第 7 个单元格到第 10 个单元格的间距出了点问题。 func coll
我只是希望将这些新闻发布很好地隔开,以便在每次发布之间留出空隙。我在下面附上了一张图片来解释。我试图增加下面的填充,但这没有用。感谢您的帮助 .headline { position: absolut
如何使用 css 删除表格结构中烦人的单元格间距和/或填充?如果解决方案在 IE7-9、Firefox 和 Chrome 中有效,请加倍支持! 为什么CSS这么难!真让人抓狂! 最佳答案 通常,在该表
我在我正在使用的网站上设置了按钮。我想在按钮外创建一个 2px 的边框,有一点间距。请参见设计图像。 我可以创建边框,但不能创建边框之外的间距。这是当前的开发站点。按钮是第一个图形。 到目前为止我已经
我正在网站上生成元素符号列表(通过使用 jquery 自动完成功能)和我在网站中使用响应式网页设计。 我想在每个列表项后留一个空格。为此,我添加了以下 CSS: li { margin-b
我在格式化我的 HTML 页面时遇到困难。 正如您从源代码中看到的那样,它是一个表格,其中每一行都包含由我的网络应用程序动态填充的格式化记录列表。如果其中一列有空值,我想保留行的格式,所以我基本上应该
我一直致力于设计一个具有三个链接的跨移动设备宽度的设计。我不明白为什么我不能得到正确的间距。什么看起来不对劲? 设计如下: 下面是编码版本的样子: 这是我的 CSS: .b-nav-Wrapper {
我需要在 matplotlib 中生成一大堆垂直堆叠的图。结果将使用 savefig 保存并在网页上查看,所以我不在乎最终图像有多高,只要子图间隔开,这样它们就不会重叠。 无论我允许这个数字有多大,子
我需要在 matplotlib 中生成一大堆垂直堆叠的图。结果将使用 savefig 保存并在网页上查看,所以我不在乎最终图像有多高,只要子图之间有间距,不重叠即可。 无论我允许图有多大,子图似乎总是
是否可以在 BorderPane 上设置节点之间的间距? ? Swing 等效项将是 BorderLayout 上的 hgap 和 vgap . 我在文档中没有找到任何内容,我能想到的唯一可行的解
我有一个基于日历的应用 我希望用户能够通过捏合来放大和缩小日历。这是我的代码: let p = UIPinchGestureRecognizer(target: self, action: #sele
我在为 Android 编写一段代码时遇到问题。我使用的是eclipse开发环境。我想要完成的是将一周中的日子均匀地分布在表格的第一行(有六行)。我不知道如何才能使这些单词真正散开,而不是仅仅粘在一起
我有一个基于日历的应用 我希望用户能够通过捏合来放大和缩小日历。这是我的代码: let p = UIPinchGestureRecognizer(target: self, action: #sele
我该怎么做才能对齐此代码中的所有列?这是正确的还是......? import urllib.request from re import findall def determinarLlegadas
当使用垂直对齐的 BoxLayout 时,如何阻止组件随着包含的 JFrame 的增长而扩展,从而在底部留下额外的空间?我尝试了不同的布局,但很快就变得一团糟。我还尝试在面板底部添加胶水,但布局管理器
我正在尝试制作 cout #include int main() { std::cout << setw(4) << 1 << setw(4) << 2 << std::endl; } 输出
使用示例 http://developer.android.com/guide/tutorials/views/hello-tabwidget.html通过向布局添加 HorizontalScro
我是一名优秀的程序员,十分优秀!