Учитывая число 3 di git пользователем, найдите и распечатайте его минимальную цифру - PullRequest
1 голос
/ 14 июля 2020

Я пробовал программу C, которая принимает целое число 3-di git от пользователя, а затем находит и распечатывает его минимальное di git.

#include <stdio.h>
int main()
{
    int a,b,c;
    printf("Enter a 3-digit integer : ");
    scanf("%d%d%d",&a,&b,&c);
    if(a<b){
        if(a<c){
            printf("%d is the minimum digit\n",a);
        }
        else printf("%d is the minimum digit\n",c);
    }
    else {
        if (b<c){
            printf("%d is the minimum digit\n",b);
        }
    }

    return 0;
}

Но это неверно Кстати, как и каждый раз, когда мне нужно нажимать ввод, давая ввод 3 di git.

Ответы [ 5 ]

4 голосов
/ 14 июля 2020

у вас есть две проблемы:

  • при выполнении scanf("%d%d%d",&a,&b,&c); вы читаете 3 числа, а не 3 цифры.
  • если цифры, например, 321, то вы ничего не печатаете, потому что есть нет else для теста if(b<c)

для чтения 3 цифр вы можете сделать scanf("%1d%1d%1d",&a,&b,&c);, но цифры в считываемом номере могут быть разделены.

способ сделать может быть:

#include <stdio.h>
#include <ctype.h>

int main()
{
    unsigned char a,b,c;
    printf("Enter a 3-digit integer : ");
    if ((scanf("%c%c%c",&a,&b,&c) == 3) &&
        isdigit(a) &&
        isdigit(b) && 
        isdigit(c))
      printf("%d is the minimum digit\n",
             ((a < b) ? ((a < c) ? a : c)
                      : ((b < c) ? b : c))
             - '0');
    else
      puts("invalid values");

    return 0;
}

Составление и исполнение:

pi@raspberrypi:/tmp $ gcc -Wall n.c
pi@raspberrypi:/tmp $ ./a.out
Enter a 3-digit integer : 123
1 is the minimum digit
pi@raspberrypi:/tmp $ ./a.out
Enter a 3-digit integer : 321
1 is the minimum digit
pi@raspberrypi:/tmp $ ./a.out
Enter a 3-digit integer : 213
1 is the minimum digit
pi@raspberrypi:/tmp $ ./a.out
Enter a 3-digit integer : 1ae
invalid values
pi@raspberrypi:/tmp $ 
2 голосов
/ 14 июля 2020

Во-первых, вам нужно прочитать 1 число вместо 3.

scanf("%d",&num);

Затем вы можете разделить int на 100, чтобы получить наиболее значимое di git из-за того, как работает деление целых чисел.

a = num/100;

Чтобы получить средний di git, нам нужно избавиться от наименее значимого di git сначала разделив его на 10, а затем изменив его на 10.

b = (num/10)%10;

Для наименее значимого di git все, что вам нужно сделать, это число по модулю 10

c = num%10;

Затем вы можете сравнить эти числа, чтобы найти минимум.

Изменить: способ сравнения ваши числа ошибочны. После последнего if должен быть оператор else, чтобы учесть все случаи.

if(b<c){
    printf("%d is the minimum digit\n",b);
}
else{
    printf("%d is the minimum digit\n",c);
}

Приведенный ниже код должен работать.

#include <stdio.h>
int main()
{
    int a,b,c,num;
    printf("Enter a 3-digit integer : ");
    scanf("%d",&num);
    a = num/100;
    b = (num/10)%10;
    c = num%10;
    if(a<b){
        if(a<c){
            printf("%d is the minimum digit\n",a);
        }
        else{
            printf("%d is the minimum digit\n",c);
        }
    }
    else {
        if(b<c){
            printf("%d is the minimum digit\n",b);
        }
        else{
            printf("%d is the minimum digit\n",c);
        }
    }

    return 0;
}
2 голосов
/ 14 июля 2020

Вам лучше попросить одно число и сделать следующее:

  • Если число больше 999 или меньше 100, число недействительно.

  • Попробуйте получить первое, второе и третье di git, вы можете сделать это следующим образом (представьте, что это целое число x):

     x / 100 is the first digit (you divide by 100, and as both x and 100 are integers, 
                                 the integer division (rounding down) is used)
     x mod 10 is the third digit (you take the whole number, modulo 10)
     (x / 10) mod 10 is the second number
    

Приведем пример для объяснения вычисления второго числа (для x это 261):

x / 10 equals 261 / 10 = 26 (integer division)
(x / 10) mod 10 = 6 => which is indeed the second number of 261.
1 голос
/ 14 июля 2020

вы также можете сделать это

#include <stdio.h>
#include <string.h>

#define MAX 3

int check(char *string, int i){
    if(string[i]<'0' || string[i]>'9'){
            printf("%s","invalid entry, not an integer");
        return -1;
    }
    return 0 ;
}

int main(int argc, char** argv){
    char string[MAX+1];
    fgets(string, MAX+1, stdin);
    
    int min = string[0]-'0';
    if(check(string,0)==-1) return -1;
    for(int i=0;i<MAX;i++){
        int j=string[i]-'0';
        if(check(string,i)==-1) return -1;
        if(j<=min) min=j;
    }
    printf("%d\n",min);
}

Ввод: 568
Выход: 5

Объяснение: Вы вводите трехсимвольную строку. Символ 0 в ascii имеет десятичное значение 48. Это означает, что разница между десятичным значением ascii di git и фактическим целым числом составляет 48. Итак, чтобы преобразовать символ di git в целое число, мы должны вычтите 48. Остальная часть кода очевидна.

Эта программа не проверяет, все ли символы являются цифрами. Но вы можете включить чек самостоятельно.

ссылка на таблицу ascii: https://www.cs.cmu.edu/~pattis/15-1XX/common/handouts/ascii.html

0 голосов
/ 20 июля 2020

Возможно, вы считаете, что ваш ввод всегда будет строкой, и не беспокойтесь о преобразовании из строки в int (это то, что делает scanf). Поскольку char является int, вы можете просто читать по одному char за раз и рассматривать его как int.

#include <stdio.h>
int main()
{
    char c;
    printf("Enter a 3-digit integer : ");

    int ans = 100;
    for(int i=0; i<3; i++)
    {
        c = fgetc(stdin);


        if(c < '0' || c > '9')
        {
            fprintf(stderr, "'%c' is invalid", c);
            return 1;
        }

        if(c<ans){
            ans=c;
        }

    }
    printf("answer = %c", ans);
    return 0;
}

output:

Chris@DESKTOP-BCMC1RF ~/user_home/eclipse-workspace-sri/trey
$ make
cc     blah.c   -o blah

Chris@DESKTOP-BCMC1RF ~/user_home/eclipse-workspace-sri/trey
$ ./blah.exe
Enter a 3-digit integer : 391
answer = 1
Chris@DESKTOP-BCMC1RF ~/user_home/eclipse-workspace-sri/trey
$ ./blah.exe
Enter a 3-digit integer : 5g9
'g' is invalid
Chris@DESKTOP-BCMC1RF ~/user_home/eclipse-workspace-sri/trey
$ ./blah.exe
Enter a 3-digit integer : 596
answer = 5
...