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