我正在练习课程,我正在尝试允许用户使用空格输入其名称。当用户输入空格时,我的输出是"垃圾"。是否可以将get.line函数与类一起使用?这就是我所拥有的。
IShellFolder
答案 0 :(得分:2)
改变这个:
cin>>obj.name;
cin.getline(obj.name);
为:
std::getline (std::cin, obj.name);
由manual指定。您可以省略std::
,因为您已经在使用命名空间标准。
示例运行:
Enter the Name:
samaras
Enter the number:
1
samaras: 1
但请注意,类的数据成员通常位于私有范围,公共函数可以应用于它们。此外,正如Thomas Matthews所说:“这打破了数据隐藏和封装规则。我强烈建议将读取数据成员的功能放在类中。”
您可能希望查看重载运算符>>
。但是,如果您觉得自己没有完成对课程的理解,我建议将其留待以后使用。
答案 1 :(得分:0)
你说你想要返回用户的全名,所以我创建了一个简单的函数,它使用姓氏返回一个连接值。但如果你想要,你应该通过元组或配对来提升功能。
#include <iostream>
#include <string>
using namespace std;
class person
{
//Access Specifier
public:
string firstname;
string lastname; //Member Vairable Decleration
int number; //Member Function Decleration
};
string returnCompleteName(string firstname, string lastname)
{
return firstname + " " + lastname;
}
//Main function.
int main()
{
//Object creation from class.
person obj;
//Get input Values for object Variables
cout<<"Enter the FirstName: \n";
cin>>obj.firstname;
cout<<"Enter the LastName: \n";
cin>>obj.lastname;
cout<<"Enter`enter code here` the number:\n";
cin>>obj.number;
//Show the output
cout<< returnCompleteName(obj.firstname,obj.lastname) <<": " << obj.number << endl;
return 0;
}
答案 2 :(得分:0)
我使用指定的答案也遇到了同样的问题,因为我没有意识到我的文件是用UCS-2编码的。这有助于:How to read a UCS-2 file?
宽流使用宽流缓冲区来访问文件。广泛的 stream buffer从文件中读取字节并使用其codecvt facet 将这些字节转换为宽字符。默认的codecvt方面是 std :: codecvt在。之间进行转换 wchar_t和char的本机字符集(即,像mbstowcs() 一样)。
你没有使用本机字符集,所以你想要的是一个 codecvt facet将UCS-2读取为多字节序列并将其转换 广泛的人物。
#include <fstream> #include <string> #include <codecvt> #include <iostream> int main(int argc, char *argv[]) { wifstream fin("en.rc", std::ios::binary); // You need to open the file in binary mode // Imbue the file stream with a codecvt facet that uses UTF-16 as the external multibyte encoding fin.imbue(std::locale(fin.getloc(), new std::codecvt_utf16<wchar_t, 0xffff, consume_header>)); // ^ We set 0xFFFF as the maxcode because that's the largest that will fit in a single wchar_t // We use consume_header to detect and use the UTF-16 'BOM' // The following is not really the correct way to write Unicode output, but it's easy std::wstring sLine; std::wstring_convert<std::codecvt_utf8<wchar_t>, wchar_t> convert; while (getline(fin, sLine)) { std::cout << convert.to_bytes(sLine) << '\n'; } }
答案 3 :(得分:0)
使用十六进制编辑器打开您正在阅读的文件,并检查在可见数据之前是否有一些字节。最后我删除了这些字节,用 20 个十六进制数据覆盖它们,这意味着空间,然后用编辑器清理文件。