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

Khoa NTA viết 12:16 ngày 01/10/2018

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

Vesper Link viết 12:15 ngày 01/10/2018

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

Bình Minh Nguyễn viết 12:24 ngày 01/10/2018

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()

Khoa NTA viết 12:16 ngày 01/10/2018

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

Phan Mưa Tinh viết 12:25 ngày 01/10/2018

Many thanks for this help!

Phan Mưa Tinh viết 12:26 ngày 01/10/2018

It is really helpful
Thank you!

Bài liên quan
0