scanf()和for循环不合作

时间:2015-12-12 00:05:36

标签: c for-loop scanf

我正在编写一个名为GetPattern()的函数,该函数将在我的main()函数中使用。

以下是我的main()如何使用GetPattern()函数的上下文。

int main(void)
{
  int attempt=0, option=-1;
  char pattern[SIZE+1], replacement[SIZE+1];
  char name[20];    
  FILE *in, *out;

  printf("Enter the pattern to find:");
  GetPattern(pattern);
  out = CreateFile();
  Find(in, pattern, out);
  fclose(in);
  fclose(out);

  return 0;
}

这是我的GetPattern()功能:

void GetPattern(char *tmp)
{
// prompt the user for the pattern to be found/replaced
// note: any character, including ' ', maybe be part of the pattern
// we assume that the pattern has no more than 20 characters. If the user
// enters more than 20 characters, only the first 20 will be used.

  int i;

  for (i = 0; i < 20; i++) // iterate 20 times
    {
      scanf(" %c", &tmp[i]);
      if (tmp[i] == '\n') // if user hits enter, break the loop
        {
          tmp[i] = '\0'; // insert '\0' at the end of the array
          break;
        }
      else
        tmp[i+1] = '\0'; // insert '\0' at the end of the array
    }

  printf("%s\n", tmp); // see what's in tmp[]

  return;
}

GetPattern()函数独立工作;与main()函数分开,但当我将其放入main时,它只能接受20个字符而且不会少。即使我按下ENTER(即'\ n'),循环也不会中断 - 它会继续运行。

你看到这段代码有什么明显错误吗?

1 个答案:

答案 0 :(得分:1)

我认为使用getc()会对您有帮助。

for (i = 0; i < 20; i++) // iterate 20 times
{
    //scanf(" %c", &tmp[i]);
    tmp[i]=getc(stdin);/////

    if (tmp[i] == '\n') // if user hits enter, break the loop
    {
        tmp[i] = '\0'; // insert '\0' at the end of the array
        break;
    }
    else
        tmp[i+1] = '\0'; // insert '\0' at the end of the array
}