有问题
我编了一个小程序,名义是模仿ATM机的,但差得太远了。偶还初学。编的过程中,麻烦碰到了不少。后来运行修改了好多次后发现问题在对X的定义上。用%s和%c时,运行的结果相差很大。大家解释一下。
#include <stdio.h>
void main()
{
/*这个里面使用的是%s*/
char x;
int a,b,t,c=0;
printf("欢迎使用本程序\n");
printf("***存钱,请按1***余额显示,请按3***\n");
printf("***取钱,请按2***退出程序,请按4***\n");
for(;t=t;)
{
printf("请输入您的操作=");
scanf("%s",&x);
switch(x)
{
case'1':
printf("请输入您存钱的数目=");
scanf("%d",&a);
c=c+a;
printf("交易成功,您现在的余额为%d\n",c);break;
case'2':
printf("请输入您取钱的数目=");
scanf("%d",&b);
if(b>c)
printf("SORRY,您的余额不够\n");
else
{
c=c-b;
printf("交易成功,您现在的余额为%d\n",c);
}
break;
case'3':printf("您现在的余额为%d\n",c);break;
case'4':t=0;break;
default:printf("输入错误\n");
}
}
printf("退出成功,谢谢您的使用\n");
}
----------------解决方案--------------------------------------------------------
scanf格式字符
格式字符
说 明
d
用来输入十进制整数
o
用来输入八进制整数
x
用来输入十六进制整数
c
用来输入单个字符
S
用来输入字符串,将字符串送到一个字符数组中,以‘\0’作为结束标志
f、e
用来输入实数,可以用小数形式或指数形式输入
----------------解决方案--------------------------------------------------------
如果用s%的话你输入123就是123
如果用c%的话只把你输入的第一个字符赋给变量
----------------解决方案--------------------------------------------------------
for(;t = t;) // while(t)
// 还有t的值没有初始化
// 第一个发现的问题 //
----------------解决方案--------------------------------------------------------
#include <stdio.h>
int main(void)
{
int x; // 建议使用 int
int a,
b,
t = 1, // t 初始化
c = 0;
printf("\n欢迎使用本程序\n");
printf(" 存钱,请按1 余额显示,请按3\n");
printf(" 取钱,请按2 退出程序,请按4\n\n");
while(t) // 如果t 为0退出循环
{
printf("请输入您的操作=");
scanf("%c", &x); // 用%c 获取字符
switch(x)
{
case'1':
printf("请输入您存钱的数目=");
scanf("%d",&a);
c = c + a;
printf("交易成功,您现在的余额为%d\n", c);
break;
case'2':
printf("请输入您取钱的数目=");
scanf("%d", &b);
if(b > c)
printf("SORRY,您的余额不够\n");
else
{
c = c - b;
printf("交易成功,您现在的余额为%d\n", c);
}
break;
case'3':
printf("您现在的余额为%d\n", c);
break;
case'4':
t = 0;
break;
default:
printf("输入错误\n");
break;
}
// while(getchar() != '\n');
}
printf("退出成功,谢谢您的使用\n");
}
----------------解决方案--------------------------------------------------------
对于输入方面要做错误处理,并且要把'\n'从输入流中去除。
----------------解决方案--------------------------------------------------------