while 循环中的 scanf("%f",&aa) VS scanf("%f",&aa)

scanf("%f",&aa) VS scanf("%f",&aa) in a while loop

我使用下面的程序来计算我写的数字的绝对值。当 aa 变成 n.

时程序应该停止
#include <stdio.h>
int main()
{
float a;
char ap;
printf("Start? Press n for no.\n");
scanf("%c",&ap);
while(ap!='n'){
  printf("Give a number\n");
  scanf("%f",&a);
    if(a<0){
    a=-a;
    }
  printf("Abs=%f\n",a);
  printf("Continue? Press n for no.\n");
  scanf("%c",&aa);
}
printf("Exit");
return 0;    
}

程序似乎忽略了 while 循环中的 scanf("%c",&aa),这是我的问题。 斜体 是输入粗体 输出:

Start? Press n for no.

y

Give a number

4

Abs=4.000000

Continue? Pres n for no.

Give a number

5

Abs=5.000000

Continue? Pres n for no.

Give a number

n

Abs=5.000000

Continue? Pres n for no.

Exit

当我用 scanf(" %c",&aa) 替换 scanf("%c",&aa) 时问题就解决了(参见 space)。另外,当 aa 是一个数字时一切正常。该程序运行良好,当 aa 变为 0 时停止。

#include <stdio.h>
int main()
{
float a, aa;
printf("Start? Press 0 for no.\n");
scanf("%f",&aa);
while(aa!=0){
  printf("Give a number\n");
  scanf("%f",&a);
    if(a<0){
    a=-a;
    }
  printf("Abs=%f\n",a);
  printf("Continue? Pres 0 for no.\n");
  scanf("%f",&aa);
}
printf("Exit");
return 0;
}

那是什么?

提前致谢!

Space 在 %c 之前删除任何白色 space(空格、制表符或换行符)。这意味着 %c 没有 space 将读取白色 space 就像换行符 (\n)、spaces(' ') 或制表符 (\t) . 通过在 %c 之前添加 space,我们是 skipping 并且只读取给定的字符。