2

我已经开始学习如何使用字符串,但我对整个概念有点困惑。我正在尝试从包含字符串的文件中逐字读取。

这是文件:

Row, row, row your boat,
Gently down the stream.
Merrily, merrily, merrily, merrily,
Life is but a dream. 

我的方法是使用

char hold[25];

//  Statement
while(fscanf(fpRow, "%s", hold) != EOF)
    printf("%s %d\n", hold, strlen(hold));

所以我的任务是读取每个字符串并排除所有 , 和 . 在文件中。这样做的方法是使用 %[^,.] 而不是 %s 对吗?但是当我尝试这种方法时,我的字符串只想读取文件的第一个单词并且循环永远不会退出。有人可以向我解释我做错了什么吗?另外,如果不问太多 fscanf 和 fgets 之间的意义是什么?谢谢

    while(fscanf(fpRow, "%24[^,.\n ]", hold) != EOF)
{
    fscanf(fpRow, "%*c", hold);
    printf("%s %d\n", hold, strlen(hold));
}
4

1 回答 1

4

是的,%[^,. ]应该可以工作——但请记住,当你这样做时,它会在遇到任何这些字符时停止阅读。然后,您需要从输入缓冲区中读取该字符,然后再尝试读取另一个单词。

另请注意,当您使用%sor时%[...],您想要指定缓冲区的长度,或者您最终会得到类似的内容gets,其中用户的错误输入可能/将导致缓冲区溢出。

于 2013-02-17T22:51:56.733 回答