путаница, почему вывод программы неверен, когда вопрос заключается в том, чтобы проверить, является ли integer числом Армстронга

#c #function #if-statement #output

#c #функция #if-statement #вывод

Вопрос:

 #include<stdio.h>
int cube(int n)
{
    return (n*n*n);
}/*function to return cubic root*/
int sumcube(int x)
{
    int sum=0,m;
    while(x>0)
    {
        m=x%10;
        sum=sum (cube(m));
        x=x/10;
    }
    return sum;

}/* returns the sum if cubic digits of an integer*/
int main ()
{
    int i;
    for(i=1; i<=5000; i  )
    {
        if (i==sumcube(i));
        {
            printf("%dt",i);
        }
    }
}
  

/ * эта программа предназначена для проверки, является ли число armestrong от 1 до 5000, а также для проверки того, что на выходе были все целые числа от 1 до 5000*/

Комментарии:

1. Что заставляет вас думать, что вывод неверен? Каков результат?

2. Что вы сделали, когда обнаружили, что программа работает не так, как ожидалось? Вы выполняли какую-либо отладку? Запустите свою программу в отладчике и / или добавьте инструкции debug print для отслеживания выполнения и проверки состояния программы. Если вы это сделали, что вы нашли? Кроме того, пожалуйста, укажите ожидаемый результат и фактический результат. Как отлаживать небольшие программы

3. Пожалуйста, прочитайте информацию о тегах тегов, которые вы собираетесь использовать. Один из тех, которые вы использовали, был неправильным.

4. Вы пытались скомпилировать его, показывая все предупреждения, например, «gcc -Wall»? Это определенно должно показать вашу проблему в операторе if.

5. выводом были все целые числа от 1 до 5000, в то время как ожидаемые значения были числами armstrongs

Ответ №1:

У вас есть ; после if , это интерпретируется как пустое тело для if и, следовательно, все после него будет выполнено независимо от того, является ли условие в if операторе — true или нет.

Чтобы избежать той же ошибки в будущем, включите все предупреждения компилятора и отключите только те предупреждения, которые вы уверены, что хотите игнорировать, и установите предупреждения об обработке как флаг ошибки для разработки (не при выпуске кода, но это не то, что вы должны делать на своем уровне знаний). Для gcc используйте флаги -Wall -Wextra -Wpedantic -Werror . При этом компилятор генерирует ошибку для вашего кода.