关于C语言scanf中用%c和%s的问题啊!!!

guoming1 2002-05-20 12:08:20
小弟我编了一个计算购买商品折扣问题的小程序!!!
我在开始是声明了一个char类型的两个变people和lab都是单个字符型!!!
scanf接受是应该用%C啊,可是程序能运行但不能执行其中的语句,但换上
%s却可以不明白为什么啊,请帮帮我啊!!!
下面的程序已将%c换成了%s,执行没有问题,可是换成%c就有问题了!!!!!!
#include<stdio.h>
main()
{
float num,zf;
char people,lab;

printf("请输入购买金额:");
scanf("%f",&num);
if (num>=2000)
{printf("如果长期客户请按R键;否则按空格!");
scanf("%s",&people);
if (people=='r' )
{
printf("请输入支付方式:现金支付按C键,信用卡支付按D键!");
scanf("%s",&lab);
if (lab=='c')
{
zf=num-(num*0.2);
printf("您应支付金额:%f",zf);
}
else if(lab=='d')
{
zf=num-(num*0.15);
printf("您应支付金额:%f",zf);
}
else
{
zf=num-(num*0.1);
printf("您应支付金额:%f",zf);
}
}
}
}
...全文
3484 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
mylove0618 2002-05-20
  • 打赏
  • 举报
回复
#include<stdio.h>
main()
{
float num,zf;
char people,lab;

printf("请输入购买金额:");
scanf("%f",&num);
if (num>=2000)
{printf("如果长期客户请按R键;否则按空格!");
scanf("%c",&people);getchar();
if (people=='r' )
{
printf("请输入支付方式:现金支付按C键,信用卡支付按D键!");
scanf("%c",&lab);getchar();
if (lab=='c')
{
zf=num-(num*0.2);
printf("您应支付金额:%f",zf);
}
else if(lab=='d')
{
zf=num-(num*0.15);
printf("您应支付金额:%f",zf);
}
else
{
zf=num-(num*0.1);
printf("您应支付金额:%f",zf);
}
}
}
}
你先前的程序将'\n'存在了lab中。因此就出错了。
coyj 2002-05-20
  • 打赏
  • 举报
回复
如果是%s他把回车取走了
liuxiaobo8590 2002-05-20
  • 打赏
  • 举报
回复
%c只能输出一个字符, 而%s可以输出字符串.
people是字符串,不能用%c输出否则会出错的!
coyj 2002-05-20
  • 打赏
  • 举报
回复
scanf调用后,并未取走回车,再每个scanf前后用fflush(stdin);即可
也可有getchar,getch等把回车取走
redkit 2002-05-20
  • 打赏
  • 举报
回复
%c是字符 %s是字符串.完全不一样
liem 2002-05-20
  • 打赏
  • 举报
回复
问题的关键是scanf函数的运行机制:
当连续进行数值与字符的输入时,一旦输入的不是数字或小数点,系统就将它解释为字符,赋给了后面的字符变量。
程序中你用scanf("%f",&num);(尽管有printf一名,但没有作用)后面跟着又scanf("%c",&people);时,系统将你的输入num后的回车(或空格)赋给了people。因此程序不能正确执行。
当你用%s输入时,系统是将空格或回车解释为前一项结束,后一项开始,因此可以正确执行程序。
要解决这个问题,你可将字符的输入换成:
people=getche();
lab=getche();
应能解决。

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧