Чтение 2 целых чисел, кратных или нет - PullRequest
0 голосов
/ 07 февраля 2019

Поэтому я пытаюсь научить себя Си, и я взял учебник, который был рекомендован мне несколькими моими профессорами, и я работаю над примерами, однако у них нет ответов, и я сталкиваюсь с проблемой.

ВОПРОС: (кратно) Напишите программу, которая читает два целых числа и определяет и печатает, если первое кратно второму.[Подсказка: используйте оператор остатка.]

    #include <stdio.h>

int main(void)
{
    int num1, num2;

    printf("Enter two integers: ");
    scanf("%d%d", &num1, &num2);

    if((num2 % num1) == 0);
    {
        printf("%d and %d are multiples of each other\n",num1, num2);
    }

    if((num1 % num2) != 0);
    {
        printf("%d and %d are not multiples of each other\n",num1, num2);
    }

    return 0;
}

, когда я запускаю программу, я проверяю ее с 2 и 5, которые не кратны друг другу, однако программа печатает оба оператора.Может кто-нибудь сказать мне, что я делаю неправильно или что мне не хватает?Эта глава книги включает в себя только заявления if и никаких других типов.Спасибо!

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

ВОПРОС: (кратно) Напишите программу, которая читает два целых числа и определяет и печатает, является ли первое кратным второго.

предупреждение :ваш первый тест if((num2 % num1) == 0) не совместим с этим, вы, вероятно, хотели (если я забуду дополнительные ';') if((num1 % num2) == 0)

Цель состоит в том, чтобы не знать, кратны ли они друг другу (и этоэто не то, что делает ваша программа в любом случае)

Как говорит Вирсавия лишнее ';'закрыл ваш если

Я также призываю вас проверить результат scanf

Вы также можете уменьшить свой код:

#include <stdio.h>

int main(void)
{
    int num1, num2;

    printf("Enter two integers: ");
    if (scanf("%d%d", &num1, &num2) == 2) {
      printf("%d is %smultiple of %d\n",
             num1, ((num1 % num2) == 0) ? "" : "not ", num2);
    }

    return 0;
}

Компиляция и исполнение:

 /tmp % gcc -pedantic -Wextra c.c
 /tmp % ./a.out
Enter two integers: 6 2
6 is multiple of 2
 /tmp % ./a.out
Enter two integers: 5 3
5 is not multiple of 3
0 голосов
/ 07 февраля 2019
  1. В конце каждого if имеются паразитные ;, поэтому биты в { и } всегда работают.Разве ваш компилятор не предупредил вас о пустом if?Если нет, включите предупреждения.

  2. Ваши if условия не являются взаимоисключающими.Вместо этого используйте if else.

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