#include <stdio.h> #include <string.h> union jtgj { char a[10]; char b[10]; char c[10]; }; int main() { union jtgj x; strcpy(x.a, "公交"); strcpy(x.b, "地铁"); strcpy(x.c, "出租车"); char z[10]; scanf("%s",z); if (strcmp(z, x.a) == 0) printf("员工选择%s",x.a); else if (strcmp(z, x.b) == 0) printf("员工选择%s",x.b); else if (strcmp(z, x.c) == 0) printf("员工选择%s",x.c); else printf("错误输入!\n"); return 0; } 这段代码运行结果不正确,请找出错误
时间: 2024-04-17 20:25:08 浏览: 56
这段代码的错误在于使用了共用体(union)来存储三个字符串,但是每次使用strcpy函数给共用体的成员赋值时,会覆盖前一个赋值。因此,最终的x.a、x.b、x.c只会保存最后一次赋值的字符串。
要解决这个问题,可以使用结构体(struct)来代替共用体,并将字符串成员定义为指针类型。这样,每个成员都可以独立存储字符串,并且不会相互覆盖。
以下是修改后的代码:
```c
#include <stdio.h>
#include <string.h>
struct jtgj
{
char* a;
char* b;
char* c;
};
int main()
{
struct jtgj x;
char str1[10] = "公交";
char str2[10] = "地铁";
char str3[10] = "出租车";
x.a = str1;
x.b = str2;
x.c = str3;
char z[10];
scanf("%s", z);
if (strcmp(z, x.a) == 0)
printf("员工选择%s", x.a);
else if (strcmp(z, x.b) == 0)
printf("员工选择%s", x.b);
else if (strcmp(z, x.c) == 0)
printf("员工选择%s", x.c);
else
printf("错误输入!\n");
return 0;
}
```
现在,每个字符串都可以正确保存,并且根据用户的输入进行比较。
阅读全文