我正在尝试开发这个单词计数器(以及行和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
有人知道我做错了什么吗?谢谢你的帮助!
答案 0 :(得分:3)
您似乎认为此行会将所有四个变量初始化为0
:
int charHolder, result, wordCount, lineCount = 0;
它没有。仅初始化lineCount
,其余的未定义值。在= 0
和wordCount
之后添加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;