17.7复习题
1.iostream文件在C++I/O中扮演何种角色?
iostream定义了用于管理输入和输出的类、常量和操作符,这些对象管理用于处理I/O的流和缓冲区。
该文件还创建了一些标准对象(cin、cout、cerr和clog以及对应的宽字符对象),用于处理与每个程序相连的标准输入和输出流。
2.为什么键入数字(如121)作为输入要求程序进行转换?
输入的是字符。输入121将生成3个字符,每个字符都由一个1字节的二进制码表示。
要将这个值存储为int类型,则必须将这3个字符转换为121值的二进制表示。
3.标准输出与标准错误之间有什么区别?
它们连接不通的流,如果重定向标准输出,不会影响标准错误
4.为什么不为每个类型提供明确指示的情况下,cout仍能够显示不同的C++类型?
ostream已经重载了各种基础类型的标准输出。
5.输出方法的定义的哪一个特征让您能够拼接输出?
返回ostream&
6.编写一个程序,要求用户输入一个整数,然后以十进制、八进制和十六进制显示该整数。在宽度为15个字符的字段中显示每种形式,并将它们显示在同一行上,同时使用C++数基前缀。
//
// main.cpp
// HelloWorld
//
// Created by feiyin001 on 16/12/30.
// Copyright (c) 2016年 FableGame. All rights reserved.
//
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int a = 0;
cin >> a;
cout.setf(ios_base::showbase);
cout << dec << setw(15) << a << oct << setw(15) << a << hex << setw(15) << a << endl;
return 0;
}
7.编写一个程序,请求用户输入下面的信息,并按下面的格式显示它们:
Enter your name: Billy Gruff
Enter your hourly wages: 12
Enter number of hours worked: 7.5
First format:
Billy Gruff: $ 12.00: 7.5
Second Format:
Billy Gruff :$12.00 :7.5
//
// main.cpp
// HelloWorld
//
// Created by feiyin001 on 16/12/30.
// Copyright (c) 2016年 FableGame. All rights reserved.
//
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
int main()
{
string name;
double wages;
double hours;
cout << "Enter your name: ";
getline(cin, name);
cout << "Enter your hourly wages: ";
cin >> wages;
cout << "Enter number of hours worked: ";
cin >> hours;
cout << "First format:" << endl;
cout.setf(ios::showpoint);
cout.setf(ios::fixed, ios::floatfield);
cout.setf(ios::right, ios::adjustfield);
cout << setw(30) << name << ": $";
cout << setprecision(2) << setw(10) << wages << ":";
cout << setprecision(1) << setw(5) << hours << endl;
cout << "Second format:" << endl;
cout.setf(ios::left, ios::adjustfield);
cout << setw(30) << name << ": $";
cout << setprecision(2) << setw(10) << wages << ":";
cout << setprecision(1) << setw(5) << hours << endl;
return 0;
}
要想打印小数点,必须是浮点型才行,int是无论怎么设置,都不受影响的。
8.对于下面的小程序:
//rq17-8.cpp
//
// main.cpp
// HelloWorld
//
// Created by feiyin001 on 16/12/30.
// Copyright (c) 2016年 FableGame. All rights reserved.
//
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
char ch;
int ct1 = 0;
cin >> ch;
while (ch != 'q')
{
ct1++;
cin >> ch;
}
int ct2 = 0;
cin.get(ch);
while (ch != 'q')
{
ct2++;
cin.get(ch);
}
cout << "ct1 = " << ct1 << "; ct2 = " << ct2 << "\n";
return 0;
}
如果输入如下,该程序将打印什么内容?
I see a q<Enter>
I see a q<Enter>
其中,<Enter>表示回车键。
ct1 = 5; ct2 = 9
9.下面的两条语句都读取并丢弃行尾之前的所有字符(包括行尾)。这两条语句的行为在哪些方面不同?
while(cin.get() != '\n')
continue;
cin.ignore(80,'\n');
第一个语句,会一直读取到\n位置
第二个语句,如果读到80个字符,还没有\n就会停止了。