C 不接受字符

C 不接受字符,c,character,C,Character,我编写了一个C程序来计算输入字符的出现次数。执行时,我只能输入文件名。在输入要计数的字符之前,执行下一条语句。我得到的输出如下所示 Enter the file name test.txt Enter the character to be counted File test.txt has 0 instances of 输入文件名 test.txt 输入要计数的字符 文件test.txt有0个 这是我的密码 #include<stdio.h> #include<stdlib

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

Enter the file name test.txt Enter the character to be counted File test.txt has 0 instances of 输入文件名 test.txt 输入要计数的字符 文件test.txt有0个 这是我的密码

#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;
}
#包括
#包括
int main()
{
文件*fp1;
int-cnt=0;
字符a,ch,name[20];
printf(“输入文件名\n”);
scanf(“%s”,名称);
//fp1=fopen(名称,“r”);
printf(“输入要计数的字符\n”);
scanf(“%c”和“ch”);
fp1=fopen(名称,“r”);
而(1)
{
a=fgetc(fp1);
if(a==ch)
cnt=cnt+1;
如果(a==EOF)
打破
}
fclose(fp1);
printf(“文件%s有%c的%d个实例”,名称、cnt、ch);
返回0;
}

如何解决这个问题?

这是初学者常见的问题,尤其是在使用函数族时

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

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


如果您按照指向的链接进行操作,它将告诉您几乎所有格式都会自动读取并丢弃前导空格,三个例外之一就是读取单个字符的格式,
%c“
这是初学者常见的问题,尤其是在使用函数族时

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

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

如果您按照指向的链接进行操作,它将告诉您几乎所有格式都会自动读取并丢弃前导空格,三个例外之一就是读取单个字符的格式,
%c

scanf(“%c”,&ch)-->
scanf(“%c”和&ch),注意空格
scanf(“%c”和&ch)-->
scanf(“%c”和&ch),注意空格
scanf(" %c",&ch);
//     ^
//     |
// Note leading space