无法打印循环增量的变量值

时间:2014-07-11 15:18:49

标签: c loops scope

我目前正在尝试学习C编程语言,并且正在使用Kernighan和Ritchie的 The C Programming Language,Second Edition 。我正在尝试编写一个程序,类似于他们在第一章关于文本流的书中给出的一个例子。

我的程序应该将文本文件打印到终端,然后在打印该数字之前计算字符数。这是我的代码:

#include <stdio.h>

int main()
{
    int count = 0, c;

    while ((c = getchar()) != EOF) {
        count++;
        putchar(c);
    }

    printf("\n%d characters\n", count);
    return 0;
}

这是输出:

This is a simple file
With two very small lines
I mean three
1 characters

但是当我在count++下面添加这一行时:

printf("%d", count);

结果是:

1T2h3i4s5 6i7s8 9a10 11s12i13m14p15l16e17 18f19i20l21e22
23W24i25t26h27 28t29w30o31 32v33e34r35y36 37s38m39a40l41l42 43l44i45n46e47s48
49I50 51m52e53a54n55 56t57h58r59e60e61
1 characters

这意味着计数正在递增,但我无法从while循环外部访问其值。我认为如果变量的声明(在这种情况下int count = 0在循环之外),那么在循环之后仍然可以达到该值。

如果它有所不同,这就是我所说的:

./example <text.txt

我犯了一个愚蠢的错误吗?任何帮助,将不胜感激。感谢

更新

我不知道它是否有所作为,但我使用的编译器是:powerpc-apple-darwin9-gcc-4.0.1。这就是问题所在吗?

更新2

这是我用来编译源代码的命令:gcc -Wall example.c -o example。刚刚发生了一件奇怪的事情。当我跑这个时,它运作得很好:

#include <stdio.h>

int main()
{
    int count = 0, c;

    while ((c = getchar()) != EOF) {
        count++;
        putchar(c);
    }
    printf("x");
    printf("\n%d characters\n", count);
    return 0;
}

输出结果为:

This is a simple file
With two very small lines
I mean three
61 characters

此代码与上述代码之间的唯一区别是printf("x")行。我不明白为什么它突然起作用,如果我打印别的东西,我不明白为什么它不可见。任何字符都可以放在命令中,并且会出现相同的结果。如果添加了多个字符,则会打印第二个字符以及之后的任何字符。

2 个答案:

答案 0 :(得分:0)

很可能你对字符存储在内存中的字符的引用被错误地编码,这就是你的输出就是这样的原因。确保正确引用其中的文件和文本。除此之外,代码似乎没问题。

我认为这是你应该做的:

int count = 0, c;
FILE *file = fopen("example.txt", "r");

while ((c = getc(file)) != EOF) {
    count++;
    putchar(c);
}

printf("\n%d characters\n", count);
fclose(file);

答案 1 :(得分:0)

尝试在fflush(stdout)

之前发出printf("\n%d characters\n", count);

仅供参考:您的原始代码在Ubuntu 14.04 Linux上按预期执行。

相关问题