字符串的异常行为

时间:2016-01-26 10:11:05

标签: c string

是什么让这里的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 */ 

1 个答案:

答案 0 :(得分:2)

之前的scanf调用将换行符留在输入缓冲区中,这意味着第一个gets调用将该换行符读为空行。

解决此问题的最简单方法是通过fgets调用来获取scanf调用和循环之间的“休息”。