字符不被接受

Character is not accepted

我编写了一个 C 程序来计算输入字符的出现次数。我执行的时候只能进入文件name.Before我输入要统计的字符,下一条语句executes.The得到的输出如下图

Enter the file name
test.txt
Enter the character to be counted 
File test.txt has 0 instances of

这是我的代码

#include<stdio.h>
#include<stdlib.h>
int main()
{
  FILE *fp1;
  int cnt=0;
  char a,ch,name[20];
  printf("Enter the file name\n");
  scanf("%s",name);
  //fp1=fopen(name,"r");
  printf("Enter the character to be counted\n");
  scanf("%c",&ch);
  fp1=fopen(name,"r");
  while(1)
  {
    a=fgetc(fp1);
    if (a==ch)
      cnt=cnt+1;
    if(a==EOF)    
      break;
  }
  fclose(fp1);
  printf("File %s has %d instances of %c",name,cnt,ch);
  return 0;
}

如何解决?

这是一个常见的初学者问题,尤其是在使用 scanf 系列函数时。

问题是当您输入文件名并按 Enter 时,scanf 函数读取文本但留下 Enter 键,换行符,在输入缓冲区中,因此当您下次读取一个字符时,它将读取该换行符。

解决方案非常简单:通过在 scanf 格式中放置一个 space 来告诉 scanf 读取并丢弃任何前导白色-space:

scanf(" %c",&ch);
//     ^
//     |
// Note leading space

如果您按照 link 到 scanf reference,它会告诉您几乎所有格式都会自动读取并丢弃前导白色-space,三个例外之一就是读取单个字符的格式,"%c".