1

如何在输入字符时或直到按下回车键或缓冲区已满(以先发生者为准)填充 80 个字符的缓冲区。

我已经研究了很多不同的方法,但是必须按下输入然后输入 char* 在 80 处被切断..

谢谢。

4

3 回答 3

4

如果您真的想要“输入时”的字符,则不能使用 C io。您必须以 unix 方式进行操作。(或窗口方式)

#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;
}
于 2012-04-04T05:42:34.057 回答
0
#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';
于 2012-04-04T04:41:10.617 回答
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';

一旦你有了buffer一个字符串,确保你消化了输入行的其余部分,以使输入流为下次使用做好准备。

这可以通过以下代码完成(取自本文档scanf的部分):

scanf("%*[^\n]");   /* Skip to the End of the Line */
scanf("%*1[\n]");   /* Skip One Newline */
于 2012-04-04T04:35:42.497 回答