题目
编写一程序P314.C实现以下功能
有一存储很多商品数据(每件商品的属性先后包括:品名、规格、单价(有小数位)、数量,数据的最长长度分别为20、10、6、5,在文件中以空格为分隔,每个商品的数据占一行)的文本文件,从键盘输入某种商品的品名,要求在文件中查找有无相应品名商品(可能有多条记录或没有),若有则在屏幕上显示出相应的商品的品名、规格、数量、单价(显示时,品名、规格、数量、单价之间使用逗号(,)作分隔,单价显示时只显示2位小数),若无则显示没有相应品名的商品。
被读文件sp.txt的内容如下,模拟待测试的商品数据。自行创建文件,并将该文件置于本程序文件夹下,注意文件名。
xuebi da 6.00 345
nongfuSQxianchengduo zhongxingA 4.392 57398
xuebi xiao 2.004 4567
xuebi da 6.003 456
编程可用素材:printf("Please input shang pin pin ming:")...、printf("\ncha zhao qing kuang:\n")...、printf("mei you shang pin :...。
程序的运行效果应类似地如图1和图2所示,图1中的Please input shang pin pin ming:xuebi中的xuebi和图2中的Please input shang pin pin ming:kele中的kele是从键盘输入的内容。
测试时输入
xuebi
或者
kele
题解
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
// 变量准备
FILE *fp;
char name[21];
char inputName[21];
char size[11];
float price;
int number;
int flag = 0;
printf("Please input shang pin pin ming:");
scanf("%s", inputName); // 遇到空格,tab,和回车结束串
// 开文件
fp = fopen("sp.txt", "r");
if (NULL == fp)
{
printf("file open error.\n");
exit(1);
}
// 处理数据
printf("\ncha zhao qing kuang:\n");
// 一直格式化读取文件到内存变量中,注意检测fscanf的返回值
while (fscanf(fp, "%s %s %f %d", name, size, &price, &number) == 4)
{
// 字符串比较,相同则有,有测立标并输出
if (strcmp(inputName, name) == 0)
{
flag = 1;
printf("%s,%s,%d,%.2f\n", name, size, number, price);
}
}
// 处理没有的情况
if (flag == 0)
{
printf("mei you shang pin :%s", inputName);
}
// 关文件
fclose(fp);
fp = NULL;
return 0;
}
知识点
- 文件开闭,打开后的指针非空检测
- 文件的格式化读取
- 文件读取的正确性检查
- 业务处理:字符串的匹配检查,使用库函数判断两个字符串是否相同
- 计数统计