#include <stdio.h>
#include <stdlib.h>
char * readLine (FILE * file)
{
size_t len = 0;
int c = 0, i = 0;
char * out = 0;
// read the whole line
do { c
= fgetc(file
); len
++; } while (c!='\0' && c!='\n' && c!=EOF);
// if the cursor didn't move return NULL
if (pos
== ftell(file
) && c
== EOF
) return 0;
// allocate required memory
// rewind cursor to beginning of line
fseek (file
, pos
, SEEK_SET
);
// copy the line
do { out
[i
++] = fgetc(file
); } while (c!='\0' && c!='\n' && c!=EOF);
// make sure there's \0 at the end
out[i] = '\0';
return out;
}
int main (void)
{
// FILE * file = fopen("test.txt", "r");
char * line = readLine(stdin);
while(line)
{
printf(line
); // print current line free(line
); // free allocated memory line = readLine(stdin); // recur
}
return 0;
}
ICAgICNpbmNsdWRlIDxzdGRpby5oPgogICAgI2luY2x1ZGUgPHN0ZGxpYi5oPgogICAgCiAgICBjaGFyICogcmVhZExpbmUgKEZJTEUgKiBmaWxlKQogICAgewogICAgICAgIHNpemVfdCBsZW4gPSAwOwogICAgICAgIGludCBjID0gMCwgaSA9IDA7CiAgICAgICAgbG9uZyBwb3MgPSBmdGVsbChmaWxlKTsKICAgICAgICBjaGFyICogb3V0ID0gMDsKICAgIAogICAgICAgIC8vIHJlYWQgdGhlIHdob2xlIGxpbmUKICAgICAgICBkbyB7IGMgPSBmZ2V0YyhmaWxlKTsgbGVuKys7IH0KICAgICAgICB3aGlsZSAoYyE9J1wwJyAmJiBjIT0nXG4nICYmIGMhPUVPRik7CiAgICAgICAgCiAgICAgICAgLy8gaWYgdGhlIGN1cnNvciBkaWRuJ3QgbW92ZSByZXR1cm4gTlVMTAogICAgICAgIGlmIChwb3MgPT0gZnRlbGwoZmlsZSkgJiYgYyA9PSBFT0YpIHJldHVybiAwOwogICAgICAgIAogICAgICAgIC8vIGFsbG9jYXRlIHJlcXVpcmVkIG1lbW9yeQogICAgICAgIG91dCA9IChjaGFyKiltYWxsb2MobGVuKzEpOwoKICAgICAgICAvLyByZXdpbmQgY3Vyc29yIHRvIGJlZ2lubmluZyBvZiBsaW5lCiAgICAgICAgZnNlZWsgKGZpbGUsIHBvcywgU0VFS19TRVQpOwogICAgICAgIAogICAgICAgIC8vIGNvcHkgdGhlIGxpbmUKICAgICAgICBkbyB7IG91dFtpKytdID0gZmdldGMoZmlsZSk7IH0KICAgICAgICB3aGlsZSAoYyE9J1wwJyAmJiBjIT0nXG4nICYmIGMhPUVPRik7CiAgICAgICAgCiAgICAgICAgLy8gbWFrZSBzdXJlIHRoZXJlJ3MgXDAgYXQgdGhlIGVuZAogICAgICAgIG91dFtpXSA9ICdcMCc7CgogICAgICAgIHJldHVybiBvdXQ7CiAgICB9CiAgICAKICAgIGludCBtYWluICh2b2lkKQogICAgewogICAgLy8gIEZJTEUgKiBmaWxlID0gZm9wZW4oInRlc3QudHh0IiwgInIiKTsKICAgICAgICBjaGFyICogbGluZSA9IHJlYWRMaW5lKHN0ZGluKTsKICAgIAogICAgICAgIHdoaWxlKGxpbmUpCiAgICAgICAgewogICAgICAgICAgICBwcmludGYobGluZSk7IC8vIHByaW50IGN1cnJlbnQgbGluZQogICAgICAgICAgICBmcmVlKGxpbmUpOyAvLyBmcmVlIGFsbG9jYXRlZCBtZW1vcnkKICAgICAgICAgICAgbGluZSA9IHJlYWRMaW5lKHN0ZGluKTsgLy8gcmVjdXIKICAgICAgICB9CiAgICAKICAgICAgICByZXR1cm4gMDsKICAgIH0=