Cách dừng chương trình khi thỏa mãn một điều kiện?

Có cách nào để sau khi xét, thỏa mãn 1 điều kiện if để thực hiện lệnh rồi thì chương trình ngưng lại không, vì khi nó xét if đầu, thực hiện xong nó xét tiếp điều kiện tiếp, kết quả là nó sẽ in ra nhiều lần
Somebody help @ltd @Honey_moon @laptrinhio

1 Like

thì đơn giản chỉ là exit()

3 Likes

Dạ thanks anh, thế mà lên Stackoverflow cũng chẳng tìm được

1 Like

Mà anh, khi để vào nó báo 2 lỗi:

  • ‘else’ without a previous ‘if’
  • too few arguments to function ‘exit’
    Vậy em phải điền cái j vào giữa 2 dấu ngoặc exit ạ
1 Like

Em xem lại câu lệnh if else của mình, có thể em lỡ tay xóa mất một chữ

exit(0) hoặc exit(1)

Số 0 và số 1 không quan trọng trong Windows. Trên Linux người ta có thể lấy giá trị này ra để kiểm tra xem chương trình có lỗi không. Theo quy ước giữa lập trình viên với nhau.

  • exit(0) có nghĩa là không lỗi
  • exit( khác 0 ) có nghĩa là có lỗi, và lỗi có số hiệu bằng chính số trả về
1 Like

hic, code đây anh, lỗi đó em thấy thường chỉ báo khi đằng sau sai cái gì đó. Mới đầu báo lỗi kia, sau khi em thêm 0 vào exit ở các dòng thì cả đám đó đều báo lỗi ‘else’ without ‘if’ cả. Đã thử xóa else, nhưng vẫn vậy.

1 Like

Em gửi code lên anh xem thử.

1 Like
void SecondEquationSolve(float a, float b, float c)
{
    SpecialCases(a, b, c);
    if(a == 0)
        aEqual0(b, c);
        exit(0)
    else if(b == 0)
        bEqual0(a, b, c);
        exit(0);
    else if(c == 0)
        cEqual0(a, b);
        exit(0);
    else
        FullEquation(a, b, c);
        exit(0);
}
1 Like

Em thiếu ngoặc kìa @nhatlonggunz

Sửa lại thành

void SecondEquationSolve(float a, float b, float c)
{
    SpecialCases(a, b, c);
    if(a == 0)
    {
        aEqual0(b, c);
        exit(0)
    }
    else if(b == 0)
    {
        bEqual0(a, b, c);
        exit(0);
    }
    else if(c == 0)
    {
        cEqual0(a, b);
        exit(0);
    }
    else
    {
        FullEquation(a, b, c);
        exit(0);
    }
}

Góp ý thêm là hàm exit sẽ thoát chương trình luôn, thế nên không cần phải else làm gì

void SecondEquationSolve(float a, float b, float c)
{
    SpecialCases(a, b, c);
    if(a == 0)
    {
        aEqual0(b, c);
        exit(0)
    }

    if(b == 0)
    {
        bEqual0(a, b, c);
        exit(0);
    }
    
    if(c == 0)
    {
        cEqual0(a, b);
        exit(0);
    }

    FullEquation(a, b, c);
    exit(0);
}
2 Likes

@ltd Em mới vừa định hỏi :wink:
Mà lúc đầu dùng else vẫn không dừng sau khi thực hiện xong if thỏa à, @nhatlonggunz?

1 Like

Tình hình không khả thi anh ơi

Ý anh là sao?
Khi xét xong if đầu, nó vẫn xét tiếp các if sau và else, hic.

1 Like

Không khả thi tức là nó không thoát chương trình như em muốn? Em thử debug bằng cách đặt breakpoint hoặc có thể ghi thêm 1 dòng printf và để xem từ console xem code có dạy qua if hay không?

Ví dụ:

if(a == 0)
{
    aEqual0(b, c);
    printf("Line %d\n", __LINE__);
    exit(0)
}
2 Likes

ấy chết, em quên đặt exit ở SpecialCases, thì ra nó vẫn xét cái SpecialCases rồi mới vào if statement, vậy em đặt exit(0); dưới cái SpeacialCases hay phải đưa vào if statement

3 Likes

Vì cơ bản đối với chương trình của bạn thì dùng cách else hay exit() cũng gần như nhau. (Dĩ nhiên trường hợp bài khác thì nó khác :smiley: ). Có thể là do các hàm khác đã ảnh hưởng bạn thử làm theo anh Đạt xem nó có chui vô if không?

2 Likes

Có thể post hàm SpecialCases() của bạn lên được không?

1 Like

Cám ơn tất cả mọi người rất nhiều, đã đặt exit dưới SpecialCases(SC) và đã thành công
Hồi nãy vì dưới SC không có exit nên nó sẽ xét SC trước rồi mới vào if statement. Mà em nhập a = 1, b = 2, c= 1 thì nó đều thỏa SC với 1 trong 3 cái if statement nên nó lặp lại.

3 Likes

Bạn có thể up lại code hàm đó không? :blush: Mình cảm thấy hơi bất an hí hí

2 Likes

Dạ đây ạ

void SecondEquationSolve(float a, float b, float c)
{
    {
        SpecialCases(a, b, c);
        exit(0);
    }
    if(a == 0) {
        aEqual0(b, c);
        exit(0);
    }

    if(b == 0) {
        bEqual0(a, b, c);
        exit(0);
    }

    if(c == 0) {
        cEqual0(a, b);
        exit(0);
    }

    FullEquation(a, b, c);
    exit(0);
}
2 Likes

Vậy các dòng if bên dưới là vô ích rồi, vì cỡ nào nó cũng thực hiện thằng exit(0); trước :open_mouth:

2 Likes

Đã test, SC của mình có điều kiện nha, code dài nên không tiện post, nhưng nếu anh muốn xem (khoe hàng) thì em sẽ post

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