01/10/2018, 11:46
Mọi người giải thích giúp em lệnh goto trong C
[code]
#include <stdio.h>
#include <math.h>
int main()
{
int n,i,j,k;
int *mang = (int *)calloc(n,sizeof(int));
scanf("%d",&n);
for(i=2;i<n;i++)
{
for(j=2;j<=sqrt(i);j++)
{
if(i%j==0)
{
goto thoat;
}
}
printf("%d ",i);
thoat:;
}
}[/code]
khi lệnh if được thực hiện, goto thoạt ra và thực thiện câu lệnh sau dòng thoat:; đúng không, tại sao lệnh printf vẫn chạy nhỉ
Bài liên quan
Vì
thoat:;
bạn đặt trong scope forĐừng học thằng goto nữa, không ai còn code nó đâu, viết khéo lại ăn táng thì khổ
nhưng nếu nó nhảy và thực hiện câu lệnh sau dòng thoat:; thì nó phải nhảy lên for 1 để thực hiện chứ
vì luồng chương trình đã kế thúc rồi, phải bắt đầu lượt loop mới chứ nhỉ
thay thế lệnh goto trong th này như nào vậy bác
Bạn kiểm tra lại giá trị printf là gì sẽ hiểu.
Theo điều kiện bạn viết thì chỉ khi nào
i không chia hết cho j
thì nó mới không printf, còn lại nó vẫn printf bình thườngMình không hiểu ý tưởng (code) của bạn, nhưng mà sẽ dùng
break
, có lẽ như thế này:^ Bạn xem lại nhé, câu printf vẫn nằm trong vòng lặp j.
đây là lý do vì sao printf vẫn được thực hiện nhé!!!
Code vẫn chạy bon bon đây: https://repl.it/Ll9C, sự việc không như thớt nói.
Có hai vấn đề ở đây:
goto
.Chào bạn!!!
vì mình thấy khi so sánh j =2 với sqrt(i) (i=2). thì câu lệnh if sẽ không được thực hiện ở vòng lặp này.
2 .Không biết dựa vào gì mà bạn có thể đánh giá người khác chạy code bằng tay hay k nhỉ?
Bạn đã trả lời dùm mình rồi:
Nhưng dù gì thì cũng nên đợi xem sao.
okie!!! it’s fine!!!
mình k nói là code không chạy, ý mình không thể hiểu được code.
thứ nhất: i=2 j=2 thì for bên trong sẽ k chạy, lệnh printf tại sao lại khong thực hiện ???
thứ 2: lượt lặp thứ 2 là i=3, j bắt đầu bằng 2 thì điều điện lặp for thứ 2 vẫn sai, và printf được thực hiện. tương tự với i=4 nó k in ra vì for thứ 2 đúng và go to đến cuối dòng cuối loop 1 ==> đúng
i=5 thì cũng chạy đúng
Mình copy code ngay đầu chạy thử rồi, vẫn hiện số 2 đấy chứ.