从文件txt拆分字符串

时间:2016-01-06 18:19:08

标签: c file scanf

C程序必须在找到时拆分它!要么 ?要么 。 该字符串必须包含\ n换行符和!要么 ?要么 。它存在的地方。文件test.txt的一个示例

  

Lorem ipsum dolor sit amet,consectetur adipisicing elit,sed do eiusmod tempor   incididunt ut labore et dolore magna aliqua。 Ut enim ad minim veniam quis nostrud   练习ullamco laboris nisi ut aliquip ex ea commodo consequat。   Ut enim ad minima veniam,quis nostrum exercitationem ullam corporis suscipit   Laboriosam,nisi ut aliquid ex ea commodi consequatur Quis autem vel eum   iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae   consequatur,vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?

我的代码读取第一个令牌,我错在哪里?

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 ipsum dolor sit amet,consectetur adipisicing elit,sed do eiusmod tempor incididunt ut labore et dolore magna aliqua

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

2 个答案:

答案 0 :(得分:1)

退出是因为您在输入中发现break.?后立即使用了!。 我相信你想要的是用\n替换输入流中的这三个字符中的任何一个 如果是这种情况,请将break替换为printf("\n")

答案 1 :(得分:0)

你的代码读取了第一个找到的令牌,但是它会把令牌放回去,所以即使没有“中断”你的程序也不会再读取它,它会进入无限循环,因为你的while条件定义不是很好,它应该是:

 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,"%*[!?.]");
    }