if..else if..else循环未正确执行

时间:2016-01-17 19:24:10

标签: c if-statement

我正在编写一个程序,要求用户输入一个三位数字,然后将每个数字加上6,模数为10.

例如,如果我输入619,我将收到的输出是275。

我唯一的问题是当我输入100时,我会收到1360,而不是像我应该的那样766。

这是我到目前为止所做的:

int main()
{
    //declaring variables
    int numbers, newNumbers, input;
    int newInput = 0;

    //User input
    printf("Enter a three-digit number: ");

    //reads input (%d) and stores it as "input" (&input)
    scanf("%d", &input);

    //check if input is 3 digits. If not, print message
    if(input < 100 || input > 999)
    {
        printf("Invalid input, the number must be between 100 and 999 \n");
        return 0;
    }

    //loops program until input is 0
    while(input > 0)
    {
        //modulus 10
        numbers = input % 10;
        //adds 6 to input. Modulus 10
        newNumbers = (numbers + 6) % 10;

        //if input > 10, calculates new input
        if(input > 100)
            newInput = newNumbers;
        else if(input > 10)
            newInput = (newNumbers * 10) + newInput;
        else
            newInput = (newNumbers * 100) + newInput;

        input /= 10;
    }
//prints result
printf("Output: %d \n", newInput);
return 0;

}

2 个答案:

答案 0 :(得分:2)

在您的代码中,通过说

if(input > 100)
        newInput = newNumbers;
    else if(input > 10)
        newInput = (newNumbers * 10) + newInput;

您未在TRUE条件下考虑数字10010,而您也应该将它们计算在内。您需要更改if条件以使用>=,例如

if(input >= 100)
        newInput = newNumbers;
    else if(input >= 10)
        newInput = (newNumbers * 10) + newInput;

答案 1 :(得分:0)

更简单的解决方案就是这个:

output = (input + 666) % 1000; //Add 6 to all numbers
if(input % 10 > 3)             //Correct units carry
    output-=10;
if(input % 100 > 30)           //Correct tents carry 
    output-= 100;

它有效且易于扩展:)