首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

帮小弟我看看这个程序哪错了.诡异中

2012-02-10 
帮我看看这个程序哪错了...诡异中明天要交的作业,做一个心理测试程序,思路很明白的做了一部分先测试一下结

帮我看看这个程序哪错了...诡异中
明天要交的作业,做一个心理测试程序,思路很明白的做了一部分先测试一下结果碰到了诡异的问题,在text函数里面从c=getchar()开始的语句被直接忽略掉了,写其他的也同样被忽略掉,直接运行回到主函数的for循环了,为什么呢?

#include "stdio.h "                                                        

  static   struct   s
  {
      char   name[20];
      int   point;
  }a[50];
void   text();
main()
{
  int   i;
  char   h;
  printf( "What   can   I   do   for   you?\nA   Text\nB   Probation\n ");
  for(i=0;i <200;i++)
{
h=getchar();
if(h== 'a ')   text(i);
}
}
void     text(int   m)
{
  int   j=0;
  char   c;
  printf( "Your   name   ");
  scanf( "%s ",a[m].name);
  printf( "When   are   you   feeling   best?\n ");
  printf( "A   Moring\nB   Afternoon   and   evening\nC   Night\n ");
  c=getchar();
  if(c== 'a ')     j=j+2;
    else
if(c== 'b ')   j=j+4;
          else
      if(c== 'c ')   j=j+6;

  return(0);
}


[解决办法]
#include <stdio.h>

static struct s
{
char name[20];
int point;
}a[50];

void text(int n);

int main()
{
int i;
char h;

printf( "What can I do for you?\nA Text\nB Probation\n ");
for(i=0; i <50; i++)
{
h = getchar();
if(h == 'a ')
text(i);
}
return 0;
}

void text(int m)
{
int j = 0;
char c;

printf( "Your name ");
scanf( "%s ",a[m].name);
printf( "When are you feeling best?\n ");
printf( "A Moring\nB Afternoon and evening\nC Night\n ");
fflush(stdin);
c = getchar();
fflush(stdin);

if(c == 'a ')
j = j+2;
else if(c == 'b ')
j = j+4;
else if(c == 'c ')
j = j+6;
}

[解决办法]
#include "stdio.h "

static struct s
{
char name[20];
int point;
}a[50];
void text(int );
int main()
{
int i;
char h;
printf( "What can I do for you?\nA Text\nB Probation\n ");
for(i=0;i <200;i++)
{
h=getchar();
if(h== 'a ') text(i);
}
return 0;
}

void text(int m)
{
int j=0;
char c;
printf( "Your name ");
scanf( "%s ",a[m].name);
printf( "When are you feeling best?\n ");
printf( "A Moring\nB Afternoon and evening\nC Night\n ");
c=getchar();
if(c== 'a ')
j=j+2;
else
if(c== 'b ')
j=j+4;
else
if(c== 'c ')
j=j+6;
return;
}
[解决办法]
scanf( "%s ",a[m].name);输入以回车结束的,最后回车还是在缓冲区中,如果不清除,c=getchar();这个就自动接受了那个回车,而没有自己选择输入什么...



ps:问题已经搞定,记得马上把帖子结了.
[解决办法]
文题出在getchar()上,getchar()从标准输入缓冲区内取一个字符,当缓冲区不空时则直接取得字符不会中断键盘进行输入。因此,要刷清缓冲区。

热点排行