[Lập trình C] Nhập xuất dữ liệu

Posted on December 28th, 2020

Tiếp tục với chuyên mục lập trình C, bài này sẽ giới thiệu với bạn cách nhập xuất dữ liệu cơ bản với printf(), scanf(), getchar() và putchar().

Lý thuyết cơ bản về nhập xuất dữ liệu trong lập trình C

Giới thiệu về các loại input/output trong lập trình C

  • Input: bàn phím, file
  • Output: màn hình, file

Trước tiên bạn tập trung vào kiểu input cơ bản là bàn phím và kiểu output cơ bản là màn hình. Về việc input và output ra file sẽ được giới thiệu trong bài viết khác.

Các hàm cơ bản hỗ trợ nhập xuất dữ liệu

Có 2 cặp hàm cơ bản:

  • printf() và scanf()
  • putchar() và getchar()

Các hàm này đều nằm trong thư viện chuẩn stdio.h

Để sử dụng chúng, bạn có thể làm như sau:

#include <stdio.h>

Tìm hiểu về nhập xuất dữ liệu với hàm printf() và hàm scanf()

Xuất dữ liệu với hàm printf()

Cú pháp cơ bản của hàm printf()

Hàm printf() cho phép bạn xuất dữ liệu ra màn hình console.

Cú pháp:

printf("control string", argument list);

Trong đó:

  • Control string: là phần hiểu thị ra màn hình
  • Argument list (danh sách tham số): là danh sách các tham số kiểu hằng, biến, biểu thức hoặc hàm. Chúng được phân cách nhau bởi dấu phẩy

Chú ý:

  • Control string luôn nằm trong cặp dấu nháy kép, bao gồm: text hiển thị, format command (bắt đầu bằng % và kí tự không nhìn thấy)
  • Danh sách tham số phải tương ứng với mỗi loại format trong control string về kiểu dữ liệu, số lượng và thứ tự.

Ví dụ:

#include <stdio.h>

int main() {
	int year = 2021;
	printf("Hello %d", year);
	return 0;
}
Một số loại format code hay dùng trong control string

lap_trinh-c-nhap-xuat-du-lieu-format-code

Cách in ra các kí tự đặc biệt

lap_trinh-c-nhap-xuat-du-lieu-print-special

Một số kí tự đặc biệt không hiển thị ra màn hình
  • \n - dòng mới
  • \t - tab
Một số loại modifier trong hàm printf()
  • Field width modifier: dùng để xác định kích thước tối thiểu của dữ liệu, ví dụ: %4d
  • '-' modifier: dùng để in dữ liệu ở dạng căn lề trái, ví dụ: %-4d
  • Precision modifier: xác định số kí tự tối đa đằng sau dấu phẩy, ví dụ: %.2f
  • '0' modifier: dùng để điền vào khoảng trống khi hiển thị dữ liệu với kích thước cho trước, ví dụ: %04f
  • 'l' modifier: dùng để hiển thị số nguyên kiểu long int hoặc số thực double. Format code tướng ứng là %ld
  • 'h' modifier: dùng để hiển thị số nguyên short, ví dụ: %hd

Nhập dữ liệu với scanf()

Cú pháp cơ bản

Hàm scanf() dùng để nhập dữ liệu từ bàn phím.

Cú pháp:

scanf("control string", argument list);

Các format dùng ở hàm printf() đều có thể sử dụng ở hàm scanf()

Hàm scanf() khác với hàm printf() ở danh sách tham số. Cụ thể với printf(), bạn sử dụng biến, hằng, biểu thức. Còn đối với hàm scanf(), bạn phải viết thêm kí tự & đằng trước biến cần nhập dữ liệu vào.

Ngoài ra, ở hàm scanf() sẽ không có option %g. Ngoài ra, %f và %e là giống nhau.

Ví dụ:

#include <stdio.h>

int main() {
	int x;
	float f;
	char c;
	printf("nhap vao du lieu:");
	scanf("%d %f %c", &x, &f, &c);
	printf("gia tri da nhap: %d %f %c\n", x, f, c);
	return 0;
}

Tìm hiểu về nhập xuất dữ liệu với hàm getchar() và hàm putchar()

Hàm getchar()

Hàm getchar() dùng để đọc vào 1 kí tự từ bàn phím

Ví dụ:

#include <stdio.h>

int main() {
	char c;
	printf("Nhap c:");
	c = getchar();
	printf("Gia tri c da nhap: %c", c);
	return 0;
}

Hàm putchar()

Hàm putchar() dùng để ghi 1 kí tự ra màn hình.

Hàm putchar() cần có 1 tham số truyền vào, đó có thể là: biến, hằng kí tự, hằng dạng số, kí tự đặc biệt \t hoặc \n

Ví dụ:

#include <stdio.h>

void main()
{
	putchar('H'); putchar('\n');
	putchar('\t');
	putchar('E'); putchar('\n');
	putchar('\t'); putchar('\t'); putchar('L'); putchar('\n');
	putchar('\t'); putchar('\t'); putchar('\t'); putchar('L'); putchar('\n');
	putchar('\t'); putchar('\t'); putchar('\t'); putchar('\t'); putchar('O'); putchar('\n');
}

Bài tập thực hành về nhập xuất dữ liệu trong lập trình C

Bài 1

Nhập vào 2 cạnh hình chữ nhật. Tính chu vi và diện tích của hình chữ nhật đó (kết quả làm tròn đến 2 chữ số sau dấu phẩy).

Phân tích bài toán

  • Giả sử 2 cạnh hình chữ nhật là a, b (số thực)
  • Chu vi = 2 * (a + b)
  • Diện tích = a * b

Code

#include <stdio.h>

int main() {
	float a, b, chuVi, dienDich;
	
	printf("Nhap a: ");
	scanf("%f", &a);
	
	printf("Nhap b: ");
	scanf("%f", &b);
	
	chuVi = 2 * (a + b);
	dienDich = a * b;
	
	printf("Chu vi hinh chu nhat la: %.2f\n", chuVi);
	printf("Dien tich hinh chu nhat la: %.2f\n", dienDich);
	
	return 0;
}

Bài 2

Nhập vào bán kính hình tròn. Tính chu vi và diện tích của hình tròn rồi in ra màn hình (kết quả làm tròn đến 2 chữ số sau dấu phẩy).

Phân tích bài toán

  • Giả sử bán kính hình tròn là số thực r
  • Chu vi hình tròn = 2 * PI * r
  • Diện tích hình tròn = PI * r * r

Code

#include <stdio.h>

int main() {
	float banKinh, chuVi, dienTich;
	const float PI = 3.14;
	
	printf("Nhap ban kinh hinh tron: ");
	scanf("%f", &banKinh);
	
	chuVi = 2 * PI * banKinh;
	dienTich = PI * banKinh * banKinh;
	
	printf("Chu vi hinh tron la: %.2f\n", chuVi);
	printf("Dien tich hinh tron la: %.2f\n", dienTich);
	
	return 0;
}

Bài 3

Biết rằng mối quan hệ giữa độ C (Celsius) và độ F (Fahrenheit) là: C/5 = (F-32)/9. Viết chương trình nhập vào độ C và in ra kết quả độ F tương ứng và ngược lại.

Chú ý: kết quả in ra bao gồm đơn vị (C) hoặc (F), kết quả làm tròn đến 1 chữ số sau dấu phẩy.

Phân tích bài toán

  • Giả sử độ C là số thực c, độ F là số thực f
  • Công thức tính độ C là: c = 5 * (f - 32) / 9
  • Công thức tính độ F là: f = 9 * c / 5 + 32

Code

#include <stdio.h>

int main() {
	float c, f;
	
	// Nhap vao do c -> do f
	printf("Nhap vao do C la: ");
	scanf("%f", &c);
	
	f = 9 * c / 5 + 32;
	printf("Gia tri do F tuong ung la: %.1fF\n", f);
	
	// Nhap vao do f -> do c
	printf("Nhap vao do F la: ");
	scanf("%f", &f);
	
	c = 5 * (f - 32) / 9;
	printf("Gia tri do C tuong ung la: %.1fC\n", c);
	
	return 0;
}

Bài 4

Nhập vào từ bàn phím 6 chữ cái. Viết chương trình in ra 6 chữ cái đó và tổng của 6 chữ cái đó dạng số.

Phân tích bài toán

  • Nhập vào 6 chữ cái dạng char: c1, c2, c3, c4, c5, c6
  • Kí tự char bản chất là một số trong bảng mã ASCII nên ta có thể cộng bình thường.

Code

#include <stdio.h>

int main() {
	char c1, c2, c3, c4, c5, c6;
	int tong;
	
	printf("Nhap vao 6 ki tu: ");
	c1 = getchar();
	c2 = getchar();
	c3 = getchar();
	c4 = getchar();
	c5 = getchar();
	c6 = getchar();
	
	tong = c1 + c2 + c3 + c4 + c5 + c6;
	
	printf("6 ki tu da nhap la: %c %c %c %c %c %c\n", c1, c2, c3, c4, c5, c6);
	printf("Tong 6 ki tu dang so: %d", tong);
	
	return 0;
}