Nghịch ngợm vòng for

trong Head First C chương đầu phần vòng lặp có câu “the code that controls the value of the variable is now contained in the for loop…” chả hiểu em nghĩ sao rồi gõ

for (int i = 1; i != 0; i=val)
{
    puts("Enter the card name: ");
    scanf("%2s", card_name);
    switch (card_name[0])  {
        case 'J':
        case 'Q':
        case 'K':
            val = 10;
            break;
        case 'A':
            val = 11;
            break;
        case 'X':
            val = 0;
            printf("Ok, so you wanna quit eh?\n");
            break;
        default :
            val = atoi(card_name);
            break;
    }
    if ((val >= 1) && (val <= 11))  
    printf("The card value is: %i\n", val);
    else printf("I don't understand this value!\n");
}

và nó vẫn chạy như đúng rồi :upside_down_face:, mọi người đã từng nghịch chỗ kiểm soát biến đó chưa, như thế nào, à mà em muốn hỏi liệu viết như trên nó có chạy bình an đc ko hay sẽ tèo vì f**k logic ?

Ý bạn là kiểu như này?

for(;;)
for(;i!=0;)
for(int i =0;;)
for(;;i=x)

Bình thường!

3 Likes

Hi BTK.
Trong C hoặc C++ thì vong for dùng khá thoải mái. Tuy nhiên thường thì các tài liệu sẽ nói dùng vòn for cho các vòng lặp biết trước số lần vd:

for(Node* node = header; node != NULL; node = node->next) {
//Dùng cho danh sách liên kết khi số lần lặp là biết trước và là số nguyên.
}

-> Nếu số lần lặp là biết trước và tập lặp là tập đếm được.
Trong các trường hợp khác thì nên dùng while. Như trong bài của bạn. Nó sẽ rõ ràng điều kiên thoát lặp v.v.v…

2 Likes

for(x; y; z) { ...; } tương đương với { x; while (y) { ...; z; } } mà nên có gì sai đâu :V

2 Likes

Câu này của bên Pascal :smiley: mà iterator đâu có câu nào đếm số đâu.

Thực ra for có luồng chạy riêng nên ứng với luồng chạy đó thì dùng for hay hơn. while thì muốn thúc lệnh lặp chỗ nào cũng được.

Bạn nào có làm khử đệ quy rồi sẽ có cái nhìn rất khác về goto (ko khuyến khích sử dụng nhe)

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