2015-05-05 88 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轉換爲int。

+0

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

+0

您正在遍歷'text'的長度,但是您使用'c = napis.at從napis'獲取字符(ⅰ);'。這是一個錯字嗎? –

回答

2

一個char已經隱式轉換爲一個int

array[1][nood] = c; 

但是,如果你打算將焦炭'0'轉換成整數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不兼容。

看起來你只需要一個字符轉換爲一個數值,在這種情況下,你可以通過c-'0'取代atoi(c),這將給你0和9之間的數字。但是,如果你的文件包含十六進制數字,邏輯會變得更復雜一些,但不是很多。