30/09/2018, 17:43

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!

nhatlonggunz viết 19:48 ngày 30/09/2018

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

nullnguyen viết 19:49 ngày 30/09/2018

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

nullnguyen viết 19:47 ngày 30/09/2018

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

nhatlonggunz viết 20:00 ngày 30/09/2018

À.
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;

nullnguyen viết 19:56 ngày 30/09/2018

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ỉ :))

*grab popcorn* viết 19:57 ngày 30/09/2018

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

nullnguyen viết 19:59 ngày 30/09/2018

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

Minh Hoàng viết 19:56 ngày 30/09/2018

getline nhé bạn

nullnguyen viết 19:56 ngày 30/09/2018

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

nhatlonggunz viết 19:46 ngày 30/09/2018

không hiểu sao hàm trên của mình lại sai 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

nullnguyen viết 19:48 ngày 30/09/2018

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

Thành Phạm viết 19:51 ngày 30/09/2018

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

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

Hiện nay thành viên đã có thể đặt câu hỏi và chọn câu trả lời đúng trong Category #programming và #randomq, thế nên ai đã đặt câu hỏi và nhận câu trả lời chính xác thì nhớ chọn câu trả lời đúng để cảm ơn người trả lời nhé. Nếu người hỏi tự trả lời được câu hỏi thì nên post solution của mình và tự chọn luôn đó là câu trả lời đúng để cho người sau vào sẽ biết cách giải quyết. Các categories được chọn câu trả lời đúng programming randomq Người đặt câu hỏi có thể chọn câu trả lời đúng bằ…
Bài liên quan
0