[英]Trouble converting string from commandline to array of floats
char * temp_array;
strcpy(temp_array, argv[i + 1]);
for(int j = 0; j < 8; j++)
{
fann_input[j] = atoi(temp_array[j]);
printf("%f\n", fann_input[j]);
printf("o%c\n", temp_array[j]);
}
fann_input是一個浮點數組。
在atoi行上,出現錯誤:
src/main.cpp: In function ‘int main(int, const char**)’:
src/main.cpp:117: error: invalid conversion from ‘char’ to ‘const char*’
src/main.cpp:117: error: initializing argument 1 of ‘int atoi(const char*)’
有任何想法嗎?
每個字符都是1或0
這里的各種壞:
您正在嘗試將字符串復制到未初始化的char*
(已聲明temp_array
但從未初始化)
atoi
需要一個指向整個字符串的指針,但是您要向其傳遞單個字符( temp_array[j]
)
fann_input
是一個float
數組(您說),但是您嘗試用int
填充它(這是atoi
返回的)
您正在C ++中使用C構造(指針, atoi
等)
您一遍又一遍地重復使用相同的命令行參數。
按照這些思路做更多的事情。 未編譯的偽代碼如下。 錯誤處理留給您練習。
for( int j = 0; j < 8; ++j )
{
stringstream ss;
ss << argv[j+1]; // copy cmd line param to stream
float val = 0.0f;
ss >> val; // convert to a float
fann_input[j] = val; // save it!
}
temp_array[i]
正是編譯器告訴你它是-個char
。 atoi()
將字符串作為唯一參數。 您需要更正算法,才能將字符串傳遞給atoi()
。
main
的原型是int main(int argc, char **argv)
,即使argv
應該被視為常量。 temp_array
未初始化。 atoi
。 atoi
轉換為int
,而不是float
,盡管{0,1}輸入應該不是問題。 要將字符串s
的單個數字轉換為float
,請執行
float x = s[i] - '0';
(假設1后面跟隨0的ASCII或EBCDIC兼容字符集。我從未聽說過不正確的字符集。)
您可以發布完整的代碼嗎?
您在循環外使用“ i”,然后在for循環中重新定義它,然后看起來您正試圖將字符串的每個CHARACTER轉換為其自己的float?
對於您來說,實際上並沒有在temp_array中分配任何空間。 那會給你一個很好的運行時錯誤。
以下代碼行是錯誤的,並給您帶來錯誤:
fann_input[i] = atoi(temp_array[i]
您需要將1個字符傳遞給atoi時需要一個字符串。
也
strcpy(temp_array, argv[i + 1]);
在聲明之前使用i。
您還沒有分配任何空間temp_array
所以,當你要寫信給隨機位置strcpy
進去。 當將temp_array
為字符數組時,您temp_array
視為字符串數組,然后嘗試將單個字符轉換為浮點數。 atoi
將轉換為int
不是float
或double
。 您需要使用atof
。
像這樣的C ++風格的方法呢,甚至更好的方法是使用流:
#include <iostream>
#include <string>
#include <vector>
int main(int argc, char* argv[])
{
typedef std::vector<std::string> Args;
Args args(&argv[1], &argv[argc]);
std::vector<double> results;
for(Args::const_iterator i = args.begin(); i != args.end(); ++i)
{
results.push_back(atof(i->c_str()));
}
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.