我正在尝试为类编写实验室但是在输出时我运行它只需要一次字符串,当它循环时跳过它让我输入它并转到下一个函数。我在那里放了一个fflush
,但它不起作用。我正在使用visual studio 2015
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#define size 3
struct empsal
{
char first[15];
int t1, t2, t3;
float avg;
char grade;
};
void load(struct empsal s[], int n)
{
int i;
for (i = 0; i<n; i++)
{
printf("Enter first name ");
gets_s(s[i].first);
printf("Enter 3 test scores ");
scanf("%d%d%d", &s[i].t1, &s[i].t2, &s[i].t3);
s[i].avg = (s[i].t1 + s[i].t2 + s[i].t3) / (float)3;
if (s[i].avg>70)
s[i].grade = 'p';
if (s[i].avg<70)
s[i].grade = 'f';
fflush(stdin);
}
}
void print(struct empsal s[], int n)
{
int i;
for (i = 0; i<n; i++)
{
printf("%s\n", s[i].first);
printf("%d %d %d\n", s[i].t1, s[i].t2, s[i].t3);
printf("Average is %f Grade is %c\n\n", s[i].avg, s[i].grade);
}
}
//sort
void sort(struct empsal s[], int n)
{
int i, j;
empsal t;
for (i = 0; i<n - 1; i++)
{
for (j = 0; j<n - 1; j++)
{
t = s[j];
s[j] = s[j + 1];
s[j + 1] = t;
}
}
}
//amount passed
void passed(struct empsal s[], int n)
{
int count = 0;
int i;
for (i = 0; i<n; i++)
{
if (s[i].grade = 'p')
count++;
}
printf("Number of passes %d\n\n", count);
}
void main()
{
empsal s[size];//array
load(s, size);
sort(s, size);
passed(s, size);
print(s, size);
}
输出:
输入名字ammar 输入3个测试分数90 90 90 输入名字输入3个测试分数80 90 100 输入名字输入3个测试分数90 60 80 传球次数3
90 60 80 平均值是76.666664等级是p
阿马尔 90 90 90 平均值为90.000000等级为p
80 90 100 平均值为90.000000等级为p
按任意键继续。 。
答案 0 :(得分:0)
按标准定义fflush(stdin);
调用undefined behavior。
引用C11
,第7.21.5.2章(强调我的)
如果
stream
指向输出流或最新的输出流 如果没有输入操作,fflush
函数会导致该流的任何未写入数据 要传递到主机环境以写入文件; 否则,行为是 未定义。强>
如果要清除剩余输入(和换行符)的输入缓冲区,请自行完成。一个简单的方法是
while (getchar() != '\n');