gpt4 book ai didi

无法打印在循环中递增的变量值

转载 作者:太空宇宙 更新时间:2023-11-04 04:42:33 26 4
gpt4 key购买 nike

我目前正在尝试学习 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") 行。我不明白为什么如果我打印其他东西它会突然起作用而且我不明白为什么它不可见。任何字符都可以放在命令中,并且会发生相同的结果。如果添加了多个字符,则打印第二个字符以及之后的任何字符。

最佳答案

很可能您对字符在内存中存储位置的字符引用编码不正确,这就是为什么您的输出会这样。确保正确引用了其中的文件和文本。除此之外,代码似乎没问题。

我认为这是你应该做的:

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);

关于无法打印在循环中递增的变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24701117/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com