1

私は現在、K&R を使用して C を学ぼうとしていますが、例 1.5.2 で完全に困惑しています。何らかの理由で、印刷する代わりに Ctrl-Z を押すと、2 を掛けncて印刷ncされます。何がこの問題を引き起こしているのかわかりません (本にあるとおりにコードを正確にコピーしました)。私が使用しているコンパイラは Visual Studio 2010 です。コードは次のとおりです。

#include <stdio.h>

main()
{

long nc;

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


}
4

3 に答える 3

2

キーストロークだからenterです。

入力が次の場合:

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

次のように出力されます。

6

于 2011-09-18T06:35:51.753 に答える
1

説明した動作が得られる理由はわかりませんが、それは %1d ではなく %ld である必要があります

于 2011-09-18T06:32:59.410 に答える
0

エラーを再現できませんでした。いくつかのデバッグ ステートメントを追加しました。

#include <stdio.h>

main() {
     int nc = 0, ch;

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


}

そして、gccWindowsで試してみました:

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
于 2011-09-18T06:40:43.347 に答える