Первый символ исчезает в ifstream - PullRequest
0 голосов
/ 18 ноября 2010

Почему этот код печатает символ без первого символа ?? Там написано ocalhost вместо localhost. Благодарен за помощь.

#include <winsock2.h>
#include <mysql/mysql.h>
#include <iostream>
#include <windows.h>
#include <fstream>
using namespace std;

int main ()  {    
int b = 0;
char * pch;
int stringLength = 0;
char textRead[50];
ifstream infile("config.ini", ios::in | ios::binary);            
if(!infile) {
            cout << "ERROR: config.ini not found!\n";
            system("pause");
            exit(0);
}

infile >> textRead;
stringLength = strlen(textRead);
pch=strchr(textRead,'"');
while(pch != NULL) {
          infile.seekg(pch-textRead-1);
          infile >> textRead;
          pch = strchr(pch+1,'"');
}
cout << textRead;
infile.close();

Ответы [ 2 ]

0 голосов
/ 18 ноября 2010

Я предполагаю содержание config.ini, поскольку вы его не предоставили, но, похоже, ifstream читает просто отлично. поставьте cout << textRead << endl; после вашего infile >> textRead;, чтобы проверить. Это то, что я использую для config.ini:

localhost = "foo"

Ваша логика с seekg и друзьями, похоже, нарушена. seekg не предназначен для поддержки анализа (в вашем случае пропуск кавычек); он предназначен для пропуска больших кусков файла, когда это необходимо, чтобы не тратить время на его чтение. Честно говоря, я не уверен, что вы делаете, поскольку pch-textRead-1 может быть -1, если первый символ - кавычка.

Другое дело, что infile >> textRead; не читает строку, она читает слово и отбрасывает начальные пробелы.

Для записи я пропустил

#include <winsock2.h>
#include <mysql/mysql.h>
#include <windows.h>

так как он не нужен.

0 голосов
/ 18 ноября 2010

Внутри вашего цикла while вы звоните:

  infile >> textRead;
  pch = strchr(pch+1,'"');

Когда вы пытаетесь запустить strchr во второй строке, он по-прежнему ссылается на предыдущую строку, которая была у вас в textRead НЕ в самом последнем извлеченном слове.

К сожалению, я не могу понять, что вы на самом деле пытаетесь сделать, поэтому я не могу предлагать, как это исправить.

...