在 C 中使用 getchar() 将输入发送到 char 数组

using getchar() in C to send input to a char array

edit 我将 for 循环更改为一个名为 input 的函数,并在所述函数中初始化 c 的值。还更改了循环内的分支条件,以便在必要时将 '[=14=]' 插入到第五个元素。我原来 string1 溢出到 string2 的问题仍然存在。我已经摆脱了 fflush( stdin ) 因为我不确定 Mac OSX El Capitan 是否支持它。

我有一个程序应该连接两个字符串,但我想确保用户不会填满数组的大小

现在,如果第一个字符串太长,它会将字符写入下一个字符串,这是不可取的 - 我的意图是数组 space 之外的任何额外字符都将被忽略.

void input( char *s1, int size ){
  for( int i = 0, c = 0; ( i < size ) && ( c != '\n' ); i++ ){
      c = getchar();

      if( i == size - 1 || c == '\n' )
          s1[i] = '[=10=]';
      else
          s1[i] = c;
  }
}

int main(){
  const int SIZE = 5;
  char string1[ SIZE ]; // create a char array
  char string2[ SIZE ]; // and another one

  printf( "Enter two strings: " );

  input( string1, SIZE );
  printf("String1: %s\n", string1);
  input( string2, SIZE );
  printf("String2: %s\n", string2);
}

示例输出...

Enter two strings: foobarr
String1: foob
String2: rr

我怎样才能改变它,使 'arr' 完全被忽略,而

getchar() 

在第二个函数调用中等待新的输入?

好的,这似乎有效,我从中获得了 clear_buffer() 函数 How to clear input buffer in C?.

void input( char *s1, int size ){

  for( int i = 0, c = 0; ( i < size ) && ( c != '\n' ); i++ ){
      c = getchar();

      // if we're out of space or the user is done with this string 
      if( i == size - 1 || c == '\n' ){

          // add null char to the array
          s1[i] = '[=10=]';

          // if we added null char because we ran out of space
          if( i == size - 1 )
              clear_buffer();
      }
      //Otherwise add a char to the array
      else
          s1[i] = c;
  }
}

void clear_buffer(){
  char c = '[=10=]';
  while (( c = getchar()) != '\n' && c != EOF) { }
}



int main(){
  const int SIZE = 5;

  printf( "Enter two strings: " );

  char string1[ SIZE ] = { '[=10=]' }; // create a char array
  input( string1, SIZE );
  printf("String1: %s\n", string1);

  char string2[ SIZE ] = { '[=10=]' }; // create another char array
  input( string2, SIZE );
  printf("String2: %s\n", string2);

  return 0;
}