在结构体中scanf("%c",&p->retir);为什么会出错呢

#include <ctype.h>
#define N 4
typedef struct
{char num[N];
char nam[N];
char retir;
int wage;
}AA;
main()
{AA people[N],*p=people;
int p1,p2,w1,w2,i=1;
float pw1,pw2;
clrscr();
for(;p<people+N;p++)
{printf("\n%dpeo\n",i);
printf(" nu\n");
scanf("%s",p->num);
printf(" na\n");
scanf("%s",p->nam);
printf(" ret\n");
scanf("%c",&p->retir);
printf(" wa\n");
scanf("%d",&p->wage);
}
p1=p2=w1=w2=0;
for(p=people;p<people+N;p++)
{if(toupper(p->retir)=='Y')
{p1++;w1+=p->wage;}
if(toupper(p->retir)=='N')
{p2++;w2+=p->wage;}
}
pw1=w1/N;pw2=w2/N;
printf("retir peo=%d,tatol wa=%d,ave=%f\n",p1,w1,pw1);
printf("NO retir peo=%d,tatol wa=%d,ave=%f\n",p2,w2,pw2);
} 为什么系统不让我输入scanf("%c",&p->retir);求指教??

scanf("%c",&p->retir);为什么会出错呢

在你的scanf()函数后面加一个getchar();就好了。
如:
scanf("%s",p->num);
printf(" na\n");
scanf("%s",p->nam);getchar(); //这里加,严格来说,应该在每一个后面都加,因为你在输入每个数据后,都会键入一个回车。这个回车保存在缓存中,当下一个是输入char时,会将回车读走。导致不能真实输入一个字符。
printf(" ret\n");
scanf("%c",&p->retir);
printf(" wa\n");
scanf("%d",&p->wage);
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-13
在scanf前用fflush(stdin),因为%s在读取字符串的时候碰到空格或回车就会停止读取,并且把它们留在输入缓冲中,在你读取单个字符的时候因为缓冲中有回车字符,所以就把这些空格给提取了出来
第2个回答  2012-11-13
1、开头加
# include "stdlib.h"
# include "stdio.h"
2、
printf(" ret\n");
fflush(stdin);////////加此句
scanf("%c",&p->retir);
printf(" wa\n");*/
3、去掉 clrscr();追问

fflush(stdin);////////加此句
这句话什么意思,还有就是为什么要去掉clrscr()呀

追答

fflush(stdin);用于清除缓冲区的内容
在用scanf输入字符时,一般加上此语句

clrscr();在conio.h头文件中。
但Visual C++ 6.0或7等新版本已没这个了

本回答被提问者采纳

相关了解……

你可能感兴趣的内容

大家正在搜

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网