我正在使用C.目标是获取输入,并使用switch语句而不是if语句计算字符,单词和行...我把字符和线条算得很好,但我一直得到0个字。为什么呢?
#include <stdio.h>
#define IN 1 /* inside a word */
#define OUT 0 /* outside a word */
int main()
{
int c, nl, nw, nc, state;
printf("Please input some text!\n");
state = OUT;
nl = nw = nc = 0;
while ((c = getchar()) != EOF) {
++nc;
switch(c)
{
case '\n':
c = '\n';
++nl; break;
case IN:
c = IN;
++nw; break;
}
}
printf("Characters %d\nWords %d\nLines %d\n", nc, nw, nl);
return 0;
}
目标是使用switch语句在下面执行此操作。
if (c == '\n')
++nl;
if (c == ' ' || c == '\n' || c == '\t')
state = OUT;
else if (state == OUT) {
state = IN;
++nw;
答案 0 :(得分:2)
要翻译更新代码中的代码以使用开关,您需要执行此操作
#include <stdio.h>
#define IN 1 /* inside a word */
#define OUT 0 /* outside a word */
int main()
{
int c, nl, nw, nc, state;
printf("Please input some text!\n");
state = OUT;
nl = nw = nc = 0;
while ((c = getchar()) != EOF) {
++nc;
switch(c)
{
case '\n':
++nl;
case ' ':
case '\t':
state = OUT;
break;
default:
if (state == OUT)
++nw;
state = IN;
break;
}
}
printf("Characters %d\nWords %d\nLines %d\n", nc, nw, nl);
return 0;
}
在原始代码中,您永远不会更改state
的值,并且case IN
永远不会发生,因为您检查getchar()
返回的值是'\1'
它永远不会是,所以nw
没有增加。