使用C的字符串分隔符
问题描述:
我已经开始学习如何使用字符串,但是我对整个概念有点困惑。我试图从包含字符串的文件逐字读取。使用C的字符串分隔符
以下是文件:
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));
}
答
是,%[^,. ]
应该工作 - 但请记住,当你这样做,就会停止阅读时遇到的任何这些字符。然后您需要在输入缓冲区中读取该字符,然后再尝试读取另一个字。
另外请注意,当您使用%s
或%[...]
,你想指定缓冲区的长度,或者你最终的东西基本上是喜欢gets
,其中从用户输入错误可/会导致缓冲区溢出。
你的意思是'fgetc()'?这只能读取一个字符,而'fscanf()'可以读取更多,也可以转换为其他数据类型。 – 2013-02-17 22:55:05
我总是希望使用'fgets'来获得一整行,并在循环中单独处理它。它确定你最终可以进入FEOF;如果你没有完成扫描一行,我不知道'fscanf'会为你自己表现,如果你没有用格式说明符来到行尾...... – Floris 2013-02-17 22:57:34
@ Code-Guru-啊,对不起,它应该是'fgets'。对不起,我现在编辑它。 – Nathan 2013-02-17 23:04:54