c语言 如下源码,运行的时候 有些语句直接被跳过,...展开
jimmy14888888
TA获得超过1316个赞
关注
成为第16位粉丝
那是因为你读入单个字符的方式不对,
纯粹的scanf("%c"),或者getchar()都会把你上一次输入的回车符(\n)读入了。
然后你就读入了一个回车符。
正确的方式是读入到一个字符串,再取字符串首位。
代码:
//老师 学生 信息放在一起 并打印出来
#include<stdio.h>
union condition
{
int score[4]//学生4科成绩
char situation[40]//教师工作情况
}
struct personal
{
int num//编号
char name[10]//姓名
char sex//性别
char kind//筛选 t 或 s
union condition change
}
struct personal information[2]//创建两个个人信息表
void main()
{
int i, j
for (i = 0 i < 2 i++)
{
printf("Please input num:") //编号
scanf("%d", &information[i].num)
char sex[16]
printf("Enter the M or the W:")//性别
scanf("%s", sex)
information[i].sex = sex[0]
printf("Enter the name:") //名字
scanf("%s", information[i].name)
char ts[16]
printf("please change t or s:") // t 或 s
scanf("%s", ts)
information[i].kind = ts[0]
if ('t' == information[i].kind)// t 为教师工作情况
{
printf("Please enter the situation :")
scanf("%s", information[i].change.situation)
}
else // s为 学生成绩
{
for (j = 0 j < 4 j++)
{
printf("please enter no.%d score:", j)
scanf("%d", &information[i].change.score[j])
}
}
}
for (i = 0 i < 2 i++) //打印以下
{
printf("%d\n", information[i].num)//编号
printf("%s\n", information[i].name)//姓名
printf("%c\n", information[i].sex)//性别
if ('t' == information[i].kind)
{
printf("%s", information[i].change.situation)//工作情况
}
else
{
for (j = 0 j < 4 j++)
{
printf("%d", information[i].change.score[j])//成绩
}
}
}
}
运行
因为此时输入缓冲区里面有字符,然后就直接赋给x了。在printf("请输入欲插入的元素:")这句上面加上ffslush(stdin),将缓冲区清空,就可以了
已测试
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)