不接受角色

时间:2015-06-03 07:12:51

标签: c character

我编写了一个C程序来计算输入字符的出现次数。当我执行时,我只能输入文件名。在输入要计数的字符之前,下一个语句会执行。我得到的输出如下所示。

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;
}

如何解决这个问题?

1 个答案:

答案 0 :(得分:5)

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

问题是,当您输入文件名,然后按 Enter 时,scanf函数会读取文本但保留 Enter 键, newline,在输入缓冲区中,所以当你下次读取一个字符时,它会读取该换行符。

解决方案非常简单:通过以scanf格式放置一个空格,告诉scanf读取并丢弃任何前导空格:

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

如果您点击scanf reference的链接,它会告诉您几乎所有格式都会自动读取并丢弃前导空格,三个例外中的一个只是读取单个字符的格式{{1} }。

相关问题