作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个文件正在尝试读取和填充变量。该文件由以下内容组成:
0\ttake a nap\n
1\tstudy heap-based priority queue\n
101\treview trees for Midterm 2\n
3\tdo assignment 7\n
这可能很难阅读,但是您可以看到有一个整数开头,然后是一个制表符,然后是一个字符串,然后是一个换行符。我需要取整数并将其放入变量中,检测制表符,并将制表符后面的字符串放入变量中,检测换行符,获取两个变量并使用信息创建一个节点,然后重新开始下一行。经过数小时的互联网搜索,这是我想出的:
char activity[SIZE];
char position[SIZE];
char line[100];
FILE *infile;
char *inname = "todo.txt";
int i = 0;
infile = fopen(inname, "r");
if (!infile) {
printf("Couldn't open %s for reading\n");
return 0;
}
while(i < 100 && fgets(line, sizeof(line), infile) != NULL){
sscanf(line, "%s\t%s", position, activity);
printf("%s\n", position);
printf("%s\n", activity);
i++;
}
在上面的 txt 文件上运行这个测试代码时,我得到了这个结果:
0
take
1
study
101
review
3
do
所以,在我看来,它正在获取第一个数字(作为字符串)并将其放入变量中,查看选项卡,并在选项卡之后抓取第一个序列并在将其放入另一个变量后停在那里.我该如何纠正这种情况?
最佳答案
您可以尝试更改sscanf
:
sscanf(line, "%s\t%[^\n]", position, activity);
%s
说明符在遇到空格时停止。这就是为什么它只读取 study 而不是 study 基于堆的优先级队列。 %[^\n]
告诉它:“读到换行符”。另一个问题:您应该测试 sscanf
返回的值,以确保它填充了所需数量的对象。
您也可以将第一个整数读取为整数,将 position
更改为 int
并使用 %d
而不是 %s
.
为了让自己清楚,我的建议是:
int position;
sscanf(line, "%d\t%[^\n]", &position, activity);
关于c - 如何从 txt 文件中读取制表符分隔的字符串并将它们放入变量中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10908668/
我是一名优秀的程序员,十分优秀!