C 为什么我的角色计数不正确?
以下代码获取字数:C 为什么我的角色计数不正确?,c,linux,text,space,word-count,C,Linux,Text,Space,Word Count,以下代码获取字数: int count = 0; for (int i = 0; chars[i] != EOF; i++) { if (chars[i] == ' ') { count++; } } 我的问题是,它没有正确计算字数 例如,如果myfile.txt中包含以下文本: spaced-out there's I'd like 给我一个4的字数 spaced out and in 我相信它仍然应该给我4个词。另外,当我将|chars[I]='\
int count = 0;
for (int i = 0; chars[i] != EOF; i++)
{
if (chars[i] == ' ')
{
count++;
}
}
我的问题是,它没有正确计算字数 例如,如果my
file.txt
中包含以下文本:
spaced-out there's I'd like
给我一个4
的字数
spaced out and in
我相信它仍然应该给我4个词。另外,当我将|chars[I]='\n'
添加为:
for (int i = 0; chars[i] != EOF || chars[i] == '\n'; i++)
我得到了更多的单词,8
spaced out and in
我写这个答案是因为我想,我知道你的困惑是什么。但是请注意,您没有解释如何读取该文件,我将给出一个示例并解释为什么我们要测试!=EOF
,它不是从文件中读取的字符
似乎您认为EOF
是存储在文件中的字符,但事实并非如此。如果你只想数数单词,你可以做如下的事情
int chr;
while ((chr = fgetc(file)) != EOF)
count += (chr == ' ') ? 1 : 0;
请注意,chr
必须是int
类型,因为EOF
是int
类型,但它肯定不在文件中!它是由函数(如fgetc()
)返回的,表示没有更多的内容可读取,请注意,必须尝试读取才能返回它
哦,还要注意,我的示例代码不会计算最后一个字。但这是你自己想出来的
此外,这将把多个空格算作“单词”,你也应该锻炼一下。我怀疑在任何时候chars[I]==EOF
。请说明如何填充chars
EOF
不是字符串中的有效字符,事实上,您在字符串中找不到它EOF
是一个类似于fgetc
返回以指示文件结束的值。“它没有正确计算单词数。”——>发布chars
和@Lukali的定义,而不是描述代码,更好更清晰地发布它-在问题中。示例输入也很有用。@chux我现在已经包含了代码,谢谢您的帮助。如果我有char[I]!='\0' ? 只是我已经得到了这些字符的数组,所以我想使用该数组而不是读取文件来获取字符。我刚刚检查过,当我使用“\0”时,我得到了相同的字符数。@Lukali如果您不显示代码,就无法进一步帮助您。如果您有时间看一看,我现在已经包括了它,也许,谢谢您。
spaced out and in
#define BUF_SIZE 500
#define OUTPUT_MODE 0700
int main(int argc, char *argv[])
{
int input, output;
int readSize = 1, writeSize;
char chars[BUF_SIZE];
int count = 0;
input = open(argv[1], O_RDONLY);
output = creat(argv[2], OUTPUT_MODE);
while (readSize > 0)
{
readSize = read(input, chars, BUF_SIZE);
if (readSize < 0)
exit(4);
for (int i = 0; chars[i] != '\0'; i++)
{
if (chars[i] == ' ')
{
count++;
}
}
writeSize = write(output, chars, readSize);
if (writeSize <= 0)
{
close(input);
close(output);
printf("%d words\n", count);
exit(5);
}
}
}
int chr;
while ((chr = fgetc(file)) != EOF)
count += (chr == ' ') ? 1 : 0;