Nhập dữ liệu từ file có nội dung "nhu" nhưng lại nhận được "nhuu" hoặc "nhu/" hoặc "nhuc"

chào các bạn. cho mình hỏi 1 vấn đề.
bây giờ mình có 1 file input.txt có nội dung như sau

nhu

mình viết 1 hàm để đọc cái xâu trên.

void doctep(char s[],int &n){
     fstream ft;
     ft.open("input.txt",ios::in);
     int i=0;
     while(!ft.eof()){
           ft>>s[i];
           i++;
     }
     n = i;
     ft.close();
}

nhưng khi in ra màn hình thì lại được 1 xâu như thế này : “nhuu” hoặc “nhu/” hoặc “nhuc”. Nghĩa là mỗi lần chạy thì kí tự thứ 3 (tính từ 0) sẽ là 1 kí tự khác. ai chỉ cho mình chỗ sai với ạ. xin cảm ơn!

Anh xem trong file anh có lỡ bấm enter sau khi viết xong từ “nhu” không ?

1 Like

không bạn ơi. nếu xâu trong file input có 4 kí tự thì đọc xâu sẽ đúng nhưng số kí tự n sẽ sai ví dụ có 4 kí tự thì n = 5. còn xâu trong file mà từ 3 kí tự trở xuống sẽ sai

cái hàm của mình nó không đọc kí tự trăng bạn à

À.
Thế này, anh cho vòng for chạy từ 0 -> n - 1. Mỗi lần lặp, in ra s[i] thử xem;

1 Like

làm như thế thì in được kết quả đúng nhưng không hiểu sao hàm trên của mình lại sai nhỉ :))

Thiếu \0
Đọc xong rồi thì s[i] = ‘\0’ nữa là ok

3 Likes

thank c. thế bây giờ mình muốn đọc vào 1 biến s theo kiểu string ( để có thể nhập xâu có kí tự trắng) thì đổi hàm thành như thế nào hả bạn

getline nhé bạn :smiley:

2 Likes

thank bạn nhé ! :)))))))

Có thể là vì anh sử dụng hàm xuất như cout đại loại vậy, nó sẽ xuất ra toàn bộ cái chuỗi đó.
VD: char s[10];
Mà anh đọc vào “nhu” là chỉ có 3 kí tự, các kí tự còn lại là rác. Thế nhưng lại xuất ra cả 10 kí tự, dẫn đến việc xuất luôn các giá trị rác.

Em không chắc có phải lỗi đó không nên nói anh xài vòng lặp in từng kí tự cho đến khi hết chuỗi (vì anh đã biết được chiều dài chuỗi là n rồi)

Mà đúng vậy thì lần sau anh thêm ‘\0’ như anh @drgnz nói là được. Lý do thì xem video về C bài 10 của anh @ltd

3 Likes

mình hiểu rồi thank mấy bạn nhiều !

1 Like

Bạn đánh dấu cho câu trả lời đúng nhá :smile:

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?