【发布时间】:2015-03-07 17:40:59
【问题描述】:
如果我有
#include <iostream>
#include <ncursesw/curses.h>
#include <fstream>
#include <string>
using namespace std;
int main(){
initscr();
curs_set(0);
int row, col;
getmaxyx(stdscr, row, col); //forgot these originally
string name, server, displayanswer;
ifstream nameserverinput("nameserver.txt");
if(!nameserverinput.is_open()){
erase();
string error = "nameserver.txt could not be found. Exiting...";
mvprintw(row/2 - 1, (col-error.size())/2, error.c_str());
refresh();
sleep(5);
return 0;
}
nameserverinput >> name >> server >> displayanswer;
nameserverinput.close();
erase();
string error = (name + " (" + server + ") " + "is not in a game.");
mvprintw(row/2 - 1, (col-error.size())/2, error.c_str());
refresh();
}
我的输出完全没问题,一行中间的所有内容都很好。 nameserver.txt 的示例是:
imaqtpie
na
y
如果我用 getline(nameserverinput, name) 替换 nameserverinput >> name 像这样:
getline(nameserverinput, name)
nameserverinput >> server >> displayanswer;
那么我的输出是这样的:
(NA) is not in a game. imaqtpie
由于某种原因,发送过去“名称”的所有内容都会发送到行首。我猜这可能是 getline() 在“名称”的末尾推了一些东西,这 ncurses mvprintw 输出并没有享受太多。除此之外,我想不出问题是什么,因为 getline() 应该与 >> 运算符几乎相同。我尝试用 getline() 替换所有内容无济于事。我需要“名称”来包含空格的可能性,那么我的其他选择是什么? (在没有 ncurses 的情况下尝试这个,而是使用 cout
【问题讨论】:
-
我猜这可能是 getline() 在 "name" 末尾添加了一个转义字符,如 \n - 不,它没有,并且阅读了一些 @ 987654321@ 在您不知道其行为的函数上是个好主意。