C语言产品信息打印与EOF输入处理及最高销量筛选问题咨询
C语言产品信息管理程序修复方案
修复后完整代码
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #define SIZE 6 void DisplayData_F3_60897(int Sales_60897[SIZE], int Quantity_60897[SIZE], float Cost_60897[SIZE]); int Analysis_F3_60897(int Sales_60897[SIZE], int Quantity_60897[SIZE], float Cost_60897[SIZE]); int main(void) { int i; int Sales_60897[SIZE]; int Quantity_60897[SIZE]; float Cost_60897[SIZE]; // 先将所有数组元素初始化为默认值-60897 for(i = 0; i < SIZE; i++) { Sales_60897[i] = Quantity_60897[i] = -60897; Cost_60897[i] = -60897.0f; } for(i = 0; i < SIZE; i++) { printf("\n___ID为%d的产品___\n",i); printf("请输入三个值(销量、库存、成本):"); int input_cnt = scanf("%d%d%f", &Sales_60897[i], &Quantity_60897[i], &Cost_60897[i]); // 输入不足3个(触发EOF或格式错误),按要求重置所有未正确输入的字段 if(input_cnt != 3) { // 当前产品全部重置为-60897 Sales_60897[i] = Quantity_60897[i] = -60897; Cost_60897[i] = -60897.0f; // 剩余未赋值元素全部设为-60897 for(int j = i+1; j < SIZE; j++) { Sales_60897[j] = Quantity_60897[j] = -60897; Cost_60897[j] = -60897.0f; } break; } } DisplayData_F3_60897(Sales_60897, Quantity_60897, Cost_60897); Analysis_F3_60897(Sales_60897, Quantity_60897, Cost_60897); return 0; } // 展示数组数据,要求全部使用while循环 void DisplayData_F3_60897(int Sales_60897[SIZE], int Quantity_60897[SIZE], float Cost_60897[SIZE]) { int i=0; printf("\n\nDisplayData_F3_60897 由学生Raghad创建 - 班级(F3)\n\n"); printf("销量数组"); printf("\n数组元素:\t"); while(i < SIZE){ if(Sales_60897[i] > 0) printf("%d ", Sales_60897[i]); i++; } i = 0; printf("\n\n库存数组"); printf("\n数组元素:\t"); while(i < SIZE){ if(Quantity_60897[i] > 0) printf("%d ", Quantity_60897[i]); i++; } i = 0; printf("\n\n成本数组"); printf("\n数组元素:\t"); while(i < SIZE){ if(Cost_60897[i] > 0) printf("%.3f ", Cost_60897[i]); i++; } } // 分析函数:输出最高销量产品信息,返回成本大于200的产品数量 int Analysis_F3_60897(int Sales_60897[SIZE], int Quantity_60897[SIZE], float Cost_60897[SIZE]) { int largest,i,N=200,count=0; char INFO[]= "Raghad_Sami_班级_F3_ID 60897"; printf("\n\n函数Analysis_F3_60897由学生 %s 创建\n\n",INFO); // 第一步:计算最高销量 largest = Sales_60897[0]; for (i = 0; i < SIZE; i++) { if (Sales_60897[i] > largest && Sales_60897[i] != -60897) { largest = Sales_60897[i]; } // 统计成本大于200的有效产品数量 if(Cost_60897[i] > N && Cost_60897[i] != -60897) { count++; } } printf("\t-------------------------------------------------------------------------\n"); printf("\t\t\t\t最高销量产品列表\n"); printf("\t-------------------------------------------------------------------------\n"); printf("\t\t产品编号\t 月销量\t\t 库存\t\t 成本\n"); // 第二步:遍历输出所有销量等于最高值的产品 for(i = 0; i < SIZE; i++) { if(Sales_60897[i] == largest && Sales_60897[i] != -60897) { printf("\t\t产品%d:\t %d\t\t %d\t\t %.3f\t\n",i, Sales_60897[i], Quantity_60897[i], Cost_60897[i]); } } printf("\t-------------------------------------------------------------------------"); printf("\n\t成本大于200的产品总数 = %d",count); printf("\n\t-------------------------------------------------------------------------"); return count; }
主要修复内容
- 输入逻辑修复:校验
scanf返回值是否为3,若输入不足3个(触发EOF/格式错误),将当前产品三个字段全部设为-60897,剩余未赋值的数组元素也统一设为-60897后终止输入 - 展示函数修改:按要求将所有遍历逻辑改为
while循环实现 - 分析函数逻辑修复:
- 修正最高销量计算逻辑,将最大销量初始化移到循环外,避免每次循环被重置
- 新增遍历逻辑,输出所有销量等于最高值的产品完整信息
- 仅统计有效产品(字段值不为
-60897)中成本大于200的数量
- 数组初始化修正:程序启动时先将所有数组元素初始化为默认值
-60897,避免默认值为0导致逻辑错误
内容的提问来源于stack exchange,提问作者Raghad Sami
相关产品推荐
相关产品推荐

