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])//成绩
}
}
}
}
运行
函数原型
int fseek(FILE *stream, long offset, int fromwhere)函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere为基准,偏移offset(指针偏移量)个字节的位置,函数返回0。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置,函数返回一个非0值。
可以使用fgets函数,遇到需要跳过的行时,直接读取该行并弃舍该行字符值。
函数原型
char *fgets(char *buf, int bufsize, FILE *stream)
参数
*buf: 字符型指针,指向用来存储所得数据的地址。
bufsize: 整型数据,指明存储数据的大小。
*stream: 文件结构体指针,将要读取的文件流。
因为我们在输入第一组的2个数时会输入“回车”,这个回车会被你第二个“scanf”函数捕获,你只要在第二个“scanf”语句前加一句“getchar()”就行了,代码如下:#include
"stdio.h"
int
main(){
int
a,b
char
operator
printf("please
input
two
number:")
scanf("%d
%d",&a,&b)
printf("please
input
operater(+
or
-):")
getchar()
scanf("%c",&operator)
switch(operator)
{
case
'+':
printf("%d+%d=%d\n",a,b,a+b)break
case
'-':
printf("%d-%d=%d\n",a,b,a-b)break
default
:
printf("input
error\n")
}
return
0
}