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

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

}

}

}

}

运行

因为此时输入缓冲区里面有字符,然后就直接赋给x了。

在printf("请输入欲插入的元素:")这句上面加上ffslush(stdin),将缓冲区清空,就可以了

已测试


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11896102.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存