getch()和scanf()函数之间的区别

时间:2013-02-18 19:01:14

标签: c++ c scanf getch

执行以下代码时遇到了困难。完成一次执行后,变量't'取空值。通过使用getch()而不是scanf()解决了这个问题。但我不知道为什么会这样。任何解释? 这个程序没有用。

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
char t;
void main()
{
    while(1)
    {
        scanf("%c",&t);
        printf("\nValue of t = %c",t);
        printf("\nContinue (Y/N):");
        char a=getche();
        if(a=='n' || a=='N')
        exit(0);
   }
}

现在,这是正确执行的程序。

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
char t;
void main()
{
    while(1)
    {
         t=getch();
         printf("\nValue of t = %c",t);
         printf("\nContinue (Y/N):");
         char a=getche();
         if(a=='n' || a=='N')
         exit(0);
    }
}

1 个答案:

答案 0 :(得分:8)

当你读一个角色时,

scanf("%c",&t);

在输入流中留下了一个换行符,导致后续的scanf()跳过循环中的输入。

请注意getch()是非标准功能。您可以改为使用getchar()

或将其更改为:

scanf(" %c",&t); 

注意格式说明符中的空格,该空格确保在读取%c的字符之前scanf()跳过所有空格。