01/10/2018, 10:11
Chương trình không ra kết quả
#include <stdio.h>
#include <string.h>
char track[][100] = {
"Viet Nam",
"toi yeu em",
"phan vu tinh",
"lam thanh phat",
};
void findstring(char search_for[])
{
for(int i=0; i<5; i++)
if (strstr(track[i], search_for))
printf("track %d: '%s'", i, track[i]);
}
int main()
{
char search_for[100];
fgets(search_for, 100, stdin);
findstring(search_for);
return 0;
}
Tôi không tìm thấy lỗi ở đâu nhưng không ra kết quả
Hãy giúp tôi
Bài liên quan
Hàm
fgets
sẽ lấy luôn cả ký tự xuống dòng (nếu vẫn còn dư chỗ trống) nên không ra kết quả tìm kiếm.Giải pháp, loại bỏ (bỏ ký tự cuối cùng:
search_for[strlen(search_for) - 1] = '\0';
Chúc bạn thành công.
Góp ý cho lần sau gặp lỗi: hãy thử đặt các hàm
printf
để thử xem các biến đang chứa giá trị sau 1 thao tác đáng ngờ.Ngoài lỗi mà @aliston đã nói ở trên thì trong mảng
track
chỉ có 4 phần tử nhưng trong vòng lặp lại để điều kiệni < 5
, điều kiện đúng lài < 4
, vì mảng duyệt từ0, 1, 2, 3
. Cách tổng quát nhất để biết độ dài của mảng track là khai báo một biến như sau:Sau đó trong vòng lặp để điều kiện
i < size
theo mình biết thì fgets là lấy ký tự từ file bạn tự xem lại cách vào từ file còn nếu vào từ bàn phím bạn có thể dùng gets()
Hàm
fgets
an toàn hơngets
. Nếu số lượng ký tự nhập từ bàn phím mà lớn hơn kích thước khai báo của biến thìsegmentation fault
nhé!Nếu bạn chưa biết,
stdin
là kiểuFILE *
.Bạn đó dùng
fgets
là đúng rồiMany thanks for this help!
It is really helpful
Thank you!