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

c语言写猜数字的~新~有关问题

2012-09-13 
c语言写猜数字的~新~问题#include stdio.h#include stdlib.h#include time.h#define N 4typedef str

c语言写猜数字的~新~问题
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 4

typedef struct
{
 char name [30];
 int score;
}DATA;

typedef struct
{
 int A;
 int B;
}SAVE;

void menu ();
DATA game ();
int balance (int i, int j );

int main()
{
  menu();
  return 0;
}

void menu ()
{
  char a;
  printf("\t \t主菜单\n\n " );
  printf("\t0\t绝世黑客\n\n " );
  printf("\t1\t英雄排名\n\n " );
  printf("\t2\t清楚英雄记录\n\n " );
  printf("\t3\t退出系统\n\n " );
  printf("\t 请输入一个编号:[ ]\b\b" );
  scanf("%c",&a);
  switch (a)
  {
  case '0': game(); //进入游戏 
  break;
  //case 1: display(); //查看排名 
  //break;
  //case 2: clear(); //清楚所有排名 
  break;
  //case 3: quit(); //退出系统 
  break;
  default:
  printf("输入有误,请从新输入\n");
  } 
  return;
}

DATA game () //游戏主程序 
{
 int question[N ];
 int answer[N ];
 int i,j,k=0,l,m,n;
 int defen;
 int grades=0;
 int result_a=0,result_b=0;
 int end=0;
 char ch;
 char name[30];
 DATA player;
 int a=0;
 int b=0;
 srand((unsigned )time(NULL ) );
  for(i=0;i<N;i++)
  {
  question[i ]=rand()%11-1;
  }
 printf("你打开程序,感觉到一震眩晕,醒来后才发现你进入了计算机世界");
 printf("现在你要破解一切密码,来揭开这一切谜底。。。。。。\n\n");
 printf("现在你需要输入一组四位整数,如:1234,来进行猜测密码,我会对你进行提示,直到得出正确答案\n");
 printf("请输入密码:");
  while(end!=1 )
  {
  scanf("%s", &answer );
  for(j=0; j<N; j++ )
  {
  result_a=balance(question[j ], answer[j ] );
  a=a+result_a+a;
  }
  if(result_a==4 )
  {
  printf("\nyou do a great job!\n " );
  k=1;  
  end=1;
  }
  else
  {
  printf("是否放弃?放弃后显示正确答案。y/n \n" );
  ch=getchar();
  if(ch=='y')
  {
  printf("正确答案是: " );
  for(n=0; n<N; n++ )
  {
  printf("%d ", question[n] );
  }
  printf("请输入您的姓名: " );
  scanf("%s ", name );
  end=1;  
  }
  else
  {
  for(l=0; l<N; l++ )
  {
  for(m=0; m<N; m++ )
  {


  if(l!=m )
  {
  result_b=balance(question[l ], answer[m ] ); 
  if(result_b==1 )
  {
  b=result_b+b;
  break;
  }
  }
  }  
  }
  printf("密码错误,请重新输入密码\n");
  scanf("%s",&answer);
  }
  }  
  k=k+1;
  }
 return player;
 }

int balance (int i, int j )
{
  if(i==j)
  {
  return 1;
  }
  else
  {
  return 0;
  }
}
这个编译通过了 可是执行的时候执行到了“是否放弃y/n”时候 不让输入直接跳到了 密码错误,请重新输入
这是怎么回事儿啊

[解决办法]
printf("是否放弃?放弃后显示正确答案。y/n \n" );
这句之后加个fflush(stdin);清除缓冲区
[解决办法]
在每个最后不带\n的printf后面加fflush(stdout);
在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin);
另外请检查scanf的返回值。

热点排行