每行的格式是:date\ttime\tstore name\titem description\tcost\t付款方式我们需要元素2(商店名称)和4(成本),我们需要将它们写入标准输出,用制表符分隔
我想知道每家商店的总销售额。我通过手动输入数据进行了检查,但在mapreduce上似乎不起作用。我希望找出问题及其解决方案,如果可能的话,建议避免此类问题再次发生,因为我是从udacity教程中自学的。
制图器
# include<stdio.h>
main()
{
size_t p;
int i,j,k;
char *A,*a;
char *store,*cost;
while(getline(&A,&p,stdin) != -1)
{
i=0,j=0,k=0;
for(a=A;*a!='\n'&& i<=5;a++)
{
if(*a=='\t')
{
i++;
if(i==2)
store=a+1;
if(i==4)
cost=a+1;
*a='\0';
}
}
if(i==5)
printf("%s\t%s",store,cost);
}
}
减速机
# include<stdio.h>
# include<string.h>
main()
{
size_t p;
int i,j,k,flag=0;
char *A,*a;
char storenow[100]={0},*sval,storepre[100]={0};
double val,valpre;
while(getline(&A,&p,stdin) != -1)
{
strcpy(storepre,storenow);
valpre=val;
a=A;
while(*A!='\t')
A++;
*A='\0';
A++;
sval=A;
sscanf(sval,"%lf",&val);
strcpy(storenow,a);
if(!(strcmp(storenow,storepre))||!flag)
val=val+valpre;
else
printf("%s\t%lf\n",storepre,valpre);
flag=1;
}
printf("%s\t%lf\n",storenow,val);
}
1条答案
按热度按时间4ioopgfo1#
不管算法有什么问题,程序都使用
getline()
错了。输出指针应初始化为
NULL
在调用之前,否则它将被解释为已分配。你应该free()
在某个点的线。我还认为,通过使用
sscanf()
(甚至scanf()
直接在输入流上),而不是执行自己的标记化循环。但是,如果您真的需要支持任意长的输入行,这可能会有问题。