计算字符串中的字符数(C)-问题

计算字符串中的字符数(C)-问题,c,string,function,C,String,Function,我必须用C语言编写一个程序,找到我选择的角色的幻影数量。 这是我的代码: 为什么如果我删除了粗体字,程序就不再工作了?我是说我不明白那条线在干什么 #include <stdio.h> #include <string.h> int number(char c) { int i,nr=0; char s[50]; printf("Enter a string: "); fgets(s,49,stdin); for(i=0;i<

我必须用C语言编写一个程序,找到我选择的角色的幻影数量。 这是我的代码: 为什么如果我删除了粗体字,程序就不再工作了?我是说我不明白那条线在干什么

#include <stdio.h>
#include <string.h>

int number(char c)
{
    int i,nr=0;
    char s[50];
    printf("Enter a string: ");
    fgets(s,49,stdin);
    for(i=0;i<strlen(s);++i)
        {
            if(s[i]==c)
            {
                nr++;
            }
        }
    return nr;
}

int main()
{
    int nra;
    char b;
    printf("Enter a character you want to count: ");
    b=getc(stdin);
    **getc(stdin);**
    printf("Call the function\n");
    nra=number(b);
    printf("The number of apparitions of chracter %c is  %d",b,nra);
    return 0;
}

#包括
#包括
整数(字符c)
{
int i,nr=0;
chars[50];
printf(“输入字符串:”);
fgets(s,49,stdin);

对于(i=0;i为什么如果我删除粗体字,程序将不再工作? 排队

getc(stdin);
当您输入字符(读入
b
)时,您将在输入流中留下一个换行符。并且
fgets()
函数读取该换行符并停止读取进一步的输入。这就是为什么对
getc()
的额外调用使其在使用换行符时工作的原因-因此
fgets()
等待您的预期输入


标准输入功能来自stdio(
scanf
fgets
getc
等)异常,通常会导致细微错误。通常最好逐行读取输入,然后进行分析,以尽量减少意外错误。

提示:按
a
并输入两个字符,
a
后接
\n
。OT:函数:
getc()
返回一个
int
,而不是
char
。编译器应该警告您这一点。事实上,
char
(通常)将无法识别EOF。OT:关于:
fgets(s,49,stdin);
函数:
fgets()
正确处理输入缓冲区的全长,因此无需将长度缩短1