0

我在执行以下代码时遇到了困难。完成一次执行后,变量“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);
    }
}
4

1 回答 1

9

当你读到一个字符时,

scanf("%c",&t);

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

请注意,这getch()是非标准功能。你可以getchar()改用。

或将其更改为:

scanf(" %c",&t); 

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

于 2013-02-18T19:03:59.347 回答