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

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ờ.

3 Likes

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ện i < 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:

 int size = sizeof(track)/sizeof(track[0]);

Sau đó trong vòng lặp để điều kiện i < size

1 Like

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ơn gets. 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ểu FILE *.

Bạn đó dùng fgets là đúng rồi :smiley:

2 Likes

Many thanks for this help!

It is really helpful
Thank you!

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