我有一个非常简单的代码将大写转换为小写:
#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;
}
Run Code Online (Sandbox Code Playgroud)
但运行这个简单的代码总是*在输出时有一个额外的字符.它打印下面的char *.看一看:
D
d
*
D
d
*
E
e
*
Run Code Online (Sandbox Code Playgroud)
这是从哪里来的?
Sou*_*osh 12
在每次输入之后,由于ENTER按下了键,有一个newline存储在输入缓冲区中并在下一次迭代中读取getchar().
a newline(\n)的ASCII值为10(十进制),加到'a'-'A'32(十进制),产生42(十进制),打印出来*.
FWIW,getchar()返回一个int.将返回值存储getchar()到char变量中是一个非常糟糕的主意,因为,如果getchar()失败,其中一个可能的返回值,例如EOF将不适合char类型,导致甚至调试尝试的进一步条件检查中的问题.更改
char c;
Run Code Online (Sandbox Code Playgroud)
至
int c = 0;
Run Code Online (Sandbox Code Playgroud)