我试图理解为什么这段代码没有按照我的期望做。
当我运行它时,即使仅输入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;
}
答案 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;
}