How do I fill an 80-character buffer with characters as they are being entered or until the carriage return key is pressed, or the buffer is full, whichever occurs first.
I've looked into a lot of different ways, but enter has to be pressed then the input char* gets cut off at 80..
Thanks.
If you really want the characters "as they are entered", you cannot use C io. You have to do it the unix way. (or windows way)
#include <stdio.h>
#include <unistd.h>
#include <termios.h>
int main() {
char r[81];
int i;
struct termios old,new;
char c;
tcgetattr(0,&old);
new = old;
new.c_lflag&=~ICANON;
tcsetattr(0,TCSANOW,&new);
i = 0;
while (read(0,&c,1) && c!='\n' && i < 80) r[i++] = c;
r[i] = 0;
tcsetattr(0,TCSANOW,&old);
printf("Entered <%s>\n",r);
return 0;
}
#include<stdio.h>
...
int count=0;
char buffer[81];
int ch=getchar();
while(count<80&&ch!='\n'&&ch!='\r'&&ch!=EOF){
buffer[count]=ch;
count=count+1;
ch=getchar();
}
buffer[count]='\0';
Once you have buffer
as a string, make sure you digest the rest of the line of input to get the input stream ready for its next use.
This can be done by the following code (taken from the scanf
section of this document):
scanf("%*[^\n]"); /* Skip to the End of the Line */
scanf("%*1[\n]"); /* Skip One Newline */
#include <stdio>
...
char buf[80];
int i;
for (i = 0; i < sizeof(buf) - 1; i++)
{
int c = getchar();
if ( (c == '\n') || (c == EOF) )
{
buf[i] = '\0';
break;
}
buf[i] = c;
}
buf[sizeof(buf] - 1] = '\0';