C записать цифры, одну за другой и в расширении, в новой строке - PullRequest
7 голосов
/ 02 марта 2011

Я новичок в Си и не могу сделать простое упражнение для школы.

Я хочу сделать что-то вроде этого:

 Please insert a number: 12345
 five
 four
 three
 two
 one

Обычно пользователь вводит число, а затем программа записывает в новой строке число от последнего значащего числа до наибольшего.

Это связано с функцией переключения и только базовыми навыками программирования.

У меня есть это:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int num; printf("Please insert a number: "); scanf("%d", &num);
    switch(num){
    case 1:printf("One\n");break;
    case 2:printf("Two\n");break;
    case 3:printf("Three\n");break;
    case 4:printf("Four\n");break;
    case 5:printf("Five\n");break;
    case 6:printf("Six\n");break;
    case 7:printf("Seven\n");break;
    case 8:printf("Eight\n");break;
    case 9:printf("Nine\n");break;
    case 0:printf("Zero\n");break;
    }
} 

Я использую число от 0 до 9, оно работает нормально, но число больше, чем то, что оно ничего не делает.

Первая проблема, которую я не могу решить, состоит в том, чтобы получить цифру. Я верю, что в моем коде перерыв ничего не делает ...

Извините, если я не могу объяснить меня лучше, но английский не является моим родным языком.

С уважением,

Favolas

############################## In Progress Solution (не работает, если число% 10 дает 0 ¬¬¬¬¬¬ ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int num; printf("Please insert a number: "); scanf("%d", &num);
    int i,digit;
    for (i = 0; num%10!=0;i++){
        digit = num % 10;
        switch(num){
        case 1:printf("One\n");break;
        case 2:printf("Two\n");break;
        case 3:printf("Three\n");break;
        case 4:printf("Four\n");break;
        case 5:printf("Five\n");break;
        case 6:printf("Six\n");break;
        case 7:printf("Seven\n");break;
        case 8:printf("Eight\n");break;
        case 9:printf("Nine\n");break;
        case 0:printf("Zero\n");break;
        }
        num = num / 10;
    }
} 

Ответы [ 4 ]

8 голосов
/ 02 марта 2011

Число 123 равно 100 + 20 + 3 или 1*10^2 + 2*10^1 + 3*10^0.

Вам необходимо изолировать отдельные цифры от входа.

Подсказка: используйте операторы / и %

 12345 % 10 ==> 5
 12345 / 10 ==> 1234

 1234 % 10 ==> 4
 1234 / 10 ==> 123

 123 ... ... ...
1 голос
/ 02 марта 2011

Если вы введете большее число, num содержит именно это число, то есть ни один из ваших дел (0 до 9) не соответствует значению num.

Так что вам нужно«пройти» число цифра за цифрой.Вы можете извлечь последнюю цифру, если вы берете по модулю 10: 12345 % 10 == 5.Кроме того, вы можете обрезать последнюю цифру, поделив ее на 10: 2345 / 10 == 234 (из-за целочисленного деления).

Итак, вы должны написать цикл, который извлекает отдельные цифры из num, а затем применитьв вашем случае различие для каждой цифры.

0 голосов
/ 02 марта 2011
void main (void){  
    int num;  
    int factor=10;  
    printf("Please insert a number: "); scanf("%d", &num);  
    while(num>0){  
        switch(num%factor){  
            case 1:printf("One\n");break;  
            case 2:printf("Two\n");break;   
            case 3:printf("Three\n");break;  
            case 4:printf("Four\n");break;  
            case 5:printf("Five\n");break;  
            case 6:printf("Six\n");break;   
            case 7:printf("Seven\n");break;  
            case 8:printf("Eight\n");break;  
            case 9:printf("Nine\n");break;  
            case 0:printf("Zero\n");break;  
        }  
        num=num/factor;  
    }  
}  
0 голосов
/ 02 марта 2011

В базе 10 число 12345 фактически 1 * 10000 + 2 * 1000 + 3 * 100 + 4 * 10 + 5 * 1. Таким образом, вы можете получить последнюю цифру числа, вычислив остаток от деления числа на 10. И дивиденд будет самым значительным номиналом. Итак, '12345 = 1234 * 10 + 5 . In C , the% operator is used to compute the remainder of the division, so 12345% 10 is equal to 5`.

Затем вам просто нужно выполнить цикл, пока число не равно нулю, брать остаток на каждом шаге, отображать цифру и затем делить число.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...