30/09/2018, 16:15

Poll: Kiểm tra kiến thức C - 3.07

Các bạn thảo luận đáp án nhé, bài test lấy từ http://www.indiabix.com/online-test/c-programming-test/13
7. Point out the error in the program?

#include<stdio.h>
int main()
{
    struct emp
    {
        char name[20];
        float sal;
    };
    struct emp e[10];
    int i;
    for(i=0; i<=9; i++)
        scanf("%s %f", e[i].name, &e[i].sal);
    return 0;
}
  • A. Error: invalid structure member
  • B. Error: Floating point formats not linked
  • C. No error
  • D. None of above
Thực tế khắc nghiệt viết 18:22 ngày 30/09/2018

đọc xong ko hiểu cái đoạn

struct emp e[10];

có nghĩa là tạo mảng 10 phần tử với struct emp phải ko @Is2IT
còn nữa tại sao lại tham chiều đến &e[i].sal trong khi đó là giá trị rác

Nguyễn Minh Dũng viết 18:16 ngày 30/09/2018

Bài này không có lỗi, nhưng nếu dùng scanf để nhập chuỗi thì quá sai.

Nên dùng fgets thì hay hơn. Ví dụ trong bài này chuỗi có 20 ký tự thì ta nhập vào:

fgets(e[i].name, 20, stdin)

đọc xong ko hiểu cái đoạn

struct emp e[10];

có nghĩa là tạo mảng 10 phần tử với struct emp phải ko

Đúng rồi @Honey_moon

còn nữa tại sao lại tham chiều đến &e[i].sal trong khi đó là giá trị rác

Cái này là lấy địa chỉa của sal, mục đích là ghi giá trị vào sal. Cũng giống như khi ta ghi giá trị vào một biến int bất kỳ.

int sal;
scanf("%d", &sal)

Nhưng ở đây có dính struct vào nên nhìn hơi lạ.

Đỗ Trung Quân viết 18:31 ngày 30/09/2018

&e[i].sal trong khi đó là giá trị rác

Mảng thực chất cũng là 1 con trỏ mà giá trị đầu tiên nó trỏ tới là vị trí e[0]. => e có thể coi là 1 con trỏ
e[i] là giá trị tại vị trí i trong mảng, e và &e[i] là lấy địa chỉ chứ k phải giá trị rác

Bài liên quan
0