【发布时间】:2014-02-25 08:11:37
【问题描述】:
我写了一个使用getline()函数的程序,但是我不知道应该如何正确使用getline()。我在互联网上搜索过它,但我刚刚发现了一些关于将getchar() 与getline() 或cin.ignore() 一起使用的信息。我试过了,但都没有工作,我不知道问题出在哪里,为什么getline() 函数需要getchar() 或cin.ignore() 才能正常工作?
我的输入
2
Alderaan
1000.00 2000.00 3000.00
Dantooine
-1000.00 1000.00 1000.00
Circarpous Major
-500.00 500.00 -500.00
Y’Toub
-500.00 -500.00 500.00
这是我的代码:
#include <cmath>
#include <string>
#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
long long int x, y, z, x1, y1, z1;
int n;
cin >> n;
string s, p;
while (n--)
{
getline(cin, s);
cin >> x;
cin >> y;
cin >> z;
cin.ignore();
getline(cin, p);
cin >> x1;
cin >> y1;
cin >> z1;
cin.ignore();
printf("%s to %s: %.2f\n", s.c_str(), p.c_str(), sqrt(pow(x - x1, 2) + pow(y - y1, 2) + pow(z - z1, 2)));
}
}
【问题讨论】:
-
当您说
std::getline()无法正常工作时,您究竟是什么意思?我很确定std::getline()确实工作正常!但是请注意,您始终需要检查您的输入操作是否成功。此外,您的问题(我怀疑我知道您的问题是什么)实际上 回答了 无数次 次! (提示:您正在混合格式化和未格式化的输入) -
当然它工作正常,但我不知道如何使用它,这个函数是否需要像 getchar() 这样的其他函数才能工作???
-
嗯,关于寻找解决方案要学习的一件事就是准确地表述问题所在!您说它不起作用,但没有说明效果是什么以及您的预期是什么。说明输入并不能真正描述什么不起作用。
-
@Dietmar Kühl 很抱歉我编辑了我的问题
-
到目前为止,还没有描述。有一些无关紧要的提及您尝试解决问题的方法(“我在网上搜索...”),一些代码和一些输入。您没有说明 what 该程序的用途,也没有说明它是如何 失败的。是的,我确实知道它是如何以及为什么会失败(当读取上面的输入时,第二个字符串是空的并且值停止更改)但这不能让您解决下一个问题。