30/09/2018, 16:01
Poll: Kiểm tra kiến thức C - 1.3
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/11
3.Point out the error in the following 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. Suspicious pointer conversion
- B. Floating point formats not linked (Run time error)
- C. Cannot use
scanf()
for structures - D. Strings cannot be nested inside structures
Bài liên quan
Câu này hình như đề sai, mình chạy thử thấy không bị lỗi.
nhìn code thì không hiểu ?
chạy code thì k thấy lỗi gì
sai ở chỗ scanf thì phải
cần địa chỉ mà … sao lại e[i].name ?
e[i].name là con trỏ rồi.
Struct không thể viết trong main được phải không anh @Itd
Được em, nó giảm cái scope của struct lại. Chỉ dùng được trong hàm main thôi.
Theo em bài này lỗi ở phần scanf ở phần biến sal.
Tách ra scanf có thể dùng cho char name[20]
Rồi sẽ dùng 1 biến char ctam rồi dùng lệnh gets(ctam) thay cho scanf rồi gán biến sal = atoi(ctam)
Bài này sai ở e[i].name trong hàm scanf. Fai là &e[i].name
e[i].name sao lại là con trỏ đc anh?
Ta có
int a[100];
chẳng hạn thì a tương đương với&a[0]
, nói sai mong mọi người đừng ném gạch, lâu em ko đụng đến C rồibản thân mảng là con trỏ nhé ban. e là con trỏ trỏ đến phần tử đầu tiên của mảng(e==&e[0])
*p == e ==&e[0]
nhưng trên đề kia là e[i].name nhé bạn.
e[i].name chỉ là giá trị của nó thôi.
nếu muốn biểu diễn là con trỏ thì fai viết là (e+i).name hoac &e[i].name nhé bạn
e[i].name o trong nay ne
Chuỗi là mảng kí tụ nhé, nên e[i].name cũng là con trỏ bạn ạ.
thường thì với int thì ta sẽ viết: scanf("%d", &i), nhưng với chuỗi thì chỉ cần viết scanf("%s", e[i].name là được)
chuỗi cũng là mảng ký tự nhưng e[i] không fai là con trỏ bạn nhé…
vd: char a[10];
thì a coi là con trỏ, nó chưa địa chỉ phần tử đầu tiên
a[i] là giá trị phần tử thứ i trong mảng.
bạn đừng nhầm
thật ra cả 2 đều sai mảng là mảng (array), con trỏ là con trỏ (pointer), hai cái đó khác nhau hoàn toàn
stackoverflow.com
C: differences between char pointer and array
http://www.programming-techniques.com/2011/08/difference-between-array-and-pointer-in.html
@baudiachatb mình thấy bạn bị nhầm rồi e[i].name ở đây kiểu char[], nên nó không cần dấu & đằng trước
mình ko hề nói array là pointer nhé
như mình giải thích ở trên. mình nghĩ là mình ko nhầm:grinning:
Mình đã test rồi nhé
bạn thử thay e[0].name bằng e[1].name trong hàm scanf và printf xem có chạy ko?
đây nhé