2

我做了一个非常简单的 C 程序,它应该计算一个字符串中有多少个字符和单词(我通过检查文本中有多少个空格和一个空格来计算单词)。当前代码如下(没有 'printf' 以使其更短):

int main(int argc, char *argv[])
{
    int character;
    int words, characters = 0;
    while ((character = getchar()) != '\n') {
        characters = ++characters;
        if ((character == ' ') || (character == '\d')) {
            words = ++words;
        } 
    } 
    return 0;
}

我的问题是计数单词不起作用。我得到了一个准确的字符数,但单词总是给我 2293576,我无法为全世界弄清楚为什么。

有人可以为我解开这个谜吗?

感谢您的所有回答;我真的很感激帮助。

如果我的原始技能让你有些头疼,我很抱歉。我是初学者,但希望能快速提高。

4

3 回答 3

6

你还没有初始化words。C 中未初始化的局部变量默认为未定义的值,并且不会自动初始化为零。

该声明

int x, y = 0;

不一样

int x = 0, y = 0;
于 2012-11-01T17:54:03.237 回答
3

您不会将 words 初始化为 0。另外,更改此:

characters = ++characters;

只是:

characters++;

(也是words如此)。

另外,'\d'字符是什么(除了一个普通的旧 d)?

于 2012-11-01T17:55:02.940 回答
2

您未能初始化“单词”。在声明中:

int words, characters = 0;

characters赋值为 0,但未words初始化,因此它可以包含任何整数值。然后,您的其余代码会words在其未初始化状态下进行修改。不是从 0 开始向上计数,words而是从 2293576 之类的东西开始并从那里向上计数。将代码分配words为 0 以及characters在 for 循环中使用它们之前。

int words = 0, characters = 0;
于 2012-11-01T17:57:21.433 回答