字符编号的输出是实际编号。加3。 我不知道为什么?
这是代码:
void main(void)
{
int ch,w=0,c=0;
do
{
ch=getche();
++c;
if(ch==32)
{
++w;
++c;
}
}while(ch!=13);
printf("\nnum of characters is %d",c);
printf("\nnum of words is %d",w);
getch();
}
答案 0 :(得分:7)
您为空格字符递增c
两次。
您的if
声明应该只是:
if(ch==32)
++w;
你还有另一个微妙的错误,因为字符串 h e l l o SPC SPC 吨 ħ 电子 - [R e (带两个空格)将在您的代码中注册为三个单词。
这就是 I 编写它以避免这些问题的方式。请注意使用lastch
来避免将空格序列计为多个单词。
int main(void) {
int ch = ' ', lastch, w = 0, c = 0;
do {
lastch = ch;
ch = getchar();
++c;
if (ch == ' ') {
if (lastch != ' ') {
++w;
}
}
} while (ch != '\n');
if (lastch != ' ') {
++w;
}
printf("num of characters is %d\n",c);
printf("num of words is %d\n",w);
return 0;
}
答案 1 :(得分:4)
你是重复计算空间:
++c;
if(ch==32)
{
++w;
++c;
}
你已经增加了c
;你不需要再做一次。你还把换行计算为一个字符,你的字数是空格数的计数,它将是短的一个(“foo bar”有两个单词,但是一个空格)。根据您想要检查的内容,isspace之类的标准函数可能更容易(但对于除''之外的其他函数返回true)
答案 2 :(得分:3)
++c;
if(ch==32)
{
++w;
++c;
}
你已经对空格字符进行了重复计算。删除第二个++c
。
答案 3 :(得分:3)
每个空间都被计算两次......
++c;
if(ch==32)
{
++w;
++c; // char is counted again
}
将代码更改为:
++c;
if(ch==32)
{
++w;
}
答案 4 :(得分:3)
c
时,您要加ch==32
两次。此外,您在c
时添加ch==13
。
答案 5 :(得分:2)
你计算两次空间。
如果您使用ch==' '
而不是ch==32
等字符文字,也会更容易阅读
答案 6 :(得分:2)
如果读取的字符为32,则递增c
两次。
答案 7 :(得分:1)
每个空间计算两次
答案 8 :(得分:0)
void main(void)
{
int ch,w=0,c=0,lastch=32;
while((ch = getche()) != 13) //get input and check if it's ENTER key
{
++c;
if(ch == 32 && lastch != ch) //make sure two continuous spaces are not counted as a word as pointed out by paxdiablo
++w;
lastch = ch;
}
if(lastch != 32) //for a word with no space
++w;
printf("\nnum of characters is %d",c);
printf("\nnum of words is %d",w);
getch();
}
您可以考虑使用char而不是int。