30/09/2018, 16:17

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

Lập Trình Sư viết 18:34 ngày 30/09/2018

chương trình ngưng lại

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

nhatlonggunz viết 18:31 ngày 30/09/2018

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

nhatlonggunz viết 18:25 ngày 30/09/2018

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 ạ
Nguyễn Minh Dũng viết 18:31 ngày 30/09/2018
  • ‘else’ without a previous ‘if’

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ữ

  • too few arguments to function ‘exit’

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ề
nhatlonggunz viết 18:19 ngày 30/09/2018

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.

Nguyễn Minh Dũng viết 18:25 ngày 30/09/2018

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

nhatlonggunz viết 18:31 ngày 30/09/2018
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);
}
Nguyễn Minh Dũng viết 18:32 ngày 30/09/2018

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);
}
Trần Hồng Phong viết 18:24 ngày 30/09/2018

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

nhatlonggunz viết 18:28 ngày 30/09/2018

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

Mà lúc đầu dùng else vẫn không dừng sau khi thực hiện xong if thỏa à

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

Nguyễn Minh Dũng viết 18:27 ngày 30/09/2018

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)
}
nhatlonggunz viết 18:22 ngày 30/09/2018

ấ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

Trần Hồng Phong viết 18:32 ngày 30/09/2018

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 ). 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?

Trần Hồng Phong viết 18:24 ngày 30/09/2018

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

nhatlonggunz viết 18:24 ngày 30/09/2018

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.

Trần Hồng Phong viết 18:24 ngày 30/09/2018

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

nhatlonggunz viết 18:22 ngày 30/09/2018

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);
}
Trần Hồng Phong viết 18:20 ngày 30/09/2018

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

nhatlonggunz viết 18:26 ngày 30/09/2018

Đã 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

Trần Hồng Phong viết 18:21 ngày 30/09/2018

Không cần post Bạn chạy thử với bộ test không thỏa SpecialCases() nhưng thỏa một if bên dưới thử nếu ok thì tuyệt rồi

Bài liên quan
0