2013-02-12 2 views
1

아래 코드는 특정 값을 갖고 싶습니다. 이벤트에서 나는 그것을 무시해야한다. 그러나 사용자가 [이 아닌 숫자를 삽입하는 경우 char을 int로 변환하고 else 함수의 rows에 삽입해야합니다. 이 숯불을 int로 변환하고 rows에 넣을 수 있습니까?문자열을 숫자로 변환하면

char ignoreChar; 

    is >> ignoreChar; 

    if(ignoreChar == '[') 
    { 
    } 

    else 
    { 
    rows = ignoreChar; 
    } 
+0

'rows'은 무엇입니까? 'int'? –

+0

'cstdlib' 만 사용 하시겠습니까? 그게 나를위한 ' –

+0

척의 가장 가까운 행은 이미 – mystycs

답변

0

한 문자 만 입력하는 경우 입력 할 수 있어야합니다.

int a = (int) whateverNameOfChar; 그래서 당신은해야하지만이 그것으로 변환됩니다

당신이 할 수있는, 그 숫자 값의 int'9'-'0' 중 하나입니다 알고 char을 변환하려면 빼기 '0'

0

하는 ASCII 번호입니다 단순히 다음을 수행하십시오.

rows = ignoreChar - '0'; 

숫자 문자는 표준에 의해 연속 값을 갖기 때문에 작동합니다.

char의 자릿수를 확인해야하는 경우 std::isdigit(ignoreChar) 또는 ignoreChar >= '0' && ignoreChar <= '9'의 간단한 조건을 사용할 수 있습니다.

1

당신이 ignoreChar가 숫자를 포함하는 것을 적절한 치료를 취할 경우, 당신은 쉽게 정수에이 방법을 변환 할 수 있습니다 특정 문자가 숫자를 나타냅니다 여부를 std::isdigit() 기능을 확인하는 데 사용할 수 있습니다

rows = ignoreChar - '0'; 

을 .

당신은 영감을 다음 샘플 프로그램을 수행 할 수 있습니다

#include <iostream> 

using namespace std; 

int main() 
{ 
    int i = -1; // Equivalent of your "rows" 

    char c; // Equivalent of your "ignoreChar" 
    cin >> c; 

    if (std::isdigit(c)) 
    { 
     i = c - '0'; 
    } 
    else 
    { 
     // Whatever... 
    } 

    cout << i; 
} 
0

하는 몇 가지 방법은 "사용자 입력을 읽기"할 수 있습니다.

어떤 것이 가장 잘 작동하는지는 입력 형식/스타일에 따라 조금씩 다릅니다. "선형 기반"과 "자유 형식"의 두 가지 형식을 고려할 수 있습니다. 자유형은 C 소스 코드처럼 입력 할 수 있습니다. 여기서 어디서든 개행 문자, 공백 등을 추가 할 수 있습니다.

라인 기반은 설정된 형식을 가지고 있습니다. 각 형식은 주어진 입력 집합을 포함하며 [반드시 동일한 수의 입력은 아니지만 줄의 끝은 해당 입력을 종료합니다.]

자유형 입력에서는 문자를 읽고 "이 특정 부분의 의미가 무엇인지"를 결정한 다음 수행 할 작업을 결정해야합니다. 경우에 따라 peek() 함수를 사용하여 다음 문자가 무엇인지 확인한 다음이를 기반으로 수행 할 작업을 결정해야 할 수도 있습니다.

라인 기반 입력에서 getline()을 사용하여 텍스트 줄을 읽은 다음 필요한 형식 (예 : stringstream)으로 분할합니다.

다음으로 코드 작성 (또는 기본 표준 변환 코드 사용)을 결정하거나 stream 함수를 사용하여 숫자를 파싱해야합니다. 더 많은 코드를 작성하면 "1234aqj"가 숫자가 아닌 오류를 처리하는 더 좋은 방법을 얻을 수 있지만 stream은 해당 문자열의 'a'에 도달하면 읽기를 멈추게됩니다.

0

코드 길이가 훨씬 길어서 죄송합니다. 다음은 기호를 다루는 "계승 계산"의 예제 코드입니다. 나는 다른 가능성을 보여 주려고 노력했다. 사용자가 기호를 입력하지 않고 Enter 키를 누르는 것만으로도 반응이 없다는 것을 지금 당면한 유일한 문제입니다. 첫 번째 게시물이기 때문에 가능한 글꼴, 서식 및 다른 말도 안되는 것에 유감입니다. MaxNum = 21은 부호없는 long long int 반환 형식에 대해 경험적으로 정의되었습니다.

내가 확인했습니다 같은 입력의 경우 : ABCDE 2. -7 22 21

#include "stdafx.h" 
#include <iostream> 
#include <iomanip> 
#include <cstdlib> 

unsigned long long int CalcFact(int p) 
    { return p == 0 || p == 1 ? 1 : p*CalcFact(p-1); } 

int main() 
{ 
int MaxNum = 21, HowMany = 0, MaxAttempts = 5, Attempts = 0; 
char AnyKey[] = "", *StrToOut = "The factorial of ", Num[3] = ""; 
bool IsOK = 0; 

while(!IsOK && Attempts++ < MaxAttempts) 
{ 
    std::cout << "Please enter an integer > 0 and <= 21: "; 
    std::cin.width(sizeof(Num)/sizeof(char)); 
    std::cin >> Num; 
    for(int Count = 0; Count < strlen(Num); Count++) 
     IsOK = isdigit(Num[Count]) ? true : false; 
    if(IsOK) 
    { 
     if(!(atoi(Num) >= 0 && atoi(Num) <= MaxNum)) 
      IsOK = false; 
     else 
     { 
      for(int Count = 0; Count <= MaxNum; Count++) 
       { 
       std::cout << StrToOut << Count << std::setfill('.') 
       << std::setw(Count < 10 ? 30 : 29) 
       << CalcFact(Count) << std::endl; 
       } 
     } 
    } 
    if(!IsOK && Attempts > 0) 
    { 
     std::cin.clear(); 
     std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 
    } 
} 
if(!IsOK) 
    return -1; 
else 
    std::cin >> AnyKey; 
return 0; 
} 
관련 문제