Dùng scanf bị sai

Em mới học c thì có bài tập sau ạ:

Em đã code xong nhưng lại chỉ đúng với tên có 1 chữ nếu tên có 2 chữ “Manh Hung” thì đầu ra chỉ có Hung. Em nghĩ bài em sai ở chỗ scanf cứ 1 cách là nó tính 1 phần tử, em định dùng fgets nhưng chưa biết sửa thế nào. Mong các anh chị giúp em ạ, em cảm ơn!

#include<stdio.h>
#include<string.h>

int main(){
    char a[100][100];
    int i, n, index;
    scanf("%d", &n);
    for(i=0; i<n; i++){
        scanf("%s", &a[i][100]);
    }
    for(i=1; i<=n; i++){
        if(strcmp(a[i], "Nam")==0){
            index=i;
            break;
        }
    }
    if(index==1){
        printf("%s and %s", a[n], a[2]);
        return 0;
    }
    if(index==n){
        printf("%s and %s", a[n-1], a[1]);
        return 0;
    }
    printf("%s and %s", a[index-1], a[index+1]);
}

Bạn dùng scanf() với định dạng bình thường (%s) thì sai là phải rồi. Vì dạng này sẽ dừng nhập khi gặp kí tự tương đương dấu cách (khoảng trắng, tab, xuống dòng). Tên có 2 từ thì nó sẽ thành 2 tên.
Lấy chuỗi trên 1 dòng thì dùng gets() hoặc fgets().

2 Likes

Bạn phân tích thử dòng scanf này coi nó làm cái gì nào?
Lần sau thì cứ chạy debuger sẽ thấy nó bị sai chỗ này đó bạn.

3 Likes

Em thử rồi ạ, nhưng làm cách nào để nó lưu đc vị trí của tên “Nam” ạ.
Như cách trên em dùng em biết “Nam” ở chỗ nào thì sẽ in đc ra các trường hợp.
Mong anh giúp em chỗ đấy ạ.

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