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;
我有一个非常简单的代码可以将大写字母转换为小写字母:
#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;