为了账号安全,请及时绑定邮箱和手机立即绑定

不过这里我很想搞清楚还可以怎样申明setw()? 谢谢了

不过这里我很想搞清楚还可以怎样申明setw()? 谢谢了

C
白猪掌柜的 2023-01-13 21:15:17

#include <iostream>
using std::cout;
using std::endl;
using std::string;
#include "iomanip"
#include <string>
int main()
{
string s1("hello"),s2("friend");
cout<<s1.length()<<','<<s2.length()<<endl;
if(s1>s2)
cout<<setw(10)<<s1<<","<<s2<<endl;
cout<<setw(17)<<s1+"&"+s2<<endl;
return 0;
}

运行的结果是error C2065: 'setw' : undeclared identifier。
如果把程序中的
using std::cout;
using std::endl;
using std::string;换成using namespace std;之后,程序运行结果就行了。又或者把程序里的setw(10)和setw(17)删掉之后,也行。

查看完整描述

3 回答

?
慕沐林林

TA贡献1789条经验 获得超9个赞

setw()是设置域宽的函数,默认是前面加空格右对齐。 
你的程序中的setw()丢了w,其他对着呢!细心检查就没有问题了!程序运行后名字左对齐占用8个字节不足在右边补空格;数据右对齐,占用10个字节不足左补空格 
想要看到底是如何填充的只要把输出语句改一下就可以了:cout<<setiosflags(ios::left)<<setfill('.')<<setw(8)<<names[i]<<resetiosflags(ios::left)<<setfill('/')<<setw(10)<<salary[i]<<endl; 这样名字中空的部分填充的是‘.’,数值中空的部分填充的是‘/’,原来具体是如何在那里添加的空格就很清楚了!

运行结果如下: 

王群平..//////1000 
欧阳居成////600.34 
张可..../////812.5 
刘家星..////1345.2 
朱江....////3345.1 
(网页格式原因,可能页面上对不齐,上机试试,结果出来就明白了)



查看完整回答
反对 回复 2023-01-15
?
jeck猫

TA贡献1662条经验 获得超7个赞

首先。cout、endl和cin这两个输入输出换行函数是 类std 里面的函数。
所以,在写程序时,若已声明使用std类命名空间,即写有using namespace std语句,则在该命名空间内,cout和cin的使用是合法的。
当程序没有注明std类的命名空间时,即没有写using namespace std语句,则若想使用cout、endl和cin作输入输出换行,那么就得 以调用类std函数的形式 来调用cout、cin、endl函数,即声明有using std::cout、using std::endl等等 (如同楼组main函数前声明的using std::cout;using std::endl;)。
或者在没有写有using namespace std语句的情况下,同时也没有using std::cout,using std::endl等语句,在若仍然想使用cout、cin等函数,则书写格式为std::cout(例如:std::cout<<s1.length()<<','<<s2.length()<<std::endl)。

关于设置域宽函数setw(int),是在iomainp头文件下使用的,即include<iomainp>。
后话:关于using std::string本人表示不解,貌似std类里面没有string这个函数。如果楼主的意思是使用string头文件下的各种函数(例如:s1.length() ),那么include<string>已经声明了。

查看完整回答
反对 回复 2023-01-15
?
慕的地8271018

TA贡献0条经验 获得超4个赞

cout<<std::setw(10)<<s1<<","<<s2<<endl;
cout<<std::setw(17)<<s1+"&"+s2<<endl;
这两句这样就可以了

查看完整回答
反对 回复 2023-01-15

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信