今天在刷郑州轻工业oj上的题是碰到了一个关于字符串的,本来是水题一道十分钟就搞定的,结果卡了我一个小时。
有这样一段代码
int main(void)
{
int n;
char s[100] [100];
scanf("%d",&n);
for(i=0;i<n;i++)
gets(s[i]);
return 0;
}
当我给n赋值3的时候我却只能输入两个字符串,我百思不得其解啊。
后来才想明白当我给n赋值后摁下的回车符scanf是不会读取的,也就是会留在缓冲区,当进入第一次循环是gets会直接读取这个
换行符,也就是会直接结束读取,进入下一次循环,所以造成了少读取一次的错觉。只要再scanf后面加一个getchar()把换行符读取走即可,望大家引以为戒。