C++指定输入域宽之setw&width
本文所属图书 > C++程序设计教程(第2版)
cin与cout的功能虽然不同,但它们有许多类似点,如都可以指定域宽。cin的输入域宽可以使用操作符setw指定,也可使用cin.width函数成员指定。cin在读入一个字符串时,不能根据字符数组的长度自动读入字符,如果用户输入过多的字符,超过了字符数组的长度,cin会将多余字符存储到该数组的后面,这就有可能覆盖其他变量。如果我们为其指定了输入域宽,就可解决这一问题。
下面定义了一个长度为10的字符数组,采用setw规定cin读入的字符不能超过数组的有效范围:
char word[10] ;
cin >> setw ( 10 ) >> word ;
同样也可以使用函数成员width指定输入域宽:
cin.width(10);
cin >> word ;
在上述两种情况下,指定的输入域宽都是10,cin将最多读取9个字符,因为数组最后一个位置存储字符’\0’。
下面的程序段说明了如何使用操作符setw和函数成员width:
char word [5] ;
cout << "请输入一个单词: " ;
cin >> setw(5) >> word ;
cout << "你输入的是:" << word << endl ;
运行结果:
请输入一个单词: Chinese [Enter]
你输入的是:Chin
也可以将上面的cin语句写成如下两行,结果完全相同:
cin.width(5);
cin >> word ;
cin将只读取4个字符到字符数组。如果没有指定输入域宽,cin会读取整个字符串"Chinese",这将产生溢出。关于cin的输入域宽,还要注意以下3点:
1)域宽只对与其相邻的下一个输入有效。
2)当cin遇到空字符时,将停止读入,空字符包括回车、空格和Tab键。
3)当cin读取一定的字符后,多余的字符将留在缓冲区中。例如,在上面的程序段中,由于只读取了4个字符,那么留在缓冲区中的字符是"ese"。