当执行完第一个scanf语句后,第二个scanf语句像失效一样,直接跳到了第三个scanf语句,导致x2无法完成初始化,哪里错了呀
#include<math.h>
#define e 2.718
int main() {
int x1,;
int x2;
int x3;
char k1;
char k2;
char k3;
char k4;
double w1 = 0.3;
double w2 = 0.4;
double w3 = 0.3;
double y;
double z;
double v = 0.5;
printf("今天的天气如何?\n");
printf("A.晴天 B.阴天 C.雨天\n");
scanf("%c", &k1);
switch (k1) {
case 'A':x1 = 9;
break;
case 'B':x1 = 6;
break;
case 'C':x1 = 0;
break;
default: printf("选择有误,请重新选择\n");
}
printf("\n有没有人陪你去看电影?\n");
printf("A.有,男/女朋友 B.有,好朋友 C.有,家人 D.没有\n");
scanf("%c", &k4);
switch (k4) {
case 'A':x2 = 8;
break;
case 'B':x2 = 6;
break;
case 'C':x2 = 5;
break;
case 'D':x2 = 2;
break;
default:printf("选择有误,请重新选择\n");
}
printf("\n票价如何?\n");
printf("A.0-30 B.30-60 C.60-90 D.90以上\n");
scanf("%c", &k3);
switch (k3) {
case 'A':x3 = 10;
break;
case 'B':x3 = 8;
break;
case 'C':x3 = 2;
break;
case 'D':x3 = 0;
break;
default:printf("选择有误,请重新选择\n");
}
z = (x1w1 + x2w2 + x3*w3) / 10;
y = 1 / (1 + pow(e, -z));
printf("你去看电影的可能性为:%d\n", z);
if (z >= v)
printf("去看电影");
else
printf("不去看电影");
return 0;
}
(1)在scanf读取字符后,需要加getchar()来吸收回车符,否则影响下一次输入;
(2)因为有输入错误的设置,所以每次输入,都需要放在while循环中,否则当输入错误时,不能重新输入。
代码修改如下:
#include<stdio.h>
#include<math.h>
#define e 2.718
int main() {
int x1;
int x2;
int x3;
char k1;
char k2;
char k3;
char k4;
double w1 = 0.3;
double w2 = 0.4;
double w3 = 0.3;
double y;
double z;
double v = 0.5;
int flag = 1; //修改 添加一个变量,用于控制while
printf("今天的天气如何?\n");
printf("A.晴天 B.阴天 C.雨天\n");
while (flag) //修改,用while语句,否则当输入错误时,不能重新输入
{
scanf("%c", &k1);
getchar(); //修改1,这里增加这一句
switch (k1) {
case 'A':x1 = 9; flag = 0;//时while结束
break;
case 'B':x1 = 6; flag = 0;
break;
case 'C':x1 = 0; flag = 0;
break;
default: printf("选择有误,请重新选择\n");
}
}
flag = 1; //重置flag
printf("\n有没有人陪你去看电影?\n");
printf("A.有,男/女朋友 B.有,好朋友 C.有,家人 D.没有\n");
while (flag)
{
scanf("%c", &k4);
getchar(); //修改2
switch (k4) {
case 'A':x2 = 8; flag = 0;
break;
case 'B':x2 = 6; flag = 0;
break;
case 'C':x2 = 5; flag = 0;
break;
case 'D':x2 = 2; flag = 0;
break;
default:printf("选择有误,请重新选择\n");
}
}
printf("\n票价如何?\n");
printf("A.0-30 B.30-60 C.60-90 D.90以上\n");
flag = 1;
while (flag)
{
scanf("%c", &k3);
getchar();
switch (k3) {
case 'A':x3 = 10; flag = 0;
break;
case 'B':x3 = 8; flag = 0;
break;
case 'C':x3 = 2; flag = 0;
break;
case 'D':x3 = 0; flag = 0;
break;
default:printf("选择有误,请重新选择\n");
}
}
z = (x1*w1 + x2*w2 + x3 * w3) / 10;
y = 1 / (1 + pow(e, -z));
printf("你去看电影的可能性为:%d\n", z);
if (z >= v)
printf("去看电影");
else
printf("不去看电影");
return 0;
}
读取字符之前前面要加个getchar()读入回车符