下面的C程序是計算字符計數。字符計數C
#include <stdio.h >
int main()
{
int nc = 0;
while (getchar() != EOF)
{
++nc;
printf("%d\n", nc);
}
return 0;
}
當我在終端中輸入字符,例如「Y」,該輸出返回如下
1
2
這如何發生的計算以及爲什麼2是在輸出?
下面的C程序是計算字符計數。字符計數C
#include <stdio.h >
int main()
{
int nc = 0;
while (getchar() != EOF)
{
++nc;
printf("%d\n", nc);
}
return 0;
}
當我在終端中輸入字符,例如「Y」,該輸出返回如下
1
2
這如何發生的計算以及爲什麼2是在輸出?
我想你不知道,但是當你按下輸入你剛纔插入一個換行符或'\n'
。如果你想得到正確的結果,可以忽略換行符,或者減少nc。
#include <stdio.h>
int main()
{
int nc = 0;
while (getchar() != EOF)
{
++nc;
printf("Character count is:%d\n", nc - 1);
}
return 0;
}
更妙的是代碼:
#include <stdio.h>
int main()
{
int nc = 0;
for(;;)
{
do
++nc;
while (getchar() != '\n');
printf("Character count is:%d\n", nc - 1);
nc = 0;
}
}
更新的代碼將重置回你的計數器爲0
您輸入了「一個字符」。 A y
和換行符。這是2.
當你按下輸入它被認爲是一個字符
因爲你輸入了兩個字符。一個是y
,另一個是\n
(換行)字符。
因此,你得到的輸出1和2
如果你想只計算可見字節,可以使用isprint
功能,它返回一個字節是可打印的還是空格字符。它是這樣的:
#include <ctype.h>
#include <stdio.h>
int main()
{
int nc = 0;
int ch;
while((ch = getchar()) != EOF)
{
if (isprint(ch) && ch != ' ')
++nc;
printf("Character count after reading '%c' is %d.\n",ch, nc);
}
return 0;
}
應當注意,由於C,一個char
不是一個Unicode字符,但往往只是一個字節,這種方案計算的某些字符爲2個或更多字節,例如表情符號,西裏爾字母,中國象形文字。
嘗試輸入更長的字符串。我的猜測是你總會看到ONE EXTRA(即如果你輸入ABCD,你會得到1 2 3 4 5)。 – FDavidov
因爲你輸入了兩個字符 - 換行符或許是 –
我敢打賭,你不是隻推'y',而是你之後推了另一個字符。 –