#include#include#include# define N 4struct ss { //说明结构体ss,清单主要内容销售员,产品,销售额 int no; //销售员编号 int product; //产品编号 float sales; //销售额};struct ss fz[N]; //定义全局结构体数组:fz,里面有四个元素,每一个元素都是结构体变量int main(void) { int a, b, s, i, n, j; printf("请选择你需要执行的功能\n\n");//输出提示信息 printf(" 如需录入销售员便条信息并保存请输入:1\n\n"); printf(" 计算每个人的每种产品的销售额请输入:2\n\n"); printf(" 按销售额对销售员从高到低排序请输入:3\n\n"); printf(" 按销售额对不同种类的产品排序请输入:4\n\n"); printf(" 如需增加、删除、修改便条信息请输入:5\n\n"); printf(" 如需退出程序或已完成您的需求请输入:6\n\n"); scanf("%d", &a); switch (a) { case 1: { FILE *fp; //定义文件指针 if ((fp = fopen("销售管理系统设计.txt", "w")) == NULL) { //打开文件 printf("文件无法打开\n"); exit(0); } for (i = 0; i < N; i++) { //输入便条信息 printf("请输入第%d条便条信息\n", i + 1); fflush(stdin); printf("请输入销售员的编号\n"); scanf( "%d", &fz[i].no); if (fz[i].no > N) { printf("无此销售员编号,请重新输入\n")
我想保存到文件里,可是好像不太行,我还想弄一个输入数据错误后返回原来的位置重新输入
为了保存到文件中,您可以在输入数据后使用 fprintf 函数将数据写入文件,例如:
fprintf(fp, "销售员编号: %d, 产品编号: %d, 销售额: %.2f\n", fz[i].no, fz[i].product, fz[i].sales);
对于输入数据错误后返回原来位置重新输入的问题,您可以在输入数据后使用 while 循环进行判断,如果输入的数据不符合要求,就可以重新输入。例如:
while (fz[i].no > N) {
printf("无此销售员编号,请重新输入\n");
scanf("%d", &fz[i].no);
}
这样就可以在输入错误时重新输入了。
请注意,在C语言中,scanf() 函数会把回车留在输入缓冲区中。如果在读取下一个输入之前不清空缓冲区,scanf() 函数将会读取到上一次输入留下的回车。这可能会导致程序出错,因此在使用 scanf() 函数之前,我们可以使用 fflush(stdin) 或者 gets() 函数来清空缓冲区。
不知道你这个问题是否已经解决, 如果还没有解决的话:
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^