简体   繁体   中英

I don't get an output when I compile a program having getchar(), etc on Linux Mint on the terminal window

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);
}

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;
}

What do you think this does?

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM