无法理解此C程序的工作方式吗?

时间:2019-10-14 11:54:17

标签: c gcc

我试图理解为什么这段代码没有按照我的期望做。

当我运行它时,即使仅输入b,我也会得到1(或如下注释中所述,最多2)。我的期望是它应该继续循环,直到我输入b以外的其他字符为止。

我对C并不十分熟悉。谁能向我解释如何更改此方法以使其按预期工作?

#include<stdio.h>
#include<stdlib.h>
void run()
{
    int counter=0;
    char a='b';
    while(a=='b')
    {
        counter++;
        scanf("%c",&a);
    }
    printf("%d",counter);
}
int main()
{
    run();
    return 0;
}

2 个答案:

答案 0 :(得分:4)

来自评论:但是如果我给b b b b b b b作为输入,它仍然给出2

更改语句:

   scanf("%c",&a);

收件人:

scanf(" %c",&a);
       ^

格式说明符%c前面的空格将占用任何空白字符(或什至C中的一系列 characters considered white space ),在读取预期字符之前输入,在此示例中,最终扫描的值精确地为b,而不是\n或导致循环退出的 (空格) 。

答案 1 :(得分:0)

  

但是,如果我输入b b b b b b,它仍然给出2。   我不明白。

这是因为您已经以这种方式设计了程序,因此始终希望输入b,并且输入包含b和空格的混合。

尝试如下。

 void run()
 {
     int counter=0;
     char a='b';
     while(scanf("%c", &a) > 0 && a != '\n')
     {   
        if (a == 'b')
         counter++;
     }   
     printf(" %d",counter);
 }

 int main()
 {
     run();
    return 0;
 }