Chạy code trên visual code và visual studio ra kết quả khác nhau

#include <iostream>
using namespace std;

int main()
{
	const int maxsize = 100;
	int a[maxsize];
	int b[maxsize];
	int n;

	do{
		cout << "Nhap n (n > 0 va n < 100): ";
		cin >> n;
	} while (n <= 0 || n >= 100);

	for (int i = 2; i <= n; i++){
		a[i] = i;
		for (int j = 2 * i; j <= n; j += i){
			b[j] = j;
		}
	}

	cout << "So nguyen to tu 2 toi "<< n << " la: ";
	for (int i = 2; i <= n; i++){
		if (a[i] != b[i])
			cout << a[i] << " ";
	}

	cout << endl;
	return 0;

}

mọi người cho mình hỏi, cùng một đoạn code trên nhưng khi mình chạy trên visual studio thì kết quả có thêm số 2, còn chạy trên visual code thì kết quả mất số 2, mong mọi người giúp đỡ @@

Chạy trên visual code:
Capture
Chạy trên visual studio:

2 posts were merged into #1

khai báo mảng kiểu này thì các giá trị trong mảng chưa được khởi tạo, nó có giá trị ngẫu nhiên. b[2] ko được khởi tạo, mỗi lần chạy lại ra giá trị ngẫu nhiên, b[2] != a[2] thì nó in ra 2 thôi.

viết lại là

int a[maxsize] = {}; 
int b[maxsize] = {};

thì tất cả các giá trị trong mảng a và b được khởi tạo là 0.

vì sao nó ko được khởi tạo là vì tốc độ. Gán 0 cho 100 giá trị “chậm” hơn vài micro giây nên C và C++ mặc định ko khởi tạo. Muốn gán giá trị mặc định cho các phần tử thì phải viết ra.

có thể coi đây là 1 trường hợp premature optimization được built-in sẵn trong C và C++ “thừa kế”. Rất dỏm. Khi khai báo biến nên luôn luôn gán giá trị mặc định cho nó. Chừng nào code chạy chậm ko đạt yêu cầu thì mới quay lại optimize sau.

3 Likes

Làm một mảng thôi :smiley: gán 0 với 1 là được.

3 Likes

cảm ơn các bạn nhé ^^!

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