2014-10-06 4 views
1

Я не могу получить часть строки, хранящуюся в форме массива char.char array to int in C++

char code1 [12]={0}; 
char c; 
string compressed_file; 

Я беру данные из текстового файла, пока в нем не появится символ «,».

cout<<"Input compressed_file name"<<endl; 
cin>>compressed_file; 
string extracted_file; 
cout<<"Input extracted_file name"<<endl; 
cin>>extracted_file; 

ifstream input; 
input.open(compressed_file.c_str()); 
ofstream decompresscode; 
decompresscode.open(extracted_file.c_str()); 

input>>c; 
while(c != ',') 
{ 
    int i=0; 
    code1[i]=c; 
    cout<<code1[i]; 
    i++; 
    input>>c; 
} 
int old=atoi(code1); 
cout<<old; 

После печати значения кода1 здесь я получаю первую букву массива. Мой code1: , только для печати .

+0

Рассмотрите возможность использования 'std :: vector ' вместо вашего массива. Это позволяет использовать более длинный вход, и вам не понадобится переменная 'i', вместо этого выберите элемент' back() '. – tgmath

ответ

5

Вы всегда экономить в положении 0:

int i=0; // this need to be out of while loop 
code1[i]=c; 
cout<<code1[i]; 

Вы должны также добавить проверку на чтение при макс 12 символа (не переполнить code1). Код может быть чем-то вроде.

input >> c; 
int i = 0; 
while (c != ',' && i < sizeof(code1)) { 
    code1[i] = c; 
    cout << code1[i]; 
    i++; 
    input >> c; 
} 
2

Переместить int i = 0вне цикла. Как бы то ни было, вы каждый раз сбрасываете его на 0.

input>>c; 
int i=0; //move to here 
while(c != ',') 
{   
    code1[i]=c; 
    cout<<code1[i]; 
    i++; 
    input>>c; 
}