Gặp vấn đề về nhập liệu với struct nằm trong union

Em có chương trình:

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

struct a
{
  char ten[30];
  char gioi_tinh[3];
};

struct b
{
  char toan;
  char li;
  char hoa;
};

union hoc_sinh
{
  struct a thong_tin;
  struct b diem_thi;
} hoc_sinh1;

int main()
{
         scanf("%[^\n]", hoc_sinh1.thong_tin.ten);
  scanf("%d", &hoc_sinh1.diem_thi.toan);
  printf("%s", hoc_sinh1.thong_tin.ten);
  return 0;
}

input: Hello 1
output: ‘:slight_smile:

Screenshot 2022-08-30 160449

Mọi người cho em hỏi là tại sao đoạn code trên nó cứ in ra cái mặt cười thay vì hello ạ. EM cảm ơn mọi người ạ.

Lần đầu tiên thấy 1 “AI” thông minh cười vào mặt coder như vậy.
Đùa thôi. Bạn tìm hiểu lại union là gì nha. Cách sử dụng union của bạn là hoàn toàn sai về mặt logic (mục đích sử dụng) và cấu trúc (align về số byte của thành phần).

4 Likes

Tuyệt vời quá anh trai. Em mới đọc lại kĩ hơn về union và cách sử dụng thì em hiểu vấn đề rồi ạ. Cám ơn anh trai nhiều nhé.

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