我对我的程序执行方式感到困惑.我正在循环以下过程:
1)从输入文件中获取课程的名称
2)输出课程名称的长度
问题是第一个值总是小于字符串的实际值.
我的第一个字符串包含13个字符(包括冒号),但nameOfClass.length()返回12.下一个字符串,字符数为16,实际上nameOfClass.length()返回16.
之后的每个值也返回预期值,它只是第一个返回预期值减去1的值.
这是(减少的)代码:
std::ifstream inf("courseNames.txt");
int numberOfClasses = 10;
string nameOfClass;
for (int i = 0; i < numberOfClasses; i++) {
std::getline(inf, nameOfClass,':');
std::cout << nameOfClass.length() << "\n";
}
Run Code Online (Sandbox Code Playgroud)
该文件看起来像这样(courseNames.txt):
Pre-Calculus:
Public-Speaking:
English I:
Calculus I:
...etc. (6 more classes)
Run Code Online (Sandbox Code Playgroud)
这就是我得到的:
12
16
10
11
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释这个.length()函数的行为吗?
你有问题,但你得出了错误的结论.std::getline读取但不输出分隔符,因此第一个结果确实是12.
它也不输出任何后续行的分隔符,为什么还有一个?好吧,看看之后是什么:.这是对的,新线!
Pre-Calculus:
^ a new line
Run Code Online (Sandbox Code Playgroud)
因此nameOfClass,除第一个字符串外,您的变量始终在其他字符之前存储额外的换行符.
修复很简单,只需在读取字符串后忽略换行符.
inf.ignore(); // ignore one character
Run Code Online (Sandbox Code Playgroud)
所以,不是第一个结果是错的,它是唯一正确的:)
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |