scanf("%d",&(*p).age); scanf("%c",&std[0].sex); scanf("%c",&(p->sex)); scanf("%s",std.name);哪个输入语句有错误,为什么错误
时间: 2024-01-08 11:20:06 浏览: 75
以下是对每个输入语句的分析:
1. `scanf("%d",&(*p).age);` - 正确,因为`age`是一个`int`类型的成员。
2. `scanf("%c",&std.sex);` - 正确,因为`sex`是一个`char`类型的成员。
3. `scanf("%c",&(p->sex));` - 错误,应该使用`gender`而不是`sex`,因为结构体中的成员名是`gender`。
4. `scanf("%s",std.name);` - 错误,应该使用`&std.name`而不是`std.name`,因为`name`是一个字符数组,需要使用数组的地址。
因此,输入语句`scanf("%s",std.name);`有错误,应该改为`scanf("%s",&std.name);`。
相关问题
有如下定义: struct student{ char name[10]; int age; char gender; }std[3], *p=std; 则以下各输入语句中错误的是: a. scanf("%d",&(*p).age); b. scanf("%c",&std[0].gender); c. scanf("%c",&(p->gender)); d. scanf("%s",&std.name);
d. scanf("%s",&std.name); 是错误的,应该改为 scanf("%s",std[0].name); 因为std是一个数组,而不是一个结构体变量,需要指定数组中的某一个元素。另外,%s应该用于字符数组,而不是结构体变量。
#include <stdio.h> struct data { int year; int month; int day; }; struct student { char* name; int age; struct data birthday; }; int main() { // struct student *sb=malloc(sizeof(struct student)); struct student sb; scanf("%s%d%d%d%d",&(sb.name),&(sb.age),&(sb.birthday.year),&(sb.birthday.month),&(sb.birthday.day)); printf("%s %d %d %d %d\n",sb.name,sb.age,sb.birthday.year,sb.birthday.month,sb.birthday.day); //printf("%d\n",sb.age); return 0; }错在哪
这段代码的错误在于 scanf 函数读取字符串时,应该使用 sb.name 而不是 &(sb.name)。因为 sb.name 已经是一个指向字符串的指针,本身就是一个地址,而 &(sb.name) 则是取 sb.name 这个指针变量的地址,此时的地址已经是一个二级指针,不符合要求。所以,正确的代码应该是:
```c
scanf("%s%d%d%d%d", sb.name, &(sb.age), &(sb.birthday.year), &(sb.birthday.month), &(sb.birthday.day));
```
另外,如果 name 字段需要存储字符串,应该分配足够的内存空间,或者使用字符数组来存储字符串,而不是直接使用指向字符串的指针。
阅读全文