帮小弟我看看这个程序哪错了.诡异中
帮我看看这个程序哪错了...诡异中
明天要交的作业,做一个心理测试程序,思路很明白的做了一部分先测试一下结果碰到了诡异的问题,在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();这个就自动接受了那个回车,而没有自己选择输入什么...
明天要交的作业,做一个心理测试程序,思路很明白的做了一部分先测试一下结果碰到了诡异的问题,在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();这个就自动接受了那个回车,而没有自己选择输入什么...