01/10/2018, 14:42

Hỏi về thuật toán chuyển số từ Binary sang Hexa và Decimal sang Hexa trong file trên C

Chào mọi người. Mình đang học C. Và đang rối ở phần này ạ.
File input có 2 dòng ạ.
1 dòng gồm số binary và khoảng cách rồi đến số 2 để biểu thị hệ cơ số.
Ở dưới cũng vậy nhưng là Hexa và số 16
Em đang rối không biết làm sao để lấy từng dòng và lấy từng khúc(trước khoảng trắng mỗi dòng) để chuyển đổi ạ

rogp10 viết 16:56 ngày 01/10/2018

Đây chỉ là định dạng thôi chứ vẫn chưa có đề bài, hay là bạn thật sự muốn làm gì với file đó.

thdung6198 viết 16:57 ngày 01/10/2018

Là đề cho mình vầy.
File input.txt
00011110 2
0x1F 16
File output.txt
30
31

Dark.Hades viết 16:49 ngày 01/10/2018

Hàm ở đây nhé:

stackoverflow.com
Melvin Sy

Using atoi() in C to parse character array with binary values

c, string, type-conversion, atoi
asked by Melvin Sy on 09:41AM - 17 Apr 13

Thuật toán parse thì bạn tự viết cho lẹ
Gợi ý:
Đọc theo dòng dùng while EOF, sau đó tìm char space là được.

thdung6198 viết 16:48 ngày 01/10/2018

Anh ơi em vẫn chưa rõ lắm @@
VD như giờ em có cái file input
00011110 2
0x1F 16
Em muốn đọc từng cái thì làm sao nhỉ?
Như kiểu xài fscanf để đọc hết dòng 0001110 và lưu vào 1 biến mảng a. Rồi sau đó lại đọc cái 2 lưu vào 1 biến nào đó kiểu int.
Rồi lại xuống dòng đọc cái 0x1F lưu riêng 1 mảng rồi lại đọc 16 riêng vào một biến khác ấy? :(( Làm sao đc nhỉ?
Em ko rõ trên C lắm… Google người ta có chĩ fscanf là đọc trên file tới dấu cách.
Còn fgets thì đọc tới khi có \n hoặc tới dòng mới á?

Dark.Hades viết 16:54 ngày 01/10/2018

Bạn đọc bằng cái nào cũng được.
Trường hợp này file đã có cấu trúc, dùng fscanf đọc %s %d cho vào char[8]& int là được.

thdung6198 viết 16:57 ngày 01/10/2018

Cho cái dòng đầu rồi còn cái dòng dưới thì làm sao a nhỉ @@?

Dark.Hades viết 16:49 ngày 01/10/2018

fscanf

Return Value
On success, the function returns the number of items of the argument list successfully filled. This count can match the expected number of items or be less (even zero) due to a matching failure, a reading error, or the reach of the end-of-file.

If a reading error happens or the end-of-file is reached while reading, the proper indicator is set (feof or ferror). And, if either happens before any data could be successfully read, EOF is returned.

If an encoding error happens interpreting wide characters, the function sets errno to EILSEQ.

Bạn kiểm tra xem đọc tới EOF là được.

thdung6198 viết 16:48 ngày 01/10/2018

while(eof) rồi đọc à bác? Hơi gà mờ vụ file trong C cho lắm ^^

Quang Minh viết 16:46 ngày 01/10/2018

Hãy chú ý là phần kết thúc là EOF hay là null, vì có những trường hợp code mình đọc EOF thì lặp vô hạn nhưng đọc NULL thì chạy đúng

HK boy viết 16:43 ngày 01/10/2018

Nếu file input của bạn có 2 dòng thì bạn cứ đọc như bình thường thôi, không cần lôi đọc đến hết (EOF/NULL) vào làm gì cho mệt xác.

#include <stdio.h>

int main() {
	char num1[100], num2[100];
	int base1, base2;
	// fscanf chắc tương tự
	scanf("%s %d\n", &num1, &base1);
	scanf("%s %d\n", &num2, &base2);
	printf("%s %d\n", num1, base1);
	printf("%s %d\n", num2, base2);
}

Nếu đọc đến hết:

#include <stdio.h>

int main() {
	char num[100];
	int base;
	// không thèm dùng EOF hay NULL gì hết nhá
	while (scanf("%s %d\n", &num, &base) == 2) {
		printf("%s %d\n", num, base);
	}
}
Bài liên quan
0