2011-03-24 4 views
0
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은 부동 소수점 배열입니다.명령 행에서 부동 소수점 배열로 문자열을 변환하는 중 문제가 발생했습니다.

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*)’ 

모든 아이디어를 다음 atoi 함수 라인에

, 나는 오류가?

문자의 각이 중 1 또는 0

답변

1
  1. main의 프로토 타입은 argv 일정하게 고려되어야한다하더라도, int main(int argc, char **argv)입니다.
  2. temp_array이 초기화되지 않았기 때문에 메모리의 임의 부분으로 복사하고 있습니다.
  3. atoi을 문자열 대신 개별 문자로 호출하려고합니다.
  4. atoiint으로 변환되고 float이 아니라 {0,1} 입력에 문제가되지는 않습니다.

float에 문자열 s에서 개별 숫자를 변환

float x = s[i] - '0'; 

(가정을 수행하려면 (1) 내가 들어 본 적이없는 0을 따르는 ASCII- 또는 EBCDIC 호환 문자 집합 문자 세트가 맞지 않습니다.

0

하면 전체 코드를 게시 할 수 있습니까?

루프 외부에서 "i"를 사용한 다음 for 루프에서 재정의하면 문자열의 각 문자를 자체 부동 소수점으로 변환하려고하는 것처럼 보입니까?

+0

아, probing index goof ups. 나는 이미 루프 안에 있다는 것을 잊었다. 내 모든 코드를 게시 할 것이지만, 200 라인을 넘는/p – NullVoxPopuli

+0

그러나, 그 문제를 해결하지 않습니다 – NullVoxPopuli

+0

좋아. 글쎄, 당신이하고 싶은대로 각 캐릭터를 변환하고 있습니까? 왜냐하면 atoi()는 전체 "문자열"(널 종료 문자 배열) – MarcB

1

temp_array[i]은 컴파일러가 말하는대로 - char입니다. atoi()은 유일한 매개 변수로 문자열을 사용합니다. 문자열을 atoi()으로 전달하려면 알고리즘을 수정해야합니다.

0

실제로는 temp_array에 공백을 할당하지 마십시오. 그러면 런타임 버그가 발생합니다.

다음의 코드가 잘못하고 당신에게 오류를 제공합니다 :

fann_input[i] = atoi(temp_array[i] 

당신은이 문자열을 예상 할 때 atoi 함수 1 개 문자를 전달하고 있습니다. 가 선언되기 전에

또한
strcpy(temp_array, argv[i + 1]); 

내가 사용하고 있습니다.

+0

입니다. 외부 루프에 있습니다. 나는 모든 코드를 게시하지 않았다. 톤이 있기 때문이다. – NullVoxPopuli

0

temp_array에 공백을 할당하지 않았으므로 strcpy에 임의의 위치에 쓸 수 있습니다. 문자 배열 인 경우 temp_array을 문자열 배열로 처리하고 단일 문자를 부동 소수점으로 변환하려고합니다. atoiint이 아니며 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; 
} 
3

모든 종류의 나쁜 여기의 :

  1. 을 당신은에있는 문자열을 복사하려고 초기화되지 않은 char* (temp_array은 선언되었지만 초기화되지 않음)

  2. atoi은 전체 문자열 bu 당신이 그것을 하나의 문자를 전달하는 T (temp_array[j])

  3. fann_inputfloat의 배열 (말)입니다하지만 당신은

  4. 당신은 (어떤 atoi 반환되는) int의 그것을 채우기 위해 노력하고있다 C++에서 C 구조체 (포인터, atoi 등) 사용

  5. 동일한 명령 줄 인수를 반복하여 사용하고 있습니다.

이 줄을 따라 더 많은 것을하십시오. 컴파일되지 않은 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! 
} 
관련 문제