2017-04-12 25 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は、char型のであり、ここで は、私が書いたコードです与えられた文字の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

関連する問題