当前位置: 代码迷 >> C语言 >> 用scanf能否做到?
  详细解决方案

用scanf能否做到?

热度:572   发布时间:2007-07-29 16:18:32.0
用scanf能否做到?

要求:
从文件IN.dat读数据到一个数据结构数组
IN.dat文件如下:

代码如下:请填写read()函数内容,
#include<stdio.h>
#include<stdlib.h>
#define SIZE 100
//销售记录
struct sellrecord
{
char PID[4]; /*产品代码*/
char Name[10]; /*产品名称*/
float Price; /*单价*/
int Num; /*数量*/
float sum ; /*金额*/
};
//定义结构体数组 100条销售记录
struct sellrecord recod[SIZE] ;

//系统菜单
void menu()
{
printf("\n");
printf("\n");
printf("*************商业管理系统客户端************************\n");
printf("\n");
printf(" 功能菜单:\n");
printf("\n");
printf(" S.查看销售记录\n");
printf(" A.销售记录排序\n");
printf(" B.销售记录统计(价格、销售数量、销售金额)\n");
printf(" C.计算总销售金额\n");
printf(" D.形成简单的报表\n");
printf(" E.输出报表到控制台和文件OUT.DAT中\n");
printf(" F.传送报表到服务器端\n");
}
//查看销售记录,从文件中读并防到数组当中
void read()
{
char ch;
FILE *fp;
int i=0;
if((fp=fopen("IN.dat","r"))==NULL) /* 打开一个由argv[1]所指的文件*/
{
printf("not open");
exit(0);
}

printf("产品 单价 数量 金额\n");
while(!feof(fp))
{
fscanf(fp,"PID=%s,Name=%s,Price=%f,Num=%d,sum=%f;\n",recod[i].PID,recod[i].Name,&recod [i].Price,&recod[i].Num,&recod[i].sum);
printf("%s,%s,%f,%d,%f\n",recod[i].PID,recod[i].Name,recod[i].Price,recod[i].Num,recod[i].sum);
i++;
}

for(i=0;i<SIZE;i++)
{
printf("%s,%s,%f,%d,%f\n",recod[i].PID,recod[i].Name,recod[i].Price,recod[i].Num,recod[i].sum);
}

fclose(fp);
printf("\n");
getchar();
}

//主函数
void main()
{
menu();
char order;
while( order!='Q') /*接受命令*/
{
order=getchar();
switch(order)
{
case 'S':read();break;
case 'A':sort();break;
case 'T':testread();break;

}
}
}

搜索更多相关的解决方案: scanf  dat  include  系统  数据结构  

----------------解决方案--------------------------------------------------------

IN.dat 内容
PID=A010,Name=Peng,Price=1.50,Num=1,sum=;
PID=A007,Name=Peng,Price=1.50,Num=1,sum=;
PID=B001,Name=car,Price=1.50,Num=10,sum=;
PID=A003,Name=Peng,Price=1.50,Num=5,sum=;
PID=0035,Name=mice,Price=1.10,Num=56,sum=;
PID=A001,Name=Peng,Price=1.50,Num=2,sum=;
PID=0002,Name=book,Price=2,Num=2,sum=;
PID=A001,Name=Peng,Price=1.50,Num=11,sum=;
PID=0034,Name=snake,Price=23,Num=56,sum=;
PID=A001,Name=Peng,Price=1.50,Num=17,sum=;
PID=0003,Name=cup,Price=1.2,Num=3,sum=;


----------------解决方案--------------------------------------------------------
一般情况下不能
----------------解决方案--------------------------------------------------------

我们用代码说话

程序代码:

#include <stdio.h>

struct sellrecord
{
char PID[5]; /*产品代码*/
char Name[10]; /*产品名称*/
float Price; /*单价*/
int Num; /*数量*/
float sum ; /*金额*/
}x;

int main()
{
while(scanf(\"PID=%[^,],Name=%[^,],Price=%f,Num=%d,%*[^\n]%*c\",&x.PID,&x.Name,&x.Price,&x.Num)){
printf(\"PID=%s,Name=%s,Price=%.2f,Num=%d,sum=;\n\",x.PID,x.Name,x.Price,x.Num);
}
}


----------------解决方案--------------------------------------------------------
楼上请注意:数据在文件
----------------解决方案--------------------------------------------------------
回复:(卧龙孔明)楼上请注意:数据在文件中
你认为控制台读入和文件读入有区别吗?你知道设备独立性吗?你知道freopen函数吗?
----------------解决方案--------------------------------------------------------
有趣,有趣,C区好长时间没这种境象了
----------------解决方案--------------------------------------------------------
回复:(leeco)回复:(卧龙孔明)楼上请注意:数据在...
这也给你讲过去了,服啊~~~~
----------------解决方案--------------------------------------------------------

继承自UNIX系统的设计哲学,所有的硬件设备都被当作文件处理,C程序也会默认打开三个文件:stdin,stdio,stderr.
stdin默认定向到键盘,stdio定向到显示器,所以你可以用键盘做输入,但是键盘和别的文件一样,键盘也是文件,所以数据是从键盘读入还是数据文件读入是一样的,freopen函数可以把标准输入重定向到普通文件中,然后,scanf()函数就不从键盘读了,是从普通文件读了.sigh!我跟唐僧一样罗嗦了.

leeco
说的就是这个意思,我是唐僧所以说了一大堆.


----------------解决方案--------------------------------------------------------

这一贴可以说近几个月C区最有价值的贴子之一


----------------解决方案--------------------------------------------------------
  相关解决方案