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!
Bài liên quan
Anh xem trong file anh có lỡ bấm enter sau khi viết xong từ “nhu” không ?
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;
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
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
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
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á