字计数器在C中获得负值

时间:2015-02-20 21:10:10

标签: c char word counter

我正在尝试开发这个单词计数器(以及行和char计数器)。规则是一切都是一个单词,除了由空格,制表符,换行符,分号和连字符分隔的任何内容。例如:  'xyz''go; down''hey..howareyou'每个都是1个字,'嘿:你'tacos-burrito'每个都是2个字。

我的方法如下:

#include <stdio.h>
#include <stdlib.h>

int main(){

    int charHolder, result, wordCount, lineCount = 0;

    int recursiveSeparatorCheck(charOther){
        if(isspace(charOther)||charOther=='\t'||charOther=='\n' || charOther ==':' || charOther == '-')
            return 1;
        return 0; 
    }


    while ((charHolder = getchar()) != EOF){
        if(charHolder == '\n')
            lineCount++;
        result++;
        if(recursiveSeparatorCheck(charHolder) == 1)
            continue;
        wordCount++;


    }


    printf("Number of char: %d \n", result);
    printf("Number of lines: %d \n", lineCount);
    printf("Number of words: %d \n", wordCount);
    return (EXIT_SUCCESS);
}

当我运行程序并将其输入以读取包含20行和160个单词的文件时,它会打印以下内容:

Number of char: 1130 
Number of lines: 20 
Number of words: -4195164 

有人知道我做错了什么吗?谢谢你的帮助!

3 个答案:

答案 0 :(得分:3)

您似乎认为此行会将所有四个变量初始化为0

int charHolder, result, wordCount, lineCount = 0;

它没有。仅初始化lineCount,其余的未定义值。在= 0wordCount之后添加result以初始化它们。

答案 1 :(得分:2)

wordCount未初始化,包含不确定的值,您需要将其显式初始化为0,以及所有其他变量

int charHolder, result, wordCount, lineCount = 0;

只是初始化lineCount,因为它需要这样的工作

int charHolder, result, wordCount, lineCount;
charHolder = result = wordCount = lineCount = 0;

我根本不喜欢,但似乎这就是你的意思。

注意真的需要使用编译器警告。

答案 2 :(得分:1)

你应该试试这个:

int charHolder = 0, result = 0, wordCount = 0, lineCount = 0;