while((fscanf(datafile, " %127[^;] %[^\n]", name, movie)) == 2) {
printf("%s\n", movie);
for(i=0; i<=strlen(movie); i++) {
if(movie[i]!='\0'){
printf("%c", movie[i]);
} else {
printf("44 %d", i);
break;
}
}
printf("%d\n", strlen(movie));
break;
insert_tree(tree, name, movie);
}
我有这个代码 fscanf在分号后读入所有字符串,但在文件中的句子结束后也读取长空格
我怎样才能在正确的位置停止?
答案 0 :(得分:1)
可以&#39;吨。要读取包含空格的行,但在行以空格结尾时停止,则需要知道尾随空格是否存在而不读取它们。
相反,请阅读该行并对其进行后处理。
char buf[127+1+1];
fgets(buf, sizeof buf, stdin);
buf[strcspn(buf, "\n")] = '\0'; // Drop potential \n
// get rid of trailing ' '
/// This is inefficient, but shown for simplicity - certainly OP can do better.
char *p;
while ((p = strrchr(buf, ' ')) != NULL) *p = '\0';
答案 1 :(得分:0)
首先,永远不要使用scanf
或fscanf
。从文件中读取一行,然后使用sscanf
。这样,您的代码就不会因输入错误而发狂,并丢弃大量数据。它通常也会简化您的格式字符串。
对于长空格,我建议您只查找字符串中的最后一个非空格并在那里终止字符串。遗憾的是,由于没有标准的库函数,你必须手动执行此操作。
了解这些线的格式会很有帮助。如果它只是'名称;电影'(并且您保证不会;在名称或电影部分中)您可以使用strchr
来查找分隔符