Tại sao lại lỗi code?

#include<stdio.h>
#include<math.h>
int nguyenTo( int n){
	if(n<2) return 0;
	for(i=2; i< sqrt(n); i++)
		if(n%i==0) return 0;
		
	return 1;
}
		
int thuanNgich( int n){
	int m = n;
	int tg = 0;
	while(n){ // n>0
		tg = tg*10 + n%10;
		n/=10;
	}
	return (tg == m);
}
	

int main(){
	int i;
	for(i=10000; i<= 9999999; ++i){
		if( thuanNghich(i) && nguyenTo(i) && koCoSo4(i))
			printf("%10d", i);
	}
	getch();
	return 0;
	}

Đây là bài code của mình ạ. Nhưng mà chỗ code này lại bị báo sai

#include<stdio.h>
#include<math.h>
int nguyenTo( int n){
	if(n<2) return 0;
	for(i=2; i< sqrt(n); i++)
		if(n%i==0) return 0;
		
	return 1;
}

Báo là biến i bị lỗi. Như thế là sao ạ?

Chưa được khai báo.
Bạn nghĩ rằng: “Mình đã khai báo i ở hàm main() rồi mà!”.
Không đúng đâu, 2 hàm này riêng biệt nó đâu có “liên thông” tự do được.
Có 1 khái niệm/từ khóa trong lập trình mà bạn nên tìm hiểu scope.

4 Likes

n nằm ở bài nào vậy Mình chưa học đến chỗ này hicc

Thường thì ở phần variable (biến) trong các giáo trình á. Nằm ở mục Phạm vi của biến á.

Mà đơn giản mà nói thì code của bạn chưa được khai báo biến i :point_right: thêm int i = 0; ngay trên vòng for là được. :slight_smile:

Hoặc sửa for thành for(int i = 2; i < sqrt(n); i++)

3 Likes

nhưng mà không hiểu sao n vẫn mắc lỗi bạn ạ.

image

Khởi tạo trong vòng for chỉ cho phép ở C99, C11 hoặc hơn. (tạm dịch)

P/s: Bạn nên học cách đọc lỗi, debug á. :slight_smile:

2 Likes

vào parameters rồi thế nào nữa vậy bạn. nói dễ hiểu cho mình một chút nhá. I’m newbie :>

Oops :smiley:

Bạn vào Tools > Compiler Options. Ngay tab đầu tiên có phần “options to the compiler” thêm vào -std=c11

4 Likes

Hi Vương T Thúy.
Trong chuẩn C cũ thì bạn phải khai báo tất cả các biến cần dùng ở đầu hàm nên cú pháp khai báo biến trong vòng lặp là không được phép.

3 Likes

Trước khi sử dụng thôi nhé.

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