使用getline()后出现错误空间
Erroneous space after using getline()
我正在编写一个程序来接受用户输入并将其写入一系列并行数组。我已经编写了代码,它进行了编译并做了它需要做的事情,但我一直在做一些错误修复,并意识到我的一些输出是不稳定的。
我的输入是:
ABC 123
Fall 2015
ABC 123
BAC 213
Fall 2015
BAC 213
CAB 321
Fall 2015
CAB 321
然而,我得到的是:
ABC 123
Fall 2015
ABC 123
BAC 213
Fall 2015
CAB 321
Fall 2015
CAB 321
我想我已经将代码的问题部分隔离到以下部分:
for ( ; loopnum < clnum; loopnum++) {
cout << "What was the name of the class?:n";
cin.ignore();
getline(cin, clnam[loopnum]);
cout << "What about the semester?:n";
getline(cin, crsem[loopnum]);
cout << "Now the course number:n";
getline(cin, crnum[loopnum]);
cout << "And the grade you received:n";
cin >> grade[loopnum];
我想我在这里的某个地方读到,使用getline()可能会导致输入后出现错误的空格,这似乎就是正在发生的事情。知道如何解决这个问题吗?
编辑:
实际上我自己解决了这个问题。我遇到的问题与我认为应该负责的代码段完全无关。相反,我一直在使用:
getline(infile, clnam[readplace]);
getline(infile, crsem[readplace]);
getline(infile, crnum[readplace]);
在设计用于将数组数据写入文件的单独函数中。改为:
infile >> clnam[readplace];
infile >> crsem[readplace];
infile >> crnum[readplace];
已解决问题。我不知道为什么会这样。该函数甚至没有在for循环中调用。
然而,这揭示了一个新的问题。在循环的第一次迭代中,getline调用似乎被当作cin处理。我的意思是,输入:
ABC 123
Fall 2015
ABC 123
结果:
ABC
123
Fall
然而,在我的循环的第二次迭代及以后的迭代中,一切都正常工作。
进行时
cin >> grade[loopnum];
输入末尾的换行符保留在输入缓冲区中。因此,在下一次迭代中,当您调用getline
时,您会得到一条空行,并且与其他输入异相。
基本上有两种解决方案:
- 使用
getline
将整行读取为字符串,然后使用其他方法获取整数(例如std::stoi
) - 像现在一样阅读数字,但在换行之前忽略其余部分
相关文章:
- 使用命名空间时出现多个定义错误
- 使用 make 编译 MPI,几个命名空间错误,例如"错误:未知类型名称'使用'?
- 从类型列表中递归删除重复项会导致编译器堆空间错误 (VS2017)
- 我该怎么做才能摆脱使用命名空间时的语法错误?
- C++ Visual Studio 错误:名称后跟'::'必须是类或命名空间名称 (DirectX 11)
- 在 C++ 中使用命名空间时出现"does not name a type"错误
- C++命名空间中调用 void 函数的错误
- 无法获取 wig %ignore 以忽略命名空间中的类,从而导致编译错误
- 为什么 Clang 在命名空间'std'中没有名为 'copy' 的成员给出错误
- 名称后跟"::"必须是类或命名空间错误,即使"::"后面是类名
- Catalina C++:使用<cmath>标头产生错误:全局命名空间中没有名为 'signbit' 的成员
- Visual C:命名空间范围错误或晦涩功能?
- 共享库中使用"使用命名空间"定义的符号错误
- 如何解决 comiler 错误:'v_bias'不是命名空间名称
- fstream.h 中的 STL 命名空间错误与 qmake/make.
- C++ ,错误:命名空间'std'中的'shared_ptr'未命名模板类型
- 错误:命名空间"std"中没有名为"invoke_result_t"的类型 GCC-7
- 为什么在匿名名称空间中定义的模板时,为什么内部链接错误
- boost :: filesystem :: space()报告错误的磁盘空间
- 使用getline()后出现错误空间