仅使用字符串类型的C++/ofstream 这是我的密码:

仅使用字符串类型的C++/ofstream 这是我的密码:,c++,ofstream,C++,Ofstream,问:为什么如果我输入一个数字而不是字符串,我的程序不会说我出错 编辑:我怎样才能达到我的目的?我想让它出错!当我输入的类型不是类型字符串时。数字可以表示为字符串,即字符串可以包含数字字符。例如: std::string my_string("42"); std::cout << my_string[0]; // prints 4 std::cout << my_string[1]; // prints 2 因为数字是有效字符串。数字可以表示为字符串,因此std::ifs

问:为什么如果我输入一个数字而不是字符串,我的程序不会说我出错


编辑:我怎样才能达到我的目的?我想让它出错!当我输入的类型不是类型字符串时。

数字可以表示为字符串,即字符串可以包含数字字符。例如:

std::string my_string("42");
std::cout << my_string[0]; // prints 4
std::cout << my_string[1]; // prints 2

因为数字是有效字符串。

数字可以表示为字符串,因此std::ifstream::operator>>采用直观的方法:它将任何非空白字符序列视为字符串。这也包括十进制数字


不相关,但不必为名称创建多余的nom_fich临时变量,只需编写流fichierdata.dat

您不能输入数字。您可以输入可以解释为数字的字符序列,但该序列仍然是字符。这些字符是getline读取的。

因为字符串123与字符串abc或字符串def999一样有效


至于我怎样才能达到我的目的呢?你必须向我们解释你的目的是什么,因为你自己承认,你自己的代码没有描述这个目的,因此我们无法从中提取你的目的。

将数字作为字符串来读肯定会奏效:数字只是表示为一个字符序列。如果您想让流尝试读取一个数字,但如果它没有得到一个数字,则会失败,您可以使用不同的类型来读取,例如:

int number;
if (std::cin >> number) {
    std::cout << "ERROR: read a number: " << number << '\n';
}
else if (std::cin.clear(), std::getline(std::cin, name)) {
    std::cout << "read a name: " << name << '\n';
}

读取一个数字失败后,流的状态被清除,取而代之的是尝试读取一个名称。有一个微妙的问题,因为int的格式化输入将跳过前导空格,而std::getline不会跳过空格。如果跳过前导空格有问题,只需在尝试读取int之前使用操纵器std::noskipws。

数字可以表示为字符串,因此操作符>>采用直观的方法:它将任何非空白字符序列视为字符串。这也包括数字。另外,您可以只编写stream fichierdata.dat;而不是创建多余的nom_fich变量;。OP使用std::getline而不是运算符>>。我经常使用数字的短语文本表示。
int number;
if (std::cin >> number) {
    std::cout << "ERROR: read a number: " << number << '\n';
}
else if (std::cin.clear(), std::getline(std::cin, name)) {
    std::cout << "read a name: " << name << '\n';
}