在阅读句子

时间:2015-09-03 10:07:08

标签: c

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在分号后读入所有字符串,但在文件中的句子结束后也读取长空格

我怎样才能在正确的位置停止?

2 个答案:

答案 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)

首先,永远不要使用scanffscanf。从文件中读取一行,然后使用sscanf。这样,您的代码就不会因输入错误而发狂,并丢弃大量数据。它通常也会简化您的格式字符串。

对于长空格,我建议您只查找字符串中的最后一个非空格并在那里终止字符串。遗憾的是,由于没有标准的库函数,你必须手动执行此操作。

了解这些线的格式会很有帮助。如果它只是'名称;电影'(并且您保证不会;在名称或电影部分中)您可以使用strchr来查找分隔符