2016-01-06 225 views
0

当它发现100程序必须拆分字符串!还是?或者。 字符串必须包含\ n换行和!还是?或者。它是存在的。 test.txt的分割字符串

Lorem存有胡萝卜,增强回扣文件的例子,但他们occaecat时间 活力,如劳动和肥胖。在未来几年,努力如果谁的学区nostrud aliquip出她的锻炼,长寿的优势。 下载信息作为电子名片E,其中我们做的任何身体的锻炼收到 辛苦,除了从中获得一些优势,但谁拥有任何 找到与那些谁将会是一个没有恼人的 后果乐趣,或一个谁避免了疼痛的快感故障的权利,没有意见?

我读码器到第一个令牌,在凌晨1点错了吗?

int main(){ 
    FILE *file; 
    char stringa[MAXCHAR]; 

    file = fopen ("prova.txt", "r"); 
    if (file == NULL){ 
     perror("errore nell'apertura del file"); 
     return (1); 
    } 
    while (fscanf(file, "%[^!?.]", stringa) != EOF) { 
     printf("Data from file:\n%s", stringa); 
     //break; 
    } 
    fclose(file); 

    return 0; 
} 

我的输出:

Lorem存有胡萝卜,增强回扣,但他们occaecat时间 活力,如劳动和肥胖

感谢您的帮助......

+0

突破statemen TT插入意外 – Francesco

回答

0

您的读码器代替break高达找到的第一个令牌,但它把后面的令牌所以即使没有“破解”程序将无法再读取任何,它会进入一个无限循环一段时间,因为你的条件没有这么好定义,它应该是:

while (fscanf(file, "%[^!?.]", stringa) == 1) //checks if text was read successfully 

而且你需要的时候遇到摆脱任何标记,这应该这样做:

while (fscanf(file, "%[^!?.]", stringa) == 1) { 
     printf("Data from file: %s\n", stringa); 
     fscanf(file,"%*[!?.]"); 
    } 
1

退出,因为你一旦你发现了.,或!?输入使用break。 1
相信你想让它通过\n更换任何输入流中的这三个字符是什么。
如果当时的情况下通过printf("\n")

+1

1不会就建议更换'休息去“with'的printf(‘\ n’);',因为它并不真正认为是必要的,但去除of'休息”是当场就避免了环的过早终止。 – mah