鱼C论坛

 找回密码
 立即注册
查看: 3194|回复: 3

getchar()疑惑???

[复制链接]
发表于 2011-3-19 23:42:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
getchar()疑惑???
我今天编写了个程序,用getchar()函数获得字符,然后根据getchar()获得的字符来确定输出的结果。
具体程序如下:
#include<stdio.h>
void main()
{
int x[10],i,*p,*py;
char ss;
void sort(int a[],int *px);

printf("Please input 10 numbers:\n");
for(i=0;i<10;i++)
scanf("%d",&x[i]);

p=x;

sort(x,p);

printf("Please input a or d:\n");
getchar();
if(getchar()=='a')
{
for(p=x;p<(&x[10]);p++)
printf("%d",*p);
}

if(getchar()=='d')
{
for(py=&x[9];py>=&x[0];py--)
printf("%d",*py);

}
}

void sort(int a[],int *px)
{
int i,j,temp;
for(i=0;i<10;i++)
{
for(j=i;j<10;j++)
{
if(a[j]<*px)
{
temp=*px;
*px=a[j];
a[j]=temp;
}
}
px++;
}


}
修改后是:
#include<stdio.h>
void main()
{
int x[10],i,*p,*py;
char ss;
void sort(int a[],int *px);

printf("Please input 10 numbers:\n");
for(i=0;i<10;i++)
scanf("%d",&x[i]);

p=x;

sort(x,p);

printf("Please input a or d:\n");

if(getchar()=='a')
{
for(p=x;p<(&x[10]);p++)
printf("%d",*p);
}

if(getchar()=='d')
{
for(py=&x[9];py>=&x[0];py--)
printf("%d",*py);

}
}

void sort(int a[],int *px)
{
int i,j,temp;
for(i=0;i<10;i++)
{
for(j=i;j<10;j++)
{
if(a[j]<*px)
{
temp=*px;
*px=a[j];
a[j]=temp;
}
}
px++;
}


}
这个是经人指点后的修改。不明白为什么?
错误的程序,输入d后回车确认,没有任何结果。所以想详细了解下getchar()的用法,和为什么会错。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-3-20 13:04:01 | 显示全部楼层
#include<stdio.h>
void main()
{
      int x[10], i, *p, *py;
      char ss;
      void sort(int a[],int *px);
      
      printf("Please input 10 numbers:\n");

      for( i=0; i < 10; i++)
      {
            scanf("%d", &x[i]);
      }
      p = x;
      
      sort( x, p );
      
      printf("Please input a or d:\n");

      ss = getch();

      if( ss == 'a' )
      {
            for( p=x; p < &x[10]; p++)
            {
                  printf("%d", *p);
            }
      }
      printf("\n");
      
      if( ss == 'd' )
      {
            for( py=&x[9]; py >= &x[0]; py--)
            {
                  printf("%d", *py);
            }
      }
      printf("\n");
}

void sort(int a[],int *px)
{
      int i, j, temp;
      for( i=0; i < 10; i++)
      {
            for( j=i; j < 10; j++)
            {
                  if( a[j] < *px)
                  {
                        temp = *px;
                        *px = a[j];
                        a[j] = temp;
                  }
            }
            px++;
      }
      
      
}
帮你整理格式花了不少时间,下次注意点格式哦~

getchar()是从键盘缓冲区读取字符,并作为返回值返回的,这里因为前边输入的干扰,键盘缓冲区不正常。
所以if( getchar() == 'a' )读入的是缓冲区里边的内容,当提示输入a或者d的时候程序是停留在if( getchar() == 'd' )的判断上。
因此,会产生输入a不显示任何东西的情况,而输入d正常。
这样我们就不能使用读取缓冲区的函数,改成getch()就可以。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-3-21 22:04:26 | 显示全部楼层
小甲鱼的程序格式很美观易懂,灰常支持!

LZ还可以加上这个语句:   fflush(stdin);//清除缓冲
之后就可以依旧用getchar();
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2014-3-17 11:34:12 | 显示全部楼层
解释的不错,不过用getch()要函数头 stdlib哦,用getchar不需要
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-20 00:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表