this post was submitted on 27 Jun 2023
6 points (100.0% liked)

C Programming Language

936 readers
1 users here now

Welcome to the C community!

C is quirky, flawed, and an enormous success.
... When I read commentary about suggestions for where C should go, I often think back and give thanks that it wasn't developed under the advice of a worldwide crowd.
... The only way to learn a new programming language is by writing programs in it.

ยฉ Dennis Ritchie

๐ŸŒ https://en.cppreference.com/w/c

founded 1 year ago
MODERATORS
 
      ' char* strInput =(char*) malloc(sizeof(char));
        int ch;
        int letNum = 0;
        while((ch = getchar()) != EOF){
                letNum++;
                strInput = (char*)realloc(strInput,letNum*sizeof(char));
                *(strInput + letNum - 1) = ch;
        }
        printf("\n");
        printf("%s\n",strInput);
        free(strInput);`

This is the contents of main in a program I wrote that takes an undefined number of chars and prints the final string. I don't understand why but it only works if I press ctrl+D twice, and only once if I press enter before.

does anyone get what's going on? And how would you have written the program?

you are viewing a single comment's thread
view the rest of the comments
[โ€“] [email protected] 1 points 1 year ago (1 children)

Thanks a lot for your answer. This might be because of my shallow understanding of how a buffer works, but I don't understand why EOF isn't consumed by getchar() when the other bytes are consumed. Isn't a char just a number and EOF too (-1 I think)? I probably should try and understand buffers more

[โ€“] adriator 1 points 1 year ago

When you press CTRL+D, first a signal is sent to the console to stop reading from the keyboard, then the EOF character gets added to the buffer. That's why it is not consumed at the same time as the previous characters.