fscanf()文本只读

时间:2018-04-08 09:18:17

标签: c scanf

我尝试使用带有%[]说明符的fscanf()来读取文本文件。 像这样的文件:

qwety, qwe<

qwety,qwety.... qwety

所以,我需要只读取没有任何分隔符的文本,如逗号,空格,点。 寻找答案说的是这样的,但它没有正常工作:成功只读取第一个单词并进入永无止境的循环

char buff[1024];
while(!feof){
    fscanf(file, "%[a-z]", buff);
    puts(buff);
}

我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:1)

问题是,在将第一个单词读入buff后,文件中的下一个字符(输入缓冲区)不是a-z,因此对fscanf的所有后续调用都会失败匹配失败。要解决此问题,请反转字符类并使用赋值抑制运算符'*')来读取和丢弃任何非a-z个字符,例如

while (fscanf(file, "%1023[a-z]%*[^a-z]", buff) == 1)
    puts(buff);