鱼C论坛

 找回密码
 立即注册
查看: 3942|回复: 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()的用法,和为什么会错。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-3-20 13:04:01 | 显示全部楼层
  1. #include<stdio.h>
  2. void main()
  3. {
  4.       int x[10], i, *p, *py;
  5.       char ss;
  6.       void sort(int a[],int *px);
  7.       
  8.       printf("Please input 10 numbers:\n");

  9.       for( i=0; i < 10; i++)
  10.       {
  11.             scanf("%d", &x[i]);
  12.       }
  13.       p = x;
  14.       
  15.       sort( x, p );
  16.       
  17.       printf("Please input a or d:\n");

  18.       ss = getch();

  19.       if( ss == 'a' )
  20.       {
  21.             for( p=x; p < &x[10]; p++)
  22.             {
  23.                   printf("%d", *p);
  24.             }
  25.       }
  26.       printf("\n");
  27.       
  28.       if( ss == 'd' )
  29.       {
  30.             for( py=&x[9]; py >= &x[0]; py--)
  31.             {
  32.                   printf("%d", *py);
  33.             }
  34.       }
  35.       printf("\n");
  36. }

  37. void sort(int a[],int *px)
  38. {
  39.       int i, j, temp;
  40.       for( i=0; i < 10; i++)
  41.       {
  42.             for( j=i; j < 10; j++)
  43.             {
  44.                   if( a[j] < *px)
  45.                   {
  46.                         temp = *px;
  47.                         *px = a[j];
  48.                         a[j] = temp;
  49.                   }
  50.             }
  51.             px++;
  52.       }
  53.       
  54.       
  55. }
复制代码
帮你整理格式花了不少时间,下次注意点格式哦~

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-18 02:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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