我有一个非常简单的代码将大写字母转换为小写:
#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
*
这是从哪里来的?
答案 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;