Программа для подсчета строк слов и символов в c - PullRequest
0 голосов
/ 14 февраля 2019

В этом коде я хочу посчитать количество символов перевода строки и слов.Но во втором цикле while есть некоторая проблема, которую я не могу понять;также код не показывает вывод.

//program to count newlines new words and characters

#include<stdio.h>
int main()
{
    int c;
    int nl,nw,nc;//nl=newline,nw=new word,nc=new charcacter
    nl=nw=nc=0;
    while((c=getchar())!=EOF)
    {
        nc++;
        if(c=='\n')
        nl++;
        else if(c!=(' ')||c!=('\n'))
        {
            nw++;
            while(c!=' '||c!='\n')
            { 
                c=getchar();
                nc++;
            }
            nc++;
        }
    }
    printf("%d %d %d",nl,nc,nw);
}

Ответы [ 3 ]

0 голосов
/ 14 февраля 2019

Это попытка решить подобную проблему.


Код

#include <stdio.h>

///check is given character is a valid space (' ','\n', '\t' ) or not
int checkSpace(char c){
    if(c=='\n'||c==' '||c=='\t'){
        return 1;
    }else{
        return 0;   
    }
}

///if given character is in ascii valid return true
int checkASCII(char c){
    if(c>32&&c<127){
        return 1;
    }else{
        return 0;   
    }
}

///a function that prints all contents of ascii file
void printFile(FILE *fp){
    char c;
    while((c=fgetc(fp))!=EOF){
        printf("%c", c);
    }
}

////main function 
int main(int argc, char **argv){

    FILE *fp=fopen(argv[1],"r");
    if(!fp){
        printf("error when opening file\n");    
    }

    char c=0;
    int numWord=0;
    int numChar=0;
    int flag=0;
    int visiblenumChar=0;
    int newLine=0;

    while((c=fgetc(fp))!=EOF){
        numChar++;
        if(c=='\n'){
            newLine++;
        }
        if(flag && checkSpace(c)){
            numWord++;
            flag=0;     
        }       
        if(checkASCII(c)){
            flag=1;//first ascii read   
            visiblenumChar++;   
        }   
    }

    //program output
    printf("file name: %s\n", argv[1]);
    printf("#All characters: %d\n", numChar);
    printf("#Visible characters: %d\n", visiblenumChar);
    printf("#Words: %d\n", numWord);
    printf("#New lines: %d\n", newLine);

    return 0;   
}

Компиляция

gcc counter.c -o counter

Выполнить

. / Counter yourtextfile.txt

0 голосов
/ 18 февраля 2019

На самом деле внутренний цикл не нужен.Вы можете прочитать все символы, используя внешний цикл.Затем проверьте, является ли символ '\ n', или '', и соответственно увеличьте счетчики.

//program to count newlines new words and characters
#include<stdio.h>
int main()
{
    int c;
    int nl,nw,nc;//nl=newline,nw=new word,nc=new charcacter
    nl=nw=nc=0;
    while((c=getchar())!=EOF)
    {
        nc++;
        if(c==' ')
        nw++;
        else if(c=='\n')
        {
            nw++;
            nl++;

    }
    printf("%d %d %d",nl,nc,nw);
} 
0 голосов
/ 14 февраля 2019

Это условие всегда будет истинным:

(c!=(' ')||c!=('\n'))

Логический оператор ИЛИ || оценивается как истинное, если любая сторона оценивается как истинное.Если c - это пробел, то первая часть будет ложной, а вторая - истинной, что сделает результат истинным.Если c является новой строкой, то первая часть будет верна, а вторая часть даже не будет оценена, что делает результат верным.Если c является любым другим значением, обе части будут истинными.

Вместо этого вы хотите использовать логическое И, что верно только в том случае, если обе части верны.Вы хотите, чтобы условие было истинным, если c не является пробелом И c не является новой строкой:

((c!=' ') && (c!='\n'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...