цикл for, приводящий к неопределенному поведению c - PullRequest
0 голосов
/ 03 июня 2018
#include <stdio.h>
#include <stdlib.h>

int main() {
    int i;
    int mult;
    int n;
    int ans;
    ans = mult * i;

    printf("Please enter a multiple you want to explore.");
    scanf("%d", &mult);
    printf("Please enter the number which you would want to multiply this number till.");
    scanf("%d", &n);

    for(i = 0; i<n; i++) {
        printf("%d x %d = %d \n", &mult, &i , &ans);
    }
    return 0;
}

Привет, ребята, это простой код, который должен помочь пользователю составить список времен для n раз.Тем не менее, я получаю неопределенное поведение, и я весьма озадачен тем, что не так с моей реализацией моего цикла for.

Я получаю это как вывод.

6356744 x 6356748 = 6356736 

для n раз в моих консолях.

Я хочу спросить

  1. Что-то не так с логикой моего кода?(я предполагаю, что у меня есть проблема с моим кодом, поэтому, пожалуйста, просветите меня)

  2. Было бы лучше (или даже возможно) использовать указатели, чтобы указывать на адреса памяти упомянутыхпеременные, когда я должен постоянно менять значение переменных?Если да, то как мне это сделать?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 03 июня 2018

Вещи, которые вы видите, являются значениями ячейки памяти переменных.Измените ваши строки внутри для цикла, как показано ниже

ans = mult * i;
printf("%d x %d = %d \n", mult, i, ans);
0 голосов
/ 03 июня 2018

В вашем коде есть некоторые ошибки.

  1. вы используете оператор & в операторе печати, который используется для вывода адреса переменной.

  2. Инициируйте цикл со значением «1» вместо «0» и выполняйте цикл до тех пор, пока «i» не станет меньше «n».

  3. вместо использованияпеременная ans вне цикла, используйте ее внутри цикла, чтобы оценить результат умножения на каждой итерации цикла.

#include <stdio.h>

int main()
{
    int i;
    int mult;
    int n;
    int ans;

    printf("Please enter a multiple you want to explore.");
    scanf("%d", &mult);
    printf("Please enter the number which you would want to multiply this number till.");
    scanf("%d", &n);

    for(i = 1; i<=n; i++) {
        ans = mult*i ;
        printf("%d x %d = %d \n", mult, i , ans);
    }

    return 0;
}

enter image description here

0 голосов
/ 03 июня 2018

В printf вы должны указать целые числа.Теперь вы даете адреса целых чисел.Поэтому измените

printf("%d x %d = %d \n", &mult, &i , &ans);

на

printf("%d x %d = %d \n", mult, i, ans);

и, чтобы составить таблицу, замените ans на mult*i, так:

printf("%d x %d = %d \n", mult, i, mult*i);


Вам также следует проверить возвращаемое значение scanf, чтобы убедиться, что оно успешно прочитало ваш ввод:
do {
    printf("Please enter a multiple you want to explore.");
} while (scanf("%d", &mult)!=1);
do {
    printf("Please enter the number which you would want to multiply this number till.");
} while (scanf("%d", &n)!=1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...