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
答案 0 :(得分:3)
各种不好的地方:
您正在尝试将字符串复制到未初始化的char*
(temp_array
已声明但从未初始化
atoi
需要指向整个字符串的指针,但是您传递的是一个字符(temp_array[j]
)
fann_input
是一个float
的数组(你说),但是你试图用int
s填充它(这是atoi
返回的)< / p>
您在C ++中使用C构造(指针,atoi
等)
你一遍又一遍地使用相同的命令行参数。
在这些方面做更多的事情。未编译的psudocode如下。错误处理留给你一个练习。
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!
}
答案 1 :(得分:1)
temp_array[i]
正是编译器告诉你的 - char
。 atoi()
将字符串作为唯一参数。您需要更正算法以将字符串传递给atoi()
。
答案 2 :(得分:1)
main
的原型为int main(int argc, char **argv)
,即使argv
应视为常量。temp_array
未初始化。atoi
。atoi
转换为int
,而不是转换为float
,尽管这不应该是{0,1}输入的问题。要将字符串s
中的个别数字转换为float
,请执行
float x = s[i] - '0';
(假设一个ASCII或EBCDIC兼容的字符集,其中1跟随0.我从来没有听说过一个不符合的字符集。)
答案 3 :(得分:0)
你能发布完整的代码吗?
你在循环外使用“i”,然后在for循环中重新定义它,然后看起来你正试图将字符串的每个CHARACTER转换成它自己的浮点数?
答案 4 :(得分:0)
对于一个哟,实际上并没有在temp_array中分配任何空间。这将为您提供一个很好的运行时错误。
以下代码行错误并为您提供错误:
fann_input[i] = atoi(temp_array[i]
当你想要一个字符串时,你将1个字符传递给atoi。
另外
strcpy(temp_array, argv[i + 1]);
在声明之前使用i。
答案 5 :(得分:0)
您尚未为temp_array
分配任何空间,因此当您strcpy
进入temp_array
时,您会写入随机位置。当它是一个字符数组时,你将atoi
视为一个字符串数组,然后尝试将单个字符转换为浮点数。 int
会转换为float
NOT转换为double
或atof
。您需要使用#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;
}
。
这样的C ++ - esque方式怎么样,更好的是使用流:
{{1}}