C代码
#include <stdio.h>
int main ()
{
int c , nother , new , ndigits [10] , white, tabs ;
for ( int i = 0 ; i< 10 ; i++)
ndigits[i] = 0 ;
while ( (c = getchar() )!= EOF )
{
switch (c)
{
case '0' : case '1' : case '2' :
case '3' : case '4' : case '5' :
case '6' : case '7' : case '8' :
case '9' :
ndigits[c- '0' ]++ ;
break ;
case ' ' :
printf("w"); /*to see how many spaces */
white++ ;
case '\t' :
printf("t");
tabs++;
case '\n' :
printf("n");
new++ ;
break ;
default :
nother++ ;
break ;
}
}
printf ("digits = " ) ;
for ( int i = 0 ; i < 10 ; i++ )
printf ("%d" , ndigits[i]) ;
printf ( ",tabs = %d , new line = %d, spaces = %d , other = %d ",
tabs, white , new , nother );
return 0 ;
}
当我使用GCC
进行编译时,只需按Ctrl + z
即可打印
digits = 00000,tabs = 4200912,new line = 4194432,spaces = 2293540 其他= 2147307520
这些号码来自哪里?
我再次编译并输入HELLO HELLO HELLO
并单击回车
并打印wtnwtnwnn
答案 0 :(得分:2)
将计数器初始化为零,否则它们的初始值将是不可预测的。
int c , nother = 0 , new = 0 , ndigits [10] , white = 0, tabs = 0 ;
此外,每个case
块(除了捕获数字的块)必须以break;
终止,以达到预期的效果。
如果省略它们,将执行下一条指令。
white++;
break;
...
tabs++;
break;
底部注意:只要在编译器上启用警告,您就可以自己找到这些错误。这样做:你会节省很多时间来发现天真的错误。
答案 1 :(得分:2)
您的某些case
缺少break
个,这似乎不是您想要的。
此外,您尚未初始化nother
,new
,white
和tabs
,但仍在使用它们。这导致未定义的行为。 (任何体面的编译器都会给你一个警告。)
答案 2 :(得分:1)
有几个错误:
m <- structure(c(NA, 2L, 4L, NA, NA, 2L, 2L, NA, NA, 2L, 2L, NA, NA,
4L, 4L, NA), .Dim = c(4L, 4L), .Dimnames = list(c("W_1_N", "W_1_E",
"W_1_C", "W_1_D"), c("a", "b", "c", "d")))
)以下代码生成您需要的输出:
printf (",tabs = %d , new line = %d, spaces = %d , other = %d " ,tabs ,white , new, nother) ;