2017-04-12 1 views
-1

이 코드를 작성하여 숫자에 숫자가 몇 개 있는지 확인했습니다. 나는 사용자가 4 자릿수를 넘지 않는 숫자를 사용한다고 가정하고있다. 어떤 이유로 든 코드에서 if 문을 건너 뜁니다. 이 문제와 관련된 다른 질문을 확인했지만 동일한 오류가 없습니다. 나 좀 도와 줄 수있어? 당신이이 코드 조각에서 무슨 일이 일어나고 있는지 알고있는 경우문이 무시되는 경우 (C++)

#include "stdafx.h" 

int main() 
{ 
    char d1; 
    char d2; 
    char d3; 
    char d4; 
    printf("Please enter a number with four or less digits:"); 
    scanf("%c%c%c%c", &d1, &d2, &d3, &d4); 
    printf("%c%c%c%c\n", d1, d2, d3, d4); 
    int d1v2 = d1; 
    int d2v2 = d2; 
    int d3v2 = d3; 
    int d4v2 = d4; 
    printf("%c%c%c%c\n", d1v2, d2v2, d3v2, d4v2); 
    int num = (d1v2 * 1000) + (d2v2 * 100) + (d3v2 * 10) + d4v2; 
    printf("%d", num); 
    int numv2 = num; 

    if (numv2 < 10) { 
     printf("Your number has 1 digit\n"); 
    } 
    else if (numv2 >= 10 && numv2 < 100) { 
     printf("Your number has 2 digits\n"); 
    } 
    else if (numv2 >= 100 && numv2 < 1000) { 
     printf("Your number has 3 digits\n"); 
    } 
    else if (numv2 >= 1000 && numv2 < 10000) { 
     printf("Your number has 4 digits\n"); 
    } 
} 
+5

디버거에서 무엇을 보여 줍니까? –

+2

'numv2'를 출력하고 그것이 기대 한 것이 맞는지 확인하십시오. – NathanOliver

+1

왜 변수 이름에 숫자가 너무 많습니까? –

답변

1

임 확실하지 : 여기 내가 쓴 코드입니다

int d1v2 = d1; 
int d2v2 = d2; 
int d3v2 = d3; 
int d4v2 = d4; 
printf("%c%c%c%c\n", d1v2, d2v2, d3v2, d4v2); 
int num = (d1v2 * 1000) + (d2v2 * 100) + (d3v2 * 10) + d4v2; 
printf("%d", num); 
int numv2 = num; 

D1, D2, D3 및 D4는 문자 년대는 때 당신은 int에 주어진 값을 캐스팅합니다. 주어진 문자의 ASCII 값 ->wiki입니다. 특정 숫자 값을 얻을 수있는 많은 다른 방법이 있다는 것을

int d1v2 = d1 - '0'; 

참고 : 는 예를 이것에 대한 시도 할 수 있습니다이 작업을합니다. 다음 printf 변경 표시 형식을 char (% c)에서 int (% i). 이 시점에서 string에서 int 로의 변환은 작동하지만 약간의 문제 만 있습니다.

예를 들어 누군가가 3 자리 숫자 만 입력하면 어떤 일이 일어나는지 생각해야합니다. scanf 후에 d4 변수에 저장된 내용을 알고 있습니까? 하지만이 내 친구는 다음 도전 과제로 남겨두기를 원합니다 .-

+1

'int d1v2 = d1 - "0";은 작은 따옴표를 사용해야합니다. – Steve

+0

@ 스티브 당신 말이 맞아, 미안해! –

+0

나를 도와 주셔서 감사합니다. 나는 한 가지 더 질문이있다. d4의 가치는 0입니까? – user7428275