VietTuts

Tự Học Lập Trình Online

  • Home
  • Java
  • Servlet
  • JSP
  • Struts2
  • Hibernate
  • Spring
  • MyBatis
  • Java WS
  • C
  • C++
  • Python
  • PHP
  • Eclipse
  • VBA
  • Web
    • JavaScript
    • JQUERY
    • JSON
    • AJAX
    • CSS
    • HTML
    • Node.js
    • Angular 7
  • SQL
    • MySQL
    • SQL Server
  • Misc
    • Phần mềm tiện ích
    • Cấu trúc dữ liệu và giải thuật
    • Học lập trình C#
    • Selenium Test

C Cơ Bản

Ngôn ngữ lập trình C là gì? Lịch sử của C Các tính năng của C Cài đặt môi trường lập trình C Chương trình C đầu tiên Flow của chương trình C Biến trong C Các kiểu dữ liệu trong C Ép kiểu trong C Từ khóa trong C Các toán tử trong C Comment trong C Các hằng số trong C printf và scanf trong C Ký tự đặc biệt trong C Xử lý lỗi trong C Tệp Header trong C Toán tử sizeof trong C

Câu Lệnh Điều Khiển C

Mệnh đề if-else Mệnh đề switch Vòng lặp for Vòng lặp while Vòng lặp do-while Lệnh Break Lệnh Continue Lệnh Goto

Con Trỏ

Con trỏ (pointer) trong C Con trỏ trỏ tới con trỏ Con trỏ và mảng trong C Quản lý bộ nhớ trong C

Structure & Union

Structure trong C Mảng của structure trong C Structure lồng nhau trong C Union trong C

C Math

Hàm math cơ bản trong C

C Function

Hàm trong C Hàm do người dùng định nghĩa Các kiểu hàm trong C Đệ quy trong C Call by value Call by reference

C Array

Mảng (array) trong C Mảng 2 chiều trong C Truyền mảng vào hàm
Chuỗi (String) Trong C
File I/O Trong C
Bài Tập C Có Lời Giải

Bài Học Bổ Sung

Enumeration (enum) trong C Preprocessors trong C Bảng ASCII

Xử lý lỗi trong lập trình C


Ký tự đặc biệt trong C
Tệp Header trong C

Lập trình C không hỗ trợ trực tiếp để xử lý lỗi nhưng là ngôn ngữ lập trình hệ thống, nó cung cấp cho bạn quyền truy cập ở mức thấp hơn dưới dạng giá trị trả về. Hầu hết các lời gọi hàm C hoặc thậm chí Unix trả về -1 hoặc NULL trong trường hợp có lỗi và thiết lập một mã lỗi errno. Nó được thiết lập như là một biến toàn cầu và chỉ ra một lỗi xảy ra trong bất kỳ lời gọi hàm nào. Bạn có thể tìm thấy nhiều mã lỗi được xác định trong tệp tiêu đề <error.h>.

Vì vậy, một lập trình viên C có thể kiểm tra các giá trị trả về và có thể thực hiện hành động thích hợp tùy thuộc vào giá trị trả về. Đó là một cách tốt, để đặt errno thành 0 tại thời điểm khởi tạo chương trình. Giá trị 0 cho biết không có lỗi trong chương trình.


Nội dung chính

  • errno, perror() và strerror()
  • Lỗi chia một số cho 0
  • Trạng thái thoát chương trình

errno, perror() và strerror()

Ngôn ngữ lập trình C cung cấp các hàm perror() và strerror() có thể được sử dụng để hiển thị thông báo văn bản được liên kết với errno.

  • Hàm perror() hiển thị chuỗi bạn truyền vào nó, theo sau là dấu hai chấm, dấu cách và sau đó là biểu diễn văn bản của giá trị errno hiện tại.
  • Hàm strerror() trả về một con trỏ tới biểu diễn văn bản của giá trị errno hiện tại.

Ví dụ sau mô phỏng một điều kiện lỗi bằng việc cố gắng mở một tệp không tồn tại. Ở đây, chúng ta đang sử dụng cả hai hàm để hiển thị mức sử dụng, nhưng bạn có thể sử dụng một hoặc nhiều cách để in lỗi của mình. Điểm quan trọng thứ hai cần lưu ý là bạn nên sử dụng luồng tệp stderr để xuất tất cả các lỗi.

#include <stdio.h>
#include <errno.h>
#include <string.h>

extern int errno;

int main () {

    FILE * pf;
    int errnum;
    pf = fopen ("unexist.txt", "rb");
 
    if (pf == NULL) { 
        errnum = errno;
        fprintf(stderr, "Gia tri cua loi: %d\n", errno);
        perror("Loi duoc in ra boi perror");
        fprintf(stderr, "Loi mo file: %s\n", strerror( errnum ));
    } else {
        fclose (pf);
    }

    return 0;
}

Kết quả:

Gia tri cua loi: 2
Loi duoc in ra boi perror: No such file or directory
Loi mo file: No such file or directory


Lỗi chia một số cho 0

Đó là một vấn đề phổ biến mà tại thời điểm phân chia bất kỳ số nào, các lập trình viên không kiểm tra xem một ước số là số không và cuối cùng nó tạo ra một lỗi run-time.

Chương trình bên dưới khắc phục điều này bằng cách kiểm tra xem số chia là số không trước khi chia.

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

main() {

    int dividend = 20;
    int divisor = 0;
    int quotient;
 
    if( divisor == 0) {
        fprintf(stderr, "Division by zero! Exiting...\n");
        exit(-1);
    }
   
    quotient = dividend / divisor;
    fprintf(stderr, "Value of quotient: %d\n", quotient );

    exit(0);
}

Kết quả:

Division by zero! Exiting...

Trạng thái thoát chương trình

Đó là một thực tế phổ biến để thoát với giá trị EXIT_SUCCESS trong trường hợp chương trình sắp ra sau một hoạt động thành công. Ở đây, EXIT_SUCCESS là một macro và nó được định nghĩa là 0.

Nếu bạn có một điều kiện lỗi trong chương trình của bạn và bạn đang sắp ra sau đó bạn nên thoát ra với một trạng thái EXIT_FAILURE được định nghĩa là -1. Vì vậy, hãy viết chương trình trên như sau:

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

main() {

    int dividend = 20;
    int divisor = 3;
    int quotient;
 
    if( divisor == 0) {
        fprintf(stderr, "Division by zero! Exiting...\n");
        exit(EXIT_FAILURE);
    }
   
    quotient = dividend / divisor;
    fprintf(stderr, "Value of quotient: %d\n", quotient );

    exit(EXIT_SUCCESS);
}

Kết quả:

Value of quotient: 6

Ký tự đặc biệt trong C
Tệp Header trong C

Recent Updates

Dãy số Fibonacci trong C#Bài tập C# có lời giảiToán tử dấu 2 chấm (::) trong Java 8Lambda Expression - Biểu thức Lambda trong java 8HttpClient trong Angular 7Service trong Angular7Directive trong Angular 7Component trong Angular 7Hướng dẫn lập trình Angular 7 với trình soạn thảo Visual Studio CodeCài đặt Angular 7Các lệnh Angular CLITổng hợp các thẻ mới trong HTML5

VietTuts on facebook

Học Lập Trình Online Miễn Phí - VietTuts.Vn

Danh sách bài học

Học java
Học servlet
Học jsp
Học Hibernate
Học Struts2
Học Spring
Học SQL

Câu hỏi phỏng vấn

201 câu hỏi phỏng vấn java
25 câu hỏi phỏng vấn servlet
75 câu hỏi phỏng vấn jsp
52 câu hỏi phỏng vấn Hibernate
70 câu hỏi phỏng vấn Spring
57 câu hỏi phỏng vấn SQL

About VietTuts.Vn

Hệ thống bài học trên VietTuts.Vn bao gồm các bài lý thuyết và thực hành về các công nghệ java và công nghệ web. Các bài lý thuyết trên hệ thống VietTuts.Vn được tham khảo và tổng hợp từ các trang http://javatpoint.com, http://www.tutorialspoint.com, http://docs.oracle.com/en …

Scroll back to top

Copyright © 2016 VietTuts.Vn all rights reserved. | VietTuts.Vn team | Liên hệ | Chính sách - riêng tư | sitemap.html | sitemap_index.xml