是什么让这里的gets函数将第一个输入字符串存储在pt [1]而不是pt [0]中,并在读取p-1字符串后退出循环,如果使用scanf则读取p字符串但打印第一个字符串( pt [0])作为空白?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(void)
{
int c,i,j,p,k;
char d[100],pt[1000][1000];
scanf("%d",&c);
for(i=0;i<=c-1;i++)
{
scanf(" %c",&d[i]);
}
scanf("%d",&p);
for(i=0;i<=p-1;i++)
{
scanf(" %c",&d[i]);
}
scanf("%d",&p);
for(i=0;i<=p-1;i++)
{
gets(pt[i]);
}
/*the first string is stored in pt[1] instead of pt[0] and loop terminates after reading p-1 strings */
答案 0 :(得分:2)
之前的scanf
调用将换行符留在输入缓冲区中,这意味着第一个gets
调用将该换行符读为空行。
解决此问题的最简单方法是通过fgets
调用来获取scanf
调用和循环之间的“休息”。