C++,输入ab 1 1 abc 1 1后,只输出ab 1 1后面的abc 1 1不输出

qq_31578219 2015-11-20 08:16:49
#include<iostream>
#include<string>
using namespace std;
struct Sales_data
{
string isbn() { return bookNo; }
Sales_data& combine(const Sales_data&);
double avg_price() const ;
string bookNo;
unsigned unit_sold = 0;
double revenue = 0.0;

};

double Sales_data::avg_price() const
{
if (unit_sold)
return revenue / unit_sold;
else return 0;

}
Sales_data& Sales_data::combine(const Sales_data &rhs)
{
unit_sold += rhs.unit_sold;
revenue += rhs.revenue;
return *this;
}
Sales_data add(const Sales_data&, const Sales_data&);
ostream& print(ostream &, const Sales_data&);
istream& read(istream &, Sales_data&);
istream& read(istream& is, Sales_data& item)
{
double price = 0.0;
is >> item.bookNo >> item.unit_sold >> price;
item.revenue = price*item.unit_sold;
return is;
}
ostream& print(ostream & os, Sales_data& item)
{
os << item.isbn() << " " << item.unit_sold << " "
<< item.revenue << " " << item.avg_price();

return os;
}
Sales_data add(const Sales_data & hs, const Sales_data& rhs)
{
Sales_data sum = hs;
sum.combine(rhs);
return sum;
}
int main()
{
Sales_data total;
cout << "请输入书号,销售量,价格";
if (read(cin, total))
{
Sales_data trans;
while(read(cin,trans))
{
if (total.bookNo == trans.bookNo)
total.combine(trans);
else
{
print(cout, total)<<endl;
total = trans;
}
}
print(cout, total);

}
else cout << "No data?!"<<endl;

}
...全文
116 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
CyberLogix 2015-11-23
  • 打赏
  • 举报
回复
楼上说的对,你可以调试下看是不是这个问题
gdreamlend 2015-11-23
  • 打赏
  • 举报
回复
因为你的程序并不会执行到 while函数后面的print(cout, total);这一句,除非在while加一句跳出的语句,不然一直会等待用户的输入。
// test.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include<string>
using namespace std;
struct Sales_data
{
string isbn() { return bookNo; }
Sales_data& combine(const Sales_data&);
double avg_price() const ;
string bookNo;
unsigned  unit_sold ;
double  revenue ;

};

double Sales_data::avg_price() const 
{
if (unit_sold)
return revenue / unit_sold;
else return 0;

}
Sales_data& Sales_data::combine(const Sales_data &rhs)
{
unit_sold += rhs.unit_sold;
revenue += rhs.revenue;
return *this;
}
Sales_data add(const Sales_data&, const Sales_data&);
ostream& print(ostream &, const Sales_data&);
istream& read(istream &, Sales_data&);
istream& read(istream& is,   Sales_data& item) 
{
double price = 0.0;
is >> item.bookNo >> item.unit_sold >> price;
item.revenue = price*item.unit_sold;
return is;
}
ostream& print(ostream & os, Sales_data& item)
{
os << item.isbn() << " " << item.unit_sold << " " 
<< item.revenue << " " << item.avg_price();

return os;
}
Sales_data add(const Sales_data & hs, const Sales_data& rhs)
{
Sales_data sum = hs;
sum.combine(rhs);
return sum;
}
int main()
{
	Sales_data total;
	cout << "请输入书号,销售量,价格";
	if (read(cin, total)) 
	{
		Sales_data trans;
		read(cin,trans);
		int t = 1;
		while(t)
		{
			if (total.bookNo == trans.bookNo)
			total.combine(trans);
			else
			{
			print(cout, total)<<endl;
			total = trans;
			}
			t = 0;
		}
		print(cout, total);
		
	}

	else cout << "No data?!"<<endl;

}
赵4老师 2015-11-23
  • 打赏
  • 举报
回复
乍看起来c++的cin、cout、ifstream、ofstream在输入、输出上比c的scanf、printf、fscanf、fprintf、fread、fwrite简单,不用格式控制符! 但是不用格式控制符,输入输出恰好是你期望的格式的时候好说;等到输入输出不是你期望的格式的时候,你就会觉得还是用格式控制符更方便、更靠谱。 摒弃cin、cout、ifstream、ofstream! 使用scanf、printf、fscanf、fprintf、fread、fwrite。
#include <stdio.h>
char s[]="123 ab 4";
char *p;
int v,n,k;
void main() {
    p=s;
    while (1) {
        k=sscanf(p,"%d%n",&v,&n);
        printf("k,v,n=%d,%d,%d\n",k,v,n);
        if (1==k) {
            p+=n;
        } else if (0==k) {
            printf("skip char[%c]\n",p[0]);
            p++;
        } else {//EOF==k
            break;
        }
    }
    printf("End.\n");
}
//k,v,n=1,123,3
//k,v,n=0,123,3
//skip char[ ]
//k,v,n=0,123,3
//skip char[a]
//k,v,n=0,123,3
//skip char[b]
//k,v,n=1,4,2
//k,v,n=-1,4,2
//End.

64,674

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧