Tại sao dùng scanf trong Visual Studio bị báo lỗi và bắt phải dùng scanf_s?

#include <stdio.h>
#include <conio.h>
void main()
{
	printf("Chuong trinh tinh tong, hieu, tich, thuong cua 2 so nguyen a,b.\n");
	int a, b, tong, hieu, tich;
	float thuong;
	printf("Nhap vao so nguyen a: ");
	scanf_s("%d", &a);
	printf("Nhap vao so nguyen b: ");
	scanf_s("%d", &b);
	tong = a + b;
	hieu = a - b;
	tich = a * b;
	
	printf("Tong cua 2 so nguyen a= %d, b=%d la: %d\n", a, b, tong);
	printf("Hieu cua 2 so nguyen a=%d , b=%d la: %d\n", a, b, hieu);
	printf("\nTich cua 2 so nguyen a=%d , b=%d la: %d\n", a, b, tich);
	if (b == 0)
	{
		printf("Thuong: khong tinh duoc.");
	}
	else
	{
		thuong = (float)a / b;
		printf("\nThuong cua 2 so nguyen a=%d, b=%d la: %2.2f", a, b, thuong);
	}

	_getch();
}

em dùng VS 2013 và dùng C++ để code C nhưng sao em dùng scanf thì nó báo lỗi và bắt phải dùng scanf_s và thằng getch() cũng tương tự như vậy nó bắt phải là _getch(); ??

6 Likes

Anh đã sửa lại bài của em, để xem anh sửa cái gì, vào đây

Lần sau đọc cái này trước

Và cái này

4 Likes

Chào bạn,
Bạn đang dùng IDE VS2013 thì cú pháp cần được thay đổi như trên . Vì ở phiên bản này, Micosoft muốn chuẩn hóa cú pháp .
Thân !

3 Likes

2 cô gái xinh như nhau nhưng 1 cô tính tốt hơn bạn thích ai? :blush:

Vì VS thấy dùng 2 hàm này không an toàn và khuyên bạn dùng hàm VS sửa đổi. Còn cái kia vẫn dùng được bình thường nhé.

4 Likes

Thank @Shinji vì thông tin này, lâu rồi không dùng IDE VS nên không nắm thông tin này.

_getch() là hàm của MS, giống như getch()

scanf_s cũng là hàm của MS

4 Likes

Để dùng scanf bạn có thể thêm #define _CRT_NONSTDC_NO_WARNINGS vào đầu code trên #include <stdio.h>

9 Likes

Lần sau em sẽ rút kinh nghiệm :smiley: cám ơn anh đã nhắc nhở…

3 Likes

New Project -> Win32 Console Application -> Đặt tên và chọn đường dẫn -> Ok -> Next -> Chọn Empty Project và tắt Security Development Lifecycle (SDL) checks -> Finish -> các bước sau bạn tự làm nha!

7 Likes

Đã test thử theo cách thêm #define _CRT_NONSTDC_NO_WARNINGS của bác nhưng không ok được.

Khổ ghê, lỗi nó báo rành rành ra chứ có giấu diếm gì đâu trời :expressionless:

To disable deprecation, use _CRT_SECURE_NO_WARNINGS.

Không phải _CRT_NONSTDC_NO_WARNINGS, có lẽ các IDE khác phiên bản nên cũng bị ảnh hưởng, mình không rõ. Giải quyết: define lại là xong:

#define _CRT_SECURE_NO_WARNINGS

P/s: Tại sao bạn không làm theo post được đánh dấu tích mà lại làm theo post khác? Với lại, bạn phải học tiếng Anh + học tiếng Anh + học tiếng Anh + … nhé!

3 Likes

Cản ơn bạn Khoa NTA nicklauri đã nhắc nhở nhưng mình muốn làm mọi cách mà các bạn đã thử qua để tích lũy thêm chút kinh nghiệm trong lập trình.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?