#include "stdio.h"
int _tmain(int argc, _TCHAR* argv[])
{
 char ch;
 int sum, num, line;
 printf ("Please enter a Capital Letter: (q to quit)\n");
 
 while (scanf("%c", &ch) == 1)
 {
  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;
}单步发现,其实while (scanf("%c", &ch) == 1)会走两遍,第一遍是输入的字符,第二遍是0x0A,为什么会这样?

解决方案 »

  1.   

    是因为你输入了一个字符之后按下了回车键,第二次scanf("%c", &ch) 接收的是回车键。
      

  2.   

    scanf是以回车做为结束输入的,因此肯定得收回车(0X0A)这个字符,至于收两次,是因为你的程序造成的,因为你每接收一个字符就进行判断(用IF语句判断),当输入的是0X0A时不满足if (ch >= 'A' && ch <= 'Z') 这条,因此就转到else里(类为0x0a不在'a'和'z'之间)
      

  3.   

    这个代码我测过了
    楼主如果输入一堆字符进去
    这些字符首先被存储在输入缓冲区中
    这些字符就包括你输入的大写字符和acii码为0xA(VT垂直制表符)
    然后你的这句scanf("%c", &ch)
    就把字符一个一个的按顺序取出来
    就是这么回事
      

  4.   

    回复于: 2012-12-01 22:23:36  
    是因为你输入了一个字符之后按下了回车键,第二次scanf("%c", &ch) 接收的是回车键。