Я знаю, что на этот вопрос дан ответ, и он очень старый, но принятое решение на самом деле неверно. Если вы введете более 19 символов, то stdin
останется с байтами, которые будут прочитаны на следующих fgets (), и он найдет новую строку, а следующая запись будет неправильной.
См. Следующий код и обратите внимание на несколько вещей:
- Вам не нужен отдельный буфер для чтения ваших входных данных. Просто прочитайте прямо в массив.
- После чтения в массив удалите '\n'
- При необходимости промыть stdin
#include <stdio.h>
#include <string.h>
int main()
{
char test[5][20+1] = {{0}}; // extra space for NULL
int i;
int c;
char *ptr = NULL;
for(i=0;i<5;i++){
printf("enter> ");
fgets(test[i], 20+1, stdin); // fgets read n-1 characters so we add 1 since our buffer has space for null already
if( (ptr = strrchr(test[i], '\n') ) )
{
*ptr = 0x00;
}
else
{
// need to flush stdin since '\n' wasn't found fgets() didn't read all of input
while( (c = getchar()) != '\n' && c != EOF );
}
}
for(i=0;i<5;i++)
printf("%d | %s\n",i,test[i]);
return 0;
}