c语言多线程导致代码跳过

Python020

c语言多线程导致代码跳过,第1张

百度知道

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])//成绩

}

}

}

}

运行

可以使用fseek函数,直接偏移指针的指向位置到第二行。

函数原型

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

}