Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么我的角色计数不正确?_C_Linux_Text_Space_Word Count - Fatal编程技术网

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;