-1

I'm relatively new to Linux Mint and somewhat trying to get back at programming. I'm trying to learn this concept of reading, copying,counting using C Programming by Brian W. Kernighan and Dennis M. Ritchie.

I understood the concept of line counting, word counting etc but whenever I run the code, I don't get an output on the terminal window while I do when I used the online compiler at codechef.

Can someone explain why this is happening and the solution to it.

Thanks. :)

#include <stdio.h>
/* count digits, white space, others */
main()
{
    int c, i, nwhite, nother;
    int ndigit[10];

    nwhite = nother = 0;

    for (i = 0; i < 10; ++i)
        ndigit[i] = 0;
    while ((c = getchar()) != EOF)
    {
        if (c >= '0' && c <= '9')
            ++ndigit[c-'0'];
        else if (c == ' ' || c == '\n' || c == '\t')
            ++nwhite;
        else
            ++nother;
    }
    printf("digits =");
    for (i = 0; i < 10; ++i)
        printf(" %d", ndigit[i]);
    printf(", white space = %d, other = %d\n",nwhite, nother);
}
Haris
  • 12,120
  • 6
  • 43
  • 70

2 Answers2

0

Replace the EOF in the line while ((c = getchar()) != EOF) with \n:

...
while ((c = getchar()) != '\n')
{
...
}
...

You are waiting on the "end of file" of the standard input stream which never will occur. instead you should wait on a "new line" character which basically represents the return button on your keyboard.

To make it clear to the user that he has to enter something you should ask the user with a further printf. Here the full code:

#include <stdio.h>
/* count digits, white space, others */
int main(int argc, char *argv[]) {
{
    int c = 0, i = 0, nwhite = 0, nother = 0;
    int ndigit[10] = {0};

    nwhite = nother = 0;

    for (i = 0; i < 10; ++i)
        ndigit[i] = 0;

    printf("Please enter any string and press [Enter]:\n");

    while ((c = getchar()) != '\n')
    {
        if (c >= '0' && c <= '9')
            ++ndigit[c-'0'];
        else if (c == ' ' || c == '\n' || c == '\t')
            ++nwhite;
        else
            ++nother;
    }
    printf("digits =");
    for (i = 0; i < 10; ++i)
        printf(" %d", ndigit[i]);
    printf(", white space = %d, other = %d\n",nwhite, nother);

    return 0;
}
gmug
  • 773
  • 5
  • 11
  • The problem I'm facing is I don't get an output when I run the code. Replaced my lines with yours and still the same. No output as such. – Amol Sehgal Nov 05 '15 at 10:11
  • @Amol Sehgal: I tried your code with the replaced line and for me it works. Of course you first to enter some characters and press return before you can see anything. – gmug Nov 05 '15 at 11:49
  • The return key typically returns Return (`\r`), not Line Feed (`\n`). – Jongware Nov 05 '15 at 12:23
  • @gmug can u tell me how do i enter the characters on the terminal? – Amol Sehgal Nov 05 '15 at 17:31
0

What do you think this does?

while ((c = getchar()) != EOF)

Here it seems like you want to execute the code until c == '\n'

Guillaume
  • 449
  • 3
  • 14