mong anh chị giúp đỡ em thấy trong các lần nhập kí tự kiểu dự liệu char thường mắc các lỗi lạ . sau đây là 2 đoạn code của 1 bài toán , 1 dùng hàm if_else , 1 dùng switch_case .mọi người chú ý hàm scanf_s("%c", &x)
#include<stdio.h>
#include<conio.h>
#include<math.h>
void main()
{
int n;
const int A = 250000, B = 200000, C = 150000;
char p;
double t;
printf("nhap so ngay su dung:");
scanf_s("%d", &n);
printf("nhap loai phong:");
scanf_s(" %c", &p,1);
if (p == 'A')
{
if (n > 12)
{
t = A*n*0.9;
printf("tien phong:%lf", t);
}
else
{
t = A*n;
printf("tien phong:%lf", t);
}
}
else
{
if (p == 'B')
{
if (n > 12)
{
t = B*n*0.92;
printf("tien phong:%lf", t);
}
else
{
t = B*n;
printf("tien phong:%lf", t);
}
}
else
{
if (p == 'C')
{
if (n > 12)
{
t = C*n*0.92;
printf("tien phong:%lf", t);
}
else
{
t = C*n;
printf("tien phong:%lf", t);
}
}
}
}
_getch();
}
/*Tinh tien thue phong khi biet so ngay thue va loai phong (mot trong 3 loai A, B hoac C voi qui dinh nhu sau:
- Loai A: 250.000 d/ngay
- Loai B: 200.000 d/ngay
- Loai C: 150.000 d/ngay
Neu thue qua 12 ngay thi phan tram duoc giam tren tong so tien (tinh theo gia qui dinh) la:
10% cho phong loai A
8 % cho phong loai B hoac C */
#include "stdio.h"
#include "conio.h"
void main()
{
const int Don_gia_loai_A=250000, Don_gia_loai_B=200000, Don_gia_loai_C=150000;
char Loai_phong;
float So_ngay_thue, Tong_tien;
// Khoi tao gia tri cho moi don gia
printf("Chuong trinh tinh tien phong cho tung loai phong theo so ngay thue.\nXin quy khach nhap loai phong (A, B, hoac C): ");
scanf_s(" %c", &Loai_phong,1);
printf("\nXin nhap vao so ngay thue: ");
scanf_s("%f", &So_ngay_thue);
switch (Loai_phong)
{
case 'A':
Tong_tien = Don_gia_loai_A * So_ngay_thue;
if (So_ngay_thue > 12)
Tong_tien = Tong_tien * 0.9;
break;
case 'B':
Tong_tien = Don_gia_loai_B * So_ngay_thue;
if (So_ngay_thue > 12)
Tong_tien = Tong_tien * 0.92;
break;
case 'C':
Tong_tien = Don_gia_loai_C * So_ngay_thue;
if (So_ngay_thue > 12)
Tong_tien = Tong_tien * 0.92;
break;
default:
break;
}
printf("\nTong tien thue la: %f", Tong_tien);
_getch();
}
. bài bằng hàm switch có 1 anh chỉ em thêm 1 vào hàm scanf("%c", &x,1)
còn bài if em em phải thêm 1 và khoảng trắng trước %c mới chạy : scanf_s(" %c", &x,1).
ai có thể cho em biết đây là lổi lập trình do em đúng không và cách khắc phục hiệu quả nhất