В C ++, Ubunt 12.04 у меня есть файл с именем config.txt
который содержит user name
а также password
, у меня есть 2 public static string
переменные: USER
а также PASSWORD
, Это мой код:
// Read file from config
string text[2];
int count = 0;
while(!fin.eof()){
getline(fin,text[count]);
count++;
if(count == 2){
break;
}
}
CONNECTOR::USER = text[0];
CONNECTOR::PASSWORD = text[1];
string userAndPassword = CONNECTOR::USER + ":" + CONNECTOR::PASSWORD;
cout << CONNECTOR::USER << endl; // It's fine, right user: qsleader
cout << CONNECTOR::PASSWORD << endl; // ok, right password: 123456
cout <<"user and password: " << userAndPassword << endl; // It's weird text! Problem here!
Странный текстовый результат: :123456d password: qsleader
!! Это не то, что я ожидал! Но я не знаю, почему это произошло? Кто-нибудь может дать мне предложение? (Если я печатаю: cout << "user and password: qsleader:123456"
, результат хороший !!)!
Проблема создается, когда вы читаете значения. На самом деле, я предполагаю, что ваш файл содержит две позиции в двух разных строках. Кроме того, я предполагаю, что этот файл использует окончания строк Windows. Поэтому, когда вы читаете первый элемент, он читает qsleader\r
и затем останавливается, поскольку следующий извлеченный символ \n
извлечено, но не добавлено в строку.
Когда вы создаете userAndPassword
строка, это на самом деле qsleader\r:123456
, Это особый характер \r
это возвратный вагон Это заставляет курсор перейти к началу строки. Поэтому в последней строке вы сначала выводите user and password: qsleader
, затем вернитесь к первому столбцу и напишите :123456
, в результате чего :123456d password: qsleader
,
Вы устанавливаете userAndPassword
к адскому выражению с участием заданий. Я предполагаю, что ваше намерение было:
string userAndPassword = CONNECTOR::USER + ":" + CONNECTOR::PASSWORD