Penggunaan fungsi exit ()

99

Saya ingin tahu bagaimana dan kapan saya bisa menggunakan exit()fungsi seperti program di buku saya:

#include<stdio.h>

void main()
{
    int goals;
    printf("enter number of goals scored");
    scanf("%d",&goals);

    if(goals<=5)
        goto sos;
    else
    {
        printf("hehe");
        exit( );
    }
    sos:
    printf("to err is human");
}

Ketika saya menjalankannya, itu menunjukkan ERROR: panggilan ke fungsi yang tidak ditentukan exit () .

Juga, saya ingin tahu bagaimana saya bisa membuat opsi untuk menutup jendela di mana program berjalan? Misalnya, saya membuat program berbasis menu yang memiliki beberapa pilihan dan salah satunya adalah "keluar dari menu" . Bagaimana saya bisa membuat ini keluar dari program (yaitu menutup jendela)?

Kraken
sumber
8
Jika Anda menginginkan jawaban, format kode dan pertanyaan Anda sehingga orang dapat membacanya. DAN JANGAN BERTERIAK!
3
Format kode adalah satu hal, tetapi ini ditulis dengan buruk. Anda tidak ingin jawaban yang terlihat seperti ini, bukan?
Kobi
53
oy! gotos dan keluar? Mataku! Mereka terbakar!
Kyle
8
Saya bukan C-Expert atau saya tidak dapat menulisnya tanpa kesulitan jadi saya mungkin salah tentang ini ... tapi bolehkah saya menyarankan Anda membuang buku itu? Menggunakan goto di C itu seperti ... seperti ... Saya tidak tahu. Dan jika Anda permisi sekarang, mereka menemukan cara untuk membuka pintu * hides.in.the.kitchen * ...
Bobby
8
Nah, goto masih merupakan sintaks yang valid dalam C. Ini mungkin tidak disetujui secara gaya , tetapi masih valid. void main()OTOH benar-benar salah . Sama seperti exit();yang salah, dan menghilangkan #include <stdlib.h>itu salah.
wildplasser

Jawaban:

165

Coba gunakan exit(0);sebagai gantinya. The exitFungsi mengharapkan parameter integer. Dan jangan lupa #include <stdlib.h>.

Klaus Byskov Pedersen
sumber
2
The halaman manual mengatakan "` Penggunaan EXIT_SUCCESS dan EXIT_FAILURE sedikit lebih portabel (untuk lingkungan non-UNIX) dibandingkan penggunaan 0 dan beberapa nilai nol seperti 1 atau -1 `."
Mawg kata mengembalikan Monica
82

The exitfungsi dideklarasikan di header stdlib, sehingga Anda perlu memiliki

#include <stdlib.h>

di bagian atas program Anda agar dapat digunakan exit.

Perhatikan juga bahwa exitmembutuhkan argumen integer, jadi Anda tidak bisa menyebutnya seperti exit(), Anda harus memanggil sebagai exit(0)atau exit(42). 0 biasanya berarti program Anda berhasil diselesaikan, dan nilai bukan nol digunakan sebagai kode kesalahan.

Ada juga makro yang ditentukan sebelumnya EXIT_SUCCESSdan EXIT_FAILURE, misalnyaexit(EXIT_SUCCESS);

Tyler McHenry
sumber
3
+1 untuk tidak hanya menyebutkan yang exitmembutuhkan argumen integer, tetapi menjelaskan mengapa dibutuhkan argumen integer dan bahwa beberapa kompiler membutuhkan eksplisit #include <stdlib.h>.
Variadicism
Makro standar yang disebutkan ditentukan dalam waktu kompilasi, bukan?
carloswm85
11

exit(int code);dideklarasikan stdlib.hsehingga Anda membutuhkan file

#include <stdlib.h>

Juga:
- Anda tidak memiliki parameter untuk exit()itu, itu membutuhkan satu intjadi sediakan satu.
- Bakar buku ini, yang digunakannya goto(untuk semua orang kecuali peretas kernel linux) buruk, sangat, sangat , SANGAT buruk.

Edit:
Oh, dan

void main()

juga buruk, itu:

int main(int argc, char *argv[])
Morfildur
sumber
ya itu tertulis di buku yang lebih baik kamu tidak menggunakan goto bt demi kelengkapan buku m hanya memberi kamu contoh ... jadi buku itu tidak seburuk itu !!
Kraken
5
gotokadang-kadang adalah hal yang benar untuk dilakukan (dan kernel Linux menyediakan banyak contoh, tetapi ini bukan satu-satunya kode yang dapat menggunakannya). Tapi contoh OP jelas bukan salah satu kasus itu, jadi ya, buku itu harus dibakar :).
Adam Rosenfield
11

Coba keluar pria .


Oh, dan:

#include <stdlib.h>

int main(void) {
  /*  ...  */
  if (error_occured) {
    return (EXIT_FAILURE);
  }
  /*  ...  */
  return (EXIT_SUCCESS);
}
Bertrand Marron
sumber
Lebih khusus lagi, coba "man 2 exit" dari konsol. Dokumen c cukup rinci.
Justin
Benar, Anda @Bertrand Marron
Justin
7

The exit()Fungsi adalah jenis fungsi dengan tipe kembali tanpa argumen. Ini ditentukan oleh file header stdlib.

Anda perlu menggunakan ( exit(0) or exit(EXIT_SUCCESS))atau (exit(non-zero)atau exit(EXIT_FAILURE) ).

Nataraj Raja
sumber
4

Contoh berikut menunjukkan penggunaan exit()fungsi.

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    printf("Start of the program....\n");
    printf("Exiting the program....\n");
    exit(0);
    printf("End of the program....\n");
    return 0;
}

Keluaran

Mulai program ....
Keluar dari program ....

Martin max
sumber
2

Anda harus menambahkan baris dengan #include <stdlib.h>untuk memasukkan file header dan exitharus mengembalikan nilai jadi tetapkan beberapa integer exit(any_integer).

pengguna4508201
sumber
2

Selain mengembalikan kode keluar ke proses induk -

Dalam UNIX, aspek penting yang menurut saya telah ditinggalkan adalah, bahwa exit () pada panggilan pertama (dalam urutan terbalik) semua fungsi tersebut, yang didaftarkan oleh panggilan atexit ().

Silakan merujuk ke SUSv4 untuk detailnya.

penyebab utama
sumber
1

di unix seperti sistem operasi, keluar milik grup panggilan sistem. panggilan sistem adalah panggilan khusus yang memungkinkan kode pengguna (kode Anda) untuk memanggil kode kernel. jadi panggilan keluar membuat beberapa tindakan pembersihan khusus OS sebelum mengembalikan kontrol ke OS, itu menghentikan program.

#include <stdlib.h>

// example 1
int main(int argc, char *argv){
  exit(EXIT_SUCCESS);
}

// example 2
int main(int argc, char *argv){
  return 0;
}

Beberapa kompiler akan memberi Anda opcode yang sama dari kedua contoh ini tetapi beberapa tidak. Misalnya, opcode dari fungsi pertama tidak akan menyertakan opcode pemosisian tumpukan apa pun yang akan disertakan dalam contoh kedua seperti untuk fungsi lainnya. Anda dapat mengumpulkan kedua contoh dan membongkar dan Anda akan melihat perbedaannya.

Anda dapat menggunakan keluar dari bagian mana pun dari kode Anda dan pastikan proses itu berhenti. Jangan lupa untuk memasukkan parameter integer.

filvarga
sumber
-2

Tulis file header #include<process.h>dan ganti exit();dengan exit(0);. Ini pasti akan bekerja di Turbo C; untuk kompiler lain, saya tidak tahu.

Azeem Alvi
sumber
1
<process.h> `tidak standar. The exitFungsi dinyatakan dalam <stdlib.h>.
Keith Thompson
<process.h> tidak akan menyelesaikan masalah ini. Sudahkah Anda memahami pertanyaan yang diajukan?
CuriousMind
-3

Praktik pemrograman yang buruk. Menggunakan fungsi goto adalah tidak lengkap dalam pemrograman C.
Sertakan juga file header stdlib.h dengan menulis #include <iostream.h>untuk menggunakan exit()fungsi. Juga ingat bahwa fungsi exit () mengambil argumen integer. Gunakan exit(0)jika program berhasil diselesaikan dan exit(-1)atau keluar dari fungsi dengan nilai bukan nol sebagai argumen jika program mengalami kesalahan.

Gaurav
sumber
1
<iostream.h>khusus untuk C ++, dan tidak terkait dengan <stdlib.h>, tajuk yang sebenarnya diperlukan. Argumen hanya portabel dengan exitfungsi yang 0, EXIT_SUCCESS, dan EXIT_FAILURE. Penggunaan nilai bukan nol untuk menunjukkan kegagalan adalah khusus untuk sistem mirip UNIX (dan mungkin beberapa lainnya); jangan mengandalkannya dalam kode portabel.
Keith Thompson
-4

Sertakan stdlib.hdi header Anda, dan kemudian panggil abort();di mana saja Anda ingin keluar dari program Anda. Seperti ini:

switch(varName)
{
    case 1: 
     blah blah;
    case 2:
     blah blah;
    case 3:
     abort();
}

Ketika pengguna masuk, sakelar menerima ini dan memberikannya ke kasus 3 di mana Anda memanggil abortfungsi. Ini akan keluar dari layar Anda segera setelah menekan tombol enter.

Muhammad Ahmad
sumber
6
abortadalah tidak hal yang tepat untuk memanggil di sini, itu tidak akan memanggil atexitpenangan atau flush buffer file yang terbuka. Ini hanya boleh digunakan untuk penghentian program yang tidak normal, misalnya pernyataan gagal, dll. Untuk penghentian program normal, exitharus digunakan.
Adam Rosenfield
-6

Gunakan process.h daripada stdlib dan iostream ... Ini akan bekerja 100%.

Detamos
sumber
4
Saya tidak tahu apa process.h itu; ini jelas bukan standar C, dan tidak akan berfungsi pada sistem yang tidak menyediakannya. The <iostream>header khusus untuk C ++; pertanyaannya adalah tentang C.
Keith Thompson
1
Ini bukan Yahoo! Jawaban, ini Stack Overflow. Jika Anda menjawab, Anda setidaknya harus mengujinya terlebih dahulu!
wizzwizz4