Problem:
未解决的问题:使用fgets循环读取字符串总是少一行-CSDN博客
Analyze:
Both scanf() and fgets() will stop reading when encounting a carriage return character,but the difference is that scanf() won't read the carriage return character while fgets() will read the carriage return character.
If scanf()'s next line is fgets(),when scanf() finished reading,the carriage return character is still in stdin buffer,fgets() will encounting it,read it,and finished reading.So fgets() can't read string that programmer expect it to read.
Solution:
Add an additional line to handle the carriage return character that was not read by scanf().
Code written by myself:
#include<stdio.h>
int main() {
int n, i;
scanf("%d", &n);
char lines[n][1000];
fgets(lines[0], 1000,
stdin); //Handle the carriage return character of the previous line
for (i = 0; i < n; i++) {
fgets(lines[i], 1000, stdin);
}
for (i = 0; i < n; i++) {
fputs(lines[i], stdout);
}
return 0;
}