为什么会这样?(if else语句的问题)

   更新日期:2024.06.04
这是 scanf 的问题, 你输入C 后,会按回车,但是回车键,没有被读出,在键盘缓冲区,
当你打印完
A
ABA
ABCBA
后,while (scanf("%c", &ch) == 1)会读取到 回车键, 回车键 进行判断if (ch >= 'A' && ch <= 'Z')便执行 else

你要加一句getchar();来消耗掉 回车键

while (scanf("%c", &ch) == 1)
{
getchar(); /////////////////////////////////////
if (ch >= 'A' && ch <= 'Z')
{

#include <stdio.h>
int main (void)
{
char ch;
int sum, num, line;
printf ("Please enter a Capital Letter: (q to quit)\n");
while (scanf("%c", &ch) == 1)//每次输入的结果会是你输入的字母和一个0x0A(回车),所以你这样写,相当于输入了两个字符,建议分别写成:
"
while(1)
{
scanf("%c", &ch);

.......
}
"
或者写成:

while(...)
{
..........
fflush(stdin);
}

{
if (ch >= 'A' && ch <= 'Z')
{
for (num = ch - 'A' + 1, sum = 1; num; num--, sum++)
{
printf("%*c", num, 'A');//有错
for (line = 1; line < sum; line++)
printf ("%c", 'A' + line);
for (line -= 2; line >= 0; line--)
printf ("%c", 'A' + line);
printf ("\n");
}
}
else
printf ("into"); //就是这里, if结束后程序进入这里
}
return 0;
}

你是用字符接收的,换行也算是一个字符,也就是你输入A然后确认后就相当于输入了两个字符,循环体运行了两次。只需添加一个getchar()把换行接受下来就行了。
while(scanf("%c", &ch) == 1){
getchar();
.....

相关链接

欢迎反馈与建议,请联系电邮
2024 © 视觉网