Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
计算C语言中的字符、单词、行和段落_C_Io_Count_Words_Getchar - Fatal编程技术网

计算C语言中的字符、单词、行和段落

计算C语言中的字符、单词、行和段落,c,io,count,words,getchar,C,Io,Count,Words,Getchar,我试图从标准文本中数出C语言中的字符、单词、行和段落 有些东西不起作用,我不知道为什么 #include <stdio.h> int main(int argc, char const *argv[]) { int pCount=0, parCount=0, cCount=0, lCount=0; double prom=0; char c; int newln_cnt=0; while ((c=getchar())!=EOF){

我试图从标准文本中数出C语言中的字符、单词、行和段落

有些东西不起作用,我不知道为什么

#include <stdio.h>

int main(int argc, char const *argv[])
{
    int pCount=0, parCount=0, cCount=0, lCount=0;
    double prom=0;
    char c;
    int newln_cnt=0;
    while ((c=getchar())!=EOF){ 
        cCount++;
        switch (c)
        {
            case '\n':
                newln_cnt++;
                lCount++;
                if (newln_cnt == 2)
                {
                    parCount++;
                    newln_cnt = 0;
                }
                break;
            case ' ':
                pCount++;
                break;
        }               
    }
    prom = (cCount / pCount);
    printf("Total caracteres: %d \n", cCount);
    printf("Cantidad palabras: %d \n", pCount);
    printf("Cantidad líneas: %d \n", lCount);
    printf("Cantidad párrafos: %d \n", parCount);
    printf("Promedio longitud palabra: %f \n", prom);
    return 0;
}
预期输出:

Total caracteres: 558
Cantidad palabras: 87
Cantidad líneas: 25
Cantidad párrafos: 8
Promedio longitud palabra: 4.966
我的输出:

Total caracteres: 557
Cantidad palabras: 69
Cantidad líneas: 24
Cantidad párrafos: 12
Promedio longitud palabra: 8.000

程序计算字符、单词、行和段落的数量(两个连续的'\n')。和平均字长。

由于类型转换错误,它没有编译,但您可以对所有内容使用浮点,它将编译:

#include <stdio.h>

int main(int argc, char const *argv[])
{
    double pCount=0, parCount=0, cCount=0, lCount=0;
    double prom=0;
    char c;
    int newln_cnt=0;
    while ((c=getchar())!=EOF){ 
        switch (c)
        {
            case '\n':
                newln_cnt++;
                lCount++;
                if (newln_cnt == 2)
                {
                    parCount++;
                    newln_cnt = 0;
                }
                break;
            case ' ':
                pCount++;
                break;
        }               
    }
    prom = (cCount / pCount);
    printf("Total caracteres: %f \n", cCount);
    printf("Cantidad palabras: %f \n", pCount);
    printf("Cantidad líneas: %f \n", lCount);
    printf("Cantidad párrafos: %f \n", parCount);
    printf("Promedio longitud palabra: %f \n", prom);
    return 0;
}
#包括
int main(int argc,char const*argv[]
{
双pCount=0,parCount=0,cCount=0,lCount=0;
双prom=0;
字符c;
int newln_cnt=0;
而((c=getchar())!=EOF){
开关(c)
{
案例“\n”:
newln_cnt++;
lCount++;
如果(newln_cnt==2)
{
parCount++;
newln_cnt=0;
}
打破
案例“”:
pCount++;
打破
}               
}
prom=(会计科目/会计科目);
printf(“字符总数:%f\n”,Account);
printf(“Cantidad palabras:%f\n”,pCount);
printf(“Cantidad líneas:%f\n”,lCount);
printf(“Cantidad párrafos:%f\n”,parCount);
printf(“Promedio longitud palabra:%f\n”,prom);
返回0;
}
既然程序已经编译,您就可以调整到最适合您的程序的任何类型,您甚至可以拥有自己的类型


一个与您的程序类似的著名程序是-word count,它是标准Unix库的一部分

由于类型转换错误,它没有编译,但您可以对所有内容使用浮点,它将编译:

#include <stdio.h>

int main(int argc, char const *argv[])
{
    double pCount=0, parCount=0, cCount=0, lCount=0;
    double prom=0;
    char c;
    int newln_cnt=0;
    while ((c=getchar())!=EOF){ 
        switch (c)
        {
            case '\n':
                newln_cnt++;
                lCount++;
                if (newln_cnt == 2)
                {
                    parCount++;
                    newln_cnt = 0;
                }
                break;
            case ' ':
                pCount++;
                break;
        }               
    }
    prom = (cCount / pCount);
    printf("Total caracteres: %f \n", cCount);
    printf("Cantidad palabras: %f \n", pCount);
    printf("Cantidad líneas: %f \n", lCount);
    printf("Cantidad párrafos: %f \n", parCount);
    printf("Promedio longitud palabra: %f \n", prom);
    return 0;
}
#包括
int main(int argc,char const*argv[]
{
双pCount=0,parCount=0,cCount=0,lCount=0;
双prom=0;
字符c;
int newln_cnt=0;
而((c=getchar())!=EOF){
开关(c)
{
案例“\n”:
newln_cnt++;
lCount++;
如果(newln_cnt==2)
{
parCount++;
newln_cnt=0;
}
打破
案例“”:
pCount++;
打破
}               
}
prom=(会计科目/会计科目);
printf(“字符总数:%f\n”,Account);
printf(“Cantidad palabras:%f\n”,pCount);
printf(“Cantidad líneas:%f\n”,lCount);
printf(“Cantidad párrafos:%f\n”,parCount);
printf(“Promedio longitud palabra:%f\n”,prom);
返回0;
}
既然程序已经编译,您就可以调整到最适合您的程序的任何类型,您甚至可以拥有自己的类型


一个与您的程序类似的著名程序是-word count,它是标准Unix库的一部分

我发现您的代码中有几个问题:

  • 段落计数:如果读取字符与
    \n
    不同,则不会将
    newln\u cnt
    设置为0。每次读取两个
    \n
    时,这将计算一个段落

  • <>空间计数:你只考虑<代码> '/COD>字符,你可能会错过像“不可破解”空间那样的其他空白字符。考虑使用<代码> IsSub()/<代码>函数。< /P> <> >平均行长:将两个整数分为一个浮点数,考虑铸造:

    prom = (float)cCount / (flao)pCount;
    

    我的建议:从一个简短的文本(每行3个单词,5行)和一个调试器开始。

    我发现您的代码中有几个问题:

  • 段落计数:如果读取字符与
    \n
    不同,则不会将
    newln\u cnt
    设置为0。每次读取两个
    \n
    时,这将计算一个段落

  • <>空间计数:你只考虑<代码> '/COD>字符,你可能会错过像“不可破解”空间那样的其他空白字符。考虑使用<代码> IsSub()/<代码>函数。< /P> <> >平均行长:将两个整数分为一个浮点数,考虑铸造:

    prom = (float)cCount / (flao)pCount;
    

    我的建议:从一个简短的文本(每行3个单词,5行)和一个调试器开始。

    每一行的计数条件都是错误的。
    修正如下:

    #include <stdio.h>
    #include <ctype.h>
    
    int main(void){
        int pCount=0, parCount=0, cCount=0, lCount=0;//word, paragraph, character, line
        int abCount = 0;//alphabet 
        double prom=0;
        int c;//It should be int.
        char pprev = '\n', prev = '\n';
    
        while ((c=getchar())!=EOF){
            ++cCount;
            if(isalpha(c))
                ++abCount;
            if(isspace(c)){
                if(c == '\n'){
                    ++lCount;
                }
            } else if(isspace(prev)){//isspace(prev) && !isspace(c) : edge of top of word
                ++pCount;
                if(pprev == '\n' && prev == '\n'){//edge of top of paragraph
                    ++parCount;
                }
            }
            pprev = prev;
            prev = c;
        }
        if(prev != '\n'){//If the file is not terminated by newline
            ++lCount;
        }
    
        prom = (double)abCount / pCount;//(cCount - spcCount - punctCount) / pCount
        printf("Total caracteres: %d \n", cCount);
        printf("Cantidad palabras: %d \n", pCount);
        printf("Cantidad lineas: %d \n", lCount);
        printf("Cantidad parrafos: %d \n", parCount);
        printf("Promedio longitud palabra: %.3f \n", prom);
        return 0;
    }
    
    #包括
    #包括
    内部主(空){
    int pCount=0,parCount=0,cCount=0,lCount=0;//单词,段落,字符,行
    int abCount=0;//字母表
    双prom=0;
    int c;//它应该是int。
    字符pprev='\n',prev='\n';
    而((c=getchar())!=EOF){
    ++会计科目;
    if(isalpha(c))
    ++abCount;
    if(i空间(c)){
    如果(c=='\n'){
    ++l计数;
    }
    }else if(isspace(prev)){//isspace(prev)&&!isspace(c):单词顶部的边缘
    ++pCount;
    如果(pprev='\n'&&prev='\n'){//段落顶部的边缘
    ++帕克计数;
    }
    }
    pprev=prev;
    prev=c;
    }
    if(prev!='\n'){//如果文件未以换行符终止
    ++l计数;
    }
    prom=(双精度)abCount/pCount;//(cCount-spcCount-punctCount)/pCount
    printf(“字符总数:%d\n”,Account);
    printf(“Cantidad palabras:%d\n”,pCount);
    printf(“Cantidad lineas:%d\n”,lCount);
    printf(“Cantidad parrafos:%d\n”,parCount);
    printf(“Promedio longitud palabra:%.3f\n”,prom);
    返回0;
    }
    
    您的每个计数条件都是错误的。
    修正如下:

    #include <stdio.h>
    #include <ctype.h>
    
    int main(void){
        int pCount=0, parCount=0, cCount=0, lCount=0;//word, paragraph, character, line
        int abCount = 0;//alphabet 
        double prom=0;
        int c;//It should be int.
        char pprev = '\n', prev = '\n';
    
        while ((c=getchar())!=EOF){
            ++cCount;
            if(isalpha(c))
                ++abCount;
            if(isspace(c)){
                if(c == '\n'){
                    ++lCount;
                }
            } else if(isspace(prev)){//isspace(prev) && !isspace(c) : edge of top of word
                ++pCount;
                if(pprev == '\n' && prev == '\n'){//edge of top of paragraph
                    ++parCount;
                }
            }
            pprev = prev;
            prev = c;
        }
        if(prev != '\n'){//If the file is not terminated by newline
            ++lCount;
        }
    
        prom = (double)abCount / pCount;//(cCount - spcCount - punctCount) / pCount
        printf("Total caracteres: %d \n", cCount);
        printf("Cantidad palabras: %d \n", pCount);
        printf("Cantidad lineas: %d \n", lCount);
        printf("Cantidad parrafos: %d \n", parCount);
        printf("Promedio longitud palabra: %.3f \n", prom);
        return 0;
    }
    
    #包括
    #包括
    内部主(空){
    int pCount=0,parCount=0,cCount=0,lCount=0;//单词,段落,字符,行
    int abCount=0;//字母表
    双prom=0;
    int c;//它应该是int。
    字符pprev='\n',prev='\n';
    而((c=getchar())!=EOF){
    ++会计科目;
    if(isalpha(c))
    ++abCount;
    if(i空间(c)){
    如果(c=='\n'){
    ++l计数;
    }
    }else if(isspace(prev)){//isspace(prev)&&!isspace(c):单词顶部的边缘
    ++pCount;
    如果(pprev='\n'&&prev='\n'){//段落顶部的边缘
    ++计数