Tài trợ bài viết này và giới thiệu dịch vụ, sản phẩm, thương hiệu, nhu cầu tuyển dụng của doanh nghiệp đến với cộng đồng.
STDIO Đối với lập trình viên, việc tương tác với máy tính và kiểm soát đầu vào và đầu ra của dữ liệu là vô cùng quan trọng. Khác với các ngôn ngữ lập thường gặp hiện nay như Java, C#... hay các ngôn ngữ mới đã được hỗ trợ nhiều thư viện xử lý dữ liệu, C/C++  lại rất tường minh trong việc nhập xuất dữ liệu ngay từ những dòng code đầu tiên. Điều này gây không ít khó khăn cho người mới bắt đầu với ngôn ngữ lập trình C/C++.  Bài viết là tiền đề giúp cho người đọc làm quen trong việc kiểm soát dữ liệu nhập xuất cũng như các thao tác cơ bản trên C/C++.
Nội dung bài viết

Giới thiệu

Đối với lập trình viên, việc tương tác với máy tính và kiểm soát đầu vào và đầu ra của dữ liệu là vô cùng quan trọng. Khác với các ngôn ngữ lập thường gặp hiện nay như Java, C#... hay các ngôn ngữ mới đã được hỗ trợ nhiều thư viện xử lý dữ liệu, C/C++  lại rất tường minh trong việc nhập xuất dữ liệu ngay từ những dòng code đầu tiên. Điều này gây không ít khó khăn cho người mới bắt đầu với ngôn ngữ lập trình C/C++.  Bài viết là tiền đề giúp cho người đọc làm quen trong việc kiểm soát dữ liệu nhập xuất cũng như các thao tác cơ bản trên C/C++.

Tiền đề bài viết

Trong quá trình học tập và nghiên cứu, tôi nhận ra quá trình chuyển đổi công nghệ lập trình gây không ít khó khăn cho các lập trình viên. Trong đó phải kể đến việc nhập xuất dữ liệu trong ngôn ngữ C/C++, sự tường minh đó không những gây trở ngại lớn cho những lập trình viên mới bắt đầu tìm hiểu ngôn ngữ này mà thậm chí ngay cả những người đã thành thạo với các ngôn ngữ khác cũng có những khó khăn nhất định. Tuy nhiên, việc đó chính là tiền đề để tạo ra nền tảng vững chắc cho các lập trình viên sau này. 

Đối tượng hướng đến

Bài viết dành cho các lập trình viên mới tiếp xúc ngôn ngữ lập trình C/C++ hoặc có nhu cầu tìm hiểu sâu và củng cố kiến thức nền tảng.

Tổng quan

Đối với tất cả ngôn ngữ lập trình, việc kiểm soát tiêu chuẩn đầu vào, đầu ra của dữ liệu là vô cùng quan trọng. Khi làm việc với ngôn ngữ C/C++, đầu tiên phải nói đến thư viện <stdio.h>. Thư viện cung cấp 2 hàm hỗ trợ nhập xuất cơ bản là printf()scanf().

printf và scanf

printf() viết tắt của "print formatted" nghĩa là hàm in có định dạng. Làm nhiệm vụ xuất dữ liệu ra màn hình.

  • Cấu trúc 
printf(<"chuỗi định dạng">, <danh sách tham số>);  

Trong đó chuỗi định dạng "format string" làm nhiệm vụ định dạng dữ liệu xuất ra màn hình. Danh sách tham số có thể bao gồm nhiều biến, hằng số, biểu thức và hàm... được phân cách bằng dấu "," .

scanf() viết tắt của "scan formatted"  nghĩa là hàm quét có định dạng. Làm nhiệm vụ quét dữ liệu đầu vào.

  • Cấu trúc 
scanf(<định dạng kỹ thuật>, <danh sách tham chiếu>);  

Trong đó định dạng kỹ thuật làm nhiệm vụ định dạng dữ liệu đầu vào. Danh sách tham chiếu bao gồm các dữ liệu được truyền với dạng tham chiếu có cấu trúc được quy định là &<tên biến> dành cho các kiểu dữ liệu cơ bản "primitive data type", còn đối với các kiểu dữ liệu dẫn xuất như chuỗi ký tự thì tham chiếu đơn giản là <tên biến>.

Chuỗi định dạng

Chuỗi định dạng trong print() được đặt trong dấu " " cho phép nhiều thành phần cùng tồn tại như :

  • Ký tự văn bản "Text characters": là những ký tự in được, bao gồm các chữ cái, chữ số và các ký tự đặc biệt trong bảng mã ASCII.
  • Ký tự điều khiển: bao gồm một số ký tự điều khiển như tab (\t), xuống dòng (\n), khoảng trắng, … Khoảng trắng thường được sử dụng để phân cách các trường "field" dữ liệu được xuất ra.
  • Định dạng kỹ thuật: quy định kiểu dữ liệu được xuất ra màn hình.

Lưu ý: đối với một số hàm được bổ sung về sau ở các thư viện khác như cin, cout, ... các lệnh định dạng kỹ thuật được hỗ trợ ẩn đi giúp người lập trình dễ dàng kiểm soát các định dạng dữ liệu. Tuy nhiên điều này làm mất đi thói quen tìm hiểu sâu đối với người học lập trình và gây khá nhiều cản trở khi bước lên chuyên nghiệp.

Ký tự điều khiển thường dùng 

\n Nhảy xuống dòng kế tiếp
\t Tab khoảng cách ngang 
\r Nhảy về đầu hàng
\a Tiếng kêu bip
\\ In ký tự  \
\" In ký tự  "
\' In ký tự '
%% In ký tự % 

Định dạng kỹ thuật thường dùng 

%d int định dạng kiểu số nguyên và tham chiếu dữ liệu hệ thập phân 
%i  int định dạng kiểu số nguyên và tham chiếu dữ liệu hệ thập lục phân 
%f float định dạng kiểu số thực 
%c  char định dạng kiểu ký tự 
%s character string  định dạng chuỗi ký tự 
%lf double định dạng kiểu số thực double 
%ld long định dạng cho một số kiểu long 
%Lf long double định dạng cho một số kiểu long double 

Ví dụ

Hiện thực các ví dụ bên dưới để hiểu rõ hơn về nhập xuất trong C/C++.

Ví dụ cho việc hiển thị thông tin 

#include <stdio.h> 
#define _CRT_SECURE_NO_WARNINGS 

int main() 
{
    printf("Stdio Traning! \n");
    printf("Author:\t");
    printf("Your Name \n");
    printf("%% \t \\ \t / \t %% \n");

    return 0;
}

Ví dụ về việc tính toán 

#include <stdio.h> 
#define _CRT_SECURE_NO_WARNINGS 

int main() 
{
    int a; // khai bao bien a kieu so nguyen
    float c, d; // khai bao 2 bien kieu so thuc
    a = 0; // truyen vao bien a gia tri 0
    int b = 2; // khai bao bien b va truyen gia tri 2 vao bien b
    c = 3.1416f; // truyen gia tri vao bien c kieu so thuc
    d = 0.12f; // truyen gia tri vao bien d kieu so thuc
    
    printf("a = %d; b = %d\n", a, b);
    printf("c = %f; d = %f\n", c, d);
    printf("a + b = %d", a+b);
    return 0;
}

Ví dụ về nhập xuất dữ liệu 

#include <stdio.h> 
#define _CRT_SECURE_NO_WARNINGS 

int main() 
{
   char name[8];
    printf("Nhap ten của ban: ");
    scanf("%s", name);
    printf("Stdio Traning! \n");
    printf("Ten hoc vien: %s \n", name);

    return 0;
}

Lưu ý: Khá khó giải thích sự khác nhau giữa %i và %d vì cả hai định dạng giống và khác nhau một số trường hợp. Thực hiện ví dụ tổng hợp để phân biệt sự khác nhau giữa %d và %i khi chúng ta cùng nhập một giá trị 020 hai lần với hai định dạnh %d và %i.

#include <stdio.h>
#define _CRT_SECURE_NO_WARNINGS

int main()
{
    printf("Stdio Traning! \n");
    int number1,number2; // 020 020
    printf("Thuc hien nhap hai so giong nhau voi %%d va %%i ");
    scanf("%d%i",&number1,&number2);
    printf("%d\t%d \n",number1,number2);
    return 0;
}

Kết quả

Screen%20Shot%202017-02-20%20at%2011_04_22%20PM

Các cảnh báo thường gặp 

Một trong những cảnh báo thường gặp khi thao tác với các hàm có liên quan tới thư viện CRT của Visual Studio từ phiên bản 2012 trở đi là Compiler warning C4996 yêu cầu sử dụng printf_s, scanf_s, fopen_s, …

Tham khảo bài viết Compiler Warning C4996 Và C Run-time Library Hay _CRT _SECURE_NO_WARNINGS (CRT) của tác giả Trần Thị Thu Hiền để khắc phục các cảnh báo.

 

THẢO LUẬN
Người ta nghĩ rằng khoa học máy tính là ngành toàn những thiên tài, thực tế thì ngược lại, họ chỉ làm việc dựa trên kết quả công việc của những người tiền nhiệm, giống như những viên gạch xếp chồng lên nhau tạo nên bức tường. Donald Knuth
300x250

Liên hệ tài trợ cho STDIO

Tham gia tài trợ STDIO và đặt quảng cáo theo định kỳ của cá nhân, cửa hàng, doanh nghiệp của bạn tại đây.
Gọi: 028.36205514 www.stdio.vn/contact
ĐÓNG