30/09/2018, 19:04
Lỗi hàm trong C cơ bản
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.
Xin quy khach nhap loai phong (A, B, hoac C): ");
scanf_s(" %c", &Loai_phong,1);
printf("
Xin 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("
Tong 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
Bài liên quan
Bạn thử thêm lệnh
fflush(stdin);
và trước mỗi lệnhscanf_s()
thử xemref: http://www.cplusplus.com/reference/cstdio/fflush/
sao bạn không dùng
string
cho tiện!dùng
char
hơi phức tạp!.do em đang học cơ bản với tự học nên bắt đầu những thứ cơ bản nhất mà thấy lỗi lạ quá nên muốn lên đây hỏi
để em thử xem sao , em cảm ơn
chết mình nhầm! nó là của c++ oy!.
nếu có thể dùng c++ thì bạn tham khảo đoạn code này của mình:
em cảm ơn anh nhiều , 1 kinh nghiemj hay
mình nghĩ bạn có thể bắt đầu luôn với c++, vì c với c++ không khác j nhau mấy! mà lệnh trong c++ tối ưu hơn(có thể nói là ngắn hơn)!.
còn nếu bạn dùng kiểu char để nhập nhiều kí tự thì bạn phải dùng như đoạn code dưới:
còn dùng như bạn hình như chỉ nhập được một kí tự.
dạ , em cảm ơn hjhj , do đang tự học nên nghe nói C là cái căn bản nhất nên em đâm đầu vào trước
umk học chắc một tí , khi em nhảy qua ngôn ngữ khác thì sẽ nhàn hơn, và nhanh hiểu! anh cũng đang tự học java.
anh đang học ngành gì
anh học công nghệ thông tin, năm 2 ở bưu chính
mình tốt nghiệp ngành cơ khí spkt rồi , theo đuổi đam mê thôi cậu , ngành kia đi làm cảm giác k hợp
thế hả! giờ sang nghành này cũng không muộn đâu! bạn cũng thế đăng kí vài khóa dạy lập trình như của aptech hay MIT j đó để biết hướng học. mình học trên trường cũng thế thui, toàn tự giác tìm hiểu là chính! bạn có thể tham khảo trang wed vietjack.com, cũng khá hay! chúc bạn thành công.
ukm , mình cảm ơn nhé