E:\Sourcode_CodeBlock\So_NT\main.c|13|error: ‘for’ loop initial declarations are only allowed in C99 mode|
Cho mình hỏi lỗi này fai sửa như thế nào v?
Lỗi vòng lặp for ở code block
Lần sau những câu hỏi thế này bạn nên đưa code lên và cả màn hình lỗi thì người ta mới dễ dàng sửa cho bạn được chứ, hỏi thế này sao mà sửa được!
Không được khai báo biến trong vòng for
Mình vừa úp hình lên bạn sửa hộ mình với
Bạn copy code lên đây đc ko? Để mình chạy thử
int main()
{
int n,i;
int dem=0;
printf(“Nhap vao so n: “);
scanf(”%d”,&n);
if(n<2);
printf(“Khong phai la so nguyen to\n”);
for(i=2 ; i <= n ; i++)
{
if(n%i==0)
dem++;
}
if(dem>2)
printf("%d khong phai la so nt",i);
else
printf("%d la so nguyen to", i);
return 0;
}
Mình chạy không thấy lỗi cú pháp, chỉ lỗi logic thôi à
Mặc định compiler của code block sử dụng chuẩn C89, tức là tất cả các biến phải được khai báo trước tiên nhất rồi đến các lệnh khác: printf, scanf
, lệnh gán, gọi hàm, …
Trong trường hợp của bạn lệnh khai báo int i
trong vòng for
là không được phép trong chuẩn C89 (nhưng được phép trong chuẩn C99), bạn chỉ cần sửa lại bằng cách khai báo int i
sau khai báo int dem = 0
.
Mình ms sửa lại à, nãy mình khai báo biến i trong vòng lặp for luôn. h mình khai báo ở main thì lại đc.
cảm ơn bạn nha! mình mới học còn gà quá
Bài này bạn làm chưa tối ưu đâu nhé, bạn chỉ cần xét i từ 2 đến sqrt(n) thôi. Và bạn xem lại chỗ in nữa, mình nhập số 5 thì in ra 6 không là số nguyên tố
Nếu bạn đọc được sách tiếng Anh thì bạn tìm học theo quyển sách này, nó rất chi tiết và có nói các tính năng khác nhau giữa các chuẩn của C.
The C Programming A Modern Approach 2nd.
Nếu mình nhớ không nhầm muốn sửa thì chọn Settings -> Compiler -> Orther option (Bên phải của Compiler Flags) -> ghi “-std=C99” thì được hay sao ấy. lúc trước nhớ a đạt có chỉ cái này rồi.