2011-04-18 74 views
3

我一直在努力弄清楚fscanf格式。我只想阅读由空格分隔的单词文件。我想放弃包含非字母字符的任何字符串。如何阅读只包含字母与fscanf的字符串?

char temp_text[100]; 
while(fscanf(fcorpus, "%101[a-zA-Z]s", temp_text) == 1) { 
    printf("%s\n", temp_text); 
} 

我试过上面的代码都有和没有's'。我在另一个stackoverflow线程中读到,s使用时会被解释为文字's'而不是字符串。无论哪种方式 - 当我包括s和当我不包含s - 我只能从我正在阅读的文件中打印出第一个单词。

回答

2

%[扫描说明符不会跳过前导空格。您可以在它之前或末尾添加一个空格来代替您的s。你也有你的100和101倒退,因此一个严重的缓冲区溢出错误。

+0

感谢两个更正!我改变了宽度参数,并在']'之后添加了一个空格来代替s,现在一切都很顺利:-)作为一个更一般的问题,最好是只在使用类型说明符时才服务于您想要的确切目的?你有没有发现自己使用类型说明符结合修饰符? – 2011-04-18 02:31:01

+1

我发现自己很少使用'scanf'系列函数。每当我尝试使用它们时,我都会遇到轻微的偏离,我试图让这种行为难以或不可能解决。通常'fgets'甚至'fgetc'最后都变得更易于使用。 – 2011-04-18 02:35:01

1

s不需要。

这里有一些事情要尝试:

打印出从的fscanf返回值,并确保它是1

使用龟etc,以确保在的fscanf消耗空白获得下一个字符并将其打印出来。

+0

编辑格式化 – 2011-04-18 01:09:18

+0

啊。你帮我发现了R.正在打的什么,下一个空间没有被读取。谢谢! – 2011-04-18 02:33:21

相关问题