猿问

请问setw函数除了用标准命名空间using namespace std;申明,还有其他的申明吗?

#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)删掉之后,也行。。。
不过这里我很想搞清楚还可以怎样申明setw()? 谢谢了。

烙印99
浏览 348回答 3
3回答

慕虎7371278

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(网页格式原因,可能页面上对不齐,上机试试,结果出来就明白了)

繁星点点滴滴

首先。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>已经声明了。

繁花不似锦

也用using std::setw;就行啊#include <iostream>using std::cout;using std::endl;#include <iomanip>using std::setw;#include <cstring>using std::strcpy;using std::strcat;
随时随地看视频慕课网APP
我要回答