%C là gì trong C

Đố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++. 

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 - C chuẩn [ - C++ chuẩn].

stdio.h cung cấp 2 hàm hỗ trợ nhập xuất cơ bản là printf[] và 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[, ]. 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[, ]. 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à & 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à .

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.

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 #define _CRT_SECURE_NO_WARNINGS int main[] { printf["Hello! \n"]; printf["Your name \n"]; printf["%% \t \\ \t / \t %% \n"]; return 0; }

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

#include #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 #define _CRT_SECURE_NO_WARNINGS int main[] { char name[32]; printf["Nhap ten của ban: "]; scanf["%s", name]; printf["Ten ban la: %s \n", name]; return 0; }

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 #define _CRT_SECURE_NO_WARNINGS int main[] { 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; }

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] để hiểu và giải quyết vấn đề này.

Cùng tìm hiểu về ký tự trong C. Bạn sẽ học được khái niệm ký tự trong C là gì, cách biểu diễn và in ký tự trong C, cũng như lưu ý khi xử lý ký tự tiếng Việt có dấu trong C sau bài học này.

Ký tự trong C là gì

Ký tự trong C được định nghĩa là chữ cái được biểu diễn bởi một mã ký tự, ví dụ như 1 chữ, 1 chữ số, hoặc là một dấu chẳng hạn.

  • Xem thêm: Mã ký tự trong C

Các chữ cái như chữ a, chữ Z, chữ số 1, chữ số 2, dấu phẩy , hay ký tự khoảng trắng tạo bởi phím cách đều là ký tự trong C.

Để biểu diễn ký tự trong C, chúng ta đặt ký tự đó vào giữa hai dấu nháy đơn '' như sau:

Cần lưu ý là nếu một số được đặt trong cặp dấu nháy đơn '' thì số đó sẽ được coi là chữ số trong C. Khi đó chúng ta không thể tính toán với chữ số này tương tự với số được. Hãy nhớ hai cách viết dưới đây biểu diễn hai kiểu dữ liệu khác nhau trong C.

Lại nữa, nếu chữ, chữ số hoặc là dấu có từ 2 ký tự trở lên, thì chúng không còn là ký tự nữa mà sẽ trở thành chuỗi ký tự [string literal] trong C. Khi đó, thay vì cặp dấu nháy đơn thì chúng ta sẽ sử dụng cặp dấu nháy kép "" để biểu diễn chuỗi ký tự, ví dụ như "Việt Nam" hay "I love you!" chẳng hạn.

  • Xem thêm: Chuỗi ký tự trong C [string literal].

Cách in ký tự trong C ra màn hình

Để in ký tự trong C ra màn hình, chúng ta sử dụng hàm printf với cú pháp sử dụng với ký tự như sau:

Trong đó printf là hàm xuất dữ liệu trong C, và tham số %c có ý nghĩa chỉ định dữ liệu cần in ở kiểu dữ liệu ký tự.

Ví dụ cụ thể, chúng ta in ra màn hình các ký tự như sau:


int main[void]{
printf["%c\n",'a'];
printf["%c\n",'Z'];
printf["%c\n",'1'];
printf["%c\n",'.'];
printf["%c\n",'!'];
}

Kết quả:

Lưu ý khi xử lý ký tự tiếng Việt có dấu trong C

Trong C, các ký tự tiếng Việt có dấu [ví dụ như ă, ú,đ…] được biểu diễn bởi nhiều hơn 2 mã ký tự, do đó chúng không được coi là ký tự trong C, và chúng ta không thể sử dụng cặp dấu nháy đơn để biểu diễn chúng được.

Ví dụ các cách viết 'ế' hay 'đ' là sai trong C và chương trình sẽ báo lỗi khi chạy như sau:


int main[void]{
printf["%c\n",'đ'];
}

>>>Main.c:3:19: error: character too large for enclosing character literal type
>>> printf["%c\n",'đ'];

Tương tự thì các ký tự như hán tự tiếng Trung, kanji hoặc hankaku tiếng Nhật [ví dụ như タ, 日] đều được biểu diễn bởi 2 mã ký tự trong C, và chúng thuộc kiểu chuỗi ký tự chứ không phải kiểu ký tự.

Về cách biểu diễn và in chúng ra màn hình như thế nào, hãy tham khảo ở bài viết sau:

  • Xem thêm: Chuỗi ký tự trong C.

Tổng kết

Trên đây Kiyoshi đã hướng dẫn bạn về ký tự trong C rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.

Và hãy cùng tìm hiểu những kiến thức sâu hơn về C trong các bài học tiếp theo.

Video liên quan

Chủ Đề