如果语句被忽略(C ++)

时间:2017-04-12 18:08:51

标签: c++

我写了这段代码,看看一个数字中有多少位数。我假设用户使用的数字不超过四位数。出于某种原因,代码正在跳过if语句。我已经检查了与此相关的其他问题,但我没有遇到同样的错误。你能帮助我吗? 这是我写的代码:

#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");
    }
} 

1 个答案:

答案 0 :(得分: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,当你将它们转换为int时,你得到的是给定字符的ASCII值 - &gt; wiki。 为了完成这项工作,你可以试试这个:

int d1v2 = d1 - '0';

请注意,还有许多其他方法可以获取特定的数字值。 然后在printf中将显示的类型从char(%c)更改为int(%i)。 此时,您从字符串到int的转换应该有效,但有一个小问题。

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