2015-05-05 2 views
-4
char c; 
int array[10][10]; 
while(!plik.eof()) 
{ 
    getline(plik, text); 
    int string_l=text.length(); 
    character_controler=false; 
    for(int i=0; i<string_l; ++i) 
    { 
     c=napis.at(i); 
     if(c==' ') continue; 
     else if(character_controler==false) 
     { 
      array[0][nood]=0; 
      cout<<"nood: "<<nood<< "next nood "<<c<<endl; 
      array[1][nood]=atoi(c); // there is a problem 
      character_controler=true; 
     } 
     else if(c==',') character_controler=false; 
    } 
    ++nood; 
} 

Я понятия не имею, почему atoi() не работает. Ошибка компилятора:atoi() - от char до int

invalid conversion from `char` to `const char*` 

Мне нужно преобразовать c в междунар.

+0

http://en.cppreference.com/w/c/string/byte/atoi – Creris

+0

Вы выполняете итерацию по длине 'text', но вы получаете символ из' napis', используя 'c = napis.at (я); '. Это опечатка? –

ответ

2

char уже неявно раскладывается в int:

array[1][nood] = c; 

Но если вы имели в виду, чтобы преобразовать символ '0' в Int 0, вы должны воспользоваться тем, что C++ стандартные мандаты что цифры смежны. Из [lex.charset]:

В обоих источника и выполнения базовых наборов символов, значение каждого символа после 0 в приведенном выше списке десятичных цифр должно быть один больше, чем значение предыдущего.

Таким образом, вы просто должны вычесть:

array[1][nood] = c - '0'; 
+0

c не является 0. это может быть любое число –

+0

ОК, оно работает, спасибо –

+0

Я думаю, из памяти, что C++ не имеет мандата ASCII, хотя он задает последовательные символы для цифр. Итак, в то время как ваш 'ch - '0'' код прав, причина немного отлажена. – paxdiablo

0

atoi() ожидает const char*, который отображает на c string в качестве аргумента, вы передаете простой char. Таким образом, ошибка const char* представляет собой указатель, который несовместим с char.

Похоже, что вам нужно конвертировать только один символ в числовое значение, и в этом случае вы можете заменить atoi(c) на c-'0', который даст вам число от 0 до 9. Однако, если ваш файл содержит шестнадцатеричные цифры, логика становится немного сложнее, но не очень.

Смежные вопросы