被 K&R 练习 1.5.2 难住了

发布于 2024-12-05 07:26:13 字数 320 浏览 1 评论 0原文

我目前正在尝试使用 K&R 来学习 C,但我完全被示例 1.5.2 难住了。由于某种原因,在我按 Ctrl-Z 后,它不是打印 nc,而是打印 nc 乘以 2。我不知道是什么导致了这个问题(我完全按照书中的方式复制代码)。我使用的编译器是Visual Studio 2010。代码如下:

#include <stdio.h>

main()
{

long nc;

nc = 0;
while (getchar() != EOF)
    ++nc;
printf("%1d\n", nc);


}

I am currently trying to learn C by using the K&R, but I am completely stumped by example 1.5.2. For some reason, after I press Ctrl-Z, instead of printing nc, it prints nc multiplied by 2. I don't know what could be causing this problem (I copied the code exactly how it is in the book). The compiler I am using is Visual Studio 2010. Here is the code:

#include <stdio.h>

main()
{

long nc;

nc = 0;
while (getchar() != EOF)
    ++nc;
printf("%1d\n", nc);


}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

维持三分热 2024-12-12 07:26:13

因为 enter 是一个按键。

如果您的输入是:

1<enter>
1<enter>
1<enter>
^z

它将输出:

6

Because enter is a keystroke.

If your input is:

1<enter>
1<enter>
1<enter>
^z

it would output:

6

書生途 2024-12-12 07:26:13

不确定为什么会出现您所描述的行为,但这应该是 %ld 而不是 %1d

Not sure why you get the behaviour you describe but that should be %ld not %1d

放肆 2024-12-12 07:26:13

无法重现您的错误。我添加了一些调试语句,

#include <stdio.h>

main() {
     int nc = 0, ch;

     while ((ch = getchar()) != EOF) {
          printf("%d\n", ch);
          ++nc;
     }
     printf("nc - %1d\n", nc);


}

然后在 Windows 上使用 gcc 进行了尝试:

E:\temp>gcc eof.c

E:\temp>a
^Z
nc - 0

E:\temp>a
foo bar
102
111
111
32
98
97
114
10
^Z
nc - 8

然后使用 Visual Studio 2008:

E:\temp>cl eof.c
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.

eof.c
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:eof.exe
eof.obj

E:\temp>eof
^Z
nc - 0

E:\temp>eof
foo bar
102
111
111
32
98
97
114
10
^Z
nc - 8

Could not reproduce your error. I added some debugging statements,

#include <stdio.h>

main() {
     int nc = 0, ch;

     while ((ch = getchar()) != EOF) {
          printf("%d\n", ch);
          ++nc;
     }
     printf("nc - %1d\n", nc);


}

And then tried it with gcc on Windows:

E:\temp>gcc eof.c

E:\temp>a
^Z
nc - 0

E:\temp>a
foo bar
102
111
111
32
98
97
114
10
^Z
nc - 8

And then with Visual Studio 2008:

E:\temp>cl eof.c
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.

eof.c
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:eof.exe
eof.obj

E:\temp>eof
^Z
nc - 0

E:\temp>eof
foo bar
102
111
111
32
98
97
114
10
^Z
nc - 8
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文