2011-01-17 4 views
1

입력 된 문자를 처리하기위한 fgetc() - char by char. 이 함수는 입력 된 char의 정수 값을 반환합니다.입력에서 문자열로 캐스팅 문자

나는 이것들을 확인해야합니다

  • 각 도시가 30자를 초과 할 수 없습니다
  • 이 존재
  • "-"각 행 (대시) 문자 (두 도시의 전체 라인을 분할)을

31- 정수 배열과 문자 계산을위한 정수를 정의했습니다. 사용자가 "-"를 입력하면 문자열을 다른 배열 (실제로는 맵)에 저장해야합니다.

printf("Enter route (city - city):\n"); 

char town[31]; 
int character, charsOnRow = 0, i = 0; 
map<int, string> route; 

while (!feof(stdin)) { 
    character = fgetc(stdin); 
    if (character != '-' && character != '\n') { 
     if (charsOnRow < 30) { 
      town[charsOnRow] = character; 
      charsOnRow++; 
     } else { 
      printf("Invalid input.\n"); 
     } 
    } else if (route.size() == 0 && character == '\n') { 
     printf("Invalid input.\n"); 
    } else { 
     town[charsOnRow] = '\0'; 
     route[i] = town; 
     charsOnRow = 0; 
    } 
} 

그래서 입력의 예이 될 것이다 :

Syracuse - Utica 
Binghamton - Syracuse 
Binghamton - Utica 

내가 어떻게 그것을 수정하고 map<int, string>에 INT 배열을 저장 할 수 있어야한다?

+0

당신은 문자 포인터의 배열을 선언했다. 나는 그것이 당신이 원하는 것이라고 생각하지 않는다. – ThomasMcLeod

답변

2

기술적 오류 (잘못된 C++)와 논리 오류가 있습니다.

그 주된 원인은 char-by-char 입력을 수행하는 복잡성입니다. std::getline를 사용하여 읽기, 입력의 전체 라인을 유지하기 위해 std::string 변수를 선언 :

당신은 쉽게 I/O를 C++ 수준을 사용하여 찾을 수 있습니다.

건배 & HTH.,

0

town을 문자 배열로 선언해야합니다. 현재 문자 포인터의 배열로 사용하고 있습니다. 값이 < 0이면

변경

char * town[31]; 

char town[31]; 
0

에 실제로 오류 상태를 표시하기 위해 int를 반환는 fgetc, 당신은 그렇지 않으면 오류를했다, 당신은 그것을 간단하게 추가 할 수 있습니다 문자열은 다음과 같습니다.

std::string str; 
for(;;) 
{ 
    int ch = fgetc(fp); 
    if(ch < 0) 
    throw error(); 

    str += ch; 
} 

문자열을 채울 때 e지도 : 지도 [yourIntValue] = str;

또한 코드에서 : char * town [31];

이것은 포인터의 배열이며, 귀하의 경우에 맞습니다. char town [31];

지도에 추가하려면 다음을 사용하면됩니다. map [yourIntValue] = std :: string (town);

관련 문제