尝试编写一个C程序:
计算从标准输入读取的字符,单词和行的数量,直到达到EOF。 假设输入是任意长度的ASCII文本。 单词被定义为连续的字母序列(a到z,A到Z)和撇号(',值39个十进制),用这些范围之外的任何字符分隔。 行定义为由换行符('\ n')分隔的连续字符序列。 最终换行符之后的字符将不包括在行数中。
我写了以下内容,可以很好地计算字符数,但不计算任何单词或行数。我不明白为什么。
#include <stdio.h>
int main() {
unsigned long int countchar=0;
unsigned long int word=0;
unsigned long int line=0;
int c;
while (((c=getchar())!=EOF)) {
countchar++;
if ((c>='A' && c<= 'Z') || (c>='a' && c<= 'z') || (c==39)) {
word++;
}
else if (c=='\n') {
line++;
}
}
printf("%lu %lu %lu\n", countchar, word, line);
return 0;
}
答案 0 :(得分:1)
char是保留字。您无法命名一个变量。
答案 1 :(得分:0)
while ((c=getchar()!=EOF)) {
应该是
while (((c=getchar())!=EOF)) {
因为否则它将被解释为
while ((c=(getchar())!=EOF))) {
答案 2 :(得分:0)
您正在将单词中的每个字母都视为单词。 应该对其进行更改,以检查它是否不是单词中的任何字母,然后删除其他字母。 您可能需要添加一些额外的检查,以便仅在最后一个字母在单词中时才增加单词。
if (!((c>='A' && c<= 'Z') || (c>='a' && c<= 'z') || (c==39)) {
word++;
}
if (c=='\n') {
line++;
}