Cách sử dụng NULL

Code của mình ở trên dùng danh sách liên kết để nhập ký tự từ bàn phím và in ra màn hình những gì đã nhập khi gặp ký tự ' '.Nhưng khi in ngoài những ký tự đã nhập từ bàn phím trừ ký tự ' ' lại có thêm 1 ký tự phía sau (trên máy mình là ký tự '0').Nhờ mọi người fix lại giúp mình.

#include<stdio.h>
#include<stdlib.h>
typedef struct hoc_sinh {
        char ky_tu;
        struct hoc_sinh *tiep;
    }sv;
int main() {
    sv *sinh_vien1=NULL,*sinh_vien2=NULL;
    char ky_tu1;
    do {
        if(sinh_vien2==NULL) {
            sinh_vien2=(sv*)malloc(sizeof(sv));
            sinh_vien1=sinh_vien2;
        } else {
            sinh_vien2->tiep=((sv*)malloc(sizeof(sv)));
            sinh_vien2=sinh_vien2->tiep;
        }
        ky_tu1=getchar();
        if(ky_tu1!=' ') {
            sinh_vien2->ky_tu=ky_tu1;
        }
         sinh_vien2->tiep=NULL;
    } while(ky_tu1!=' ');
    sinh_vien2=sinh_vien1;
    while(sinh_vien2!=0) {
        printf("%c",sinh_vien2->ky_tu);
        sinh_vien2=sinh_vien2->tiep;
    }
    return 0;
}
2 Likes

Cái này là do chưa có ký tự kết thúc chuỗi đó @14520054. Tìm lại mấy bài chuỗi để xem nhé.

2 Likes

Nhưng em đâu có sử dụng chuỗi đâu.

  • Trường hợp 1, em nhập vào <space>. sinh_vien2->ky_tu sẽ không có gi cả, nên sẽ in ra ký tự rác.
  • Trường hợp 2, em nhập vào a<space>. sinh_vien2->ky_tu sẽ không có gì cả, vì bây giờ sinh_vien2 đã được tạo mới
sinh_vien2->tiep=((sv*)malloc(sizeof(sv)));
sinh_vien2=sinh_vien2->tiep;
2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?