printf打印其他*字符

时间:2016-06-23 08:31:29

标签: c loops getchar

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

#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;
}

但是运行这个简单的代码总是在输出中有一个额外的*字符。它按*打印char。看看:

D
d
*
D
d
*
E
e
*

这是从哪里来的?

1 个答案:

答案 0 :(得分:12)

在每次输入之后,由于按下 ENTER 键,存储在输入缓冲区中并在下一次迭代中读取的sa newline getchar()

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

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

char

char c;