1

80 文字のバッファーに文字が入力されるまで、またはキャリッジ リターン キーが押されるまで、またはバッファーがいっぱいになるまで、どのように文字を入力するのですか。

私はさまざまな方法を調べましたが、Enter キーを押す必要があり、入力 char* が 80 で途切れます。

ありがとう。

4

3 に答える 3

4

本当に「入力したとおり」の文字が必要な場合は、C io を使用できません。UNIX の方法で行う必要があります。(またはWindowsの方法)

#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 に答える