妖娆乌龙茶 发表于 2023-11-14 18:18:22

结构体课后作业

#include <stdio.h>
#include <string.h>
   
struct Student
{
      int id;
      int sex;
      char qq;
      char email;
};
   
int main(void)
{
      struct Student stu;
      char sex;
      char ch;
   
      printf("请输入学生ID:");
      scanf("%d", &stu.id);
   
      printf("请输入学生性别(1/0):");
      scanf("%d", &stu.sex);
   
      printf("请输入QQ号:");
      scanf("%s", stu.qq);
   
      printf("请输入Email地址:");
      scanf("%s", stu.email);
   
      printf("\n=====数据录入完毕=====\n\n");
   
      printf("当前结构体变量中的数据是:\n");
      printf("ID:%d\n", stu.id);
      printf("性别:%s\n", (stu.sex == 1) ? "男" : "女");
      printf("QQ号是:%s\n", stu.qq);
      printf("Email是:%s\n", stu.email);
   
      return 0;
}
email若输入123@qq.com无法打印是为什么

isdkz 发表于 2023-11-14 18:18:32

scanf函数在读取字符串时会遇到空格、制表符或换行符时会停止读取,因此在输入"123@qq.com"时,由于其中包含了'@'符号,scanf函数会将其视为输入结束的标志,从而导致无法正确读取整个邮箱地址。

为了解决这个问题,可以使用%s格式读取字符串时,可以在格式控制字符串中加入限定符,如"%31s"来限制最大输入长度为31个字符(不包括结尾的'\0'),从而避免超出数组边界的问题。因此,对于邮箱地址的输入,应该修改为:
scanf("%31s", stu.email);

这样就能够正确读取整个邮箱地址,而不会因为特殊字符而导致输入被截断。

妖娆乌龙茶 发表于 2023-11-14 18:23:59

isdkz 发表于 2023-11-14 18:18
scanf函数在读取字符串时会遇到空格、制表符或换行符时会停止读取,因此在输入"123@qq.com"时,由于其中包 ...

为什么我改了还是打印不出呢?
页: [1]
查看完整版本: 结构体课后作业