为什么不是';这个基本的C示例不起作用吗?

为什么不是';这个基本的C示例不起作用吗?,c,C,这是C编程语言的一个基本示例。我使用的是Ubuntu,使用预先打包的gcc进行编译,它不会给出任何错误或任何东西,但当我点击enter键时,它会打印一个字数,等等。。(我甚至不能让更简单的字符计数工作)。我尝试改变一些代码,这确实会产生错误,并尝试将最终的print语句放在if(getchar()==EOF){printf(…)}之类的东西中,但没有任何效果 #include <stdio.h> #define IN 1 /* inside a word */ #define

这是C编程语言的一个基本示例。我使用的是Ubuntu,使用预先打包的gcc进行编译,它不会给出任何错误或任何东西,但当我点击enter键时,它会打印一个字数,等等。。(我甚至不能让更简单的字符计数工作)。我尝试改变一些代码,这确实会产生错误,并尝试将最终的print语句放在
if(getchar()==EOF){printf(…)}
之类的东西中,但没有任何效果

#include <stdio.h> 

#define IN 1 /* inside a word */ 
#define OUT 0 /* outside a word */ 

/* count lines, words, and characters in input */ 
main() 
{ 
int c, nl, nw, nc, state; 

state = OUT; 
nl = nw = nc = 0;

while ((c = getchar()) != EOF) 
 { 
  ++nc; 
  if (c == '\n') 
    ++nl; 
  if (c == ' ' || c == '\n' || c == '\t') 
    state = OUT; 
  else if (state == OUT) { 
    state = IN; 
    ++nw; 
    } 
 } 
printf("%d %d %d\n", nl, nw, nc); 
} 
#包括
#在1/*中定义单词*/
#在单词*外定义0/*/
/*对输入中的行、字和字符进行计数*/
main()
{ 
北卡罗来纳州、北卡罗来纳州、北卡罗来纳州、北卡罗来纳州;
状态=输出;
nl=nw=nc=0;
而((c=getchar())!=EOF)
{ 
++数控;
如果(c=='\n')
++nl;
如果(c=''| | c='\n'| | c='\t')
状态=输出;
如果(state==OUT){
状态=IN;
++西北;
} 
} 
printf(“%d%d%d\n”,nl,nw,nc);
} 

在Ubuntu中,EOF是ctrl+D,然后输入。在Windows中,先按ctrl+Z,然后按enter键,因此在输入字符串后,使用
EOF
终止while循环,您将根据程序体获得答案。

更改行:

main()
致:


并改变了这一点:

printf("%d %d %d\n", nl, nw, nc);
} 
为此:

printf("%d %d %d\n", nl, nw, nc);
return(0);
} 

汇编:

gcc -Wall -o test test.c
创建了一个名为“junk.txt”的文件,内容为:
adddsadsd 33334243

然后执行程序:

> ./test < junk.txt
0 2 25
./test

它似乎像广告上说的那样工作。

当我按enter键时,它应该打印字数,等等。它会做什么呢?该程序将一直读取,直到它得到EOF,在这一点上,它将转储有关其输入和退出的一些统计信息。试着运行它,输入一些文本(后跟换行符),然后输入ctrl-D。My gcc(4.8.2)会给出一个关于问题到底是什么的警告。如果gcc没有告诉您,您将运行哪个版本的gcc?请注意,对于从K&R 2构建内容,您应该使用编译器标志
-std=c89
。对C99中引入的语言的某些更改可能会使K&R2程序无效。(如果您只有K&R1…升级书籍的时间:)
> ./test < junk.txt
0 2 25