printf 打印额外的 * 字符

printf prints additional * character

我有一个非常简单的代码可以将大写字母转换为小写字母:

#include <stdio.h>
int main()
{
char c;
int i=0;
for (i=0;i<10;i++){
    c=getchar();
    c=c-'A'+'a';
    printf("%c\n",c );
    }
return 0;
}

但是 运行 这个简单的代码总是在输出时有一个额外的 * 字符。它打印后面跟着 * 的字符。看看:

D
d
*
D
d
*
E
e
*

这是从哪里来的?

在每个 input 之后,由于按下了 ENTER 键,所以有一个 newline 存储在输入缓冲区中,并且通过 getchar().

在下一次迭代中读取

a newline (\n) 的 ASCII 值为 10(十进制),添加到 'a'-'A' 即 32(十进制),产生 42(十进制) ), 它打印 *.

FWIW,getchar() return 和 int。将 getchar() 的 return 值存储到 char 变量中是一个非常糟糕的主意,因为万一 getchar() 失败,其中一个可能的 return值,例如 EOF 将不适合 char 类型,导致在进一步条件检查甚至调试尝试中出现问题。改变

char c;

int c = 0;