2 fgsdkgf fgsdkgf 于 2014.12.12 12:47 提问

C语言自己写的程序有个小错,求改下

#include
int main()
{
int n,l,k,y,t1,t2,t3;char x1,x2,x3;t1=0;t2=0;t3=0;
printf("请输入现在队伍的列数:\n");
scanf("%d",&n);
printf("拉面的制作时间:\n");
scanf("%d",&l);
printf("烤肉的制作时间:\n");
scanf("%d",&k);
printf("饮料的制作时间:\n");
scanf("%d",&y); //似乎把这里的回车键给算到下面的getcahr()里面去了,怎么办??谁能帮忙改下
printf("第3对的排列情况:\n");
while((x3=getchar())!='\n')
{
switch(x3)
{
case 'A':t3=t3+l+k+y;break;
case 'B':t3=t3+2*l+k;break;
case 'C':t3=t3+3*l+3*k+2*y;break;
}
}
printf("第2对的排列情况:\n");
while((x2=getchar())!='\n')
{
switch(x2)
{
case 'A':t2=t2+l+k+y;break;
case 'B':t2=t2+2*l+k;break;
case 'C':t2=t2+3*l+3*k+2*y;break;
}
}
printf("第1对的排列情况:\n");
while((x1=getchar())!='\n')
{
switch(x1)
{
case 'A':t1=t1+l+k+y;break;
case 'B':t1=t1+2*l+k;break;
case 'C':t1=t1+3*l+3*k+2*y;break;
}
}
if(t1>t2)t1=t2;
if(t1>t3)t1=t3;
printf("\nOutput:\n最快吃上饭的那个队伍的排队时间:%d\n",t1);
return 0;
}

5个回答

lx624909677
lx624909677   Ds   Rxr 2014.12.12 13:36
已采纳

在scanf("%d",&y);的下一行,加getchar();就可以了

fgsdkgf
fgsdkgf 谢谢,果然OK
大约 3 年之前 回复
wanawt
wanawt   2014.12.12 13:51

楼上正解,scanf不会读取\n,因此在缓冲池中还存在一个\n

fgsdkgf
fgsdkgf 谢谢,明白了
大约 3 年之前 回复
Dr_meng
Dr_meng   2014.12.12 22:01

你可以再加一个getchar();就行了这样就不会影响到后面的getcher了

Dr_meng
Dr_meng   2014.12.12 22:01

你可以再加一个getchar();就行了这样就不会影响到后面的getcher了

Reflux_
Reflux_   2014.12.15 11:10

可以在每个scanf后面加上屏蔽多余输入的代码,这样能保证每次都是独立的输入,不会将前面的输入混到后面的scanf中去
while (1)
{
if ( '\n' == getchar() )
{
break;
}
}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!