2017-04-12 99 views
-1

我编写了这段代码来查看数字中有多少个数字。我假设用户使用不超过四位数字的号码。出于某种原因,代码正在跳过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)。 在这一点上,你从字符串到int的转换应该可以工作,但有一个小问题。

你应该多想想当有人输入例如3个数字时发生了什么。你知道什么是scanf后存储在d4变量? 但是,这个我的朋友,我宁愿留下你作为下一个challange :-)

+1

'int d1v2 = d1 - “0”;'应该使用单引号。 – Steve

+0

@你说得对,对不起! –

+0

谢谢你帮助我。我还有一个问题。 d4的值是0吗? – user7428275